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

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

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рдорд╛рдиреВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рд╕реА ++ рдФрд░ рдПрд╕рдЯреАрдПрд▓ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЙрдирдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрд╛ рднреА рдзреНрдпрд╛рди рд░рдЦрддреЗ рд╣реИрдВред

рдПрд▓реНрдЧреЛрд░рд┐рджрдо


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

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

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

рд╕реЗрдЯ рдХрд╛ рдЕрдВрддрд░


рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреВрд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╕рднреА рд▓реИрдВрдмрдбрд╛рд╕ рдХреЛ рд╕рднреА рдбрд┐рдлреЙрд▓реНрдЯ рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ ([=] рдФрд░ [рдФрд░]] рдХреЗ рдХреИрдкреНрдЪрд░ рдХреЗ рд╕рд╛рде рдХреЛрдб рдореЗрдВ рдкрд╛рдПрдВрдЧреЗ рдФрд░ рд▓реИрдВрдмрдбрд╛рд╕ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

std::partition(begin(elements), end(elements), [=] (auto element) { //^~~ -     ,   [threshold] return element > threshold; }); 

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

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

  • рдпрджрд┐ рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рджреВрд╕рд░реЗ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рдХреЗ рд╕рдорд╛рди рд╣реИ - рдЗрд╕реЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрди рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЕрдЧрд▓реЗ рдЖрдЗрдЯрдо рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВ
  • рдпрджрд┐ рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рджреВрд╕рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЕрдЧрд▓реЗ рдЖрдЗрдЯрдо рдкрд░ рдЬрд╛рдПрдВ
  • рдпрджрд┐ рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рджреВрд╕рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдо рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЕрдЧрд▓реЗ рдЖрдЗрдЯрдо рдкрд░ рдЬрд╛рдПрдВ



рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рд╕рд╛рде, рд╣рдо рдкрд╣рд▓реЗ, рджреВрд╕рд░реЗ рдпрд╛ рджреЛрдиреЛрдВ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд░реИрдЦрд┐рдХ рд╣реЛрдЧреА - O (m + n), рдЬрд╣рд╛рдВ n рдФрд░ m рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЖрдХрд╛рд░ рд╣реИрдВред

рд╕рд░рд▓ рдФрд░ рдкреНрд░рднрд╛рд╡реАред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЕрдм рддрдХ рдХреЗ рдЗрдирдкреБрдЯ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЫрдВрдЯрд╛рдИ


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

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

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЫрдВрдЯрдиреА рдЙрдирдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреВрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдорд╛рд░ рджреЗрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рд╕рдВрднрд╡ рд╣реИ:

 template <typename InputIt1, typename InputIt2, typename OutputIt> auto unordered_intersection_1(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt dest) { std::sort(first1, last1); std::sort(first2, last2); return std::set_intersection(first1, last1, first2, last2, dest); } 

рдкрд░рд┐рдгрд╛рдореА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреНрдпрд╛ рд╣реИ? O (n log n + m log m + n + m) рдХреА рддрд░рд╣ рдХреБрдЫ рдХреНрд╡реИрд╕рд┐рд▓рд┐рдирд┐рдпрд░ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред

рдХрдо рдЫрдБрдЯрд╛рдИ


рдХреНрдпрд╛ рд╣рдо рдЫрдВрдЯрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВ рдирд╣реАрдВред рд╣рдо рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рджреВрд╕рд░реЗ, рд░реИрдЦрд┐рдХ рдЦреЛрдЬ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдУ (n * m) рдорд┐рд▓рддреА рд╣реИред рдФрд░ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХрд╛рдлреА рдмрд╛рд░ рджреЗрдЦрд╛ред

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

рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЫрд╛рдВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдУ (рдПрди рд▓реЙрдЧ рдПрди) рдФрд░ рдЦреЛрдЬ рдФрд░ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдУ (рдПрдо рд▓реЙрдЧ рдПрди) рд╣реЛрдЧреАред рдХреБрд▓ рдореЗрдВ, рд╣рдо рдЬрдЯрд┐рд▓рддрд╛ рдУ ((рдПрди + рдПрдо) рд▓реЙрдЧ рдПрди) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ O ((n + m) log m) рдорд┐рд▓рддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдЬрдЯрд┐рд▓рддрд╛ рдУ ((рдПрдо + рдПрди) рд▓реЙрдЧ (рдорд┐рдирдЯ (рдПрдо, рдПрди)) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 template <typename InputIt1, typename InputIt2, typename OutputIt> auto unordered_intersection_2(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt dest) { const auto size1 = std::distance(first1, last1); const auto size2 = std::distance(first2, last2); if (size1 > size2) { unordered_intersection_2(first2, last2, first1, last1, dest); return; } std::sort(first1, last1); return std::copy_if(first2, last2, dest, [&] (auto&& value) { return std::binary_search(first1, last1, FWD(value)); }); } 

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

рд╣реИрд╢рд┐рдВрдЧ


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

 template <typename InputIt1, typename InputIt2, typename OutputIt> void unordered_intersection_3(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt dest) { const auto size1 = std::distance(first1, last1); const auto size2 = std::distance(first2, last2); if (size1 > size2) { unordered_intersection_3(first2, last2, first1, last1, dest); return; } std::unordered_set<int> test_set(first1, last1); return std::copy_if(first2, last2, dest, [&] (auto&& value) { return test_set.count(FWD(value)); }); } 

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

рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг


рдЕрднреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣реИрд╢рд┐рдВрдЧ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓рд╛рдЧрдд рдЦреЛрдЬ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд▓рд╛рдн рдХреЗ рд╕рд╛рде рднреБрдЧрддрд╛рди рдХрд░реЗрдЧреА)ред

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

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


All Articles