-1

HASH 関数に関する設計上の問題があります。

私のプログラムではsize 2^13、挿入したいノード (ハッシュ キー) の値に基づいてスロットが計算される のハッシュ テーブルを使用しています。

ここで、各ノードに 2 つの値|A|B|があるとしますが、 を使用してハッシュ テーブルに値を挿入してAいます。

後で、特定のノードを検索したいと思いますB not A

その方法は可能ですか?はい、いくつかの設計アプローチを強調していただけますか? 制約はA、ハッシュ キーとして使用する必要があることです。

コードを共有できません。小さな例:

Value[] = {Part1, Part2, Part3};
insert(value)
check_for_index(value.part1)

value.part1スロットのインデックスを計算するために使用されます。

スロットが見つかったら、挿入します"value"

後で、

search_in_hash(part2)

check_for_index("But here I need the value.part1 to check for slot index")

part1, part2 & part3では、後でどちらかでスロットを見つけることができるように、どのように関連付けることができますかpart2 or part3

問題文があいまいな場合は、親切にお知らせください。

4

1 に答える 1

0

要素ごとに検索するつもりでない限り (この場合、ハッシュは必要なく、単純なリストだけが必要です)、基本的に質問するのは、hash(X) == のようなハッシュを取得できますか? hash(Y) ですが、X!=Y であるため、part1 を使用して場所にマップし、part2 または 3 を使用して同じ場所にマップできます。これは、ハッシュが表すものに完全に反します。

あなたがすべきことは(viraptorも示唆しているように)、それぞれが値の異なる部分を使用してハッシュされた3つの構造を作成し、完全な値を3つすべてにプッシュすることです。次に、検索する必要がある場合は、必要な部分で適切なハッシュを使用しますで検索します。

例:

value[] = {part1, part2, part3};
hash1.insert(part1, value)
hash2.insert(part2, value)
hash3.insert(part3, value)

それから

hash2.search_in_hash(part2)

また

hash3.search_in_hash(part3)

上記の 2 は、まったく同じ値を生成するはずです。

また、すべてのデータ操作 (値の削除、変更) が 3 つの構造すべてで同時に行われることを確認してください。例えば ​​-

value = hash2.search_in_hash(part2)
hash1.remove(value.part1)
hash2.remove(part2)        // you can assert that part2 == value.part2
hash3.remove(value.part3)
于 2013-09-13T11:27:40.097 に答える