É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.