反転の数を最小限に抑えながらリストに効率的に挿入する


15

比較可能なアイテムの2つのリストuおよびsを想定します。INV(u)をuの反転数とします。

INV(u)の最小の増加でsの項目をuに挿入する効率的なアルゴリズムを探しています。

基本的に、リストにオブジェクトを挿入し、最初のリストの順序を維持しながら、「可能な限りソートされた」状態に保ちたいと思います。

例:

u = [4,6,2,9,7]
INV(u) = 3 ((4, 2), (6, 2) and (9, 7)

s = [8,3,10]

one optimal solution u' = [3, 4, 6, 2, 8, 9, 7, 10]
INV(u') = 5 ((4, 2), (7, 2) and (9, 7) + (3,2), (8,7))

different optimal solution u' = [3, 4, 6, 2, 9, 7, 8, 10]
INV(u') = 5 ((4, 2), (7, 2) and (9, 7) + (3,2), (9,8))

ご覧のとおり、独自の最適なソリューションはありません。

どんな種類のアイデアや方向性を検討するのがうれしいです。


思考の糧:素朴なアプローチは、sから1つの要素を取得し、uの各要素と左から右に比較し、それが反転である場合はインクリメントし、以前に計算された数を繰り越します。次に、同じ要素を使用してリストを右から左に走査し、各位置のカウントを増やします。Oのこの実行(|よ| * | U |)(| U |)スペース= Oと
trevore

1
すべての最大増加サブシーケンスを検査すると、どこかにつながる可能性があります。
ラファエル

回答:


2

これはトレボアの答えに関する詳細です。コメントに収まるには長すぎて、彼のソリューションの証拠(または少なくとも私がそれを理解する方法)が含まれています。

最適なソリューションでは、の要素が順序どおりに表示されることを示すことができます。sそうでない場合は、と仮定し、最適なソリューションでは逆の順序で表示されます。ましょうσ 1との間の要素の数であり、S 1およびsは2未満であり、S 1およびβ 1がより大きくされているものの数である。も同様におよび定義します。なお、とs1<s2σ1s1s2s1β1σ 2 β 2 S 2 σ 1σ 2 β 2β 1s1σ2β2s2σ1σ2β2β1。スワッピング及びsは2によって反転の数を変更します- β 1 + β 2 - σ 2 + σ 1 - 1、最も-1です。s1s2β1+β2σ2+σ11

要素を独立して挿入できることを確認するのは難しくありません。s彼らが注文した表示されますので、の要素互いの存在を「感じ」はありません。つまり、から要素のペアは反転カウントに寄与しません。これを行うには、sの中央値を線形時間で最適に挿入します。次に、再帰的に、中央値の左側に中央値よりも小さいsの要素を挿入し、右側に中央値よりも大きい要素を挿入します。ssss

中央値を位置に挿入すると、この実行時間はT | s || u |= T | s | / 2 | u |k + T | s | / 2 k + | あなた| + | s | 、線形| s |kT(|s|,|u|)=T(|s|/2,|u|k)+T(|s|/2,k)+|u|+|s||s|因子は、中央値を見つけての要素をシャッフルするためのものです。T | s || u |= O | s | log | s | + | u | log | s |であることを、帰納法によって簡単に示すことができますsT(|s|,|u|)=O(|s|log|s|+|u|log|s|)

依存していることに注意してくださいs | ここが最適です。空のuを使用して問題を解決することは、比較のみを使用してsを並べ替えることと同じです。への依存| あなた| また、シングルトンリストsおよびリストu 問題は線形作業を必要とするため、最適です。|s|us|u|su


詳しくお問い合わせいただきありがとうございます。それがまさに私が意図した解決策です。
trevore

1

OK、ここに私の解決策があります:

観測(これは多かれ少なかれ証明しました)は、最適なソリューションは常にsが昇順にソートされるものであることです。これにより、O((| u | + | s |)* log(| s |))アルゴリズムが生成されます。

単一の要素に最適なソリューションを見つけるには、コメントで述べたように、sから1つの要素を取り、左から右にuの各要素と比較し、カウンターを反転させて、以前に計算した数を繰り越します。次に、同じ要素を使用してリストを右から左に走査し、各位置のカウントを増やします。

これはO(| u |)です。

並べ替え

位置mのsの中央要素の場合:uで最適な位置bを見つけます(上記の方法を使用)。

sをmで、uをbで分割し、左部分と右部分で再帰的に呼び出し、結果をmと正しい順序で連結します。

uまたはsが空になったらすぐに停止します。


これはわかりません。sは入力です。sがソートされた順序であると仮定することはできません。アルゴリズムは、可能なすべての値に対して機能する必要があります。
DW

はい。ただし、最適なソリューションでは、sの要素は常に新しい配列で昇順で並べ替えられます。「ソート」のステップに注意してください。上記の例を参照してください。これまでに証明したのは、a、b in s、a <b aがuに最適に配置されている場合、bの最適な場所はaの右側です。
トレブル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.