アイテムを見つけるための比較ベースのデータ構造


34

アイテムの順序付けられていない配列を取り、O n )で前処理を実行し、クエリに回答するデータ構造があります:リストに要素xがあり、各クエリは最悪の時間O log n ですか?nO(n)xO(logn)

私は本当に存在しないと思うので、存在しないという証拠も歓迎します。


3
(1)質問に「期待される」とはまったく述べていないので、「もちろん、予想される時間を考慮する」と言うことができる理由がわかりません。言う前に、より正確にあなたの質問を述べるしてみてください(2)「非ハッシュ可能」を定義してください「もちろん。」
剛伊藤

2
(1)なるほど。説明してくれてありがとう。誰かが「実行時間を気にしますか?」 「ハッシュ不可」と言うだけではありません。「ハッシュ不可」の意味を理解するために人々がコメントを読む必要がないように質問を編集できますか?
伊藤剛

3
ところで、もしあなたがそれを証明できないなら、なぜあなたはそれが不可能であることを知っていますか?教科書やクラスでの練習の場合、間違ったウェブサイトを尋ねています。
伊藤剛

6
これはあなたの質問ですか?n個のアイテムの順序付けられていない配列を取り、O(n)で前処理を実行し、クエリに答えるデータ構造はありますか?リストに要素xがあり、各クエリは最悪の時間O(log n)ですか?
sdcvvc

2
@Filip:見やすいですか?それが本当なら、それは問題を解決することに同意します。
伊藤剛

回答:


30

これが不可能だという証拠です。このようなデータ構造を構築できるとします。ビルドします。次いで、選択、リストからランダムにアイテムを追加εここでそれらのそれぞれにεは、リスト上の任意の二つのアイテムの間の差よりも小さい場合、得られた項目のいずれかにあるかどうかを確認するためにクエリを実行リスト。あなたは行ってきましたO nはこれまでに照会します。n/lognϵϵO(n)

私は、あなたが行っている比較は、アイテムかどうかを伝えるのに十分であることを主張したい元のリストには、任意の新しい項目よりもより小さいか大きいB。わからなかったとしましょう。これは比較ベースのモデルであるため、その後、あなたがいるかどうか分からないでしょうに等しかったB、あなたのデータ構造が動作することを仮定の矛盾か。abab

ここで、選択した項目はランダムであったため、元のリストをそれぞれサイズO log n )のn / log nのリストに分割するのに十分な情報があれば、比較の確率が高くなります。これらの各リストを並べ替えることにより、ランダム化されたO n log log n )-比較のみに基づく時間並べ替えアルゴリズム、矛盾を取得しますn/lognn/lognO(logn)O(nloglogn)


証拠を理解する助けにいくつかのヒント(私は自分自身はもちろん、それを正しく理解と仮定):項目は後の項目で記入する必要があるεは、それらに追加されました。あなたが知っている例比較モデル保証Bbは、保持しているが N /ログインNリストは「昇順」にあります。いずれの高いリスト内のすべての要素は、任意の下のリスト内のすべての要素よりも高くなっています。元のクエリの後、あなたは十分に持っている情報あなたがランダムに選択した項目、周りのリストを作るためにbϵababn/logn
アレックス10ブリンク

(続き)証明を保持するために、指定された時間内にリストを明示的に作成する必要さえないことに注意してください。
アレックス10ブリンク

私はこの証拠を静かに理解していません。最終的な矛盾は「比較のみに基づくアルゴリズム」ではありませんが、アルゴリズムの最初のステップで追加しました(「さらに、各項目に εは、リスト上の任意の二つのアイテムの間の差よりも小さくなっています」)。なぜアイテムに非離散的な合計順序があると仮定した場合でも、アルゴリズムは比較のみに基づいていると正当化されるのはなぜですか?ϵϵ
アルテムKaznatcheev

5
@Artem:あなたのオリジナルの入力は要素から構成され。その後、新しいセットの構築X ' = X × { 0 1 }。元を表し、X XとしてX 0 X 'および変性X + εxXX=X×{0,1}xX(x,0)Xx+ϵとして。ここで、ブラックボックスアルゴリズムを使用します。アルゴリズムはX ′の要素を比較します(x,1)XXお互いに; このようなクエリに答えるには、一定数の要素を互いに比較するだけです。したがって、比較モデルでは、すべてが一定のオーバーヘッドで実行可能である必要があります。X
ユッカスオメラ

1
@Aryabhata:あります。何であるO(log2n)アルゴリズムは?
ピーターショー

24

ここは別の証明であり、クエリ時間構造と On 前処理ます。O(logkn)O(n)

前処理で比較を行い、半順序になると仮定します。O(n)

ここで、最大のアンチチェーンのサイズを考えます。これらの要素は比較できないため、Olog k n クエリアルゴリズムを使用するには、そのAが必要ですAO(logkn)A=O(logkn)

現在、ディルワースの定理により、サイズチェーンへのパーティションがあります。A

これで、アルゴリズムを補完して、パーティション内のチェーンを決定できます。比較の有向グラフを作成し、到達可能性分析を行うことで、2つの要素が比較可能かどうかを判断できます。これは、追加の比較なしで実行できます。ここで、サイズ各可能なパーティションを総当たりして、チェーンのパーティションであるかどうかを判断します。A

チェーンができたら、それらをマージして、リスト全体をソート log n 比較アルゴリズムを提供できます。O(nloglogn)


1
これはいいアイデアです。また、チェーンパーティションをアルゴリズムに認識させる必要があることを示すことができる場合、mergesortを使用して、Jensenを使用するのではなく、追加のO(n log log n)比較のみを使用して入力全体を並べ替えることを示すことができます。しかし、問題があります。前処理アルゴリズムでチェーンパーティションを構築する必要があるのはなぜですか。はい、チェーンパーティションが存在する必要がありますが、それはアルゴリズムに知られているものとは大きく異なります。
デビッドエップスタイン

8
さて、私は今この証拠を信じています。また、ポリログクエリ時間を達成するには、追加のの範囲内にあるいくつかの比較を使用する必要があることをより強く示しています。いいね ちなみに、チェーンパーティションは、ブルートフォース検索を必要とするのではなく、すでに実行された比較のセットから多項式時間で見つけることができますが、それはあなたの引数に違いをもたらしません。O(nloglogn)
デビッドエップシュタイン

6
証明は、各クエリに対して前処理またはΩ n )のいずれかが必要であることを実際に示しています。もちろん、両方ともきついです。これは、バイナリ検索と線形検索が唯一の「興味深い」検索アルゴリズムであることを示しています(少なくとも古典的な世界では)。Ω(nlogn)Ω(n)
ユヴァルフィルマス

1
@Yuval:たぶん、あなたはこの観察結果を実際の答えとして書くべきです。答えの証明から上記の結果を得るために適度な仕事をしなければならないように思えます。
ピーターショー

1
@Yuval:証明についての考え方は、私はあなたがいずれかを持っている必要があることを参照して前処理またはΩ nは1 - εすべてのクエリ時間をεo n log n )の前処理時間とOを持つことが可能ですΩ(nlogn)Ω(n1ϵ)ϵo(nlogn)クエリ時間ます。リストをサイズ n / log n log nリストに分割できO(n/logn)lognn/logn時間内の各中央値検出を繰り返し使用しますθ(nloglogn)
ピーターショー

0

Peter Shorの回答にあるように、比較ベースのモデルのメンバーシップを除外するには、要素がどのメンバーと比較されるかを知る必要があります。したがって、ランダムクエリ(クエリされた非メンバーよりも小さいメンバーの数はランダムです)を使用すると、ソートされていない値を n個持つことに関連する Θn log k 情報が得られます。したがって、いくつかの定数 c > 0の場合、 cを使用しますk<nΘ(nlogk)nc>0cnlogk preprocesssingを、我々は持つことができませんクエリコスト。これはにデータを並べ替えることができるので、一定の要因に最適最大で K ' = K /ログK N /ログNにほぼ等しいバケット(ソートされていない各バケット) O N ログkは'= O N ログkは可能時間、 O N / K 'クエリコスト。cnlogk/kk=k/logkn/lognO(nlogk)=O(nlogk)O(n/k)

特に、前処理を使用すると、o n )のクエリコストを持つことができません。また、O N ログN に対応して前処理、KにおけるO N εO(n)o(n)o(nlogn)kO(nε)すべてのための、従ってΩN 1 - ε照会コスト。ε>0Ω(n1ε)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.