рд╣реИрд╢-рд╕реЗрдЯ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ (рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реЗрдЯ) рдПрдХ рдРрд╕реА рджреБрд░реНрд▓рдн рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рд╕рднреА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИред .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 3.5 рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣реИрд╢-рд╕реЗрдЯ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрдм рдпрд╣ рд╣реИрд╢-рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реЗрдЯ рдХреНрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬрд┐рд╕рдХреЗ рддрддреНрд╡ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдФрд░ рдЕрдиреЛрдЦреЗ рд╣реИрдВ (рдпрд╛рдиреА рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ)ред рд╕реЗрдЯ рдореВрд▓ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
- рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВред
- рдЖрдЗрдЯрдо рд╣рдЯрд╛рдПрдВред
- рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЖрдЗрдЯрдо рдореМрдЬреВрдж рд╣реИред
- рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдУред
рд╕реЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХ рд╕рд░рдгреА, рд╕реВрдЪреА, рдкреЗрдбрд╝, рд╣реИрд╢ рдЯреЗрдмрд▓, рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рджреЗрддрд╛ рд╣реИред
рдЕрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЯреИрдЧ рдХреА рд╕реВрдЪреА рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдореВрд╣рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рдЯреИрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП - рдЕрд░реНрдерд╛рдд, рд╡реЗ рдЯреИрдЧ рдЬрд┐рдиреНрд╣реЗрдВ рддреБрд▓рдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреИрдЧ, рдЫреЛрдЯреЗ рддрд╛рд░ (рдЕрдзрд┐рдХрддрд░ рд╢рдмреНрдж) рд╣реИрдВред рдпрд╣ рднреА рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЕрдирджреЗрдЦреА рд╕реВрдЪреА рдореЗрдВ рд▓рдЧрднрдЧ 100 рдЯреИрдЧ рд╣реИрдВред
рд░реВрдмреА рдореЗрдВ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
def group_elements(elements, ignore_list) groups = [] for element in elements assigned = false for group in groups
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рдореВрд╣ :: рд╕реНрд╡реАрдХрд╛рд░ () рдкрджреНрдзрддрд┐ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ:
class Group ... def accept(element, ignore_list) for my_element in @elements if my_element.match(element) @elements << element return true end end return false end ... end
рдФрд░ рдЕрдВрдд рдореЗрдВ, рддрддреНрд╡ :: рдореИрдЪ () рд╡рд┐рдзрд┐:
class Element ... def match(element, ignore_list)
рдпрд╣рд╛рдВ рдПрдХ рдорд╛рдереЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЬрд╣рд╛рдВ рджреЛрдиреЛрдВ рдЯреИрдЧ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдирджреЗрдЦреА рд╕реВрдЪреА рдирд┐рдпрдорд┐рдд рдЧрддрд┐рд╢реАрд▓ рд╕рд░рдгрд┐рдпрд╛рдВ рд╣реИрдВред рд╡рд╣ рд╣реИ, ign_list.include рдСрдкрд░реЗрд╢рди? рд░реИрдЦрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЯреИрдЧ 5-10 рд╡рд░реНрдгреЛрдВ рдХреА рдФрд╕рдд рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рддрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдореЗрдВ рд░реИрдЦрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╕рдореВрд╣рди рдореЗрдВ O (n
2 ) рдЬрдЯрд┐рд▓рддрд╛ рд╣реИ, рдмреБрдирд┐рдпрд╛рджреА рддреБрд▓рдирд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред
рд╣реИрд╢-рд╕реЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдирджреЗрдЦреА рд╕реВрдЪреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рджреЛ рдЧрдВрднреАрд░ рдлрд╛рдпрджреЗ рдорд┐рд▓рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕реВрдЪреА рдореЗрдВ рд░реИрдЦрд┐рдХ рдЦреЛрдЬ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрдВрдЧреЗ, рдЗрд╕реЗ рд╣реИрд╢ рдХреБрдВрдЬреА рдЦреЛрдЬ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рддреЗ рд╣реИрдВред рд╡рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ - рд░реВрдмреА рдореЗрдВ рдХреЛрдИ рд╣реИрд╢-рд╕реЗрдЯ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣реИрд╢-рд╕реЗрдЯ рдПрдХ рдирд┐рдпрдорд┐рдд рд╣реИрд╢-рдЯреЗрдмрд▓ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдк рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рд╕рдВрднрд╡ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдпрд╣ рдЕрдЬреАрдм рдЪрд╛рд▓, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NHibernate рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред
рдореИрдВрдиреЗ реирежрежреж-рейрежрежреж рдХреЗ рдХреНрд░рдо рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рд░реВрдмреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдХреА, реи-резрел UTF-UT рд╡рд░реНрдгреЛрдВ рдХреЗ рдЯреИрдЧ рдЖрдХрд╛рд░ рдФрд░ рдкреНрд░рддрд┐ рддрддреНрд╡ рдЯреИрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛, рдФрд╕рддрди рел. рд╣реИрд╢-рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ резреж рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рджрд┐рдпрд╛ рд╕рдордпред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣реИрд╢-рд╕реЗрдЯ рдЖрдкрдХреЛ рд╕реЗрдЯ - рдЪреМрд░рд╛рд╣реЗ, рд╕рдВрдШ рдФрд░ рдШрдЯрд╛рд╡ рдкрд░ рдЕрдзрд┐рдХ рдЖрд╢рд╛рд╡рд╛рджреА рд╕рдВрдЪрд╛рд▓рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХреЗ рдЕрддрд┐рд░реЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред рд╣реИрд╢-рд╕реЗрдЯ рдЕрдкрдиреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдордзреНрдпрдо-рдЖрдХрд╛рд░ рдХреЗ рд╕реЗрдЯ (100-10000 рддрддреНрд╡реЛрдВ) рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рддреЗрдЬреА рд╕реЗ рдЧрдгрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдмрд░реНрдмрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрдбрд╝реЗ рд╕реЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреЗрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред