N-D平面内のある点のためのユニークな識別ハッシュコードは何でしょうか?

2Dポイントの場合、次のようになります。 - x_value * 10 ^((int)log_10(max_y_value))+ y_value

N次元空間の点ではどうなりますか?

ありがとう!

1
あなたは「一意に」とはどういう意味ですか?あなたはハッシュ(コード)が本当にユニークであるとは思われないことを知っていますか?
追加された 著者 Lasse Vågsæther Karl,
私はあなたがここでポイントをつかんでいるとは思わない。衝突を起こすことなく、N個の要素のXビット化された点をYビット化された「ハッシュ」に還元することは不可能であり、Y 一意であるとはみなせません
追加された 著者 Lasse Vågsæther Karl,
真の1-1マッピングを得る唯一の方法は、ハッシュコードのサイズが、ハッシュコードを計算しているもののサイズ以上であることを確認してから、メモリ内のバイトを構造体から再解釈することですハッシュコードに変換します。
追加された 著者 Lasse Vågsæther Karl,
ユニークでなければなりません。正確には、N-D点と離散整数空間、すなわち(長いデータ型)との間に1-1のマッピングが必要です。目標は可能な限り多くの点に合うことです。
追加された 著者 user855,
@ LasseV.Karlsenこの場合、ハッシュではありません。
追加された 著者 Nick Johnson,

3 答え

構造体のハッシュコードを計算する典型的な方法は、23と37などの比較的小さい2つの素数を選択し、それらをP1とP2と呼ぶこととし、次にマルチコンポーネント構造のハッシュコードを次のように計算することです。

hashcode = P1
foreach component in structure
    hashcode = hashcode * P2
    hashcode = hashcode + hashcode-of-component

「コンポーネントのハッシュコード」は、整数である場合にはコンポーネントの値そのものか、整数に変換されることができるもの(つまり、メモリバイトを整数に変換したもの)か、その構造のハッシュコードのいずれかです。

N次元空間における点の場合:

hashcode = P1
count from 1 to N
    hashcode = hashcode * P2
    hashcode = hashcode + component[counting-index]

点の各次元値を整数に再解釈できると仮定して

2
追加された

ここから私の答えを返す:

変形可能オブジェクトの衝突検出のための最適化空間ハッシングで説明されている空間ハッシュ関数があります。彼らはハッシュ関数を使用します

hash(x、y、z)=(x p1 xor y p2 xor z   p3)mod n

     

ここで、p1、p2、p3は大きい   素数、私たちの場合73856093、   19349663,83492791に記載されている。ザ   値nはハッシュテーブルサイズです。

この論文では、x、y、zは離散化された座標です。おそらくあなたのフロートのバイナリ値を使うこともできます。

1
追加された

あなたが実際に望んでいるのは、ハッシュではなく、3次元ポイントのための単一のユニークな値です.3次元のヒルベルト曲線である。ヒルベルト曲線を使用すると、n次元の点と点の間を、一般的に局所性を保つのに良い方法で変換できます。

もちろん、最良の選択肢はあなたのニーズにかかっています。より単純な選択肢は、各座標をnビット数として表し、合成値を3つの数の3nビット連結として表すことである。

0
追加された