効率的な繰り返し挿入のためのデータ構造の設定


11

wordize要素のセット(繰り返しなし)を保持し、高速挿入(償却O(1))をサポートする、スペース効率の良いデータ構造を探しています。「スペース効率」とは、理想的には、個の単語を格納してn個の要素を格納することです。n+o(n)n

セットであることは、質問の重要な部分です。各要素が回追加される場合、使用されるスペースはn log nになりません。lognnlogn

構造は、その要素のリストもサポートする必要があります(合理的に効率的)。ここでは、正常な構造は問題ありません。(高速メンバーシップクエリはプラスです。)


2
ハッシュテーブルではうまくいかない理由はありますか?
デイブ

@デイブ:私はそれをスペース要件を満たしているとは思わないが、十分に厳密な動的サイズ変更スケジュールがそれを機能させることができると思う。しかし、一般的に、実際にコードを書く前に、そこにあるものを見てみたいです。
チャールズ

1
動的なサイズ変更で償却を取得するには、サイズを一定の割合で増やす必要があります。n + o n を厳密に満たしたい場合、スペース要件を満たしていないと思います。O(1)n+o(n)
デイブ

O(1)

@Magnus:問題のO表記とO表記の背後にある実際の関数は、ワードサイズに依存しないことを意味すると思います。
伊藤剛

回答:


10

ラマンとラオの「簡潔な動的辞書と木」 は、指定された範囲を満たしていると思います。要約から:

SU={0,,m1},|S|=nO(1)SO(1)B+o(B)B=lg(mn)を表す情報理論上の最小空間です。S


これは素晴らしいですね。(しかし、承諾する前に論文を読んだ方がわかりますよね?)
チャールズ

1

アプリケーションがいくつかの誤検知を許容できる場合、ブルームフィルターの使用を検討する必要があります。

Wikipediaの言い換え:ブルームフィルターは、要素がセットのメンバーであるかどうかをテストするために使用される、スペース効率の高い確率的データ構造です。誤検知は可能ですが、誤検知は不可能です。要素をセットに追加できますが、削除することはできません。セットに追加される要素が多いほど、誤検知の可能性が大きくなります。


私はできませんが、素晴らしいデータ構造のために+1します。
チャールズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.