рдкрджрд╛рд░реНрде рдЦреЛрдЬ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдорд▓реЗ

рдирдорд╕реНрдХрд╛рд░ рдкреНрд░рд┐рдп рд╕рдореБрджрд╛рдп! рд╣рд╛рд▓ рд╣реА рдореЗрдВ Habr├й рдкрд░ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦ рдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдЪреА рдХреАред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдХреЛрдИ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЬреЛ рд╕рдВрднрд╡рддрдГ рдпрд╛рдж рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЛ рд▓реЛрдЧ рдЕрднреА рднреА рд╕рдВрд╕реНрдерд╛рди рд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╢рд╛рдпрдж рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ "рдЖрдЦрд┐рд░ рдпрд╣ рдХреНрдпреЛрдВ рд╣реИ?" рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИред тАЭ рд╣рд╛рдБ, рдпрд╣ рд▓рд┐рдЦрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рдЕрдкрдиреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдЖрд╕рдиреНрди рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ рдЬрд╣рд╛рдВ рдмреЙрдХреНрд╕ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░реИрд╕ () рдлрд╝рдВрдХреНрд╢рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рддреАрд╕рд░реЗ, рдЖрдк рдЕрд╢реБрдн рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдирдЯрд╛рдЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдпрд╣ рдЬрд╛рдирдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкреВрд░рдХ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ (рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрдХреНрдпреВрдо рдореЗрдВ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрд╕ wcslen () рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ) wcsstr () Android NDK рд╕реЗ)ред



рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреЛрдЬ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ?



рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛, рдЬреЛ рд╕рдм рдХреБрдЫ "рд▓реЗ рдФрд░ рдЦреЛрдЬ" рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рдореНрди-рд╕реНрддрд░ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдХреНрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рддреЛ, рдпреЛрдЬрдирд╛ рдпрд╣ рд╣реИ:

  1. рд╕рдорд╕реНрдпрд╛ рдХрдерди: рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдФрд░ рд░реВрдврд╝рд┐рдпрд╛рдБ рдпрд╣рд╛рдБ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред
  2. рдирд┐рд░реНрдгрдп "рдорд╛рдереЗ рдкрд░": рдпрд╣рд╛рдВ рдпрд╣ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВред
  3. рдЬреЗрдб-рдлрд╝рдВрдХреНрд╢рди: рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЦреЛрдЬ рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдгред
  4. рдиреВрде-рдореЙрд░рд┐рд╕-рдкреНрд░реИрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдердо: рдПрдХ рдФрд░ рд╕рд╣реА рдЦреЛрдЬ рд╡рд┐рдХрд▓реНрдкред
  5. рдЕрдиреНрдп рдЦреЛрдЬ рдХрд╛рд░реНрдп: рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрди рдкрд░ рдЬрд╛рдПрдВред





рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди



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

рдЖрдЧреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреБрдЫ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░реВрдВрдЧрд╛ред рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ, рд╣рд░ рдХреЛрдИ рд╢рд╛рдпрдж рд╕рдордЭрддрд╛ рд╣реИ - рдпрд╣ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ, рд╕рдВрднрд╡рддрдГ рдЦрд╛рд▓реА рд╣реИред рдкреНрд░рддреАрдХ , рдпрд╛ рдЕрдХреНрд╖рд░, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рд╡рд░реНрдгрдорд╛рд▓рд╛, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдирд╛, рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдореЗрдВ рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ | рдП | - рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╕реНрдЯреНрд░рд┐рдВрдЧ A [ ..i ] рдХрд╛ рдЙрдкрд╕рд░реНрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ A рдХреЗ рдкрд╣рд▓реЗ i рдЕрдХреНрд╖рд░ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ ред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдкреНрд░рддреНрдпрдп A [ j .. ] рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ | A - -j + 1 рдЕрдВрддрд┐рдо рд╡рд░реНрдг A рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ A [ i..j ] рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ A [ i ] рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ i-th рд╡рд░реНрдг рд╣реИред рдЦрд╛рд▓реА рдкреНрд░рддреНрдпрдп рдФрд░ рдЙрдкрд╕рд░реНрдЧ, рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВ - рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдирд╕реЗ рдирд┐рдкрдЯрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЕрднреА рднреА рдкреНрд░рд╣рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдЪреАрдЬ рд╣реИ - рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рддреАрдХ рдЬреЛ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ $ рдкреНрд░рддреАрдХ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрдз рд╡рд░реНрдгрдорд╛рд▓рд╛ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рдХ рд╣реИ (рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдХрд┐ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рдЧрдгрдирд╛рдУрдВ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╢реВрдиреНрдп рд╕реЗ рдЧрд┐рдирддреА рдХрд░рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред



рдорд╛рдереЗ рдХрд╛ рдШреЛрд▓



рдкреНрд░рддреНрдпрдХреНрд╖ рдЦреЛрдЬ, рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдЕрдХреНрд╕рд░ рдХрд╣рддреЗ рд╣реИрдВ, "рдмрд╕ рдЙрдард╛рдУ рдФрд░ рдЦреЛрдЬ," рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдПрдХ рдЕрдиреБрднрд╡рд╣реАрди рд╡реНрдпрд╛рдпрд╛рдореА рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╕рд╛рд░ рд╕рд░рд▓ рд╣реИ: рд╕реНрдЯреНрд░рд┐рдВрдЧ рдП рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдП рдФрд░ рдЙрд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХреНрд╕ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВред рдЬрдм рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╣реА рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИред рдлрд┐рд░ рдпрд╣ рд▓рд╛рдЗрди рдП рдХреЗ рд╕рдВрдЧрдд рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рднреА рдмрд╛рдж рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рдЬрд╛рдВрдЪрддрд╛ рд░рд╣рддрд╛ рд╣реИ ред рдпрджрд┐ рд╡реЗ рд╕рднреА рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рд╣реИред рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рдПрдХ рдкрд╛рддреНрд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреЛ рдЕрд╕рддреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ X рд╕реЗ рдкрд╣рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреА рдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж рдЪрд░рд┐рддреНрд░ рдореЗрдВ рд▓реМрдЯрддрд╛ рд╣реИред

рдХрдИ рд▓реЛрдЧ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЧрд▓рдд рд╣реИрдВ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдП рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдП = "рдПрдПрдПрдПрдмреА" рдореЗрдВ рдЦреЛрдЬ рдПрдХреНрд╕ = "рдПрдПрдПрдмреА" рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рд╣рдореЗрдВ рдЪреМрдереЗ рдЪрд░рд┐рддреНрд░ A : "AAAAB" рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдо рдПрдХ рдмреЗрдореЗрд▓ рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИред

рдЧрд▓рдд рдкрд░рд┐рдХрд▓реНрдкрдирд╛рдПрдВ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВ, рдФрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЦрд░рд╛рдм рд╕реЗрдЯ рдХреЗ рддрд╣рдд рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реЛрд▓рдмреИрдХ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдП рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИред рдПрдХреНрд╕ | рд╕рдордпред рдпрд╣реА рд╣реИ, рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬрдЯрд┐рд▓рддрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдУ (| рдПрдХреНрд╕ || рдП ) рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред рддреЛ рдПрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдмрд╛рд╣рд░ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ ...

рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рд▓рд╛рдЗрдиреЗрдВ рдЫреЛрдЯреА рд╣реИрдВ, рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрдзрд┐рдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо "рд╕рд╣реА" рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред



рдЬреЗрдб рд╕рдорд╛рд░реЛрд╣



рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд╕рд╣реА рддрд░реАрдХреЛрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИ, рдПрдХ рдЕрд░реНрде рдореЗрдВ, рджреЛ рддрд╛рд░реЛрдВ рдХрд╛ рд╕рд╣рд╕рдВрдмрдВрдзред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИ: рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рдЕрдХреНрд╖рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рддрдм рддрдХ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдо рдПрдХ рд╡рд┐рд╕рдВрдЧрддрд┐ рдпрд╛ рдХрд┐рд╕реА рднреА рд░реЗрдЦрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдкрд╛рддреЗред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рднреА рдкреНрд░рддреНрдпрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ A : A [ | рдП | .. ] рдП [ | рдП | -1 .. ] , ... рдП [ 1 .. ] ред рд╣рдо рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗред рддреБрд▓рдирд╛ рдкреНрд░рддреНрдпрдп рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдмреЗрдореЗрд▓ рдХреЗ рдХрд╛рд░рдг рдХрд┐рд╕реА рдкреНрд░рддреАрдХ рдкрд░ рдЯреВрдЯ рд╕рдХрддреА рд╣реИред рд╕рдВрдпреЛрдЧ рд╡рд╛рд▓реЗ рднрд╛рдЧ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреНрд░рддреНрдпрдп рдХреЗ рд▓рд┐рдП рдЬреЗрдб-рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдШрдЯрдХ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

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

рдореВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдЕрдмрд╛рдХрд╛рдмрд╛" рд╣реИ ред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреНрдпрдп рдХреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдЬреЗрдб-рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЗрдЯ рдорд┐рд▓рддреА рд╣реИ:

рдкреНрд░рддреНрдпрдп рдкрдВрдХреНрддрд┐ рдЬреЗрдб
ababcaba ababcaba -> 8
babcaba ababcaba -> 0
abcaba ababcaba -> 2
bcaba ababcaba -> 0
рдХрд╛рдмрд╛ ababcaba -> 0
рдП.рдмреА.рдП. ababcaba -> 3
рдмрд╛ ababcaba -> 0
рдПрдХ ababcaba -> 1




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

рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо "рдЕрдмрдХрд╛" рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЗ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдПрдХ рдкреНрд░рд╣рд░реА рдбрд╛рд▓рдХрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ: "рдЕрдмрдХрд╛ $ рдЕрдмрд╛рдмрд╛рдХреБрдмрд╛рдХрд╛рдм" ред Z- рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡реЗрдХреНрдЯрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрддрд╛ рд╣реИ:

a b c $ a a b a b c a c a c a b
17 0 0 1 0 2 0 4 0 0 4 0 0 1 0 2 0




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

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

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рдХрд┐рд╕реА рддрд░рд╣ Z-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдЗрд╕реА i-1st рд╡рд░реНрдг рддрдХ рдХреА рд╣реИред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ r <i, рдЬрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Z r рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред

рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ Z r рдЕрдХреНрд╖рд░ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╣реИрдВ рдЬреИрд╕реЗ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВред рд╡реЗ рддрдерд╛рдХрдерд┐рдд рдЬреЗрдб-рдмреНрд▓реЙрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рдо рд╕рдмрд╕реЗ рд╕рд╣реА рдЬреЗрдб-рдмреНрд▓реЙрдХ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рдЬреЛ рд╕рдмрд╕реЗ рджреВрд░ рдХрд╛ рдЕрдВрдд рдХрд░рддрд╛ рд╣реИ (рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЧрд┐рдирддреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рдмрд╕реЗ рд╕рд╣реА рдмреНрд▓реЙрдХ рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рдХреЛрдИ рднреА рдЧреИрд░-рд░рд┐рдХреНрдд рдмреНрд▓реЙрдХ i-1 рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ i-1st рд╕рдмрд╕реЗ рд╕рд╣реА рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА Z i-1 = 0)ред

Z- рдмреНрд▓реЙрдХ рд▓реЗрдЖрдЙрдЯ

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

рдкреНрд░рддреНрдпрдп рд╕реНрдХрд┐рдк

рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рдгрд╛рдо

рдЕрд░реНрдерд╛рддреН, рдпрджрд┐ рд╣рдо Z r -block рдореЗрдВ рд╕реНрдерд┐рдд i-th рд╡рд░реНрдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рд╕реНрдерд┐рддрд┐ k = i-r + 1 рдкрд░ рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрд░рдВрдн рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдгред рдлрд╝рдВрдХреНрд╢рди Z k рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рд╣реИред рдпрджрд┐ рдпрд╣ Z r - (ir) рдХреА рджреВрд░реА Z- рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рддрдХ рд╢реЗрд╖ рд╣реИ, рддреЛ рд╣рдо рддреБрд░рдВрдд рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдЪрд┐рдиреНрд╣ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд╕рдВрдпреЛрдЧ рдХреНрд╖реЗрддреНрд░ r -th Z-block рдХреЗ рдЕрдВрджрд░ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд: Z i = Z k рдпрджрд┐ Z k > = Z r - (ir), рддреЛ Z i , Z r - (ir) рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╣реИ, рд╣рдореЗрдВ рдЬреЗрдб-рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рдж рд╡рд░реНрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЗрди рд╡рд░реНрдгреЛрдВ рдореЗрдВ рд╕реЗ рд░реЗрдЦрд╛ рдХреЗ рдЖрд░рдВрдн рдореЗрдВ рд╕рдВрдЧрдд рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ Z i , h: Z i = Z k + h рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдпрд╛ рд╕рдмрд╕реЗ рджрд╛рд╣рд┐рдирд╛ Z-block (рдпрджрд┐ h> 0) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╛рд╣рд░ z- рдмреНрд▓реЙрдХ

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

рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рдУ (( рдП | рдП | + | рдПрдХреНрд╕ |)) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореМрдЬреВрдж рдЙрддреНрдкрд╛рдж рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИред рд╕рдЪ рд╣реИ, рд╣рдореЗрдВ рдЬреЗрдб-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдерд╛, рдЬреЛ рдСрд░реНрдбрд░ рдУ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рд▓реЗрдЧрд╛ (| рдП | рдП | рдПрдХреНрд╕ ред)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рддреЛ O (! X |) рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Z- рдмреНрд▓реЙрдХ рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдПрдХреНрд╕ | рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдкрд╣рд▓реА рдШрдЯрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд▓рд╛рдЗрди рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗред

рдЕрдВрдд рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдЬреЗрдб-рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЯреНрд░рд┐рдХ рдХреЗ рдмрд╕ рдПрдХ рдореЙрдбрд▓ рд╕рдВрд╕реНрдХрд░рдгред

 void z_preprocess(vector<int> & Z, const string & str) { const size_t len = str.size(); Z.clear(); Z.resize(len); if (0 == len) return; Z[0] = len; for (size_t curr = 1, left = 0, right = 1; curr < len; ++curr) { if (curr >= right) { size_t off = 0; while ( curr + off < len && str[curr + off] == str[off] ) ++off; Z[curr] = off; right = curr + Z[curr]; left = curr; } else { const size_t equiv = curr - left; if (Z[equiv] < right - curr) Z[curr] = Z[equiv]; else { size_t off = 0; while ( right + off < len && str[right - curr + off] == str[right + off] ) ++off; Z[curr] = right - curr + off; right += off; left = curr; } } } } 
      





void z_preprocess(vector<int> & Z, const string & str) { const size_t len = str.size(); Z.clear(); Z.resize(len); if (0 == len) return; Z[0] = len; for (size_t curr = 1, left = 0, right = 1; curr < len; ++curr) { if (curr >= right) { size_t off = 0; while ( curr + off < len && str[curr + off] == str[off] ) ++off; Z[curr] = off; right = curr + Z[curr]; left = curr; } else { const size_t equiv = curr - left; if (Z[equiv] < right - curr) Z[curr] = Z[equiv]; else { size_t off = 0; while ( right + off < len && str[right - curr + off] == str[right + off] ) ++off; Z[curr] = right - curr + off; right += off; left = curr; } } } }









рдиреВрде-рдореЙрд░рд┐рд╕-рдкреНрд░реИрдЯ рдПрд▓рдЧреЛрд░рд┐рджрдо (рдХреЗрдПрдордкреА)



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

рдЙрдкрд╕рд░реНрдЧ рдЙрдкрд╕рд░реНрдЧ рдкреА
рдПрдХ рдПрдХ 0
рдЕрдм рдЕрдм 0
рдЕрдм рдП a рдмрд╛ 1
рдПрдм рдПрдм рдПрдм рдПрдм 2
ababc ababc 0
ababc a рдПрдХ рдмрд╛рдмрд╛ 1
ababc ab ab рдЕрдмрдХрд╛рдм 2
ababc рдЕрдмрд╛ рдЕрдмрд╛ рдмрдХрд╛рдмрд╛ 3




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

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

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдо рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдХреА рддрд░рд╣, рд╡рд╛рдВрдЫрд┐рдд рд░реЗрдЦрд╛ рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕рдореЗрдЯрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреНрд░рд╣рд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрдкрд╕рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдШрдЯрдХ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХрд╛ рдмрд┐рдВрджреБ рдЙрд╕ рд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░рд╡реЗрд╢ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ: рд▓рд╛рдЗрди рдореЗрдВ "ababcabcacab" рд╣рдо "abca" рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВ ред "рдЕрдмрдХрд╛ $ рдЕрдмрдмрд╛рдХреИрдХрд╛рдм" рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрд╕реНрдХрд░рдгред рдЙрдкрд╕рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

a b c $ a a b a b c a c a c a b
0 0 0 1 0 1 2 2 1 2 3 4 2 3 4 4 1 1 2




рдлрд┐рд░ рд╕реЗ, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╕рдмрд╕реНрдЯреЗрд╢рди рдХреА рд╕рднреА рдШрдЯрдирд╛рдПрдБ рдПрдХ рдЭрдЯрдХреЗ рдореЗрдВ рдЦрддреНрдо рд╣реЛ рдЧрдИрдВ - рд╡реЗ рдЪрд╛рд░ рдореЗрдВ рдЦрддреНрдо рд╣реЛ рдЧрдИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдЗрд╕ рдЙрдкрд╕рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреИрд╕реЗ рдЧрдгрдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЗрдб-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред

KMP

рдЙрдкрд╕рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдмрд╣реБрдд рдкрд╣рд▓рд╛ рдореВрд▓реНрдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реИ 0. рдЖрдЗрдП рд╣рдо рдЙрдкрд╕рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ ith рд╕реНрдерд┐рддрд┐ рддрдХ рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред I + 1 рд╡рд░реНрдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрджрд┐ i-th рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрд╕рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдорд╛рди Pi рд╣реИ, рддреЛ рдЙрдкрд╕рд░реНрдЧ A [ .. Pi ] рд╡рд┐рдХрд▓реНрдк A [ iP i + 1..i ] рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рддреАрдХ A [ P i + +1 ] A [ i + 1 ] рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ P i + 1 = P i +1 рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдорд╛рди рдпрд╛ рддреЛ рдХрдо рдпрд╛ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, Pi = 0 рдХреЗ рд╕рд╛рде, рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдХрдореА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ Pi + 1 = 0 рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреА i > 0ред рддрдм рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рдЙрдкрд╕рд░реНрдЧ A [ ..P i ] рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ A [ iP i + 1..i ] рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рд╡рд╛рдВрдЫрд┐рдд рдЙрдкрд╕рд░реНрдЧ рдлрд╝рдВрдХреНрд╢рди рдЗрди рд╕рдорддреБрд▓реНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рднреАрддрд░ рдмрдирддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдг, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдмрд╛рдж рдкреВрд░реА рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдЙрдкрд╕рд░реНрдЧ рдФрд░ i + 1 рд╡рд░реНрдг рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реЛрдЧреАред

KMP

рдЗрд╕ рдЪрд░рдг рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрдЯ рдЖрдЙрдЯ рдорд┐рдбрд┐рд▓ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: A [ ..P i ] A [ i + 1 ] , рдЬрд┐рд╕реЗ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдкреВрдВрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд▓реВрдк)ред рдпрд╣реА рд╣реИ, рдпрджрд┐ A [ P P i +1 ] A [ i + 1 ] рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ P i + 1 = P P i +1, рдЕрдиреНрдпрдерд╛ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд░реЗрдЦрд╛ рдХрд╛ рднрд╛рдЧ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ, рдЖрджрд┐ред рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддрдм рддрдХ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдореЗрдВ рдХреЛрдИ рдореЗрд▓ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рдпрд╛ 0 рдирд╣реАрдВ рдорд┐рд▓рддрд╛ред

KMP

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛:

 void calc_prefix_function(vector<int> & prefix_func, const string & str) { const size_t str_length = str.size(); prefix_func.clear(); prefix_func.resize(str_length); if (0 == str_length) return; prefix_func[0] = 0; for (size_t current = 1; current < str_length; ++current) { size_t matched_prefix = current - 1; size_t candidate = prefix_func[matched_prefix]; while (candidate != 0 && str[current] != str[candidate]) { matched_prefix = prefix_func[matched_prefix] - 1; candidate = prefix_func[matched_prefix]; } if (candidate == 0) prefix_func[current] = str[current] == str[0] ? 1 : 0; else prefix_func[current] = candidate + 1; } } 
      





void calc_prefix_function(vector<int> & prefix_func, const string & str) { const size_t str_length = str.size(); prefix_func.clear(); prefix_func.resize(str_length); if (0 == str_length) return; prefix_func[0] = 0; for (size_t current = 1; current < str_length; ++current) { size_t matched_prefix = current - 1; size_t candidate = prefix_func[matched_prefix]; while (candidate != 0 && str[current] != str[candidate]) { matched_prefix = prefix_func[matched_prefix] - 1; candidate = prefix_func[matched_prefix]; } if (candidate == 0) prefix_func[current] = str[current] == str[0] ? 1 : 0; else prefix_func[current] = candidate + 1; } }







рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдЬреЗрдб-рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рднреА рд╕рд░рд▓ рд╣реИред



рдЕрдиреНрдп рдЦреЛрдЬ рдХрд╛рд░реНрдп



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

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

рдареАрдХ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ O (| X | + | + | A |) рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдПрдХ рдЧреЗрд╕реНрдЯрдмреБрдХ рдЗрдВрдЬрди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд╖рд┐рджреНрдз рдЕрд╢реНрд▓реАрд▓ рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ (рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реИ)ред рд╣рдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рд╕рдВрджреЗрд╢ рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗ рдФрд░ ... рдпрд╣ рд╣рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛ O (| X 1 | + | X 2 | + ... + + X n | + n | A |) | рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ "рдорд╣рд╛рди рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА" рдХреЗ "рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐" рдХрд╛ рд╢рдмреНрджрдХреЛрд╢ рдмрд╣реБрдд "рд╢рдХреНрддрд┐рд╢рд╛рд▓реА" рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рддрд╛рдХрд┐ рдЦреЛрдЬ рдХреЗрд╡рд▓ O! X X 1 + + | X 2 | + ... + | X n | + | A |) рдкрд░ рдХрд╛рдмрд┐рдЬ рд╣реЛ рдЬрд╛рдП, рдФрд░ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рдлреА рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрджреЗрд╢ рд▓рдВрдмреЗ рд╣реИрдВред

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

Trie

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

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

рдЕрдм рд╣рдо рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдПрдХ рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рдереЗ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рд╣реИ: рд╣рдореЗрдВ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рджреА рдЧрдИ рдереА рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдЬреЛ рдЦреЛрдЬреЗрдВрдЧреЗ рд╡рд╣ рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдмрд╣реБрдд рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЦреЛрдЬ рдЗрдВрдЬрди рд╣реИред рдЬрд┐рд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╢рдмреНрдж рдЦреЛрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдЦреЛрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрдж рдЪрд▓рддреЗ-рдлрд┐рд░рддреЗ рд╣реИрдВред рдкреНрд░рд╢реНрди рд╣реИ, рдлрд┐рд░ рд╕реЗ, O рдХреЗ рдмрджрд▓реЗ рдХреИрд╕реЗ (? X 1 | + | X 2 | + ... + | + X n = n | n | A ) O рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (| X 1 | + | X 2 | + ... + | | рдПрдХреНрд╕ рдПрди | + | рдП |) |

рдпрд╣ рдПрдХ рдмреЛрд░рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рддреНрдпрдп рд╣реЛрдВрдЧреЗред рддрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рд╡рд╛рдВрдЫрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд░реВрдк рдкреЗрдбрд╝ рдореЗрдВ рдкрде рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдЖрдк рд╕рднреА рдкреНрд░рддреНрдпрдпреЛрдВ рдХреА рд╕рдВрдкреВрд░реНрдг рдЦреЛрдЬ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреЛрд░реЙрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ O (| - 2 ) рд╕рдордп рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдореЗрдореЛрд░реА рд▓реЗ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рддреБрд░рдВрдд рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдПрдХ рдкреНрд░рддреНрдпрдп рдкреЗрдбрд╝ , рдФрд░ рдЗрд╕реЗ рдУ (! рдП |) рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ Habr├й рдкрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдЖрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЬреЛ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рдЙрдХрдХреЛрди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдкреНрд░рддреНрдпрдп рдХреЗ рдкреЗрдбрд╝ рдореЗрдВ рджреЛ рдЪреАрдЬреЗрдВ рдЦрд░рд╛рдм рд╣реЛрддреА рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣: рдпрд╣ рдПрдХ рдкреЗрдбрд╝ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред рдкреНрд░рддреНрдпрдп рд╕рд░рдгреА рдЗрди рдХрдорд┐рдпреЛрдВ рдХреЛ рдмрдЦреНрд╢рд╛ рдЧрдпрд╛ рд╣реИ ред рдкреНрд░рддреНрдпрдп рд╕рд░рдгреА рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рднреА рдкреНрд░рддреНрдпрдпреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреИрдЯрд░реНрди рдХреЗ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рдиреНрди рдкреНрд░рддреНрдпрдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЦреЛрдЬ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреА рдФрд░ рдмрд╛рдж рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдХреЛ рдФрд░ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реА рд╕рдордп, рдкреНрд░рддреНрдпрдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЙрди рдкрджреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬрд┐рди рдкрд░ рд╡реЗ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╣реА рд╣реИ, рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕рдордп рдирд┐рд░реНрднрд░рддрд╛ рдереЛрдбрд╝реА рдЦрд░рд╛рдм рд╣реИ: рдПрдХ рдЦреЛрдЬ рдореЗрдВ O (! X | + log | - |) рдЦрд░реНрдЪ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдзреНрдпрд╛рди рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ O ((! X | log | A |)ред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдкреЗрдбрд╝ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдгрдорд╛рд▓рд╛ O (| X |) рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд░рдгреА рд╣реИ, рди рдХрд┐ рдПрдХ рдкреЗрдбрд╝, рдореЗрдореЛрд░реА рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрдХреНрд░рдордг рднрд╡рд┐рд╖реНрдпрд╡рдХреНрддрд╛ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред K├дrkk├дinen-Sanders рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реИрдЦрд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХ рдкреНрд░рддреНрдпрдп рд╕рд░рдгреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд░реВрд╕реА рдореЗрдВ рдзреНрд╡рдирд┐ рдХреИрд╕реЗ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред рдЖрдЬ рдпрд╣ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкрдВрдХреНрддрд┐ рдЕрдиреБрдХреНрд░рдордг рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

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



рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдФрд░ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕реЗ рдкрдврд╝рд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!



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



All Articles