ユニバーサルインデックスは存在しますか?


8

非常に多数のの行を含み、各行に多数ののフィールドが含まれ、各フィールドに大きな固定ビット数が含まれるデータテーブルがある場合、「インデックス」構造を構築する方法はいくつかあります。次の操作は、テーブルとインデックスに対して時間で実行できます(および基準にして)。k O k log N N kNkOkログNNk

  1. 新しい要素をテーブルに挿入します。

  2. テーブルから指定された要素を削除します。

  3. フィールドの値のセットが与えられた場合、テーブルがフィールド1が最初、フィールド2が2のように辞書式順序にソートされたときに、指定されたフィールド値より大きいフィールド値を持つテーブル内の最初のレコードを取得します。

この構造を一般化して、操作3が完了すると、kフィールドの順序を指定して、テーブル内のレコードの順序を決定できます。kk

明らかに、これはk!インデックス、フィールドの順序ごとに1つ。次に、操作には時間がかかります。OkkログN

演算が(比べて)はるかに速く、好ましくはO k log k log N 時間であるアルゴリズムが必要です。kOkログkログN

そのようなアルゴリズム/データ構造は存在しますか?もし存在していれば、誰かが今までにそれを公開して実装していたようですが、存在する兆候は見当たりません。逆に、おそらくそのようなアルゴリズムが存在しないことが証明できるでしょう。しかし、そのような証拠が存在するという兆候は見つかりませんでした。

回答:


2

強い指数時間仮説で求めているデータ構造の下限を示すことができます。特に、すべてのエントリが1ビットである場合、データ構造を使用してサブセットクエリを実行できます。つまり、データ構造は、最大でk個のサイズのNセットのファミリーを格納します。そして、ユーザは、「サブセット」のクエリを行うことができる-セット与えるSを、そこにあるかどうかを尋ねるX FようにS XFNkSバツFSバツ

このようなクエリは、「ユニバーサルインデックス」がある場合にサポートできます後に来る辞書順で最初のエントリを検索すると、S1の列で最初にソートし、次にS0の列でソートしてから、任意の要素を探します。この順序に従ってSの後に表示されるのは、Sのスーパーセットでなければなりません。SS1S0SS

現在、サブセットクエリは、Ryan Williamsによるこの素晴らしい回答からの「ドット積= 0」クエリと同等です-読んでください。この回答がユニバーサルインデックス問題に及ぼす影響を要約します。強力な指数時間仮説を仮定すると、たとえファミリーFが事前に与えられていて、タイプ3(つまり、データ構造)のクエリしかない場合でも、実行時間クエリはサポートできません。は静的です)、そしてp o l y N k OpolykN0.99FpolyNk 前処理時間。


うわー、スラムダンク!ありがとう!(私は実際にこれが答えを持っていると知って
Dale
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.