ソートされたフロートの小型セットへのフロートのコレクションをマッピング/定量化するための高速ハッシングアルゴリズム

cs.stackexchange https://cs.stackexchange.com/questions/128376

  •  29-09-2020
  •  | 
  •  

質問

私のアプリケーションで、私は

を持っています

  • コレクションX:値範囲を持つ数千の浮動小数点数[0,1]、ソートされていません。
  • コレクションY:11ソートされた[0,1]からの範囲の浮き込み。
  • Xのサイズは知られています。それをl。

目標はxを量子化してyにマッピングすることです。

ビットが鮮明になる例、

  • Y = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
  • X = [0.678, 0.124, ..., 1.0, ., 0.013, 0.475]

アルゴリズム出力はこれらのような0ベースのインデックスになることを望みます。

  • H(Y[0]) = H(0.678) = 6
  • H(Y[1]) = H(0.124) = 1
  • H(Y[n-2]) = H(0.013) = 0
  • H(Y[n-1]) = H(0.475) = 4

試み

素朴には、y内の隣接する要素の間に要素が求められるように、xの各要素を位置決めするための線形および二元検索を試みました。

しかし、パフォーマンスは私のアプリケーションには十分ではありません。この量子化は、遅い計算が望ましくないようなリアルタイムスレッドで発生します。

質問

この種のハッシュ/量子化の最善の方法は何ですか? Xはソートされていません。

ありがとう!

役に立ちましたか?

解決

xを取ると、10,000を掛けたもので、最も近い整数に丸めます。プレーンC、Z=(int)(X×10000.0)。

zの10,000個の可能な値がある。 zのほとんどの値では、zからのインデックスを決定できます。そのため、10,000エントリのテーブルを作成します。テーブルの中で、Xを知っていることを証明できる場合は、zを証明できる場合は、zを保存して、これを証明できない場合は-1を保存します。

その結果、おそらく9,980の10,000の値で正しい値が得られ、残りの1つの値が500の値で持っている遅いアルゴリズムを使用してください。

ps。倍精度数に同じテーブルサイズが使用されます。テーブルサイズがどうであれ、この方法を正しくマッピングすることができない値Xは、10,000のテーブルを1回撮った場合、99.8%または99.9%が正しくマッピングされ、0.1%または0.2%がマッピングされます。遅いアルゴリズムが必要です。まったく同じことがdoubleで起こります。 1000のエントリを使用することができ、その後、10または20の失敗したものは1%または2%になります。

と素晴らしいことは、この方法が機能するが、y値は分散されることです。 Y値の数が多い場合にのみ、テーブルサイズを大きくしたい場合があります。

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top