アイテムの順序付けられていない配列を取り、O (n )で前処理を実行し、クエリに回答するデータ構造があります:リストに要素xがあり、各クエリは最悪の時間O (log n )ですか?
私は本当に存在しないと思うので、存在しないという証拠も歓迎します。
アイテムの順序付けられていない配列を取り、O (n )で前処理を実行し、クエリに回答するデータ構造があります:リストに要素xがあり、各クエリは最悪の時間O (log n )ですか?
私は本当に存在しないと思うので、存在しないという証拠も歓迎します。
回答:
これが不可能だという証拠です。このようなデータ構造を構築できるとします。ビルドします。次いで、選択、リストからランダムにアイテムを追加εここでそれらのそれぞれにεは、リスト上の任意の二つのアイテムの間の差よりも小さい場合、得られた項目のいずれかにあるかどうかを確認するためにクエリを実行リスト。あなたは行ってきましたO (nは)これまでに照会します。
私は、あなたが行っている比較は、アイテムかどうかを伝えるのに十分であることを主張したい元のリストには、任意の新しい項目よりもより小さいか大きいB。わからなかったとしましょう。これは比較ベースのモデルであるため、その後、あなたがいるかどうか分からないでしょうに等しかったB、あなたのデータ構造が動作することを仮定の矛盾か。
ここで、選択した項目はランダムであったため、元のリストをそれぞれサイズO (log n )のn / log nのリストに分割するのに十分な情報があれば、比較の確率が高くなります。これらの各リストを並べ替えることにより、ランダム化されたO (n log log n )-比較のみに基づく時間並べ替えアルゴリズム、矛盾を取得します。
ここは別の証明であり、クエリ時間構造と O(n )前処理ます。
前処理で比較を行い、半順序になると仮定します。
ここで、最大のアンチチェーンのサイズを考えます。これらの要素は比較できないため、O(log k n )クエリアルゴリズムを使用するには、そのAが必要です。。
現在、ディルワースの定理により、サイズチェーンへのパーティションがあります。
これで、アルゴリズムを補完して、パーティション内のチェーンを決定できます。比較の有向グラフを作成し、到達可能性分析を行うことで、2つの要素が比較可能かどうかを判断できます。これは、追加の比較なしで実行できます。ここで、サイズ各可能なパーティションを総当たりして、チェーンのパーティションであるかどうかを判断します。
チェーンができたら、それらをマージして、リスト全体をソート log n )比較アルゴリズムを提供できます。
Peter Shorの回答にあるように、比較ベースのモデルのメンバーシップを除外するには、要素がどのメンバーと比較されるかを知る必要があります。したがって、ランダムクエリ(クエリされた非メンバーよりも小さいメンバーの数はランダムです)を使用すると、ソートされていない値を n個持つことに関連する Θ(n log k )情報が得られます。したがって、いくつかの定数 c > 0の場合、 cを使用します preprocesssingを、我々は持つことができませんクエリコスト。これはにデータを並べ替えることができるので、一定の要因に最適最大で K ' = K /ログK ≤ N /ログNにほぼ等しいバケット(ソートされていない各バケット) O (N ログkは')= O (N ログkは)可能時間、 O (N / K ')クエリコスト。
特に、前処理を使用すると、o (n )のクエリコストを持つことができません。また、O (N ログN )に対応して前処理、KにおけるO (N ε)すべてのための、従ってΩ(N 1 - ε)照会コスト。