рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ "рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо" рдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред
рд╣рдлрд╝рдореИрди рдХреЛрдбрд┐рдВрдЧ рдПрдХ рдбреЗрдЯрд╛ рдХрдореНрдкреНрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдЪрд░ рд▓рдВрдмрд╛рдИ рдХреЛрдбрд┐рдВрдЧ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдХреЛрдб, рдЙрдкрд╕рд░реНрдЧ рдирд┐рдпрдо рдФрд░ рдПрдХ рд╣рдлрдореИрди рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗредрд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЛ 0 рдФрд░ 1 рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 8 рдмрд┐рдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдлрд┐рдХреНрд╕реНрдб-рд▓реЗрдВрде рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИредрдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкрд╛рда рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдПрдХ рд╡рд░реНрдг рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рди рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдЪрд░ рд▓рдВрдмрд╛рдИ рдХреЛрдбрд┐рдВрдЧ рд╣реИред рд╣рдо рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рда рдореЗрдВ рдХреБрдЫ рд╡рд░реНрдг рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ ( рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ ) рдЬреЛ рдХрдо рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рдорд╛рди рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдВрдЧреЗред рдЬрдм рдПрдХ рдЪрд░ рд▓рдВрдмрд╛рдИ рдХреЛрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рдкрд╛рда рдореЗрдВ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрдгреЛрдВ рдХреЛ рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдХреБрдЫ рдЕрдХреНрд╖рд░ рд╕рд┐рд░реНрдл 1 рдмрд┐рдЯ, рдФрд░ рдЕрдиреНрдп 2 рдмрд┐рдЯ, 3 рдпрд╛ рдЕрдзрд┐рдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд░ рд▓рдВрдмрд╛рдИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рдж рдХреЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╣реИредрдХреИрд╕реЗ, рдмрд┐рдЯреНрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рдЗрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ "aabacdab" ред рдЗрд╕рдореЗрдВ 8 рд╡рд░реНрдг рд╣реИрдВ, рдФрд░ рдЬрдм рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 64 рдмрд┐рдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрдгреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ "a", "b", "c" рдФрд░ "d" рдХреНрд░рдорд╢рдГ 4, 2, 1, 1 рд╣реИред рдорд╛рди рд▓реЗрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХреЗ рд╕рд╛рде "aabacdab" рдХрдо рдмрд┐рдЯреНрд╕, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ "рдПрдХ" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрдо рд╣реИ "рдмреА" рдФрд░ "рдмреА" рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЖрдо рд╣реИ "рд╕реА" рдФрд░ "рдбреА" ред рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдПрдХ" рдПрдХ рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ 0 рдХреЗ рдмрд░рд╛рдмрд░, "рдмреА" рд╣рдо рдПрдХ рджреЛ-рдмрд┐рдЯ рдХреЛрдб 11 рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рдФрд░ рддреАрди рдмрд┐рдЯ 100 рдФрд░ 011 рд╣рдо рдПрдирдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ "рд╕реА" рдФрд░"рдбреА" редрдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд╕рдлрд▓ рд╣реЛрдВрдЧреЗ:рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдЖрдмрджрд╛рдм" рдХреЛ 00110100011011 (0 | 0 | 0 | 11; 0 | 100; 011 | 0 | 11) рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╣реЛрдЧреАред рдЬрдм рд╣рдо рд▓рд╛рдЗрди 00110100011011 рдХреЛ рдбреАрдХреЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:0|011|0|100|011|0|11 adacdab
0|0|11|0|100|0|11|011 aabacabd
0|011|0|100|0|11|0|11 adacabab
...рдЖрджрд┐редрдЗрд╕ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдорд╛рд░реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдирд┐рдпрдо рдЬреИрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреА рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреВрдареЗ рддрд░реАрдХреЗ рд╕реЗ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдирд┐рдпрдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдХреЛрдб рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрд╕рд░реНрдЧ рдирд╣реАрдВ рд╣реИред рдХреЛрдб рджреНрд╡рд╛рд░рд╛, рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмрд┐рдЯреНрд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рдереЗред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, 0 рдЙрдкрд╕рд░реНрдЧ 011 рд╣реИ , рдЬреЛ рдЙрдкрд╕рд░реНрдЧ рдирд┐рдпрдо рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдХреЛрдб рдЙрдкрд╕рд░реНрдЧ рдирд┐рдпрдо рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд┐рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд)редрдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЕрдХреНрд╖рд░ "a", "b", "c" рдФрд░ "d" рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ рдХреЛрдб рдЬреЛ рдЙрдкрд╕рд░реНрдЧ рдирд┐рдпрдо рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВредрдЗрд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдПрдмрд╛рдХреИрдбреИрдм" рдХреЛ 00100100011010 (0 | 10 | 10 | 0 | 100 | 011 | 0 | 10) рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдФрд░ рдпрд╣рд╛рдБ 00100100011010 рд╣рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд┐рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдореВрд▓ рдкрдВрдХреНрддрд┐ "рдЖрдмрджрд╛рдм" рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВ редрд╣рдлрд╝рдореИрди рдХреЛрдбрд┐рдВрдЧ
рдЕрдм рдЬрдм рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд▓рдВрдмрд╛рдИ рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдирд┐рдпрдо рдХрд╛ рдкрддрд╛ рдЪрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╣рдлрд╝рдореИрди рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВредрд╡рд┐рдзрд┐ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреЗрдбрд╝реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕рдореЗрдВ, рдПрдХ рдиреЛрдб рдпрд╛ рддреЛ рдкрд░рд┐рдорд┐рдд рдпрд╛ рдЖрдВрддрд░рд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рднреА рдиреЛрдбреНрд╕ рдХреЛ рдкрддреНрддрд┐рдпрд╛рдВ (рд▓реАрдлреНрд╕) рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВ рдкреНрд░рддреАрдХ рдФрд░ рдЙрд╕рдХреЗ рд╡рдЬрди (рдЬреЛ рдХрд┐ рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдЖрдВрддрд░рд┐рдХ рдиреЛрдбреНрд╕ рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдХрд╛ рд╡рдЬрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреЛ рд╡рдВрд╢рдЬ рдиреЛрдбреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭреМрддреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмрд┐рдЯ "0" рдмрд╛рдИрдВ рд╢рд╛рдЦрд╛ рдкрд░ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ "1" рджрд╛рдИрдВ рдУрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдкреВрд░реНрдг рд╡реГрдХреНрд╖ рдореЗрдВ N рдкрддреНрддреЗ рдФрд░ N-1 рдЖрдВрддрд░рд┐рдХ рдиреЛрдб рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╣рдлрд╝рдореИрди рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд░реНрдгреЛрдВ рдХреЛ рдЗрд╖реНрдЯрддрдо рд▓рдВрдмрд╛рдИ рдХреЗ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПредрд╣рдо рд╣рдлрдореИрди рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рд╕рдмрд╕реЗ рдХрдо рдЖрд╡реГрддреНрддрд┐ рд╡рд╛рд▓реЗ рдиреЛрдб рдХреЛ рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдПрдЧреАред рдирд┐рд░реНрдорд╛рдг рдЪрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:- рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддреНрддрд╛ рдиреЛрдб рдмрдирд╛рдПрдБ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
- рдЬрдмрдХрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╢реАрдЯ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ:
- рдХрддрд╛рд░ рд╕реЗ рдЙрдЪреНрдЪрддрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ (рд╕рдмрд╕реЗ рдХрдо рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде) рдХреЗ рд╕рд╛рде рджреЛ рдиреЛрдб рдирд┐рдХрд╛рд▓реЗрдВ;
- рдПрдХ рдирдпрд╛ рдЖрдВрддрд░рд┐рдХ рдиреЛрдб рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рдпреЗ рджреЛ рдиреЛрдбреНрд╕ рд╡рд╛рд░рд┐рд╕ рд╣реЛрдВрдЧреЗ, рдФрд░ рдШрдЯрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдЗрди рджреЛ рдиреЛрдбреНрд╕ рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдпреЛрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАред
- рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдиреЛрдб рдЬреЛрдбрд╝реЗрдВред
- рдХреЗрд╡рд▓ рд╢реЗрд╖ рдиреЛрдб рд░реВрдЯ рд╣реЛрдЧрд╛, рдЗрд╕рд╕реЗ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЦрддреНрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕реЗ рдкрд╛рда рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХреЗрд╡рд▓ "a," тАЛтАЛ"b", "c," "d," рдФрд░ "e" рдЕрдХреНрд╖рд░ рд╣реИрдВ , рдФрд░ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреНрд░рдорд╢рдГ 15, 7, 6, 6 рдФрд░ 5 рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рд╣реИрдВ рдЬреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред



рдХрд┐рд╕реА рднреА рдЕрдВрдд рдиреЛрдб рдХреЗ рд▓рд┐рдП рд░реВрдЯ рд╕реЗ рд░рд╛рд╕реНрддрд╛ рдЗрд╖реНрдЯрддрдо рдЙрдкрд╕рд░реНрдЧ рдХреЛрдб (рдЬрд┐рд╕реЗ рд╣рдлрдореИрди рдХреЛрдб рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рдЙрд╕ рдЕрдВрдд рдиреЛрдб рд╕реЗ рдЬреБрдбрд╝реЗ рдЪрд░рд┐рддреНрд░ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
рд╣рдлрдореИрди рдЯреНрд░реАрдиреАрдЪреЗ рдЖрдкрдХреЛ рд╕реА + рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣рдлрдореИрди рд╕рдВрдкреАрдбрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓реЗрдЧрд╛:#include <iostream>
#include <string>
#include <queue>
#include <unordered_map>
using namespace std;
struct Node
{
char ch;
int freq;
Node *left, *right;
};
Node* getNode(char ch, int freq, Node* left, Node* right)
{
Node* node = new Node();
node->ch = ch;
node->freq = freq;
node->left = left;
node->right = right;
return node;
}
struct comp
{
bool operator()(Node* l, Node* r)
{
return l->freq > r->freq;
}
};
void encode(Node* root, string str,
unordered_map<char, string> &huffmanCode)
{
if (root == nullptr)
return;
if (!root->left && !root->right) {
huffmanCode[root->ch] = str;
}
encode(root->left, str + "0", huffmanCode);
encode(root->right, str + "1", huffmanCode);
}
void decode(Node* root, int &index, string str)
{
if (root == nullptr) {
return;
}
if (!root->left && !root->right)
{
cout << root->ch;
return;
}
index++;
if (str[index] =='0')
decode(root->left, index, str);
else
decode(root->right, index, str);
}
void buildHuffmanTree(string text)
{
unordered_map<char, int> freq;
for (char ch: text) {
freq[ch]++;
}
priority_queue<Node*, vector<Node*>, comp> pq;
for (auto pair: freq) {
pq.push(getNode(pair.first, pair.second, nullptr, nullptr));
}
while (pq.size() != 1)
{
Node *left = pq.top(); pq.pop();
Node *right = pq.top(); pq.pop();
int sum = left->freq + right->freq;
pq.push(getNode('\0', sum, left, right));
}
Node* root = pq.top();
unordered_map<char, string> huffmanCode;
encode(root, "", huffmanCode);
cout << "Huffman Codes are :\n" << '\n';
for (auto pair: huffmanCode) {
cout << pair.first << " " << pair.second << '\n';
}
cout << "\nOriginal string was :\n" << text << '\n';
string str = "";
for (char ch: text) {
str += huffmanCode[ch];
}
cout << "\nEncoded string is :\n" << str << '\n';
int index = -1;
cout << "\nDecoded string is: \n";
while (index < (int)str.size() - 2) {
decode(root, index, str);
}
}
int main()
{
string text = "Huffman coding is a data compression algorithm.";
buildHuffmanTree(text);
return 0;
}
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
class Node
{
char ch;
int freq;
Node left = null, right = null;
Node(char ch, int freq)
{
this.ch = ch;
this.freq = freq;
}
public Node(char ch, int freq, Node left, Node right) {
this.ch = ch;
this.freq = freq;
this.left = left;
this.right = right;
}
};
class Huffman
{
public static void encode(Node root, String str,
Map<Character, String> huffmanCode)
{
if (root == null)
return;
if (root.left == null && root.right == null) {
huffmanCode.put(root.ch, str);
}
encode(root.left, str + "0", huffmanCode);
encode(root.right, str + "1", huffmanCode);
}
public static int decode(Node root, int index, StringBuilder sb)
{
if (root == null)
return index;
if (root.left == null && root.right == null)
{
System.out.print(root.ch);
return index;
}
index++;
if (sb.charAt(index) == '0')
index = decode(root.left, index, sb);
else
index = decode(root.right, index, sb);
return index;
}
public static void buildHuffmanTree(String text)
{
Map<Character, Integer> freq = new HashMap<>();
for (int i = 0 ; i < text.length(); i++) {
if (!freq.containsKey(text.charAt(i))) {
freq.put(text.charAt(i), 0);
}
freq.put(text.charAt(i), freq.get(text.charAt(i)) + 1);
}
PriorityQueue<Node> pq = new PriorityQueue<>(
(l, r) -> l.freq - r.freq);
for (Map.Entry<Character, Integer> entry : freq.entrySet()) {
pq.add(new Node(entry.getKey(), entry.getValue()));
}
while (pq.size() != 1)
{
Node left = pq.poll();
Node right = pq.poll();
int sum = left.freq + right.freq;
pq.add(new Node('\0', sum, left, right));
}
Node root = pq.peek();
Map<Character, String> huffmanCode = new HashMap<>();
encode(root, "", huffmanCode);
System.out.println("Huffman Codes are :\n");
for (Map.Entry<Character, String> entry : huffmanCode.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println("\nOriginal string was :\n" + text);
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i < text.length(); i++) {
sb.append(huffmanCode.get(text.charAt(i)));
}
System.out.println("\nEncoded string is :\n" + sb);
int index = -1;
System.out.println("\nDecoded string is: \n");
while (index < sb.length() - 2) {
index = decode(root, index, sb);
}
}
public static void main(String[] args)
{
String text = "Huffman coding is a data compression algorithm.";
buildHuffmanTree(text);
}
}
рдиреЛрдЯ: рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА 47 * 8 = 376 рдмрд┐рдЯреНрд╕ рд╣реИ, рдФрд░ рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗрд╡рд▓ 194 рдмрд┐рдЯреНрд╕, рдЕрд░реНрдерд╛рддреНред рдбреЗрдЯрд╛ рд▓рдЧрднрдЧ 48% рддрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ, рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкрдардиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредрдЪреВрдВрдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдкреНрд░рднрд╛рд╡реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП O (рд▓реЙрдЧ (N)) рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ , рдФрд░ N рдкрддреНрддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдореЗрдВ 2N-1 рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ Huffman рдЯреНрд░реА рдПрдХ рдкреВрд░реНрдг рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рд╣реИ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо O рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (Nlog (N) )) рд╕рдордп, рдЬрд╣рд╛рдВ рдПрди рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИредрд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:
en.wikipedia.org/wiki/Huffman_codingen.wikipedia.org/wiki/Variable-length_codewww.youtube.com/watch?v=5wRPin4oxCo
.