2

次の形式の入力ファイルを想定している C++ プログラムがあります。

X    Y    Z
1    1    .642
1.1  1    .482
1.2  1    .394
1.3  1    .420
1.4  1    .948

テキスト ファイルは非常に長く、およそ 20,000 行程度です。(X,Y) ペアの Z ルックアップを行うために、これを C++ プログラムに読み込む必要があります。(X,Y) ペアが入力ファイル内のペアとまったく同じでない場合は、最も近い X 値と最も近い Y 値を使用する必要があります。ゼロ以外の値だけでなく、完全な行列があれば、X 座標と Y 座標は等間隔になります。

私の問題は、これを行うための最速の方法を決定することです。最も近い X のベクトルを実際に検索してから、最も近い Y のベクトルを検索することは避けたいと思います。ループや検索を行わずにこれを達成する方法はありますか? 値を検索するために、ある種のハッシュテーブルが機能しますか?

私はスクリプト作成者であり、C++ の初心者であるため、これが些細なことのように思われる場合は申し訳ありません。参考までに、私は素早く行う方法が必要です:

lookup(1.1,1)
    >>> .482

lookup(1.112, 1)
    >>> .482 // value corresponding to closest x and closest y

lookup(0,0)
    >>> .642 // value corresponding to closest x and closest y

たとえば、完全なマトリックスがあれば、これは直接可能です。

    1.1  1.2  1.3  1.4  1.5
1.1
1.3
1.5      (Z values)
1.7
1.9

(1.5, 1.2) に関する Z 値を見つけるには、インデックス [1.5/(x_spacing), 1.2/(y_spacing)] で見つかった Z 値を返すだけです。

確かに、ルックアップ値をこの間隔で減算し、正確な (X,Y) ペアが存在しない場合は丸める必要もあります。ただし、肝心なのは、検索を行わずに適切な Z 値を取得できることです。巨大な完全なマトリックスが必要とするすべてのスペースを占有しないことを除いて、同じことを達成したいと考えています。そのため、テキスト ファイルにはゼロ以外の Z 値に対応するペアのみが含まれています。

あなたが提供できるどんな助けも大歓迎です。

4

1 に答える 1

2

構造化ツリーに格納することをお勧めします。たとえば四分木。スペースを節約するためにまばらなストレージになり、最も近いポイントを検索するのも非常に簡単です。

C++ の四分木に関するチュートリアルはこちらです。

于 2013-03-13T00:13:57.927 に答える