次の問題について、操作ごとにO(1)時間のwビットワードRAMデータ構造が存在しますか?:操作をサポートする一連のwビット非負整数を維持します
- add(x):セットにxを追加します
- remove(x):セットからxを削除します
- finger():セットのフィンガープリントを返します。このwビットフィンガープリントには、同一の2つのセットに同じフィンガープリントがあり、異なる2つのセットにはおそらく異なるフィンガープリントがあるという特性があります。
すべての操作は一定の時間で実行する必要があります。
Rabin-Karpフィンガープリント法は、ここで、pはランダムなwビット素数です。2 x mod pの計算には一定以上の時間がかかるため、問題は更新時間にあります。繰り返し二乗を使用すると、これはO(log w)時間で実行できます。私が見つけた最速のモジュラー指数アルゴリズムは、(log w)/(loglog w)算術演算のようなものを実行します。
3
同様の質問がすでにここに投稿されているようですが、一定時間の解決策はありませんでした。
—
Pat Morin