編集:以下のアプローチは機能しますが、R ツリーの重要な機能を無視します。つまり、R ツリー ノードの分割動作は明確に定義されており、(B ツリーのようなプロパティを通じて) バランスの取れたツリーを維持します。実際、あなたがしなければならないことは次のとおりです。
- 1 ページあたりの長方形の最大数を選択する
- シード長方形を作成します (互いに最も離れた点、重心などを使用します)。
- ポイントごとに、それを配置する長方形を選択します
- すでに単一の長方形に収まっている場合は、そこに入れます
- そうでない場合は、最小に拡張する必要がある長方形を拡張します (「最小」の出口を測定するさまざまな方法 -- 領域の動作)
- 複数の四角形が適用される場合 -- どれくらいいっぱいか、または他のヒューリスティックに基づいて 1 つを選択してください
- オーバーフローが発生した場合 -- 二次分割を使用して物事を移動します...
- などなど、R ツリー アルゴリズムを教科書からそのまま使用します。
最初のシード長方形を見つけるには、以下の方法で問題ないと思います。しかし、R ツリー全体をそのように設定したくはありません。スプリットとリバランスを常に行うと、少しコストがかかる可能性があるため、以下の KD アプローチを使用して、かなりの量の作業を行うことをお勧めします。すべての作業ではありません。
KD アプローチ: すべてを長方形で囲みます。
長方形内のポイントの数が > しきい値の場合は、ポイントの半分をカバーするまで方向 D にスイープします。
分割点の左右(または上下)で四角形に分割します。
次の方向で、新しい四角形で同じ手順を再帰的に呼び出します (左から右に移動する場合は、上から下に移動し、その逆も同様です)。
これが別のポスターによって提供された正方形に分割するアプローチよりも優れている点は、歪んだポイント分布によりよく対応できることです。