2016-05-17 7 views
0

アイテムの代替インデックスを探して、そのアイテムを元のインデックスに戻すことができます。 今のところ、解決策は完璧ではありません -XORは2つの数字の間で切り替わります。

は、アイテムのタグが元々index1のであると言う、と私は

をINDEX2するためにそれを移動したいのでindex2 = (index1^tag) % max_index

そして、私は戻って、それを移動したい場合

index1のジャストindex1 = (index2^tag) % max_index

MAX_INDEXは2

の力があるとき、上記の等式が成り立つのみ

EX:

(^123)%64 ==

(^123)%64 ==

しかし

(^123)%60 ==

(^123)%60 == 7(!= 15

MAX_INDEXは任意の数にすることができる他の数学演算があるのだろうか。


EDIT:

私は2つのインデックス間のスイッチングを達成するために、同じ操作を使用する必要があります。

私のシナリオは次のとおりです。各バケットに最大で4つのアイテムを格納できるハッシュテーブルがあり、アイテムの指紋(たとえば8ビット)のみを格納します。バケツがいっぱいであれば、アイテムの指紋を元の状態を知らずに別の位置に移動する必要があります。一度代替位置に移動すると、指紋の元の位置に元の位置かどうかわからないため、以前の位置と同じ操作で指紋を元の位置に戻すことができます。今

- index = (index1^Hash(tag)) % max_index

+0

[cuckoo hashing](https://en.wikipedia.org/wiki/Cuckoo_hashing)が好きかもしれません。それは、あなたのモチベーションが大いに期待しているということです。1.なぜ指紋だけを保存するのですか? 2.なぜ同じ操作で後退する必要があるのですか? 3.指紋のみを使用して移動する必要があるのはなぜですか? –

+0

実際、それは[cuckoo filter](https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf)のデザインです。しかし、それは2のフィルタパワーのサイズを作る必要があります。 – Leo

+1

ありがとう、それは動機の多くを説明します。私は今日の午後にいくつかのさらなる考えを持って私の答えを更新しようとします。 –

答えて

1

加算と減算の作業罰金。

index2 = (index1 + tag) % max_index 
その後、

いくつかの言語で

index1 = (index2 - tag) % max_index 

場合、%は妙に負の数のために実装されています。これが問題の場合は、

index1 = (index2 + max_index - tag) % max_index 

を使用して問題を回避することができます。


シャワーを少し考えた後、次のプロトコルを提案します。最初にあなたの好きな対称ブロック暗号を選んでください。暗号上の制約は以下のとおりです。

  • 平文空間が
  • 暗号文のスペースがmax_index要素よりも、あまりにもはるかに大きくすべきではない、少なくともmax_index要素を持っている必要があります
  • 鍵空間おそらく(自分のタグ空間より大きくないべきですハード要件)

次にあなたがインデックスを交換するには、次の手順に従います。

do { index = encrypt(tag, index); } while(index >= max_index); 
do { index = index^1;   } while(index >= max_index); 
do { index = decrypt(tag, index); } while(index >= max_index); 

暗号テキストスペースのサイズがc*max_indexの場合、これにはcの暗号化が必要であり、予想通りに復号化が行われます(c)。もう一方の端から出るインデックスは、低い確率で開始したインデックスと同じになります。インデックスがmax_index-1(およびmax_indexが奇数)に暗号化されている場合、または暗号化によって2つの隣接値が2つの隣接値にマップされる場合にのみ発生します。

+0

いいですね! しかし、(index2 + max_index - tag)がまだ負の場合はどうなりますか? – Leo

+0

@Leo 'index2'は負ではなく、' tag'は 'max_index'よりも小さいと仮定しています。どちらも私にとっては妥当な仮定のようですが、' index2 + max_index-tag'は負ではありません。 –

+0

@Danial Wagner、申し訳ありません私のシナリオでは、タグはmax_indexより大きい場合があります。 Pythonでは、ネガはうまく動作しますが、Cでは間違っています。 – Leo

関連する問題