рд╕реЙрд░реНрдЯрд┐рдВрдЧ ... рдПрдХ рд╣реИрд╢ рдЯреЗрдмрд▓ (рдПрдХ рдЯреНрд░реА рдХрд╛рдЙрдВрдЯ рдФрд░ рдПрдХ рд╣реИрд╢рдкреЙрдк рджреНрд╡рд╛рд░рд╛ рднреА)

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

рддреАрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреА рдЫрдВрдЯрд╛рдИ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реЛрддреА рд╣реИ рдЬрдм рд╕рд░рдгреА рдореЗрдВ рдХрдИ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡реЛрдВ рдХреА рд╢рдХреНрддрд┐ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╣реЛрддреА рд╣реИ (рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ)ред

рдЯреНрд░реА рдХрд╛рдЙрдВрдЯ рд╕реЙрд░реНрдЯ


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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдм рдХреБрдЫ рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рд╣рдо рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝реА рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдкреЗрдбрд╝ рдореЗрдВ рдЬреЛрдбрд╝реА рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ (рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдХреБрдВрдЬреА рдмрджрд▓рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо рдирдВрдмрд░ рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдПрдХ рдореИрдЪ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдпрджрд┐ рдРрд╕реА рдХреБрдВрдЬреА рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдорд╛рддреНрд░рд╛ рдмрдврд╝рд╛рдПрдВ, рдЕрдиреНрдпрдерд╛ рдПрдХ рдирдИ рдЬреЛрдбрд╝реА (рдХреБрдВрдЬреА, 1) рдЬреЛрдбрд╝реЗрдВред

рд╣рдо рд╕рд░рдгреА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╣рд░ рдмрд╛рд░ рд╢реАрд░реНрд╖ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдВрдЬреА рдХреЛ рдЙрд╕рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдмрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдкреЗрдбрд╝ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЯреНрд░реАрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдПрдХ рдХрд╛рд▓реЗ-рд▓рд╛рд▓ рдкреЗрдбрд╝ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

HashMap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рд╣рдо рд╕рд░рдгреА рддрддреНрд╡ рдХреЛ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХреБрдВрдЬреА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрд╣рд░рд╛рд╡ рдХреА рд╕рдВрдЦреНрдпрд╛ред

рдореЗрд░реА рдЕрдкрдиреА рд╣реИрд╢ рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


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

рдЯрдХрд░рд╛рд╡


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЯрдХрд░рд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╣реИрд╢ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд╕рдордп рдФрд░ рд╣реИрд╢ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд░рдгреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдЧрддрд┐ (рдЖрджреЗрд╢рд┐рдд рдпрд╛ рд▓рдЧрднрдЧ рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рддреЗрдЬреА рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ) рдХреА рдЧрддрд┐ рдХреЛ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдПрдХ рдмрд╛рдд рд╣реИ: рдЯреЗрдмрд▓ рдХреЗ рдлреИрд▓рддреЗ рд╣реА рд╣рдорд╛рд░рд╛ рд╣реИрд╢ ff рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдРрд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЛрдб рдлреИрдХреНрдЯрд░ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдЧреБрдгрд╛рдВрдХ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ (рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЯрдХрд░рд╛рд╡ рдХреЛ рдЬрдиреНрдо рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреВрд░реНрд╡-рдЪрдпрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рдЯрдХрд░рд╛рд╡ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗ, рддреЛ рд░реА-рд╣реИрд╢ рдХреЗ рдмрд╛рдж, рдЯрдХрд░рд╛рд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИ (рдХрдИ рдмрд╛рд░)ред рдХрдордЬреЛрд░ рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рднрд╛рдЬреНрдп рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рд╣реИрдВ (2 ^ 31 рддрдХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ 11 рд╣реИрдВ (0 рдХреЛ рдЫреЛрдбрд╝рдХрд░))ред

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

рдХрд╛рдо рдХрд╛ рд╕рдордп


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

рд╕реНрдореГрддрд┐ рд╕реЗ рдХреНрдпрд╛?


рдЯреНрд░реА-рдХрд╛рдЙрдВрдЯ рдЫрдБрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП O (рдЕрд▓рдЧ) (n) рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╣реЗрд╢ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдУ (рдЕрд▓рдЧ (рдПрди)) рдореЗрдореЛрд░реА + рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЪрдпрдирд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред

рдпрд╣рд╛рдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ рдХрд┐ рдореИрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд┐рд▓рд╛ рдЬрдм рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ 10 рдорд┐рд▓рд┐рдпрди elts рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ [0; x]:

рдкрд░реАрдХреНрд╖рдг рдкрд░, рдореЗрд░реА рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓реЛрдб рдХрд╛рд░рдХ = 0.75, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрд╖рдорддрд╛ = 20, рддрд╛рд▓рд┐рдХрд╛ рд╣рд░ рдмрд╛рд░ рджреЛрдЧреБрдиреА рд╣реЛ рдЬрд╛рддреА рд╣реИ

X = 10 рдХреЗ рд▓рд┐рдП:
2044 - рдПрдХреАрдХреГрдд
285 - рдЯреНрд░реА рдХрд╛рдЙрдВрдЯ (рдЙрд╕рдЯреЛрд╡ рд╕реЙрд░реНрдЯ)
276 - рд╣реИрд╢рдкреЙрдк (рдЙрд╕рд╛рддреЛрд╡-рдкреНрд░реЛрдХреЛрд░рдЯ рд╕реЙрд░реНрдЯ)
140 - рдореЗрд░реА рд╣реИрд╢ рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде (Usatov-Prokurat myHashTable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)

x = 100:
2406 - рдмрд┐рд▓реНрдЯ-рдЗрди
455 - рдЧрд┐рдирддреА рдХреЗ рдкреЗрдбрд╝
283 - рд╣реИрд╢рдкреЙрдк
134 - рд╣реИрд╢ рдЯреЗрдмрд▓

x = 1_000:
2171 - рдПрдХреАрдХреГрдд
930 - рдЧрд┐рдирддреА рдХреЗ рдкреЗрдбрд╝
380 - рд╣реИрд╢рдкреЙрдк
209 - рд╣реИрд╢ рдЯреЗрдмрд▓

x = 10_000
2879 - рдПрдХреАрдХреГрдд
1666 - рдкреЗрдбрд╝ рдХреА рдЧрд┐рдирддреА
634 - рд╣реИрд╢рдкреЙрдк
326 - рд╣реИрд╢ рдЯреЗрдмрд▓

x = 100_000
4045 - рдПрдХреАрдХреГрдд
2899 - рдкреЗрдбрд╝ рдХреА рдЧрд┐рдирддреА
866 - рд╣реИрд╢рдкреЙрдк
762 - рд╣реИрд╢ рдЯреЗрдмрд▓

x = 1_000_000
4997 - рдПрдХреАрдХреГрдд
5762 - рдЧрд┐рдирддреА рдХреЗ рдкреЗрдбрд╝
2505- рд╣реИрд╢рдкреЙрдк
1294 - рд╣реИрд╢ рдЯреЗрдмрд▓

x = 10_000_000
5083 - рдПрдХреАрдХреГрдд
11480 - рдкреЗрдбрд╝ рдХреА рдЧрд┐рдирддреА
5099 - рд╣реИрд╢рдкреЙрдк
3240 - рд╣реИрд╢ рдЯреЗрдмрд▓

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╣рд╛, рдпреЗ рдЫрд╛рдВрдЯреЗрдВ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ рдЬрдм рд╕рд░рдгреА рдХреЗ рдХрдИ рддрддреНрд╡реЛрдВ рдХреА рд╢рдХреНрддрд┐ рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЫреЛрдЯреА рд╣реЛрддреА рд╣реИред

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

рдЯреНрд░реА рдЧрдгрдирд╛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ:

static void usatovSort(Integer[] arr) { TreeSet<MyPair> tree = new TreeSet<>(); MyPair temp; MyPair mp = new MyPair(); for (int i : arr) { temp = mp; temp.first = i; temp = tree.ceiling(temp); if (temp != null && temp.first == i) //   , .    ,      temp.second++; else tree.add(new MyPair(i, 1)); } int ptr = 0; while (!tree.isEmpty()) { temp = tree.pollFirst(); for (int i = 0; i < temp.second; i++) arr[ptr++] = temp.first; } } 

HashMap рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ:

  static void usatovProkuratSortUsingHashMap(Integer[] arr) { HashMap<Integer, Integer> hm = new HashMap<>(); Integer temp; for (Integer i : arr) { temp = hm.get(i); if (temp == null) hm.put(i, 1); else hm.put(i, temp + 1); } ArrayList<Integer> keys = new ArrayList<>(hm.keySet().size()); keys.addAll(hm.keySet()); keys.sort(Comparator.naturalOrder()); int ptr = 0; for (Integer i : keys) for (int j = 0; j < hm.get(i); j++) arr[ptr++] = i; } 

рдореЗрд░реА рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдорд┐рдд рдХрд░реЗрдВ:

  static void usatovProkuratSortUsingMyHashTable(Integer[] arr) { MyHashTable mht = new MyHashTable(); for (Integer i : arr) mht.add(i); MyPair[] res = mht.getPairs(); int ptr = 0; Arrays.sort(res, Comparator.comparingInt(o -> o.first)); for (MyPair mp : res) for (int i = 0; i < mp.second; i++) arr[ptr++] = mp.first; } 

рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

 public class MyHashTable { private MyPair[] hashArr; private double count = 0; private double loadFactor = 0.5; private double expansivity = 2; private static final int DEFAULT_CAPACITY = 20; public MyHashTable() { hashArr = new MyPair[DEFAULT_CAPACITY]; } public MyHashTable(double loadFactor) { hashArr = new MyPair[DEFAULT_CAPACITY]; this.loadFactor = loadFactor; } public MyHashTable(int capacity) { hashArr = new MyPair[capacity]; } public MyHashTable(int capacity, double loadFactor) { hashArr = new MyPair[capacity]; this.loadFactor = loadFactor; } public MyHashTable(int capacity, double loadFactor, double expansivity) { hashArr = new MyPair[capacity]; this.loadFactor = loadFactor; this.expansivity = expansivity; } public MyPair[] getPairs() { MyPair[] pairs = new MyPair[(int) count]; int ptr = 0; for (MyPair i : hashArr) if (i != null) pairs[ptr++] = i; return pairs; } public MyPair get(int key) { int add = 0; while (true) if (hashArr[(key + add) % hashArr.length].first == key) { return hashArr[(key + add) % hashArr.length]; } else if (add++ == hashArr.length) return null; } public void add(int key) { if (count / hashArr.length >= loadFactor) grow(); int add = 0; while (true) { if (hashArr[(key + add) % hashArr.length] == null) { hashArr[(key + add) % hashArr.length] = new MyPair(key, 1); count++; return; } if (hashArr[(key + add) % hashArr.length].first == key) { hashArr[(key + add) % hashArr.length].second++; return; } add++; } } public void add(MyPair newMP) { if (count / hashArr.length >= loadFactor) grow(); int add = 0; while (true) { if (hashArr[(newMP.first + add) % hashArr.length] == null) { hashArr[(newMP.first + add) % hashArr.length] = newMP; count++; return; } if (hashArr[(newMP.first + add) % hashArr.length].first == newMP.first) { hashArr[(newMP.first + add) % hashArr.length].second += newMP.second; return; } add++; } } private void grow() { MyPair[] oldHash = hashArr; hashArr = new MyPair[(int) (expansivity * hashArr.length)]; for (MyPair i : oldHash) if (i != null) innerAdd(i); } private void innerAdd(MyPair mp) { int add = 0; while (true) { if (hashArr[(mp.first + add) % hashArr.length] == null) { hashArr[(mp.first + add) % hashArr.length] = mp; return; } if (hashArr[(mp.first + add) % hashArr.length].first == mp.first) { hashArr[(mp.first + add) % hashArr.length].second += mp.second; return; } add++; } } } 

рд╕реНрдЯреАрдо рдХреНрд▓рд╛рд╕:

 public class MyPair implements Comparable<MyPair> { public int first; public int second; public MyPair() { } public MyPair(int first, int second) { this.first = first; this.second = second; } @Override public int compareTo(MyPair o) { return first - o.first; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MyPair myPair = (MyPair) o; return first == myPair.first; } @Override public int hashCode() { return first; } } 

Source: https://habr.com/ru/post/hi418355/


All Articles