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 .
Tôi đã thử như sau:
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.
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 .
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.