2025-11-23T17:52:17.430896

Building a Balanced k-d Tree in O(kn log n) Time

Brown
The original description of the k-d tree recognized that rebalancing techniques, such as are used to build an AVL tree or a red-black tree, are not applicable to a k-d tree. Hence, in order to build a balanced k-d tree, it is necessary to find the median of the data for each recursive subdivision of those data. The sort or selection that is used to find the median for each subdivision strongly influences the computational complexity of building a k-d tree. This paper discusses an alternative algorithm that builds a balanced k-d tree by presorting the data in each of k dimensions prior to building the tree. It then preserves the order of these k sorts during tree construction and thereby avoids the requirement for any further sorting. Moreover, this algorithm is amenable to parallel execution via multiple threads. Compared to an algorithm that finds the median for each recursive subdivision, this presorting algorithm has equivalent performance for four dimensions and better performance for three or fewer dimensions.
academic

O(kn log n) рд╕рдордп рдореЗрдВ рд╕рдВрддреБрд▓рд┐рдд k-d Tree рдХрд╛ рдирд┐рд░реНрдорд╛рдг

рдореВрд▓ рдЬрд╛рдирдХрд╛рд░реА

  • рдкреЗрдкрд░ ID: 1410.5420
  • рд╢реАрд░реНрд╖рдХ: Building a Balanced k-d Tree in O(kn log n) Time
  • рд▓реЗрдЦрдХ: Russell A. Brown
  • рд╡рд░реНрдЧреАрдХрд░рдг: cs.DS (рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо)
  • рдкреНрд░рдХрд╛рд╢рди рд╕рдордп: 2014 рдЕрдХреНрдЯреВрдмрд░ (arXiv рдкреНрд░реАрдкреНрд░рд┐рдВрдЯ, рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 2025 рдЕрдХреНрдЯреВрдмрд░)
  • рдкреЗрдкрд░ рд▓рд┐рдВрдХ: https://arxiv.org/abs/1410.5420

рд╕рд╛рд░рд╛рдВрд╢

k-d tree рдХреЗ рдореВрд▓ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ AVL tree рдпрд╛ red-black tree рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреБрдирдГ рд╕рдВрддреБрд▓рди рддрдХрдиреАрдХреЗрдВ k-d tree рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕рдВрддреБрд▓рд┐рдд k-d tree рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдорд╛рдзреНрдпрд┐рдХрд╛ рдЦреЛрдЬрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдорд╛рдзреНрдпрд┐рдХрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдпрд╛ рдЪрдпрди рддрдХрдиреАрдХ k-d tree рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред рдпрд╣ рдкреЗрдкрд░ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ tree рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ k рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯ рдХрд░рдХреЗ рд╕рдВрддреБрд▓рд┐рдд k-d tree рдмрдирд╛рддрд╛ рд╣реИред рдлрд┐рд░ tree рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЗрди k рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рдХреНрд░рдореЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдЧреЗ рдХреА рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдорд╛рдзреНрдпрд┐рдХрд╛ рдЦреЛрдЬрдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣ рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪрд╛рд░ рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рд░рдЦрддрд╛ рд╣реИ рдФрд░ рддреАрди рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред

рдЕрдиреБрд╕рдВрдзрд╛рди рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рдкреНрд░реЗрд░рдгрд╛

рд╕рдорд╕реНрдпрд╛ рдХреА рдкреГрд╖реНрдарднреВрдорд┐

  1. k-d tree рдХрд╛ рдорд╣рддреНрд╡: k-d tree Bentley рджреНрд╡рд╛рд░рд╛ 1975 рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ k-рдЖрдпрд╛рдореА рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБ-рдЖрдпрд╛рдореА рдЦреЛрдЬ, рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕реА рдЦреЛрдЬ, рд╢реНрд░реЗрдгреА рдХреНрд╡реЗрд░реА рдЖрджрд┐ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
  2. рд╕рдВрддреБрд▓рди рд╕рдорд╕реНрдпрд╛ рдХреА рдЪреБрдиреМрддреА: рдорд╛рдирдХ рдмрд╛рдЗрдирд░реА tree рдХреЗ рд╡рд┐рдкрд░реАрдд, k-d tree рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдкрд░ рд╡рд┐рднрд┐рдиреНрди key рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреБрдирдГ рд╕рдВрддреБрд▓рди рддрдХрдиреАрдХреЗрдВ (рдЬреИрд╕реЗ AVL tree рдпрд╛ red-black tree рдХреЗ рдШреВрд░реНрдгрди рд╕рдВрдЪрд╛рд▓рди) k-d tree рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред
  3. рдореМрдЬреВрджрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕реАрдорд╛рдПрдВ:
    • рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рд┐рднрд╛рдЬрди рдкрд░ рдорд╛рдзреНрдпрд┐рдХрд╛ рдЦреЛрдЬрдиреА рдкрдбрд╝рддреА рд╣реИ
    • Quicksort рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдзреНрдпрд┐рдХрд╛ рдЦреЛрдЬрдирд╛: рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╕реНрдерд┐рддрд┐ O(n), рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ O(n┬▓)
    • Merge sort рдпрд╛ Heap sort рдХрд╛ рдЙрдкрдпреЛрдЧ: O(n log n) рдХреА рдЧрд╛рд░рдВрдЯреА, рд▓реЗрдХрд┐рди рдХреБрд▓ рдЬрдЯрд┐рд▓рддрд╛ O(n log┬▓ n) рд╣реЛ рдЬрд╛рддреА рд╣реИ
    • Blum рдЖрджрд┐ рдХрд╛ O(n) рдорд╛рдзреНрдпрд┐рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрдЯрд┐рд▓ рд╣реИ

рдЕрдиреБрд╕рдВрдзрд╛рди рдкреНрд░реЗрд░рдгрд╛

рдЗрд╕ рдкреЗрдкрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп:

  1. Tree рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдмрдЪрдирд╛
  2. рдмреЗрд╣рддрд░ц╕Рш┐С рдЬрдЯрд┐рд▓рддрд╛ O(kn log n) рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
  3. рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдбрд┐рдЬрд╝рд╛рдЗрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛
  4. рдХрдо рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рдореБрдЦреНрдп рдпреЛрдЧрджрд╛рди

  1. O(kn log n) рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ k-d tree рдирд┐рд░реНрдорд╛рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛: рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ
  2. рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреНрд░рдо рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рд╡рд┐рднрд╛рдЬрди рд░рдгрдиреАрддрд┐ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА: Tree рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ k рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП arrays рдХреА рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ
  3. рдХреБрд╢рд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдг рдпреЛрдЬрдирд╛ рд▓рд╛рдЧреВ рдХреА: рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ
  4. рд╡реНрдпрд╛рдкрдХ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛: рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рджреЛрдиреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
  5. рдХрдИ рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХреЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХреА: рдЫрд╣ рдЕрдиреБрдХреВрд▓рди рд░рдгрдиреАрддрд┐рдпреЛрдВ рд╕рд╣рд┐рдд, рдЬрд┐рдирдореЗрдВ рд╕реБрдкрд░рдХреА рддреБрд▓рдирд╛ рдЕрдиреБрдХреВрд▓рди, рд╡рд┐рд▓рдВрдмрд┐рдд рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд╡рд┐рднрд╛рдЬрди рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ

рд╡рд┐рдзрд┐ рд╡рд┐рд╡рд░рдг

рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд╛

рдЗрдирдкреБрдЯ: n k-рдЖрдпрд╛рдореА рдбреЗрдЯрд╛ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╕рдореВрд╣ рдЖрдЙрдЯрдкреБрдЯ: рд╕рдВрддреБрд▓рд┐рдд k-d tree, рдЬреЛ рдХреБрд╢рд▓ рдмрд╣реБ-рдЖрдпрд╛рдореА рдЦреЛрдЬ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдмрд╛рдзрд╛рдПрдВ: Tree рдХреА рд╕рдВрддреБрд▓рд┐рддрддрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдмрдЪрдирд╛

рдореБрдЦреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

1. рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдЪрд░рдг

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ k рдмрд╛рд░ merge sort рдХрд░рддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ рд╕реБрдкрд░рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:

  • x:y:z (x рд╕рд░реНрд╡реЛрдЪреНрдЪ рд╣реИ, y рдордзреНрдп рд╣реИ, z рд╕рдмрд╕реЗ рдХрдо рд╣реИ)
  • y:z:x (y рд╕рд░реНрд╡реЛрдЪреНрдЪ рд╣реИ, z рдордзреНрдп рд╣реИ, x рд╕рдмрд╕реЗ рдХрдо рд╣реИ)
  • zтЭМy (z рд╕рд░реНрд╡реЛрдЪреНрдЪ рд╣реИ, x рдордзреНрдп рд╣реИ, y рд╕рдмрд╕реЗ рдХрдо рд╣реИ)

рд╕реБрдкрд░рдХреА рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдорд╣рддреНрд╡:

  • рди рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдорд╛рдзреНрдпрдорд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХреЛрдВ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рди tuples рдкреНрд░рддреНрдпреЗрдХ index array рдореЗрдВ рд╕рдиреНрдирд┐рд╣рд┐рдд рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ
  • рдбреБрдкреНрд▓рд┐рдХреЗрдЯ tuples рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ

2. Tree рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рд╡рд╛рд╣:
1. рд╡рд░реНрддрдорд╛рди рдЖрдпрд╛рдо рдХреЗ index array рдХреА рдорд╛рдзреНрдпрд┐рдХрд╛ рддрддреНрд╡ рдХреЛ рд╡рд┐рднрд╛рдЬрди рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдиреЗрдВ
2. рдЕрдиреНрдп рдЖрдпрд╛рдореЛрдВ рдХреЗ index arrays рдХреЛ рдЗрд╕ рд╡рд┐рднрд╛рдЬрди рдмрд┐рдВрджреБ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ
3. рд╡рд┐рднрд╛рдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ array рдХреЗ рднреАрддрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреНрд░рдо рдХреЛ рдмрдирд╛рдП рд░рдЦрддреА рд╣реИ
4. рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ sub-arrays рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдЖрдпрд╛рдореЛрдВ рдХрд╛ рдЪрдХреНрд░реАрдп рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

3. рд╡рд┐рднрд╛рдЬрди рд░рдгрдиреАрддрд┐

рдкреНрд░рддреНрдпреЗрдХ рдЧреИрд░-рд╡рд░реНрддрдорд╛рди рдЖрдпрд╛рдо рдХреЗ index array рдХреЗ рд▓рд┐рдП:

  • Array рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ traverse рдХрд░реЗрдВ
  • рдЗрд╕рдХреА рд╕реБрдкрд░рдХреА рдХреА рдорд╛рдзреНрдпрд┐рдХрд╛ рдХреА рд╕реБрдкрд░рдХреА рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВ
  • рддреБрд▓рдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдмрд╛рдПрдВ рдЖрдзреЗ рдпрд╛ рджрд╛рдПрдВ рдЖрдзреЗ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ
  • рдорд╛рдзреНрдпрд┐рдХрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (tree рдиреЛрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд)

рддрдХрдиреАрдХреА рдирд╡рд╛рдЪрд╛рд░

1. рд╕реБрдкрд░рдХреА рддреБрд▓рдирд╛ рддрдВрддреНрд░

рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдПрдХрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреА рд╣реИ, рдпрд╣ рдкреЗрдкрд░ рд╕реБрдкрд░рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ:

  • рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди tuples рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реИрдВ
  • рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИ

2. рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреНрд░рдо рд╕рдВрд░рдХреНрд╖рдг

рд╡рд┐рднрд╛рдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореВрд▓ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреНрд░рдо рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░ рд╣реИ:

  • рдкреБрдирдГ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  • O(kn log n) рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ
  • рдХреБрд╢рд▓ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ

3. Index Array рдХрд╛ рдЪрдХреНрд░реАрдп рдкреБрдирдГ рдЙрдкрдпреЛрдЧ

рдПрдХ рдЪрддреБрд░ array рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд░рдгрдиреАрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ:

  • рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕реНрддрд░ рдкрд░ xyz, yzx, zxy index arrays рдХрд╛ рдЪрдХреНрд░реАрдп рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЖрдпрд╛рдо рдХрд╛ index array рд╣рдореЗрд╢рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рд╣реБрдЖ рд╣реЛ
  • рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдУрд╡рд░рд╣реЗрдб рдХреЛ рдХрдо рдХрд░реЗрдВ

рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реЗрдЯрдЕрдк

рдбреЗрдЯрд╛рд╕реЗрдЯ

  • рдкреИрдорд╛рдирд╛: 2┬╣тБ╕ тЙд n тЙд 2┬▓тБ┤ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди k-рдЖрдпрд╛рдореА tuples
  • рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░: 32-bit рдФрд░ 64-bit рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреВрд░реНрдгрд╛рдВрдХ
  • рдЖрдпрд╛рдо рд╢реНрд░реЗрдгреА: k = 2, 3, 4, 5, 6, 8
  • рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг: 2.3 GHz Intel i7 рдкреНрд░реЛрд╕реЗрд╕рд░ (рдЪрд╛рд░-рдХреЛрд░), 3.2 GHz Intel i7 рдкреНрд░реЛрд╕реЗрд╕рд░ (рдЫрд╣-рдХреЛрд░)

рдореВрд▓реНрдпрд╛рдВрдХрди рд╕рдВрдХреЗрддрдХ

  1. рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп: рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯрд┐рдВрдЧ, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛рдиреЗ рдФрд░ tree рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдХреБрд▓ рд╕рдордп
  2. рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рд╕рддреНрдпрд╛рдкрди: n logтВВ(n) рдХреЗ рд░реИрдЦрд┐рдХ рдлрд┐рдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдпрд╛рдкрди
  3. рд╕рдорд╛рдирд╛рдВрддрд░ рддреНрд╡рд░рдг рдЕрдиреБрдкрд╛рдд: рдПрдХрд▓-рдереНрд░реЗрдб рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдмрд╣реБ-рдереНрд░реЗрдб рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░
  4. рдЖрдпрд╛рдо рд╡рд┐рд╕реНрддрд╛рд░рд╢реАрд▓рддрд╛: рд╡рд┐рднрд┐рдиреНрди рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди

рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐рдпрд╛рдВ

  • O(n log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо: Blum рдЖрджрд┐ рдХреЗ O(n) рдорд╛рдзреНрдпрд┐рдХрд╛ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
  • рдЖрдзрд╛рд░рднреВрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди: O(kn log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЧреИрд░-рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг
  • рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг: рдЫрд╣ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рд╕реБрдзрд╛рд░рд╛ рдЧрдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг

  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛: Java (рдореБрдЦреНрдп рдкрд░реАрдХреНрд╖рдг) рдФрд░ C++ (рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг)
  • рд╕рдорд╛рдирд╛рдВрддрд░ рд░рдгрдиреАрддрд┐: рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдереНрд░реЗрдб рдЖрд╡рдВрдЯрди
  • рдереНрд░реЗрдб рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛: 1-12 рдереНрд░реЗрдб
  • рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди: рдЕрд╕реНрдерд╛рдпреА arrays рдФрд░ index arrays рдХрд╛ рдХреБрд╢рд▓ рдкреНрд░рдмрдВрдзрди

рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо

рдореБрдЦреНрдп рдкрд░рд┐рдгрд╛рдо

1. рдЬрдЯрд┐рд▓рддрд╛ рд╕рддреНрдпрд╛рдкрди

  • O(kn log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо: рд╕рд╣рд╕рдВрдмрдВрдз рдЧреБрдгрд╛рдВрдХ r = 0.998, рдврд▓рд╛рди m = 1.6├Ч10тБ╗тБ╖
  • O(n log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо: рд╕рд╣рд╕рдВрдмрдВрдз рдЧреБрдгрд╛рдВрдХ r = 0.9986, рдврд▓рд╛рди m = 1.6├Ч10тБ╗тБ╖
  • рджреЛрдиреЛрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп n logтВВ(n) рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреЗ рд░реИрдЦрд┐рдХ рд╕рдВрдмрдВрдз рджрд┐рдЦрд╛рддрд╛ рд╣реИ

2. рдЖрдпрд╛рдо рд╡рд┐рд╕реНрддрд╛рд░рд╢реАрд▓рддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

2┬▓тБ┤ tuples рдХреА рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ:

  • k=4 рдкрд░: рджреЛрдиреЛрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рддреБрд▓рдиреАрдп рд╣реИ
  • k<4 рдкрд░: O(kn log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ
  • k>4 рдкрд░: O(n log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ
  • O(kn log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдврд▓рд╛рди: 18.07 рд╕реЗрдХрдВрдб/рдЖрдпрд╛рдо
  • O(n log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдврд▓рд╛рди: 0.55 рд╕реЗрдХрдВрдб/рдЖрдпрд╛рдо

3. рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рджрд░реНрд╢рди

Intel рдЪрд╛рд░-рдХреЛрд░ i7 рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ 8 рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:

  • рдПрдХрд▓-рдереНрд░реЗрдб рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд▓рдЧрднрдЧ 3 рдЧреБрдирд╛ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░
  • рдкреНрд░рджрд░реНрд╢рди рдореЙрдбрд▓ рдлрд┐рдЯрд┐рдВрдЧ рд╕реВрддреНрд░: t = ts + t1/q + mc(q-1)
  • рдЕрдиреБрдорд╛рдирд┐рдд рдЗрд╖реНрдЯрддрдо рдереНрд░реЗрдб рд╕рдВрдЦреНрдпрд╛: рд▓рдЧрднрдЧ 6 рдереНрд░реЗрдб

рд╡рд┐рд▓реЛрдкрди рдкреНрд░рдпреЛрдЧ

рдЕрдиреБрдХреВрд▓рди рдкреНрд░рднрд╛рд╡ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рдЫрд╣ рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╕рдВрдпреБрдХреНрдд рдкреНрд░рднрд╛рд╡:

  • 4-рдЖрдпрд╛рдореА рдбреЗрдЯрд╛ рдкрд░реАрдХреНрд╖рдг: O(n log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо 28% рд╕реБрдзрд╛рд░, O(kn log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо 26% рд╕реБрдзрд╛рд░
  • 8-рдЖрдпрд╛рдореА рдбреЗрдЯрд╛ рдкрд░реАрдХреНрд╖рдг: O(n log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо 65% рд╕реБрдзрд╛рд░, O(kn log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо 34% рд╕реБрдзрд╛рд░

рдореБрдЦреНрдп рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХреЗрдВ

  1. рд╕реБрдкрд░рдХреА рддреБрд▓рдирд╛ рдЕрдиреБрдХреВрд▓рди: рд▓реВрдк рдУрд╡рд░рд╣реЗрдб рд╕реЗ рдмрдЪрдирд╛
  2. рд╕рдорд╡рд░реНрддреА merge sort: рджреЛ-рдереНрд░реЗрдб рд╕рдорд╛рдирд╛рдВрддрд░ merge
  3. рд╕рдорд╡рд░реНрддреА рд╡рд┐рднрд╛рдЬрди: рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рд╡рд┐рднрд╛рдЬрди рд░рдгрдиреАрддрд┐
  4. рд╡рд┐рд▓рдВрдмрд┐рдд рд╕реЙрд░реНрдЯрд┐рдВрдЧ: 6-8% рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ (рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА)

рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдирд┐рд╖реНрдХрд░реНрд╖

1. рдХреИрд╢ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдкреНрд░рднрд╛рд╡

рдкреНрд░рдпреЛрдЧ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдкрд╛рд░рдВрдкрд░рд┐рдХ Amdahl рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐:

t = ts + t1/q + mc(q-1)

рдЬрд╣рд╛рдВ mc рдкрдж рдХреИрд╢ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

2. рдЗрд╖реНрдЯрддрдо рдереНрд░реЗрдб рд╕рдВрдЦреНрдпрд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА

рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдХреЗ, рдЗрд╖реНрдЯрддрдо рдереНрд░реЗрдб рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ:

q_optimal = тИЪ(t1/mc)

3. рдЖрдпрд╛рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ

k=4 рджреЛрдиреЛрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ, рдЬреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЪрдпрди рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп

рдореБрдЦреНрдп рдЕрдиреБрд╕рдВрдзрд╛рди рджрд┐рд╢рд╛рдПрдВ

  1. рдкрд╛рд░рдВрдкрд░рд┐рдХ k-d tree рдирд┐рд░реНрдорд╛рдг: Bentley рдХрд╛ рдореВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реБрдзрд╛рд░
  2. рдорд╛рдзреНрдпрд┐рдХрд╛ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо: Blum рдЖрджрд┐ рдХрд╛ рд░реИрдЦрд┐рдХ рд╕рдордп рдПрд▓реНрдЧреЛрд░рд┐рджрдо
  3. рд╕рдорд╛рдирд╛рдВрддрд░ k-d tree рдирд┐рд░реНрдорд╛рдг: рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░ ray tracing рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди
  4. рд╕реНрдерд╛рдирд┐рдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ: R-tree, quadtree рдЖрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд░рдЪрдирд╛рдПрдВ

рдЗрд╕ рдкреЗрдкрд░ рдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рдпреЛрдЧрджрд╛рди

  • рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд░рдгрдиреАрддрд┐: рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдорд╛рдзреНрдпрд┐рдХрд╛ рдЦреЛрдЬ рд╕реЗ рднрд┐рдиреНрди
  • рд╕реБрдкрд░рдХреА рдбрд┐рдЬрд╝рд╛рдЗрди: рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ
  • рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдг рдпреЛрдЬрдирд╛: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
  • рд╡реНрдпрд╛рдкрдХ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг: рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдФрд░ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рджреЛрдиреЛрдВ рд╕реНрддрд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ

рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдЪрд░реНрдЪрд╛

рдореБрдЦреНрдп рдирд┐рд╖реНрдХрд░реНрд╖

  1. рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛: O(kn log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрдо рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ O(n log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ
  2. рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд┐рд╕реНрддрд╛рд░рд╢реАрд▓рддрд╛: рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рджрд░реНрд╢рди рд░рдЦрддрд╛ рд╣реИ, рдмрд╣реБ-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ
  3. рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп: рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЕрдиреБрдХреВрд▓рди рд░рдгрдиреАрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
  4. рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдпреЛрдЧрджрд╛рди: рдХреИрд╢ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдореЙрдбрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ

рд╕реАрдорд╛рдПрдВ

  1. рдЖрдпрд╛рдо рд╕реАрдорд╛: рдЙрдЪреНрдЪ рдЖрдпрд╛рдо рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ O(n log n) рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
  2. рдореЗрдореЛрд░реА рдУрд╡рд░рд╣реЗрдб: k index arrays рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореЗрдореЛрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдзрд┐рдХ рд╣реИ
  3. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрдЯрд┐рд▓рддрд╛: рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрдЯрд┐рд▓ рд╣реИ, index arrays рдХреЗ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  4. рдереНрд░реЗрдб рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛: рд╕рдорд╛рдирд╛рдВрддрд░ рд░рдгрдиреАрддрд┐ рдереНрд░реЗрдб рд╕рдВрдЦреНрдпрд╛ рдХреЛ 2 рдХреА рдШрд╛рдд рддрдХ рд╕реАрдорд┐рдд рдХрд░рддреА рд╣реИ

рднрд╡рд┐рд╖реНрдп рдХреА рджрд┐рд╢рд╛рдПрдВ

  1. рдЙрдЪреНрдЪ-рдЖрдпрд╛рдо рдЕрдиреБрдХреВрд▓рди: рдЙрдЪреНрдЪ-рдЖрдпрд╛рдореА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реБрдзрд╛рд░
  2. рдореЗрдореЛрд░реА рдЕрдиреБрдХреВрд▓рди: рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рд░рдгрдиреАрддрд┐
  3. GPU рд╕рдорд╛рдирд╛рдВрддрд░: рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП GPU рдХрд╛ рдЙрдкрдпреЛрдЧ
  4. рдЧрддрд┐рд╢реАрд▓ k-d tree: insertion рдФрд░ deletion рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг

рдЧрд╣рди рдореВрд▓реНрдпрд╛рдВрдХрди

рд╢рдХреНрддрд┐рдпрд╛рдВ

  1. рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдирд╡рд╛рдЪрд╛рд░: рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд░рдгрдиреАрддрд┐ k-d tree рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ
  2. рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдпреЛрдЧ: рд╡реНрдпрд╛рдкрдХ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
  3. рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп: open-source рдХреЛрдб рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рд░реНрдЧрджрд░реНрд╢рди
  4. рд╕реНрдкрд╖реНрдЯ рд▓реЗрдЦрди: рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд┐рд╡рд░рдг рд╡рд┐рд╕реНрддреГрдд, рдЪрд╛рд░реНрдЯ рд╕рдореГрджреНрдз
  5. рд╡реНрдпрд╛рдкрдХ рдЕрдиреБрдХреВрд▓рди: рдХрдИ рд╕реНрддрд░реЛрдВ рдХреА рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХреЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ

рдХрдорд┐рдпрд╛рдВ

  1. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реНрд░реЗрдгреА рд╕реАрдорд╛: рдХреЗрд╡рд▓ рдХрдо рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рд▓рд╛рдн рд╣реИ
  2. рдЬрдЯрд┐рд▓рддрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ: рд╣рд╛рд▓рд╛рдВрдХрд┐ц╕Рш┐С рдЬрдЯрд┐рд▓рддрд╛ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛рд░рдХ рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  3. рдореЗрдореЛрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛: k index arrays рдХрд╛ рдореЗрдореЛрд░реА рдУрд╡рд░рд╣реЗрдб рдЙрдЪреНрдЪ рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ
  4. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдард┐рдирд╛рдИ: рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд┐рдзрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдкреНрд░рднрд╛рд╡

  1. рд╢реИрдХреНрд╖рдгрд┐рдХ рдпреЛрдЧрджрд╛рди: k-d tree рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рд▓рд┐рдП рдирдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЛрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
  2. рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ: рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬреНрдпрд╛рдорд┐рддрд┐, рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдЖрджрд┐ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ
  3. Open-source рдореВрд▓реНрдп: рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ open-source рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
  4. рд╢реИрдХреНрд╖рд┐рдХ рдорд╣рддреНрд╡: рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг

рд▓рд╛рдЧреВ рдкрд░рд┐рджреГрд╢реНрдп

  1. рдХрдо-рдЖрдпрд╛рдореА рд╕реНрдерд╛рдирд┐рдХ рдбреЗрдЯрд╛: 2-4 рдЖрдпрд╛рдореА рд╕реНрдерд╛рдирд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
  2. рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛рд╕реЗрдЯ: рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╕рдВрд╢реЛрдзрд┐рдд рдбреЗрдЯрд╛рд╕реЗрдЯ
  3. рдмрд╣реБ-рдХреЛрд░ рд╡рд╛рддрд╛рд╡рд░рдг: рдмрд╣реБ-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд╕рд╛рдзрди рд╡рд╛рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп
  4. рдкреНрд░рджрд░реНрд╢рди-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ: рдирд┐рд░реНрдорд╛рдг рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ

рд╕рдВрджрд░реНрдн

рдпрд╣ рдкреЗрдкрд░ 21 рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • Bentley рдХрд╛ k-d tree рдореВрд▓ рдкреЗрдкрд░ 4
  • Blum рдЖрджрд┐ рдХрд╛ рд░реИрдЦрд┐рдХ рд╕рдордп рдорд╛рдзреНрдпрд┐рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо 6
  • рд╡рд┐рднрд┐рдиреНрди рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕рд╛рд╣рд┐рддреНрдп 8,12,20
  • рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЙрдбрд▓рд┐рдВрдЧ рдХрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп 2,10
  • рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕реА рдЦреЛрдЬ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕реА рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ 7,13

рд╕рдордЧреНрд░ рдореВрд▓реНрдпрд╛рдВрдХрди: рдпрд╣ k-d tree рдирд┐рд░реНрдорд╛рдг рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреЗрдкрд░ рд╣реИ рдЬреЛ рдкреВрд░реНрд╡-рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╡рд╛рдЪрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдкреЗрдкрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдХрдареЛрд░ рд╣реИ, рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп рдЕрдзрд┐рдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдЪреНрдЪ-рдЖрдпрд╛рдореА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо-рдЖрдпрд╛рдореА рд╕реНрдерд╛рдирд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡реА рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджрд░реНрдн рдореВрд▓реНрдп рд░рдЦрддрд╛ рд╣реИред