คาดว่าจำนวนของการแลกเปลี่ยนในการจัดเรียงฟอง


14

รับอาร์เรย์ของจำนวนเต็มองค์ประกอบในอาร์เรย์แต่ละคนสามารถเพิ่มขึ้นจำนวนคงที่กับบางส่วนน่าจะเป็น ,<n ฉันต้องหาจำนวนสว็อปที่คาดว่าจะเกิดขึ้นเพื่อจัดเรียงอาเรย์โดยใช้การเรียงลำดับแบบบับเบิN P [ ผม] 0 ฉัน< nANbp[i]0i<n

ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:

  1. ความน่าจะเป็นขององค์ประกอบสำหรับสามารถคำนวณได้ง่ายจากความน่าจะเป็นที่กำหนดi < jA[i]>A[j]i<j

  2. จากการใช้ข้างต้นฉันได้คำนวณจำนวน 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 ]A[i]A[j]

โปรดทราบว่าองค์ประกอบอาร์เรย์เริ่มต้นสามารถเรียงลำดับหรือไม่เรียงลำดับใดก็ได้ จากนั้นแต่ละหมายเลขสามารถเปลี่ยนแปลงได้ตามความน่าจะเป็น หลังจากนี้ฉันต้องคำนวณจำนวนสว็อปที่คาดหวัง

ฉันเคยโพสต์คำถามที่คล้ายกันมาก่อน แต่ก็ไม่ได้มีข้อ จำกัด ทั้งหมด

ฉันไม่ได้รับคำแนะนำที่ดีเกี่ยวกับว่าฉันยังอยู่ในเส้นทางที่ถูกต้องหรือไม่ดังนั้นฉันจึงแสดงข้อ จำกัด ทั้งหมดที่นี่ โปรดให้คำแนะนำกับฉันหากฉันคิดถึงปัญหาในวิธีที่ไม่ถูกต้อง


6
น่ารัก tpyo ในชื่อแม้ว่า
JeffE

คุณไม่ได้หมายความว่าให้เรียงจำนวนเต็ม N จำนวนแต่ละองค์ประกอบ ... นอกจากนี้ช่วงของตัวเลขในอาร์เรย์เริ่มต้นและความแตกต่างระหว่างพวกเขาเมื่อเทียบกับ b ดูเหมือนจะหายไป
Danny Varod

โปรดทราบว่าสำหรับการวิเคราะห์ประเภทนี้คุณต้องระบุอย่างชัดเจนว่า "การนำไปใช้" โดยเฉพาะอย่างยิ่งหากแนวคิด Bubblesort ที่คุณพิจารณาคืออะไร มันจะดีที่สุดถ้าคุณให้อัลกอริทึมในรหัสหลอก
กราฟิลส์

ปัญหานี้เกิดจากการประกวดอย่างต่อเนื่องในเว็บไซต์codechef codechef.com/JULY12/problems/LEBOBBLE ฉันยินดีที่จะโพสต์แนวทางของฉันหลังจากการประกวด
rizwanhudda

คำตอบ:


11

อนุญาตให้ถูกกำหนดดังนี้:Bยูล.อีSโอRเสื้อ

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)

เมื่อพิจารณาการเปลี่ยนแปลงการผกผันได้เกิดขึ้นถ้าสำหรับเราเห็นว่าทำการตรวจสอบการผกผันของแต่ละคู่และถ้าเป็นเช่นนั้นจะทำการสลับ ให้เป็นจำนวนของการแลกเปลี่ยน ไม่ยากที่จะเห็นในกรณีที่แย่ที่สุดที่มีการแลกเปลี่ยนที่เป็นไปได้แต่เรามีความสนใจในกรณีที่คาดว่าซึ่งเราสามารถคำนวณโดยการกำหนดในแง่ของการพลิกกลับใน{ฟองเรียง}x J < x ฉันฉัน< J B U ลิตรอีS o R เสื้อ X X = ( nx1,,xnxJ<xผมผม<J.Bยูล.อีSโอRเสื้อX XBubblesortX=(n2)XBยูล.อีSโอRเสื้อ

ตอนนี้ให้ที่เป็นตัวแปรตัวบ่งชี้ว่ามีอยู่ผกผันสำหรับคู่บางj) ความคาดหวังถูกกำหนดให้เป็น{IJ}] ตอนนี้เราจำเป็นต้องตรวจสอบ\}ฉันฉันเจ ( ฉัน, J ) E [ X ] = E [ Σ เจΣ ฉัน< JฉันฉันJ ] = Σ เจΣ ฉัน< J E [ ฉันฉันJ ] P { I i j }X=ΣJΣผม<JผมผมJผมผมJ(ผม,J)E[X]=E[ΣJΣผม<JผมผมJ]=ΣJΣผม<JE[ผมผมJ]P{ผมผมJ}

เมื่อสมมติว่าการเปลี่ยนแปลงที่เป็นไปได้ใด ๆ เป็น input แต่ละคนมีความน่าจะเป็นเครื่องแบบก็สามารถแสดงให้เห็นว่า{2} เหตุผลที่อยู่เบื้องหลังนี้คือการที่อยู่ภายใต้การเปลี่ยนแปลงที่เป็นไปได้ใด ๆ ครึ่งหนึ่งของเวลาและครึ่งหนึ่งของเวลาสำหรับเจP{ผมผมJ}=12xJ<xผมxผม<xJผมJ

กลับไปที่การคำนวณความคาดหวังของเราเราเห็นว่าE[X]=ΣJΣผม<JE[ผมผมJ]=ΣJΣผม<J12=(n2)12=n(n-1)4

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.