Diberikan array dari bilangan bulat N , setiap elemen dalam array dapat ditingkatkan dengan angka tetap b dengan beberapa probabilitas p [ i ] , 0 ≤ i < n . Saya harus menemukan jumlah swap yang diharapkan yang akan terjadi untuk mengurutkan array menggunakan bubble sort .
Saya sudah mencoba yang berikut ini:
Probabilitas untuk elemen untuk i < j dapat dihitung dengan mudah dari probabilitas yang diberikan.
Dengan menggunakan di atas, saya telah menghitung jumlah swap yang diharapkan sebagai:
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.
Pada dasarnya saya sampai pada ide ini karena jumlah swap yang diharapkan dapat dihitung dengan jumlah inversi array. Jadi dengan memanfaatkan probabilitas yang diberikan saya menghitung apakah nomor akan ditukar dengan nomor A [ j ] .
Perhatikan bahwa elemen array awal dapat dalam urutan apa pun, diurutkan atau tidak disortir. Kemudian setiap angka dapat berubah dengan beberapa probabilitas. Setelah ini saya harus menghitung jumlah swap yang diharapkan.
Saya telah memposting pertanyaan serupa sebelumnya tetapi tidak memiliki semua kendala.
Saya tidak mendapatkan petunjuk yang baik apakah saya berada di jalur yang benar atau tidak, jadi saya mendaftarkan semua kendala di sini. Tolong beri saya beberapa petunjuk jika saya memikirkan masalah dengan cara yang salah.
sumber
Jawaban:
Biarkan didefinisikan sebagai berikut:BubbleSort
Diberikan beberapa permutasi , inversi dikatakan terjadi jika x j < x i untuk beberapa i < j . Kita melihat bahwa B u b b l e S o r t melakukan cek inversi untuk setiap pasangan, dan jika demikian, melakukan swap. Biarkan X menjadi jumlah swap. Tidak sulit untuk melihat dalam kasus terburuk ada X = ( nx1,⋯,xn xj<xi i<j. BubbleSort X kemungkinan swap dibuat. Tapi kami tertarik dalam kasus diharapkan, yang kita dapat menghitung dengan mendefinisikanXdalam hal inversi diBubbleSort.X=(n2) X BubbleSort
Sekarang mari mana saya i j adalah variabel indikator bahwa ada inversi untuk beberapa pasangan ( i , j ) . Harapan didefinisikan sebagai E [ X ] = E [ Σ j Σ i < j Saya 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] . Kita sekarang perlu menentukan .P{Iij}
Ketika mengasumsikan setiap permutasi yang mungkin sebagai input, masing-masing dengan probabilitas seragam, dapat ditunjukkan bahwa . Alasan di balik ini adalah bahwa di bawah permutasi yang mungkin, setengah dari waktuxj<xidan setengah dari waktuxi<xjuntuki≠j.P{Iij}=12 xj<xi xi<xj i≠j
sumber