Số lượng giao dịch hoán đổi trong bong bóng sắp xếp


14

Cho một mảng gồm N số nguyên, mỗi phần tử trong mảng có thể tăng thêm một số cố định b với một số xác suất p [ i ] , 0 i < n . Tôi phải tìm số lần hoán đổi dự kiến ​​sẽ diễn ra để sắp xếp mảng bằng cách sử dụng sắp xếp bong bóng .ANbp[i]0i<n

Tôi đã thử như sau:

  1. Xác suất cho một phần tử cho i < j có thể được tính toán dễ dàng từ các xác suất đã cho.A[i]>A[j]i<j

  2. Sử dụng ở trên, tôi đã tính số lần hoán đổi dự kiến ​​là:

    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.
    

Về cơ bản tôi đã đến với ý tưởng này bởi vì số lượng giao dịch hoán đổi dự kiến ​​có thể được tính bằng số lượng nghịch đảo của mảng. Vì vậy, bằng cách sử dụng xác suất đã cho, tôi đang tính xem liệu một số sẽ được hoán đổi với một số A [ j ] hay không .A[i]A[j]

Lưu ý rằng các thành phần mảng ban đầu có thể theo thứ tự bất kỳ, được sắp xếp hoặc không sắp xếp. Sau đó, mỗi số có thể thay đổi với một số xác suất. Sau này tôi phải tính số lần hoán đổi dự kiến.

Tôi đã đăng một câu hỏi tương tự trước đây nhưng nó không có tất cả các ràng buộc.

Tôi đã không nhận được bất kỳ gợi ý tốt nào về việc tôi thậm chí có đi đúng hướng hay không, vì vậy tôi đã liệt kê tất cả các ràng buộc ở đây. Xin vui lòng cho tôi một số gợi ý nếu tôi nghĩ về vấn đề một cách không chính xác.


6
Tpyo dễ thương trong tiêu đề, mặc dù.
JeffE

Bạn không có nghĩa là, đưa ra một sắp xếp mảng của N số nguyên, mỗi phần tử ... Ngoài ra phạm vi của những con số trong mảng ban đầu và sự khác biệt giữa chúng, liên quan đến b dường như mất tích.
Daniel Varod

Hãy nhớ rằng đối với loại phân tích này, bạn phải làm rõ "thực hiện" cụ thể là gì nếu ý tưởng Bubbledort bạn xem xét. Sẽ là tốt nhất nếu bạn đưa ra thuật toán bằng mã giả.
Raphael

Vấn đề này xuất phát từ một cuộc thi đang diễn ra trên trang web codechef codechef.com/JULY12/probols/LEBOBBLE Tôi sẽ vui lòng đăng bài tiếp cận của tôi sau cuộc thi.
rizwanhudda

Câu trả lời:


11

Đặt được định nghĩa như sau:BubbleSort

for (j = A.length; j > 1; j--)
    for (i = 0; i < j - 1; i++)
        if (A[i] > A[i + 1])
            swap(i, i + 1, A)

Đưa ra một số hoán vị , một đảo ngược được cho là đã xảy ra nếu x j < x i đối với một số i < j . Chúng tôi thấy rằng B u b b l e S o r t thực hiện kiểm tra đảo ngược cho mỗi cặp và nếu vậy, thực hiện trao đổi. Gọi X là số lần hoán đổi. Không khó để thấy trong trường hợp xấu nhất có X = ( nx1,,xnxj<xii<j.BubbleSortX hoán đổi có thể được thực hiện. Nhưng chúng tôi quan tâm đến trường hợp dự kiến, chúng tôi có thể tính toán bằng cách xác địnhXtheo các nghịch đảo trongBubbleSort.X=(n2)XBubbleSort

X=ji<jIijIij(i,j)E[X]=E[ji<jIij]=ji<jE[Iij]P{Iij}

P{Iij}=12xj<xixi<xjij

E[X]=ji<jE[Iij]=ji<j12=(n2)12=n(n1)4

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.