サイズのサブシーケンスは、シーケンスからシーケンスのソート順でソートされた順序で$ \ ge \ lfloor \ frac {n} {2} \ rforor $を得ることができますか?

cs.stackexchange https://cs.stackexchange.com/questions/128405

質問

$ n $ の$ a $ $ n $ のサイズ $ \ geq \ lfloor \ frac {n} {2} \ rfloor $ $ O(n)$ 時間?

たとえば、 $ a= [4,11,6,2,9,7] $ であるとしましょう。次に、必要なシーケンスの1つが $ [2,7,11] $ _ span>にすることができます。これは、サブシーケンス $ [11,2,7] $ 。あなたの戦略はソートされた順序でそのようなそのような後処理をすることができます。

はい、それは99.99%不可能だと思います。しかし、確かにわかりません。誰もがそのような戦略が存在しないことやそうでなければ証明することができないことを誰もが示していることができますか?

役に立ちましたか?

解決

それは不可能です(あなたが比較を使用するだけで)。まず、 $ a [i] \ to(a [i]、i)$ のすべての要素を増やします。配列からシーケンスをリニアタイムで削除すると、これが必要です。

次のソートアルゴリズムを考慮してください。

def sort(a):
    subseq = get_sorted_subseq(a)  # Your function. Assume takes O(n) time
    b = a.exclude(subseq)          # Since we know indices, takes O(n) time
    return merge(subseq, sort(b)). # Takes O(n) time (see merge sort) + recursive call of size <= n/2
.

結果として、実行時間は $ O(n + \ frac n2 + \ frac n4 + ...)= o(n)$ です。仕分けのための周知の下限。

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top