рдкрд░рд┐рдЪрдп
рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдХреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореЗрд░реЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдЪрд╛рд░ рдорд╣реАрдиреЗ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВред рдореЗрд░реЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЬрд┐рд╕ рдЫрдд рдкрд░ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдХрд╛ рдореЗрд░рд╛ рдкрд┐рдЫрд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдХреНрд╖рдо рдерд╛, рд╡рд╣ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб ~ 80 рд╣рдЬрд╛рд░ рд╢рдмреНрдж рдерд╛ред рдореИрдВрдиреЗ рддрдм рдмрд╣реБрдд рд╕рдордп рдФрд░ рдКрд░реНрдЬрд╛ рдЦрд░реНрдЪ рдХреА, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдХреЗ рдХрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред
рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛: тАЬрдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ! рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред тАЭ рдХрдард┐рдирд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдРрд╕реА рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рд╕рдордЭрд╛, рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред
рдХрд╛рд░реНрдп рд╕рд┐рджреНрдзрд╛рдВрдд
рдореБрдЭреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЖрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдпрдж рдореБрдЭ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рддрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕рдм рдХреБрдЫ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛, рдЬреЛ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕рдордЭрддрд╛ рд╣реИред рдЬреЛ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рддреЛ рдореИрдВрдиреЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреА рдкрддреНрдиреА рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдб рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдирдВрдмрд░ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмреЙрдХреНрд╕ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдХреНрд╖рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЕрдВрджрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд░рд╛рдЬреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЦреЛрд▓рдХрд░ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рддреЗрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдмреЙрдХреНрд╕ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдмреЙрдХреНрд╕ рдХрд╛ рдЕрдХреНрд╖рд░ рд╢рдмреНрдж рдореЗрдВ рдЕрдВрддрд┐рдо рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдмрдХреНрд╕реЗ рд▓рдЧрднрдЧ рдЦрд╛рд▓реА рд░рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ 1 рдпрд╛ 2 рдирдВрдмрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╢реЗрд╖ рд╕реНрдерд╛рди рдЦрд╛рд▓реА рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖реЛрдВ рдХреА рдХрдИ рдХрд┐рд╕реНрдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: HAT-trie, double-array trie, tripple-array trieред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдереНрдп рдерд╛ рдХрд┐ рдореИрдВ рдЙрдирдХреЗ рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреЗрдбрд╝ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ред
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдореИрдВ рдПрдХ рд╕рд░рд▓ рдЙрдкрд╕рд░реНрдЧ рдкреЗрдбрд╝ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХрд┐рдлрд╛рдпрддреА рд╕реНрдореГрддрд┐ рдЦрдкрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛рд░реНрдб рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕ рд░реВрдкрдХ рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреИрдмрд┐рдиреЗрдЯ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рджрд░рд╛рдЬ рдмрдирд╛рдП, рдкреВрд░реНрдг рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП рдмреЙрдХреНрд╕ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╣реИ, 1 рдЕрдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ред
рдореИрдВ рд╕реА рдореЗрдВ рдПрдХ рд╣реА PHP рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
1. рд╕реНрдерд╛рдкрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╢рдмреНрдж рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖рд░ 2 рд╕реЗ 95 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдбреЗрдб рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рдмреНрдж "abv" рддреАрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдбреЗрдб рд╣реИ: 11, 12, 13. рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╕рдВрдЦреНрдпрд╛ 1 рдХрд╛ рдПрдХ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА 1 рдмрд╛рдЗрдЯ
uint8_t abc[256][256] = {};
рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ 1 рдмрд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд▓рд╛рдЗрди рдкрдврд╝рддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рдПрд░реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХрд╛ рдорд╛рди рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдВрдХ рдХреЛрдб 1 = 49 рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо
abc[49][0];
ред рдпрджрд┐ '\ 0' рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдореВрд▓реНрдп рдирд┐рд╣рд┐рдд рд╣реИ, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рдкрддреНрд░ рдХрд╛ рдХреЛрдб рд╣реИ, рдЗрд╕реЗ рдпрд╛рдж рд░рдЦреЗрдВ рдФрд░ рдЕрдЧрд▓реЗ рдмрд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╢рдмреНрдж "abv" рдореЗрдВ 6 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рддрд┐ рдЕрдХреНрд╖рд░ рджреЛ рдмрд╛рдЗрдЯреНрд╕: 208, 176, 208, 177, 208, 178. рдЪреВрдВрдХрд┐ utf-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рд┐рдВрдЧрд▓-рдмрд╛рдЗрдЯ рд╡рд░реНрдгреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯреНрд╕ рдорд▓реНрдЯреА-рдмрд╛рдЗрдЯ рдХреЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрднреА рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред рдореЗрдВ, рд╣рдорд╛рд░реЗ
abc[208][0] = 0;
ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрд╛рдЗрдЯ рдЬреЛрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдореИрдЪ рд╣реИрдВ:
/* [11] */ abc[208][176] = 11; /* [12] */ abc[208][177] = 12; /* [13] */ abc[208][178] = 13;
2. рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдХреЗ рдмрдХреНрд╕реЛрдВ рдореЗрдВ 11, 12 рдФрд░ 13 рдирдВрдмрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдкреЗрдбрд╝ рдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреИрд░-рд╡рд┐рд╕реНрдлреЛрдЯрдХ рдмреНрд▓реЙрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд▓рд┐рдВрдХ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд▓рд┐рдВрдХ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдХреЗ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдФрд░ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рджреЛ рдХрд╛рдЙрдВрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░реА рдиреЛрдб рдореЗрдВ рд▓рд┐рдВрдХ рдмреНтАНрд▓реЙрдХ рдХреА рдЖрдИрдбреА рдХреЛ рд╕реНтАНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 16 рдмрд╛рдЗрдЯреНрд╕, 12 рдмрд┐рдЯрдореЗрд╕ рдФрд░ 12 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдорд╛рд╕реНрдХ рдЖрдкрдХреЛ 2 рд╕реЗ 96 рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдиреЛрдб рдкрд░ рд╢рдмреНрдж рдХреЗ рдЕрдВрдд рдХреЛ рдлрд╝реНрд▓реИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдХ рдХрд╛ рдкрд╣рд▓рд╛ рдмрд┐рдЯ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рд╕реЗ рдЖрдИрдбреА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо 1 рдкрддреНрд░ рдЗрд╕ рдиреЛрдб рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдирд╣реАрдВ, рддреЛ рдкрддреНрд░ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ "рдкрддреНрддреА" рд╣реИ, рдЕрд░реНрдерд╛рдд, рдПрдХ рд╢рдмреНрдж рдмрд╕ рдЙрд╕ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдПрдХ рдЦрд╛рд▓реА рджрд░рд╛рдЬ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ред
3. рдкрд╣рд▓реЗ (рд░реВрдЯ) рдиреЛрдб рдХрд╛ рдореБрдЦреМрдЯрд╛ рд▓реЗрдВред trie-> рдиреЛрдбреНрд╕ [0]ред mask; рд╣рдо рдЗрд╕ рдореБрдЦреМрдЯрд╛ рдореЗрдВ рдЙрдард╛рдП рдЧрдП рдмрд┐рдЯреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рджреВрд╕рд░реЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ (рд╢рдмреНрдж рдЕрдВрдд рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛)ред рдпрджрд┐ рдореБрдЦреМрдЯрд╛ рдореЗрдВ рдХреЛрдИ рдмрд┐рдЯ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЪреВрдВрдХрд┐ рдиреЛрдб рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдирдВрдмрд░ 11 рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ 1 рдХреЗ рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдВрдХ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рдирдВрдмрд░ рд▓реЗрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдореВрд▓реНрдп рдХреЛ рдПрдХ рд╕реЗ рдмрдврд╝рд╛рдПрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЖрдХрд╛рд░ 1 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рд╣рдо рдиреЛрдб рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдорд╛рди рдХреЛ рднреА 1 рд╕реЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рд░реВрдЯ рдиреЛрдб рдореЗрдВ рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреА рдЖрдИрдбреА рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдФрд░ рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреА рдЗрд╕ рдЖрдИрдбреА рдореЗрдВ, рдирдП рдиреЛрдб рдХреА рдЖрдИрдбреА рд▓рд┐рдЦреЗрдВ, рдпрд╛рдиреА рдиреЛрдб рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ред рдЕрдм, рд░реВрдЯ рдиреЛрдб (рдЖрдИрдбреА 0) рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдП" (рдЖрдИрдбреА 1) рдЕрдХреНрд╖рд░ рдХрд╛ рдиреЛрдб рд╣реИред рдкрддреНрд░ "рдмреА" рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдВрдЦреНрдпрд╛ 12 рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╖рд░ "рдП" рдХреЗ рдиреЛрдб рдХреЗ рд╕рд╛рдеред
4. рдЕрдВрддрд┐рдо рдкрддреНрд░ "c" рдкрд░ рд╣рдореЗрдВ рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдЬрдЧрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢рд╛рдЦрд╛ рдпрд╛ рдиреЛрдб - рд╢реАрдЯ рдкрд░ рдЕрдВрддрд┐рдо рдиреЛрдб рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдиреЛрдб рдореЗрдВ рдЙрдард╛рдП рдЧрдП рдореБрдЦреМрдЯреЗ рдореЗрдВ рдХреЗрд╡рд▓ 1 рдмрд┐рдЯ рд╣реИред
5. рдПрдХ рдкреЗрдбрд╝ рдХреЗ рдХрд╛рдо рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдПрдХ рдиреЛрдб рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдкрддреНрд░ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦреЗ рдЬрд╛ рдЪреБрдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдореЗрдВ "bvg" (12, 13, 14) рд╢рдмреНрдж рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ "abv" (11, 12, 13) рд╢рдмреНрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реБрдЖ рд╣реИред рд╣рдо рд░реВрдЯ рдиреЛрдб рдХреЗ рдорд╛рд╕реНрдХ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдХреЗ рдкрддреНрд░ рдХреЗ рдмрд┐рдЯ рддрдХ рдЧрд┐рдирддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдб 12 рдХреЗ рд╕рд╛рде "b" рдЕрдХреНрд╖рд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдкрддреНрд░ рдХрд╛ рдмрд┐рдЯ 12 рд╣реИ, рдореБрдЦреМрдЯрд╛ рдореЗрдВ 1 рд╕реЗ 12 рдмрд┐рдЯ рдмрд┐рдЯ 11 рд╕реЗ рдкрддреНрд░ "a" рдкрд╣рд▓реЗ рд╣реА рдЙрдард╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реВрдЯ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдЖрдХрд╛рд░ рд╣реИред рд╣рдо рджреВрд╕рд░реЗ рдкрддреНрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдореЗрдВ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╕реЗ рдореБрдХреНрдд рдмреНрд▓реЙрдХ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдЦреЗрд▓ рдореЗрдВ рдЖрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдЖрдИрдбреА рдФрд░ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рдиреЛрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреЗрдбрд╝ред рдЖрдХрд╛рд░ 1 рдХреЗ рд░реВрдЯ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреА рд╣рдорд╛рд░реА рдкреБрд░рд╛рдиреА рдЖрдИрдбреА рд╕рд┐рд░реНрдл рдЖрдХрд╛рд░ 1 рдХреЗ рдореБрдХреНрдд рд╡рд░реНрдЧреЛрдВ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд░реВрдЯ рдиреЛрдб рдХреЛ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдорд╛рд░реА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЖрдХрд╛рд░ 2 рдХрд╛ рдЙрдкрдпреБрдХреНрдд рдЦрдВрдб рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдо рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╡реИрд▓реНрдпреВ рд▓реЗрддреЗ рд╣реИрдВ, рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреА рдирдИ рдЖрдИрдбреА рдХреЗ рд░реВрдк рдореЗрдВред рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдХрд░ 2. рд▓рд┐рдВрдХ рдмреНрд▓реЙрдХ рдХреЗ рдирдП рдкрддреЗ рдкрд░ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рдмрд┐рдЯреНрд╕ рдиреЛрдб рдорд╛рд╕реНрдХ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рд╣рдо рдЖрдИрдбреА рд╡реИрд▓реНрдпреВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд╢рдмреНрдж рдХреЗ рдЕрдХреНрд╖рд░ "a" рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХреЗ рдкреБрд░рд╛рдиреЗ рдмреНрд▓реЙрдХ рд╕реЗ рдиреЛрдб рдФрд░ рджреВрд╕рд░реЗ рд╢рдмреНрдж рдХреЗ рдЕрдХреНрд╖рд░ "b" рдХреЗ рд╕рд┐рд░реНрдл рдмрдирд╛рдП рдЧрдП рдиреЛрдб рдХреЗ рдореВрд▓реНрдпред

рдХрд╛рдо рдХреА рдЧрддрд┐
рдбреНрд░рдо рд░реЛрд▓ рд▓рдЧрддрд╛ рд╣реИ ... рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдпрд╛рдж рд╣реИ? рд▓рдЧрднрдЧ 80 рд╣рдЬрд╛рд░ рд╢рдмреНрдж рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдбред рдкреЗрдбрд╝ рдХреЛ рд╕рднреА рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ OpenCorpora 3 039 982 рд╢рдмреНрджред рдФрд░ рдпрд╣рд╛рдБ рдЕрдм рдХреНрдпрд╛ рд╣реБрдЖ:
yatrie creation time: 4.588216s (666k wps) yatrie search time 1 mln. rounds: 0.565618s (1.76m wps)
UPDATE 11/01/2018:рд╕рдВрд╕реНрдХрд░рдг 0.0.2 рдореЗрдВ, рдореИрдХреНрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рдЧрддрд┐ рдХреЛ рд▓рдЧрднрдЧ 2 рдЧреБрдирд╛ рдмрдврд╝рд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд╕рд╛рде рд╣реА рдиреЛрдб рдорд╛рд╕реНрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ uint32_t рдорд╛рд╕реНрдХ [3] рдореЗрдВ рдмрджрд▓рдирд╛, рдкрд╣рд▓реЗ рдпрд╣ uint8-t рдорд╛рд╕реНрдХ [12] рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдХреНрд░реЛ LIKELY () UNLIKELY () рдХреЛ рдЙрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВред
рдЕрджреНрдпрддрди 11/05/2018:рдереЛрдбрд╝рд╛ рдФрд░ рдореБрдбрд╝ рдЧрдпрд╛ред рдореИрдВ рд╕рдВрдХрд▓рди -O3 рдФрд░ -Ofast рд╣реЛрдиреЗ рдкрд░ рднреА рдЗрд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдкреЗрдбрд╝ рдореЗрдВ рдЦреЛрдЬ рдХреА рдЧрддрд┐ ~ 0.2 ╬╝s рдпрд╛ 0.2c рдкреНрд░рддрд┐ 1 рдорд┐рд▓рд┐рдпрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдпрд╣ рдЧрддрд┐ рдорд╛рд╕реНрдХ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рдХрд╛рд░рдг рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рдереАред рдкрд╣рд▓реЗ, 8 рдмрд┐рдЯреНрд╕ рдХреЗ 12 рдмрд╛рдЗрдЯреНрд╕ рдереЗ, рдФрд░ рдЕрдм рдЗрдВрдЯ рдЗрдВрдЯ 32 рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП 3 рдЗрдВрдЯ 32 рдФрд░ рдПрдХ рдмрд╣реБрдд рддреЗрдЬ рдлрд╝рдВрдХреНрд╢рди рд╣реИред
рдпрд╣ рдХрд┐рддрдирд╛ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ?
рдирд┐рд░реНрджрд┐рд╖реНрдЯ OpenCorpora рд╢рдмреНрджрдХреЛрд╢ ~ 84MB рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рд▓рд┐рдмрдбрд╛рдЯреНрд░реА рд╕реЗ рдмрд╣реБрдд рдмрджрддрд░ рдирд╣реАрдВ рд╣реИ, рдЬреЛ ~ 80MB рджреЗрддрд╛ рд╣реИред
тЖТ
рд╕реЛрд░реНрд╕ рдХреЛрдбрдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!