-1

答えが欲しいツリーアルゴリズムとデータベースの問題があります。

いくつかのエリアがあります。たとえば 20 としましょう。これらの各エリアにはそれぞれ 20 までのサブエリアがあります。これらの親エリアはマップ上に広がっていますこれらの親領域のいくつかは互いに近接しています。

データベースは次のようになります: [area_id, title, parent_id] - 一部には複数の子があり、すべての領域を含むルート ノードがあります。(隣接リスト モデル)

これを写真にするには、次のようにします。基本ツリー ビュー

私が言ったように、さまざまな領域は互いに近くにある場合もあれば、離れている場合もあります。エリア 1 とエリア 5が近くにあり、エリア 1 もエリア 4 に近いことがわかっているので、どうにかしてそれらを結び付けたいと思います。ここで問題は、エリア 4 がエリア 5 にも近いとしましょう。 .

次のようになります。問題ツリー

無限ループになるのはどれですか? エリア 1 をエリア 4 に近づけたいだけでなく、エリア 4 もエリア 1 に近づけたいからです。

「近くのエリアを検索」を選択できる検索を行いたいので、1 つのエリアを選択すると、近くのエリアを検索できます。データベースとphpでこれを解決する方法について、いくつかのヒントを使用できます。

このフォーラムで助けを求めて探し回っていますが、この問題の「名前」がよくわかりません。誰かが私を正しい方向に向けるか、このスレッドでまっすぐに助けてくれると嬉しいです.

ありがとうございました。他に知っておくべきことがあれば、できるだけ早く答えようとします。

4

3 に答える 3

1

近接性を扱っているものについては、地理空間情報 (これらが真の地域/地域である場合) を入力してから、単純なクエリから複雑なクエリや計算まで、任意の数のラジアル検索を適用するというアプローチをとります。 .

一方、これらの場所が架空の場所である場合は、たとえそれが単純な x、y 座標系であっても、偽の場所を作成することを検討することは興味深いかもしれません。これにより、ラジアル検索を再度実行できます。必要に応じて拡大または縮小できます。また、サイト a から b への距離が昇順になるように結果を並べ替えることもできます。

于 2013-08-28T06:07:57.033 に答える
1

領域を分割するには、軸に沿って分割できる長方形が必要です。kd-tree、r-tree、またはquadtreesと空間インデックスを見てください。私のphpクラスのヒルベルト曲線をお勧めします。これはモンスター カーブであり、平面を完全に埋め尽くします。phpclasses.org で見つけることができます。

于 2013-08-28T06:15:20.933 に答える
-1

最終的に、一種の「隣接する」選択ステートメントを使用して解決しました。

これを行うには、近隣関係を含む別のテーブルを作成しました。そのテーブルは次のようになりました:[table_id、area_id、neighbor_area_id]

ここで、使用可能なすべての近隣を追加しました。いくつかの INNER JOIN と select ステートメントを使用して、必要なものを取得できたので、選択した領域に隣接するすべての領域を検索できます。

SQL ステートメントは次のようになります。

SELECT adds.title, categories.title, area.title
FROM adds
INNER JOIN categories ON categories.category_id = adds.category_id
INNER JOIN areas ON adds.area_id = areas.area_id
WHERE areas.area_id IN (SELECT area_neighbors.area_neighbor_id 
                        FROM area_neighbors 
                        WHERE area_id='25')
OR adds.area_id='25'

これにより、近隣エリアのすべての追加が area_id 25 に追加されます。

これが最も賢明な解決策か最善の解決策かはわかりませんが、私にとってはうまくいくものです。これが誰かを助けることを願っています! そして、すべての返信に感謝します!

于 2013-08-28T10:06:12.390 に答える