Dato un array di numeri interi, ogni elemento dell'array può essere aumentato di un numero fisso con una certa probabilità , . Devo trovare il numero previsto di swap che avranno luogo per ordinare l'array usando il bubble sort .
Ho provato quanto segue:
La probabilità per un elemento per può essere calcolata facilmente dalle probabilità date.
Utilizzando quanto sopra, ho calcolato il numero previsto di swap come:
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.
Fondamentalmente sono arrivato a questa idea perché il numero previsto di swap può essere calcolato dal numero di inversioni dell'array. Quindi, usando la probabilità data, sto calcolando se un numero verrà scambiato con un numero .
Si noti che gli elementi dell'array iniziale possono essere in qualsiasi ordine, ordinati o non ordinati. Quindi ogni numero può cambiare con una certa probabilità. Dopo questo devo calcolare il numero previsto di swap.
Ho pubblicato una domanda simile prima ma non aveva tutti i vincoli.
Non ho avuto buoni suggerimenti sul fatto che io sia sulla strada giusta o meno, quindi ho elencato tutti i vincoli qui. Per favore, mi dia qualche suggerimento se sto pensando al problema in modo errato.