
рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╣реА рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реБрдирд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЕрд╡рд╛рдВрдЫрдиреАрдп рд░реВрдк рд╕реЗ RuNet рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рднреА рд╡рд┐рд░рд▓ рд╣реИред рдпрд╣ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдФрд░ рдЬрдирддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд▓рдн рд░реВрдк рдореЗрдВ рд╡рд┐рджреЗрд╢реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡реИрди рдПрдореНрдб рдмреЛрдЖрд╕ рдкреЗрдбрд╝ рдПрдХ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рд╢реНрд░реЗрдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ [0; U), рдЬрд╣рд╛рдБ U = 2
k , рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛рдПрдБ k рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреЗрдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдм рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрддреБрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдкреЗрдбрд╝ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдУ, (рд▓реЙрдЧ рдПрди) рдореЗрдВ рд╕рдореНрдорд┐рд▓рди, рд╡рд┐рд▓реЛрдкрди рдФрд░ рдЕрдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ n рдкреЗрдбрд╝ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред ?
рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЗ (рд▓реЙрдЧ (рд▓реЙрдЧ (рдпреВ))) рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛред
рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдБ рд╕рдорд░реНрдерд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реВрдЪреА рд╣реИ:
- рдЗрдиреНрд╕рд░реНрдЯ (x) - рдПрдХ рдирдВрдмрд░ рдХреЛ рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рдбрд╛рд▓реЗрдВ
- рдирд┐рдХрд╛рд▓реЗрдВ (x) - рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рдХрд╛рд▓реЗрдВ
- рдЧреЗрдЯрдорд┐рди (), рдЧреЗрдЯрдореИрдХреНрд╕ () - рдкреЗрдбрд╝ рдореЗрдВ рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдвреВрдБрдврдирд╛
- Find (x) - рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ
- FindNext (x) - рдЯреНрд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд x рдХреЗ рдмрд╛рдж рдЕрдЧрд▓реЗ рдирдВрдмрд░ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ
- FindPrepret (x) - рдкрд┐рдЫрд▓реЗ рдПрдХреНрд╕ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ
рдЗрд╕реА рд╕рдордп, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ, рд╣рдо рдХреБрдЫ рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреЗрдбрд╝ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╣рдо рдорд╛рд▓ рдХреЗ рдирд╛рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдвреВрдБрдвреЗрдВ (x) рдХреЗрд╡рд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ / рдЧрд▓рдд - рдЙрддреНрдкрд╛рдж рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдирдВрдмрд░ x рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рдж рдХрд╛ рдирд╛рдоред рд╣рдо рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдмрдирд╛рдПрдВрдЧреЗред
рдХреЗ-рдЯреНрд░реА рдХреЛ рдЗрдВрдЯрд░рд╡рд▓ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд░рдЦрдиреЗ рджреЗрдВ [0]; 2
k ), рдпрд╛рдиреА, k рдмрд┐рдЯреНрд╕ рд╕реЗ рдорд┐рд▓рдХрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдЦреНрдпрд╛ k рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╣реЛрдЧреА, рдмрд╛рдж рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдлрд┐рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ 1-рдЯреНрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдирдВрдмрд░ 0 рдпрд╛ 1 рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдЕрдм рдПрдХ рдХреЗ-рд╡реГрдХреНрд╖ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдпрд╣ рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧрд╛:
- 2 k / 2 рдЯреБрдХрдбрд╝реЗ (k / 2)-рдкреЗрдбрд╝
- рд╕рд╣рд╛рдпрдХ (k / 2) -tree
- рдЗрд╕ рдкреЗрдбрд╝ рдореЗрдВ рдирд┐рд╣рд┐рдд рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ (рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ)
рдпрд╣ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЪрд╛рд╣рд┐рдП?
рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдПрдХ рдмреА-рдПрдХреНрд╕ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ 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
рдЖрдЗрдП рд╣рдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВред 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)
рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдордп рдХрд╛ рд╡рд┐рд╖рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА O (рд▓реЙрдЧ (рд▓реЙрдЧ (U))) рд╣реЛрдЧрд╛, рдпрд╣ рд╕рдореНрдорд┐рд▓рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЗрд╡рд▓ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдСрдХреНрд╕ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд╛рд▓реЗрдВ рдУ (1) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрдЯреНрд░реА рдЦрд╛рд▓реА рд╣реЛрдЧреАред
рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:
find(T, x): if T.is_empty(): return False else if T.min == x or T.max == x:
рдЕрдм FindNext (x) рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЫрджреНрдо рдХреЛрдб рд╣реИ:
find_next(T, x): if T.is_empty() or x > T.max: return None
рдЙрд╕рдХреЗ рдХрд╛рдо рдХрд╛ рд╡рд┐рд╖рдо рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реЗ (рд▓реЙрдЧ (рд▓реЙрдЧ)) рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ, рдлрд╛рдЗрдВрдбрдкреНрд░реИрд╕реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рдмрд╣реБрдд рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдирдХреЗ рдЫрджреНрдо рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ред
рдЖрд╡реЗрджрди
рд╡рд╛рди рдИрдореЗрдб рдмреЛрд╕ рдкреЗрдбрд╝ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХрдИ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдУ (рдПрди * рд▓реЙрдЧ (рд▓реЙрдЧ (рдпреВ)) рдореЗрдВ рдПрди рдирдВрдмрд░ рдХреЗ рдПрдХ рдХреНрд░рдо рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ)
рджрд░рдЕрд╕рд▓, рд╣рдорд╛рд░реЗ рд╕рднреА рдирдВрдмрд░реЛрдВ рдХреЛ рдкреЗрдбрд╝ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреЗрдбрд╝ рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рд▓реЗрдВ рдФрд░ рдСрдкрд░реЗрд╢рди x = FindNext (x + 1) рдХреЛ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдорд╛рд░реА рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдПрдВ рдХреНрд░рдордмрджреНрдз рдХреНрд░рдо рдореЗрдВ рдЪрд░ x рдореЗрдВ рд╣реЛрдВрдЧреАред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдЗрд╕ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдЗрд╕ рдЫрдБрдЯрд╛рдИ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐, рд╕реНрдкрд░реНрд╢реЛрдиреНрдореБрдЦ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ, рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рднреА рдбрд┐рдЬрд┐рдЯрд▓ рдЫрдБрдЯрд╛рдИ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИред
O (n * рд▓реЙрдЧ (рд▓реЙрдЧ) (U)) рдореЗрдВ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛)
рдХреБрдЫ рдиреЗ рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдПрдирд╡реАрдкреА рдФрд░ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдУ (рдПрди * рд▓реЙрдЧ (рдПрди)) рдореЗрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ, рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдХреЛ рд╡реИрди рдПрдордб рдмреЛрдЖрд╕ рдЯреНрд░реА рдореЗрдВ рдлрд╛рдЗрдВрдбрдкреНрд░реВрд╡ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдУ (рдИ * рд▓реЙрдЧ (рдпреВ)) рдХреЗ рд▓рд┐рдП рджрд┐рдХреНрдЬрд╕реНрдЯреНрд░рд╛ рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо)
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рднрд╛рд░рд┐рдд рдЧреНрд░рд╛рдл рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕ рд▓реЗрдЦ рдХреЛ рднреАред рджреАрдЬрдХрд╕реНрдЯреНрд░рд╛ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдУ (рдИ * рд▓реЙрдЧ (рд╡реА)) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реА рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдФрд░ рдИ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЕрдм рдвреЗрд░ рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╣рдо рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрд╕рд┐рдореНрдкреЛрдЯрд┐рдХреНрд╕ рдУ (рдИ * рд▓реЙрдЧ (рд▓реЙрдЧ (рдпреВ))) рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИред
- рдФрд░ рдХрдИ, рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИ :)
рдЗрди рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдорд╛рдЗрдирд╕ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдмрдбрд╝реЗ рдпреВ рдХреЗ рд▓рд┐рдП рд╡реИрди рдПрдордбреЗ рдмреЛрд╕ рдЯреНрд░реА рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА (рдПрдХ рдореЛрдЯрд╛ рдЕрдиреБрдорд╛рди рдУ (рдпреВ) рд╣реИ) рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛, рдЬреЛ рдХрд┐, рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ "рд▓реЗрдЬрд╝реАрд▓реА," рдмрдирд╛рдХрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЬрдм рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдпрд╣рд╛рдБ C ++ рдореЗрдВ рд╡реИрди рдПрдореНрдб рдмреЛрдЖрд╕ рдкреЗрдбрд╝ рдХрд╛ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╡рд╣ рд╕рд╣реА рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреА, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд░рд┐рд╡рд░реНрдзрди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИрдВред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!