Bei einem Array von ganzen Zahlen kann jedes Element in dem Array mit einer gewissen Wahrscheinlichkeit , um eine feste Zahl erhöht werden . Ich muss die erwartete Anzahl von Swaps finden, die stattfinden werden, um das Array mithilfe der Blasensortierung zu sortieren .N b p [ i ] 0 ≤ i < n
Ich habe Folgendes versucht:
Die Wahrscheinlichkeit für ein Element für kann leicht aus den gegebenen Wahrscheinlichkeiten berechnet werden.i < j
Mit den obigen Angaben habe ich die erwartete Anzahl von Swaps wie folgt berechnet:
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.
Grundsätzlich bin ich auf diese Idee gekommen, weil sich die erwartete Anzahl von Swaps aus der Anzahl der Inversionen des Arrays berechnen lässt. Also berechne ich unter Verwendung der gegebenen Wahrscheinlichkeit, ob eine Zahl mit einer Zahl getauscht wird .A [ j ]
Beachten Sie, dass die anfänglichen Array-Elemente in beliebiger Reihenfolge sortiert oder unsortiert sein können. Dann kann sich jede Zahl mit einiger Wahrscheinlichkeit ändern. Danach muss ich die erwartete Anzahl von Swaps berechnen.
Ich habe zuvor eine ähnliche Frage gestellt, aber sie enthielt nicht alle Einschränkungen.
Ich habe keine guten Tipps bekommen, ob ich überhaupt auf dem richtigen Weg bin oder nicht, deshalb habe ich hier alle Einschränkungen aufgelistet. Bitte geben Sie mir einige Hinweise, wenn ich falsch über das Problem nachdenke.