バブルソートでのスワップの予想数


14

整数の配列が与えられた場合、配列各要素は、ある確率、固定数だけ増加できます。バブルソートを使用して配列をソートするために行われるスワップの予想数を見つける必要があります。NのB P [ I ] 0 I < NANbp[i]0i<n

私は次を試しました:

  1. 要素の確率するための与えられた確率から容易に計算することができます。i < jA[i]>A[j]i<j

  2. 上記を使用して、スワップの予想数を次のように計算しました。

    double ans = 0.0;
    for ( int i = 0; i < N-1; i++ ){
        for ( int j = i+1; j < N; j++ ) {
            ans += get_prob(A[i], A[j]); // Computes the probability of A[i]>A[j] for i < j.
    

基本的にこの考えに至ったのは、予想されるスワップの数が配列の反転の数によって計算できるからです。したがって、与えられた確率を利用することで、数値が数値と交換されるかどうかを計算しています。A [ j ]A[i]A[j]

初期配列要素は、並べ替えまたは並べ替えなしの任意の順序にすることができます。その後、各数値はある程度の確率で変化します。この後、スワップの予想数を計算する必要があります。

以前に同様の質問を投稿しましが、すべての制約がありませんでした。

私は正しい軌道に乗っているかどうかについて良いヒントを得られなかったので、ここにすべての制約をリストしました。問題を間違った方法で考えている場合は、いくつかのヒントを教えてください。


6
ただし、タイトルのかわいいtpyo。
-JeffE

あなたは、意味与えてはいけないソートされた N個の整数の配列、各要素を...また、Bに対する初期配列内の数値とそれらの間の差異の範囲は、不足しているように見えます。
ダニーヴァロード

この種の分析では、Bubblesortのアイデアを検討する場合、特定の「実装」を非常に明確にする必要があることに注意してください。擬似コードでアルゴリズムを指定した場合に最適です。
ラファエル

この問題は、codechefサイトcodechef.com/JULY12/problems/LEBOBBLEで進行中のコンテストからのもの です。コンテスト後に私のアプローチを投稿させていただきます。
-rizwanhudda

回答:


11

LET 、以下のように定義されます。BubbleSort

for (j = A.length; j > 1; j--)
    for (i = 0; i < j - 1; i++)
        if (A[i] > A[i + 1])
            swap(i, i + 1, A)

並べ替えxが与えられた場合反転が発生していると言われている場合のx jの < X Iいくつかのための< J 我々は、参照 BにuとB B L E S O R Tの各ペアについて実行反転チェック、およびもしそうであれば、スワップを行います。ましょ Xは、スワップの数です。最悪の場合、があることを確認するのは難しくありませんx1,,xnxj<xii<j.BubbleSortX XBubbleSortX=(n2)可能なスワップ。しかし、反転に関してを定義することで計算できる期待されるケースに興味があります。XBあなたはbbleSort

今せいくつかのペアのための反転が存在することの指標変数である。期待値はとして定義されます。を決定する必要があります。 I i ji j E [ X ] = E [ j i < j I i j ] = j i < j E [ I i j ] P { I I J }バツ=j<jjjjE[バツ]=E[j<jj]=j<jE[j]P{j}

可能性のある順列を入力として想定し、それぞれが一様な確率である場合、であることが示されます。この背後にある理由は、可能な置換の下で、時間の半分がであり、時間の半分がです。 xj<xixi<xjijP{j}=12バツj<バツバツ<バツjj

期待値計算に戻ると、E[バツ]=j<jE[j]=j<j12=n212=nn14

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