рд╡рд╛рди рдПрдореНрджреЗ рдмреЛрд╕ рдЯреНрд░реА

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!

рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╣реА рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реБрдирд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЕрд╡рд╛рдВрдЫрдиреАрдп рд░реВрдк рд╕реЗ RuNet рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рднреА рд╡рд┐рд░рд▓ рд╣реИред рдпрд╣ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдФрд░ рдЬрдирддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд▓рдн рд░реВрдк рдореЗрдВ рд╡рд┐рджреЗрд╢реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╡реИрди рдПрдореНрдб рдмреЛрдЖрд╕ рдкреЗрдбрд╝ рдПрдХ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рд╢реНрд░реЗрдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ [0; U), рдЬрд╣рд╛рдБ U = 2 k , рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛рдПрдБ k рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреЗрдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдм рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрддреБрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдкреЗрдбрд╝ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдУ, (рд▓реЙрдЧ рдПрди) рдореЗрдВ рд╕рдореНрдорд┐рд▓рди, рд╡рд┐рд▓реЛрдкрди рдФрд░ рдЕрдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ n рдкреЗрдбрд╝ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред ?

рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЗ (рд▓реЙрдЧ (рд▓реЙрдЧ (рдпреВ))) рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛред

рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдБ рд╕рдорд░реНрдерд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реВрдЪреА рд╣реИ:
рдЗрд╕реА рд╕рдордп, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ, рд╣рдо рдХреБрдЫ рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреЗрдбрд╝ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╣рдо рдорд╛рд▓ рдХреЗ рдирд╛рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдвреВрдБрдвреЗрдВ (x) рдХреЗрд╡рд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ / рдЧрд▓рдд - рдЙрддреНрдкрд╛рдж рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдирдВрдмрд░ x рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рдж рдХрд╛ рдирд╛рдоред рд╣рдо рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдмрдирд╛рдПрдВрдЧреЗред

рдХреЗ-рдЯреНрд░реА рдХреЛ рдЗрдВрдЯрд░рд╡рд▓ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд░рдЦрдиреЗ рджреЗрдВ [0]; 2 k ), рдпрд╛рдиреА, k рдмрд┐рдЯреНрд╕ рд╕реЗ рдорд┐рд▓рдХрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдЦреНрдпрд╛ k рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╣реЛрдЧреА, рдмрд╛рдж рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдлрд┐рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ 1-рдЯреНрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдирдВрдмрд░ 0 рдпрд╛ 1 рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЕрдм рдПрдХ рдХреЗ-рд╡реГрдХреНрд╖ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдпрд╣ рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧрд╛:
рдпрд╣ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЪрд╛рд╣рд┐рдП?

рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдПрдХ рдмреА-рдПрдХреНрд╕ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ k рдмрд┐рдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдПрдХ рдХреЗ-рдЯреНрд░реА рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЙрдк-рдмрдЪреНрдЪреЛрдВ рд╡рд╛рд▓реЗ рдмрдЪреНрдЪреЗ рд╣реИрдВ [0..2 k / 2 - 1]ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ x = 93. рдЖрдЗрдП рдЗрд╕рдХреЗ рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рджреЗрдЦреЗрдВ:

рдЫрд╡рд┐

рд╣рдо рдЕрдкрдиреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЛ рдмрд░рд╛рдмрд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдЪреНрдЪ рдФрд░ рдирд┐рдореНрди, рдкреНрд░рддреНрдпреЗрдХ (k / 2) рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рдеред рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреЗрдбрд╝ рдореЗрдВ 2 k / 2 рдкреЗрдбрд╝ рд╣реИрдВ рдЬреЛ (k / 2) рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЕрдм рд╣рдо рдЗрди рд╕рднреА рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЙрдЪреНрдЪ-рд╕реЗ-рдЧрд┐рдирддреА (рдпрд╛рдиреА, рдмрдЪреНрдЪреЛрдВ [рдЙрдЪреНрдЪ]) рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдкреБрди: рдЗрд╕рдореЗрдВ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдирдВрдмрд░ x, рд╕реНрдпреВрдбреЛрдХреЛрдб рдХреЗ рдкреЗрдбрд╝ T рдореЗрдВ рдбрд╛рд▓рдиреЗ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

insert(T, x): if Tk == 1: T.exist[x] = True #      1- else: insert(T.children[high(x)], low(x)) find(T, x): if Tk == 1: return T.exist[x] else: return find(T.children[high(x)], low(x)) 

рдЖрдЗрдП рд╣рдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВред T-(k) k- рдЯреНрд░реА рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд┐рд▓рд┐рдд / рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред 1-рдЯреНрд░реА рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд / рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ O (1) рд╕рдВрдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдореЗрдВ рд╡рд╣ T (1) = O (1) рдорд┐рд▓рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо k- рдЯреНрд░реА (k> 1) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдмрд┐рдЯ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдХрдЯрд╛рд╡ O (1) рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо (k / 2) рдЯреНрд░реА рдХреЗ рд▓рд┐рдП рдЗрдиреНрд╕рд░реНрдЯ / рд╕рд░реНрдЪ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдРрд╕реЗ рдХрд┐ рдЯреА (рдХреЗ) = рдУ (1) + рдЯреА (рдХреЗ / 2)ред рдЗрд╕ рд╕рдореАрдХрд░рдг рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди T (k) = O (рд▓реЙрдЧ (k)) = O (рд▓реЙрдЧ (рд▓реЙрдЧ (U))) рд╣реИред рдЗрд╕рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдореНрдорд┐рд▓рди рдФрд░ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╖рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗрд╡рд▓ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ, рдЦреЛрдЬ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╣реАрди рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА рдП рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдерд╛, рдЬрд┐рд╕ рддрддреНрд╡ рдореЗрдВ рдпрд╣ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрдЦреНрдпрд╛ x рд╣реИ рд╣рдорд╛рд░рд╛ рд╕реЗрдЯ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдпрд╣ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ! рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ, FindNext (x) рдСрдкрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдпрд╣ рдСрдкрд░реЗрд╢рди рд╣рдорд╛рд░реЗ рдкреЗрдбрд╝ рдореЗрдВ рдирд┐рд╣рд┐рдд рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ q рдХреЛ рдЦреЛрдЬрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ q> = xред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝рд╛ рд╣рдорд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреВрд░рдХ рд╣реИред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рдХрд╣рд╛ рдерд╛ рдХрд┐ рд╣рдо рдХреЗ-рдЯреНрд░реА рдореЗрдВ рди рдХреЗрд╡рд▓ 2 k / 2 рдХреЗ рдкреЗрдбрд╝ (k / 2) рдХреЗ рдкреЗрдбрд╝, рдмрд▓реНрдХрд┐ рдЗрд╕рдореЗрдВ рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо рдФрд░ рдПрдХ рдФрд░ рд╕рд╣рд╛рдпрдХ (k / 2) рдкреЗрдбрд╝ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ, рдЪрд▓реЛ рдЗрд╕реЗ aux рдХрд╣рддреЗ рд╣реИрдВ (рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗред рд╕рд╣рд╛рдпрдХ - рд╕рд╣рд╛рдпрдХ)ред рдпрд╣ рд╣рдорд╛рд░реА рдорджрдж рдХреИрд╕реЗ рдХрд░реЗрдЧрд╛?

рдХреЗ-рдЯреНрд░реА рдХреЛ рдЗрд╕рдХреЗ рдЙрдк-рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдВ [0..2 k / 2 - 1] рдФрд░ рд╕рд╣рд╛рдпрдХ рдЯреНрд░реА рдСрдХреНрд╕ред рдСрдХреНрд╕ рдореЗрдВ, рд╣рдо рдРрд╕реЗ рд╕рднреА рдирдВрдмрд░реЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ рдмрдЪреНрдЪреЗ [рдкреА] рдХрд╛ рдкреЗрдбрд╝ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рдпрд╛рдиреА рдЗрд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдирдВрдмрд░ рд╣реЛрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдмрдЪреНрдЪреЛрдВ рдХрд╛ pth рдкреЗрдбрд╝ [p] рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╕рдВрдЦреНрдпрд╛ p рдСрдХреНрд╕ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдорд╛рдореВрд▓реА рд╕рдВрд╢реЛрдзрди рдХрд░реЗрдВрдЧреЗ: рдХрд┐рд╕реА рднреА рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП T рд╣рдо рдЙрд╕рдХреЗ рд╕рдмрдЯрд╛рдЗрдЯрд▓ T.children рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЪрд░ T.min рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЬрдм рдбрд╛рд▓рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдПрдХ рдирдВрдмрд░ x рдбрд╛рд▓рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ T.min рд╕реЗ рдХрдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ T.min рд╣рдорд╛рд░реЗ рдЙрдкрдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдЙрдкрд╢реАрд░реНрд╖рдХ рдореЗрдВ рдбрд╛рд▓реЗрдВ, рдФрд░ рдлрд┐рд░ T.min = x рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм рд╣рдо рдХреЗрд╕ k = 1 рдкрд░ рдЕрд▓рдЧ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд░ T.min рдФрд░ T.max рд╣реИрдВред рдФрд░ рдпрджрд┐ рдХрд╣реЗрдВ, рдПрдХ 1-рдЯреНрд░реА рдореЗрдВ 0 рдФрд░ 1 рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдмрд╕ T.min = 0 рд╣реЛрдЧрд╛, рдФрд░ T.max = 1. рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 1 рдирдВрдмрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ T.min рд╣реЛрдЧрд╛ред = T.max = 1ред

рдЕрдм рдкреЗрдбрд╝ рдореЗрдВ рд╕рдореНрдорд┐рд▓рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП:

 insert(T, x): if T.is_empty(): T.min = T.max = x else: if x < T.min: swap(x, T.min) #      ,     if x > T.max: T.max = x if Tk != 1: #   1-,      -  if T.children[high(x)].is_empty(): insert(T.aux, high(x)) #  ,   insert   O(1) insert(T.children[high(x)], low(x)) 

рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдордп рдХрд╛ рд╡рд┐рд╖рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА O (рд▓реЙрдЧ (рд▓реЙрдЧ (U))) рд╣реЛрдЧрд╛, рдпрд╣ рд╕рдореНрдорд┐рд▓рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЗрд╡рд▓ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдСрдХреНрд╕ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд╛рд▓реЗрдВ рдУ (1) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрдЯреНрд░реА рдЦрд╛рд▓реА рд╣реЛрдЧреАред

рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:

 find(T, x): if T.is_empty(): return False else if T.min == x or T.max == x: #  T.max == x      return True else: return find(T.children[high(x)], low(x)) 


рдЕрдм FindNext (x) рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЫрджреНрдо рдХреЛрдб рд╣реИ:

 find_next(T, x): if T.is_empty() or x > T.max: return None #    x      if x <= T.min: return T.min #    ,     if Tk == 1: #   1- if T.max == x: return T.max else: return None if not T.children[high(x)].is_empty() and low(x) <= T.children[high(x)].max: # ,  ,   ,   high(x) return merge(high(x), find_next(T.children[high(x)], low(x))) else: #      ,    next_high = find_next(aux, high(x) + 1) #     if next_high != None: return merge(next_high, T.children[next_high].min) #  ,    return None merge(high, low): return   (k / 2)-  high  low 

рдЙрд╕рдХреЗ рдХрд╛рдо рдХрд╛ рд╡рд┐рд╖рдо рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реЗ (рд▓реЙрдЧ (рд▓реЙрдЧ)) рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ, рдлрд╛рдЗрдВрдбрдкреНрд░реИрд╕реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рдмрд╣реБрдд рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдирдХреЗ рдЫрджреНрдо рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ред

рдЖрд╡реЗрджрди


рд╡рд╛рди рдИрдореЗрдб рдмреЛрд╕ рдкреЗрдбрд╝ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХрдИ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдЗрди рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдорд╛рдЗрдирд╕ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдмрдбрд╝реЗ рдпреВ рдХреЗ рд▓рд┐рдП рд╡реИрди рдПрдордбреЗ рдмреЛрд╕ рдЯреНрд░реА рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА (рдПрдХ рдореЛрдЯрд╛ рдЕрдиреБрдорд╛рди рдУ (рдпреВ) рд╣реИ) рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛, рдЬреЛ рдХрд┐, рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ "рд▓реЗрдЬрд╝реАрд▓реА," рдмрдирд╛рдХрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЬрдм рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рдпрд╣рд╛рдБ C ++ рдореЗрдВ рд╡реИрди рдПрдореНрдб рдмреЛрдЖрд╕ рдкреЗрдбрд╝ рдХрд╛ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╡рд╣ рд╕рд╣реА рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреА, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░рд┐рд╡рд░реНрдзрди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИрдВред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/In125499/


All Articles