サイズのサブシーケンスは、シーケンスからシーケンスのソート順でソートされた順序で$ \ ge \ lfloor \ frac {n} {2} \ rforor $を得ることができますか?
-
29-09-2020 - |
質問
$ 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)$ です。仕分けのための周知の下限。
所属していません cs.stackexchange