1

町、市、または国の入力に対して座標を返し、超高速ジオコード ルックアップを実行したいと考えています。私の知識は基本的なものですが、私が理解していることから、C で書くことは良いスタートです。次のようなツリー構造を持つことは理にかなっていると考えていました。

  • イングランド
    • ケント
    • オーピントン
    • チャタム
    • ロチェスター
    • ドーバー
    • エデンブリッジ
  • ウィルトシャー
    • スウィンドン
    • マルムズベリー

私のファイル/データベースには、座標と町/都市名があります。プログラムに「Kent」という名前を付けた場合、「Kent」に関連付けられた座標を可能な限り迅速に返すことができるプログラムが必要です

パフォーマンス上の理由から、データをバイナリ ファイルまたは SQL データベースに格納する必要がありますか? このデータを検索する最良の方法は何ですか? おそらく二分木探索?データはどのように保存する必要がありますか? 多分?

4

3 に答える 3

4

ここにちょっとしたアドバイスがありますが、それ以上のことはありません:

あなたが望むように、名前または名前のプレフィックスで場所を見つけたい場合は、国、地域、町の階層にデータを格納するデータ構造を設定することはお勧めできません。かもしれません。データ構造の使用を支配する操作がある場合は、通常、操作に適したデータ構造を選択するのが最善です。

この場合、場所のアルファベット順リストの方がクエリに適しています。最上位レベルではない各場所に、その「親」の名前への何らかの参照を追加する必要があります。場所のアルファベット順のリストがある場合は、 index も考慮したい場合があります。おそらく、アルファベットの各文字で始まるリストの最初の場所を直接指すものです。

あなたの問題を説明すると、辞書に単語を格納することと、より多くの共通点があるようです (つまり、特定のプログラミング言語で特定のコレクションデータ型ではなく、単語を検索するようなものを意味します)。名前) ジオコーディングを装って行われるほとんどのものよりも。

私の推測では、人口が 1000 人を超える世界のすべての町、都市、地域、国 (およびそれらの座標) の名前を含む地名集は、非常に単純なデータ構造 (基本的にはリスト) に格納できると思います。最初の A の地名、最初の B などの場所をすばやく見つけるためのインデックスを 1 つまたは 2 つ付けます。少し圧縮すれば、最新のほとんどのデスクトップ PC のメモリにおそらくこれを保持できます。

于 2012-07-30T13:39:47.433 に答える
1

私ができる最善のアドバイスは、あなたが望む結果を得るためにあなたが精通しているどんな言語でも使うことだと思います。コードが機能したら、パフォーマンスについて心配します。次に、必要な結果が得られるまで、非常に特定の機能を一度に1つずつCまたはC++に変換することを検討できます。

于 2012-07-30T13:37:31.413 に答える
1

データを複製しないことを除いて、情報の保存方法について心配する必要はありません。

データに対して1 つ以上のインデックスを作成する必要があります。インデックスは、キー (検索するアイテム) と値 (キーに関連付けられたレコードやその他の情報など) を含む連想配列/マップ データ構造です。これにより、検索の種類ごとにデータを変更することなく、高速な検索が可能になります。

一方、あなたのケースはデータベースに最適です。データベース管理者にデータ (効率的な検索など) を任せることをお勧めします。結局のところ、それが彼らが生きている理由です。

参照:データベースを使用する価値があるのはどの時点ですか?

于 2012-07-30T23:38:18.557 に答える