
рдЙрдкрд╕рд░реНрдЧ рдЦреЛрдЬ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рд╣рдм рдкрд░ рдХрдИ рдмрд╛рд░ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдпрд╣рд╛рдВ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдФрд░ рдРрд╕реЗ рдкреЗрдбрд╝реЛрдВ рдкрд░ рдореВрд▓ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ (рдЦреЛрдЬ, рдбрд╛рд▓реЗрдВ, рд╣рдЯрд╛рдПрдВ)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рд╣рд╛рд▓рд┐рдпрд╛ рдкреЛрд╕реНрдЯ рдЕрдЬрдЧрд░ рдбреЗрдЯреНрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рд▓рд┐рдмреНрдбрд╛рдЯреНрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП
рд╕рд╛рдЗрдереЙрди рд░реИрдкрд░ рдХреЛ
рджреЗрдЦрддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рд▓рд┐рдВрдХ рдирд┐рдпрддрд╛рддреНрдордХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ (рдЧрд┐рд░рдлреНрддрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдХреБрдЪрд┐рдд рдЙрдкрд╕рд░реНрдЧ рдкреЗрдбрд╝реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреЗ рдкрд╛рдБрдЪ рд╕реЗрдВрдЯ рдХрд╛ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдХрд┐ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЙрдкрд╕рд░реНрдЧ рдкреЗрдбрд╝реЛрдВ рдХреЗ C ++ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдФрд░ рд▓рдХреНрд╖реНрдп рдерд╛ - рд╕рдВрддреБрд▓рд┐рдд рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдЯреНрд░реА (
AVL рдЯреНрд░реА ) рдФрд░ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЙрдкрд╕рд░реНрдЧ рдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рддрд╛рд░ рдХреА рдЦреЛрдЬ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ред
рдкрд░рд┐рдЪрдп
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рддрд╛рд░ред рдЕрдЧрд▓рд╛, рд╣рдо ASCII рд╡рд░реНрдгрдорд╛рд▓рд╛ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рддрд╛рд░реЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ рдкреЗрдбрд╝реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рдЖрдВрдХрдбрд╝реЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдЯрд░реНрдорд┐рдирд▓ рдЪрд┐рдиреНрд╣ рдХреЛ рдбреЙрд▓рд░ рдХреЗ рд╕рдВрдХреЗрдд рджреНрд╡рд╛рд░рд╛ рдФрд░ рд╢реВрдиреНрдп рд╡рд░реНрдг рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рддрд╛рд░ рдорд╛рдирдХ рд╕реА-рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реЛрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп string.h рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)ред рдЕрдиреНрдп рд╡рд░реНрдгрдорд╛рд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдореЗрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рддреАрдХ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреЛрдиреЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛ (рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝ рд╕реЗ рдЗрд╕рдХреА рдХреБрдЫ рдкрддреНрддрд┐рдпреЛрдВ рддрдХ рдХрд╛ рдХреЛрдИ рднреА рдорд╛рд░реНрдЧ рдареАрдХ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ
рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЗрдбрд╝ рдореЗрдВ
рд╕рдВрдЧреНрд░рд╣реАрдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдХреГрддрд┐ рдореЗрдВ, рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ {abab $, aba $, bc $, b $, bac $, baca $}ред рдмрд╛рдИрдВ рдУрд░ рдЬрдбрд╝, рдкрддреНрддрд┐рдпрд╛рдВ (рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреА рд╣реИ) - рджрд╛рдИрдВ рдУрд░ред рдмрд╛рдХрд╛ $ рд▓рд╛рдЗрди рдХреЗ рдЕрдиреБрд░реВрдк рдкрде рдХреЛ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдбрд╝ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡
рддреЛ, рд╣рдо рд╕рдВрдХреЗрдд рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкреЗрдбрд╝ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреЗрдбрд╝ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рдбрд╛рд▓рдирд╛, рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрд┐рдирд╛рд░реЛрдВ рд╕реЗ рдХреЛрдиреЗ рддрдХ рд╡рд░реНрдгреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдПрдХ рдЙрдиреНрдореБрдЦ рдкреЗрдбрд╝ рдХреА рд╕реНрдкрд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП - рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рднреА рдХрд┐рдирд╛рд░реЗ рдХреЛ рдЬрдбрд╝ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдиреЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ)ред рд╣рдореЗрдВ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдорд┐рд▓рддреА рд╣реИред

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

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

рдЕрдм рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЯреНрд░реА рдиреЛрдб рдПрдХ рдХреАрдЪреЗрди рд╣реИ, рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рд▓реЗрди рд╣реИ (рдЯрд░реНрдорд┐рдирд▓ рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдФрд░ рджреЛ рд▓рд┐рдВрдХ рдФрд░ рдЕрдЧрд▓реЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ред рдкреНрд▓рд╕ рдПрдХ рдиреНрдпреВрдирддрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреЛ рдПрдХ рдЯреНрд░реАрд╡рд┐рдпрд▓ рдЯреНрд░реА рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджрд┐рдП рдЧрдП рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдб рд╣реЛрддрд╛ рд╣реИ (рд╣рдо рд╡рд░реНрдгреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ strncpy рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ), рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдиреНрдпреВрдирддрдо рд╡рд┐рдзреНрд╡рдВрд╕рдХред
struct node // { char* key; int len; node* link; node* next; node(char* x, int n) : len(n), link(0), next(0) { key = new char[n]; strncpy(key,x,n); } ~node() { delete[] key; } };
рдХреБрдВрдЬреА рдЦреЛрдЬ
рдкрд╣рд▓рд╛ рдСрдкрд░реЗрд╢рди рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рд╣реИ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдореЗрдВ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдбрд╛рд▓рдиреЗ рдХрд╛ рдСрдкрд░реЗрд╢рдиред рдЦреЛрдЬ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдорд╛рдирдХ рд╣реИред рд╣рдо рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЬрдбрд╝ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдЦреЛрдЬ рдЕрд╕рдлрд▓ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╡рд░реНрддрдорд╛рди рдкрдВрдХреНрддрд┐ x рдХреЗ рд╕рд╛рде рдиреЛрдб рдореЗрдВ рдХреБрдВрдЬреА рдХреБрдВрдЬреА рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд▓рдВрдмрд╛рдИ рдХреА рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред
int prefix(char* x, int n, char* key, int m) // x key { for( int k=0; k<n; k++ ) if( k==m || x[k]!=key[k] ) return k; return n; }
рдЦреЛрдЬ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рддреАрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
- рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрд╕ рдиреЛрдб рдХреА рдЫреЛрдЯреА рдмрд╣рди рдореЗрдВ рдЦреЛрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЕрдЧрд▓реЗ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ;
- рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ x рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ - рдЦреЛрдЬ рд╕рдлрд▓ рд╣реИ, рдиреЛрдб рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рд╣рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЕрдВрдд рдЯрд░реНрдорд┐рдирд▓ рдкреНрд░рддреАрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рдХреЗрд╡рд▓ рдкреЗрдбрд╝ рдХреА рдкрддреНрддреА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ);
- рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди x рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ - рд╕реАрдирд┐рдпрд░ рдЪрд╛рдЗрд▓реНрдб рдиреЛрдб рдХреЗ рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЬрд╛рдПрдВ, рдЗрд╕реЗ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдкрд╛рдП рдЧрдП рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ x рдкрд╛рд╕ рдХрд░реЗрдВред
рдпрджрд┐ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдЦреЛрдЬ рднреА рдЕрд╕рдлрд▓ рд╣реИред
node* find(node* t, char* x, int n=0) // x t { if( !n ) n = strlen(x)+1; if( !t ) return 0; int k = prefix(x,n,t->key,t->len); if( k==0 ) return find(t->next,x,n); // if( k==n ) return t; if( k==t->len ) return find(t->link,x+k,nk); // return 0; }
рд╕реНрдЯреНрд░рд┐рдВрдЧ x рдХреА рд▓рдВрдмрд╛рдИ n рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рдФрд░ рдлрд┐рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╣реИ), рддрд╛рдХрд┐ рдЖрдк рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХреЗрдВ, рдХреЗрд╡рд▓ рдкреЗрдбрд╝ рдХреА рдЬрдбрд╝ рдФрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
... node* p = find(t,"baca"); ...
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдВрдХрдбрд╝рд╛ рдЙрдкрд░реЛрдХреНрдд рд╡реГрдХреНрд╖ рдореЗрдВ рддреАрди рд▓рд╛рдЗрдиреЗрдВ (рдПрдХ рд╕рдлрд▓ рдФрд░ рджреЛ рдирд╣реАрдВ рддреЛ) рдЦреЛрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

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

рдиреЛрдб рд╡рд┐рднрд╛рдЬрди рдХреЛрдб:
void split(node* t, int k) // t k- { node* p = new node(t->key+k,t->len-k); p->link = t->link; t->link = p; char* a = new char[k]; strncpy(a,t->key,k); delete[] t->key; t->key = a; t->len = k; }
рдХреЛрдб рдбрд╛рд▓реЗрдВ:
node* insert(node* t, char* x, int n=0) // x t { if( !n ) n = strlen(x)+1; if( !t ) return new node(x,n); int k = prefix(x,n,t->key,t->len); if( k==0 ) t->next = insert(t->next,x,n); else if( k<n ) { if( k<t->len ) // ? split(t,k); t->link = insert(t->link,x+k,nk); } return t; }
рдЙрдкрд░реЛрдХреНрдд рдкреЗрдбрд╝ рдореЗрдВ рдХреАрдЬрд╛ $ рдФрд░ рдПрдмреНрд╕реАрдбреА $ рдбрд╛рд▓рдиреЗ рдХреА рдПрдХ рдорд┐рд╕рд╛рд▓ рдирд┐рдореНрди рдЖрдХреГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ x рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреЗрдбрд╝ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рддреЛ рдХреЛрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдПрдХ рд╕рдореНрдорд╛рдирдЬрдирдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдХреБрдВрдЬреА рдирд┐рдХрд╛рд▓рдирд╛
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рдХреБрдВрдЬреА рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рдСрдкрд░реЗрд╢рди рд╣реИред рдпрджреНрдпрдкрд┐ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рдХреБрдВрдЬреА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдкрддреНрддреА рдиреЛрдб рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреБрдВрдЬреА рдХрд╛ рдкреНрд░рддреНрдпрдп рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╣рдо рдЗрд╕ рдиреЛрдб рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЦреЛрдЬ рд╕рдлрд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдиреЛрдб рдХреА рдЫреЛрдЯреА рдмрд╣рди рдХреЛ рдПрдХ рд╕реВрдЪрдХ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ (рдЗрд╕рдореЗрдВ рдмреЗрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рдПрдХ рд╕реВрдЪреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣рдиреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ)ред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдЯрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛ рд╕рдХрддреА рдереА, рд▓реЗрдХрд┐рди рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ - рдПрдХ рдиреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдкреЗрдбрд╝ рдореЗрдВ рджреЛ рдиреЛрдбреНрд╕ рдЯреА рдФрд░ рдкреА рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрди рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рдиреЛрдб рдЯреА рдореЗрдВ рдПрдХ
рдПрдХрд▓ рдмрдЪреНрдЪрд╛ рдиреЛрдб рдкреА рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдкреЗрдбрд╝ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рд░реВрдк рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдорд░реНрдЬ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реБрдП, рдЗрди рджреЛ рдиреЛрдбреНрд╕ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдорд░реНрдЬ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИ - рд╣рдо рдПрдХ рдирдИ рдХреБрдВрдЬреА рдмрдирд╛рддреЗ рд╣реИрдВ, рдиреЛрдб рдкреА рдХреЗ рдиреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдиреЛрдб рдкреА рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ:
void join(node* t) // t t->link { node* p = t->link; char* a = new char[t->len+p->len]; strncpy(a,t->key,t->len); strncpy(a+t->len,p->key,p->len); delete[] t->key; t->key = a; t->len += p->len; t->link = p->link; delete p; }
рд╡рд░рд┐рд╖реНрда рдиреЛрдб рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреБрд╡рд╛ рдиреЛрдб рдХреЛ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рд╡рд┐рд▓рдп рдХреЗ рдорд╛рдирджрдВрдб 1) рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдХреБрдВрдЬреА рдХреЛ рд╣рдЯрд╛рдиреЗ, рдФрд░ рдЕрдЧрд▓реЗ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ; 2) рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдирдП рд▓рд┐рдВрдХ рдХрд╛ рдХреЛрдИ рдЕрдЧрд▓рд╛ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ (рдХреЗрд╡рд▓ рдПрдХ рдмрдЪреНрдЪрд╛ рдиреЛрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
node* remove(node* t, char* x, int n=0) // x t { if( !n ) n = strlen(x)+1; if( !t ) return 0; int k = prefix(x,n,t->key,t->len); if( k==n ) // { znode* p = t->next; delete t; return p; } if( k==0 ) t->next = remove(t->next, x, n); else if( k==t->len ) { t->link = remove(t->link, x+k, nk); if( t->link && !t->link->next ) // t ? join(t); } return t; }
рд╡рд┐рд▓рдп рдХреЗ рдмрд┐рдирд╛ рдЪрд╛рдмреА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг:

рдФрд░ рдорд░реНрдЬ рдХреЗ рд╕рд╛рде:

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рджрд┐рдП рдЧрдП рд╕реЗрдЯреЛрдВ рд╕реЗ рдПрдХ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдХ рд╣реА рд╕реЗрдЯ (рдпрд╛рдиреА, рдХреЗрд╡рд▓ рдПрдХ рд╕рдлрд▓ рдЦреЛрдЬ) рд╕реЗ рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдерд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдл рдПрд╡реАрдПрд▓ рдкреЗрдбрд╝ рдФрд░ рдЙрдкрд╕рд░реНрдЧ рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреА рддреБрд▓рдирд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдереЛрдбрд╝рд╛ рддреЗрдЬ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

рдЕрдВрдд рдореЗрдВ, рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ рдХрд┐ рдкреНрд░рддрд┐ рдЪрд░рд┐рддреНрд░ рдореЗрдореЛрд░реА рд▓рд╛рдЧрдд рдХреНрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдл рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред

рдФрд╕рддрди, рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐ рд╡рд░реНрдг рд▓рдЧрднрдЧ 2 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЭрдВрдбреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдПрдХ рдмрд╛рдЗрдЯ (рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рд▓рдВрдмреЗ рдЙрдкрд╕рд░реНрдЧреЛрдВ) рд╕реЗ рдХрдо рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЬреЗрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдХреА рдЧрдИ рдереАред рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЗрди рджреЛ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рд░реЗрдЦрд╛рдВрдХрди рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдХрд┐рд╕реА рднреА рдХреНрд░рд╛рдВрддрд┐рдХрд╛рд░реА рд╕реЗ рдХреБрдЫ рднреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрди рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ ...
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛!