Étant donné un tableau de entiers, chaque élément du tableau peut être augmenté d'un nombre fixe avec une certaine probabilité , 0 \ leq i <n . Je dois trouver le nombre attendu de swaps qui auront lieu pour trier le tableau à l'aide du tri à bulles .
J'ai essayé ce qui suit:
La probabilité pour un élément pour peut être calculée facilement à partir des probabilités données.
En utilisant ce qui précède, j'ai calculé le nombre attendu de swaps comme suit:
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.
Fondamentalement, je suis venu à cette idée parce que le nombre attendu de swaps peut être calculé par le nombre d'inversions du tableau. Donc, en utilisant une probabilité donnée, je calcule si un nombre sera échangé avec un nombre .
Notez que les éléments du tableau initial peuvent être dans n'importe quel ordre, triés ou non triés. Ensuite, chaque nombre peut changer avec une certaine probabilité. Après cela, je dois calculer le nombre attendu de swaps.
J'ai déjà posé une question similaire mais elle n'avait pas toutes les contraintes.
Je n'ai pas obtenu de bons indices pour savoir si je suis même sur la bonne voie ou non, j'ai donc énuméré toutes les contraintes ici. Veuillez me donner quelques conseils si je pense au problème de manière incorrecte.
la source
Réponses:
Soit être défini comme suit:BubbleSort
Étant donné une certaine permutation , une inversion se serait produite si x j < x i pour certains i < j . Nous voyons que B u b b l e S o r t effectue un contrôle d'inversion pour chaque paire, et si c'est le cas, effectue un swap. Soit X le nombre de swaps. Il n'est pas difficile de voir que dans le pire des cas il y a X = ( nx1,⋯,xn xj<xi i<j. BubbleSort X échanges possibles. Mais nous nous intéressons au cas attendu, que nous pouvons calculer en définissantXen termes d'inversions dansBubbleSort.X=(n2) X BubbleSort
Soit maintenant où I i j est la variable indicatrice qu'il existe une inversion pour une paire ( i , j ) . L'espérance est définie comme E [ X ] = E [ ∑ j ∑ i < j I i j ] = ∑ j ∑ i < j E [ I i j ]X=∑j∑i<jIij Iij (i,j) E[X]=E[∑j∑i<jIij]=∑j∑i<jE[Iij] . Nous devons maintenant déterminer .P{Iij}
En supposant une permutation possible en entrée, chacune avec une probabilité uniforme, on peut montrer que . Le raisonnement derrière cela est que sous toute permutation possible, la moitié du tempsxj<xiet la moitié du tempsxi<xjpouri≠j.P{Iij}=12 xj<xi xi<xj i≠j
Revenant à notre calcul des attentes, nous voyons queE[X]=∑j∑i<jE[Iij]=∑j∑i<j12=(n2)⋅12=n(n−1)4
la source