5

次のように、不変のルックアップテーブル(コンストラクターを呼び出すときに修正される)から線形に「平滑化された」データを返す関数(おそらくクラスも)を作成したい場合: ルックアップ テーブルと結果の例

たとえばfunc(5.0) == 0.5


  1. ルックアップ テーブルを格納する最良の方法は何ですか?

    • 2つの配列を使用することを考えています。
    • 他のより良い方法はありますか?
       
  2. 必要な値を計算する最良の方法は何ですか? (準備時間を除く実時間効率)

    • ルックアップ テーブルを事前に並べ替え、argバイナリ検索を使用して最も近い 2 つのポイントを見つけることを考えています。
    • それとも、検索を簡単にするために二分木を構築する必要がありますか?
    • それとも他にもっと良い方法があるでしょうか?
       
  3. (マイナー)この種の関数/クラス/データ構造/アルゴリズムを何と呼びますか? コンピュータサイエンスでこれに正式な名前はありますか?

私は自分のクラスを書く必要があるかもしれないと思います。クラスは、せいぜい、初期化後に変更する必要がなく、おそらく複数のスレッドが使用するため、不変である必要があります。インデックスによってキーと値を取得する必要がある場合もあります。

4

1 に答える 1

7

ポイントのセットを線形補間しようとしているようです。私は使用します java.util.NavigableMaphigherEntry(K key)やなどの機能を提供しlowerEntry(K key)、隣接点の取得を容易にします。

あなたはあなたの地図に入れます(x,y)。を照会するとf(x_i)、まずマップにマッピングが含まれているかどうかを確認し、含まれている場合はそれを返します。そうでない場合は、呼び出しhigherKey(x_i)lowerKey(x_i)、隣接する 2 つのポイントを見つけます。次に、式を使用してこれらの 2 つの点を補間します ( Wikipedia の Linear Interpolation Pageを参照)。

また、補間ロジックを別のクラスに実装し、function後で別の補間方法 (つまり、多項式補間) を使用する場合に備えて、それをコンストラクタ引数としてクラスに渡します。

于 2013-01-14T15:27:05.807 に答える