次の形式の入力ファイルを想定している 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 値に対応するペアのみが含まれています。
あなたが提供できるどんな助けも大歓迎です。