[[四分木]]

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン両方とも次のリビジョン
programming:algorithm:data_structure:quadtree [2017/10/06] ikatakosprogramming:algorithm:data_structure:quadtree [2017/10/06] ikatakos
行 13: 行 13:
  
 単に四分木という場合、大きく分けて、2つの分け方がある。 単に四分木という場合、大きく分けて、2つの分け方がある。
 +
 +  * 常に半分で分割
 +    * 指定した領域にかぶる領域の探索が得意
 +  * 常に点の位置で分割
 +    * 特定の点を見つける探索が得意
 +
 +特に四分木特有のデータ構造が活かせるのは、半分で分割する方なので、そちらについて説明する。
  
 ====常に半分で分割==== ====常に半分で分割====
行 37: 行 44:
 └─────┘  └──┴──┘  └┴─┴┴─┘ └─────┘  └──┴──┘  └┴─┴┴─┘
 </code> </code>
 +
 +=====領域番号の振り方=====
 +
 +領域番号を振り、親の領域番号から子の領域番号を一意に計算できると、木構造を1次元の配列で持つことができて効率的。
 +
 +モートン符号という振り方を用いる。Z型に振る。
 +
 +<code>
 +┌───┐  ┌─┬─┐
 +│      │  │3│4│  15 16 19 20
 +│  0  │→├─┼─┤→13 14 17 18
 +│      │  │1│2│  7 8 11 12
 +└───┘  └─┴─┘  5 6 9 10
 +</code>
 +
 +こうすると何が良いかというと、「親の領域番号×4+1~4」で、子の4つの領域番号が表せる点。
 +
 +
 +
  
programming_algorithm/data_structure/quadtree.txt · 最終更新: 2017/10/13 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0