รับอาร์เรย์ของจำนวนเต็มองค์ประกอบในอาร์เรย์แต่ละคนสามารถเพิ่มขึ้นจำนวนคงที่กับบางส่วนน่าจะเป็น ,<n ฉันต้องหาจำนวนสว็อปที่คาดว่าจะเกิดขึ้นเพื่อจัดเรียงอาเรย์โดยใช้การเรียงลำดับแบบบับเบิลN ขP [ ผม] 0 ≤ ฉัน< n
ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:
ความน่าจะเป็นขององค์ประกอบสำหรับสามารถคำนวณได้ง่ายจากความน่าจะเป็นที่กำหนดi < j
จากการใช้ข้างต้นฉันได้คำนวณจำนวน swaps ที่คาดไว้เป็น:
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.
โดยทั่วไปฉันมาถึงแนวคิดนี้เนื่องจากจำนวน swaps ที่คาดหวังสามารถคำนวณได้โดยจำนวน inversions ของอาร์เรย์ ดังนั้นโดยการใช้ความน่าจะเป็นที่ได้รับฉันกำลังคำนวณว่าจะเปลี่ยนหมายเลขเป็นตัวเลขหรือไม่A [ j ]
โปรดทราบว่าองค์ประกอบอาร์เรย์เริ่มต้นสามารถเรียงลำดับหรือไม่เรียงลำดับใดก็ได้ จากนั้นแต่ละหมายเลขสามารถเปลี่ยนแปลงได้ตามความน่าจะเป็น หลังจากนี้ฉันต้องคำนวณจำนวนสว็อปที่คาดหวัง
ฉันเคยโพสต์คำถามที่คล้ายกันมาก่อน แต่ก็ไม่ได้มีข้อ จำกัด ทั้งหมด
ฉันไม่ได้รับคำแนะนำที่ดีเกี่ยวกับว่าฉันยังอยู่ในเส้นทางที่ถูกต้องหรือไม่ดังนั้นฉันจึงแสดงข้อ จำกัด ทั้งหมดที่นี่ โปรดให้คำแนะนำกับฉันหากฉันคิดถึงปัญหาในวิธีที่ไม่ถูกต้อง