พยายามเข้าใจ 2N lnN เปรียบเทียบกับ quicksort


13

ฉันกำลังทำการวิเคราะห์ quicksort ในหนังสือ Algorithms ของ Sedgewick เขาสร้างความสัมพันธ์ที่เกิดซ้ำต่อไปนี้สำหรับจำนวนการเปรียบเทียบใน quicksort ขณะที่เรียงลำดับอาร์เรย์ของรายการ N ที่แตกต่างกัน

ป้อนคำอธิบายรูปภาพที่นี่

ฉันมีช่วงเวลาที่ยากลำบากในการทำความเข้าใจสิ่งนี้ ... ฉันรู้ว่าต้องใช้ความน่าจะเป็น 1 / N สำหรับองค์ประกอบใด ๆ ที่จะกลายเป็นเดือยและถ้าหาก k กลายเป็นเดือยย่อยย่อยด้านซ้ายจะมีองค์ประกอบ k-1 และย่อยขวา อาร์เรย์จะมีองค์ประกอบ Nk

1. ค่าใช้จ่ายในการแบ่งพาร์ติชันกลายเป็น N + 1 อย่างไร ต้องใช้ N + 1 เปรียบเทียบกับการแบ่งพาร์ติชันหรือไม่

2.Sedgewick กล่าวว่าสำหรับแต่ละค่าของ k ถ้าคุณบวกมันความน่าจะเป็นที่องค์ประกอบแบ่งเป็น k + ค่าใช้จ่ายสำหรับสองอาร์เรย์ย่อยที่คุณได้รับสมการข้างต้น

  • ใครสามารถอธิบายสิ่งนี้เพื่อให้ผู้ที่มีความรู้ทางคณิตศาสตร์น้อยลง (ฉัน) สามารถเข้าใจได้?
  • คุณจะหาคำที่สองในสมการได้อย่างไร
  • คำนั้นหมายถึงอะไรกันแน่?

1
ส่วนหนึ่งของคำตอบคัดลอกมาจากen.wikipedia.org/wiki/Quicksort "ดังนั้นโดยเฉลี่ยแล้วแยกได้ทั้งหมดและสังเกตว่าจำนวนการเปรียบเทียบสำหรับพาร์ติชันคือ n - 1, จำนวนเฉลี่ยของการเปรียบเทียบการเรียงสับเปลี่ยนทั้งหมดของอินพุต ลำดับสามารถประมาณได้อย่างแม่นยำโดยการแก้ความสัมพันธ์ที่เกิดซ้ำ: "ด้วยเหตุผลบางอย่างที่เราออกโดย 2 ที่นี่ - n-1 vs n + 1
งาน

คำตอบ:


7

ฟังก์ชั่นค่าใช้จ่ายCสำหรับ quicksort ประกอบด้วยสองส่วน ส่วนแรกคือค่าใช้จ่ายในการแบ่งอาร์เรย์ในสอง 'ครึ่ง' (ครึ่งไม่จำเป็นต้องมีขนาดเท่ากันดังนั้นคำพูด) ส่วนที่สองคือค่าใช้จ่ายในการคัดแยกสองส่วน

  1. (N + 1)ระยะเป็นจริงเป็นคำย่อและมาจากคำว่า

    (N - 1) + 2
    

    นี่คือค่าใช้จ่ายของการแบ่งพาร์ติชันใน quicksort: N-1เปรียบเทียบกับค่า pivot และเปรียบเทียบเพิ่มอีก 2 อันเนื่องจากเงื่อนไขขอบเขตในการแบ่งพาร์ติชัน

  2. ส่วนที่สองของสมการประกอบด้วยค่าใช้จ่ายสำหรับการเรียงลำดับสอง 'ประกบ' kในด้านของมูลค่าหมุนอย่างใดอย่างหนึ่ง

    หลังจากเลือกค่า pivot คุณจะเหลือ 'ครึ่ง' ที่ไม่เรียงลำดับสองตัว ค่าใช้จ่ายของการเรียงลำดับเหล่านี้ 'ประกบ' ขึ้นอยู่กับขนาดของพวกเขาและอธิบายว่าเป็นแอปพลิเค recursive Cของฟังก์ชั่นค่าใช้จ่ายที่ง่ายที่สุด หากเดือยมีค่าน้อยที่สุดNค่าใช้จ่ายในการจัดเรียงแต่ละ 'ครึ่ง' จะเป็นไปตามลำดับC(0)และC(N-1)(ค่าใช้จ่ายสำหรับการเรียงลำดับอาร์เรย์ด้วยองค์ประกอบ 0 และต้นทุนสำหรับการเรียงลำดับด้วยN-1องค์ประกอบ) หากเดือยมีค่าน้อยที่สุดเป็นอันดับที่ห้าค่าใช้จ่ายในการจัดเรียงแต่ละส่วน 'ครึ่ง' จะเป็นไปตามลำดับC(5)และC(N-6)(ค่าใช้จ่ายสำหรับการเรียงลำดับอาร์เรย์ที่มี 5 องค์ประกอบและค่าใช้จ่ายในการเรียงลำดับด้วยN-6องค์ประกอบ) และในทำนองเดียวกันสำหรับค่า pivot อื่น ๆ ทั้งหมด

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

    เนื่องจากค่า pivot แต่ละค่ามีโอกาสเท่ากันโอกาสในการเลือกค่า pivot ที่เฉพาะเจาะจงคือ1/Nถ้าคุณมีNองค์ประกอบ เพื่อทำความเข้าใจนี้คิดเกี่ยวกับการหมุนลูกเต๋า ด้วยลูกเต๋าที่เหมาะสมโอกาสในการเผชิญหน้าโดยแต่ละด้านจะเท่ากันดังนั้นโอกาสในการหมุน 1 คือ 1/6

    รวมกันสิ่งนี้จะให้คำสรุปรวมที่สำหรับแต่ละค่าที่เป็นไปได้ k ของเดือยค่าใช้จ่าย ( C(k-1) + C(N-k)) จะถูกคูณด้วยโอกาส ( 1/N)

  3. ที่มาเพิ่มเติมของ formulat รวมในคำถาม2N lnNในชื่อใช้คณิตศาสตร์มากเกินไปที่จะอธิบายรายละเอียดในที่นี้ แต่มันก็ขึ้นอยู่กับความเข้าใจว่าค่าใช้จ่ายสำหรับการเรียงลำดับของNองค์ประกอบ ( C(N)) สามารถแสดงในแง่ของการเรียงลำดับและ อาร์เรย์ของN-1องค์ประกอบ ( C(N-1)) Nและปัจจัยที่เป็นสัดส่วนโดยตรงกับ


2
  1. ดูเหมือนว่า N + 1 เป็นจำนวนการเปรียบเทียบสำหรับขั้นตอนการแบ่งพาร์ติชันเป็นข้อผิดพลาดในหนังสือ คุณจำเป็นต้องค้นหาองค์ประกอบที่ไม่ใช่เดือยแต่ละอันไม่ว่าจะน้อยกว่าหรือมากกว่าเดือยซึ่งใช้การเปรียบเทียบหนึ่งครั้ง จึงเปรียบเทียบ N – 1 ทั้งหมดไม่ใช่ N + 1 (พิจารณากรณีที่ง่ายที่สุด N = 2 คือหนึ่งเดือยและอีกองค์ประกอบหนึ่ง: ไม่มีที่ว่างสำหรับการเปรียบเทียบสามอย่างระหว่างสององค์ประกอบ)

  2. พิจารณากรณีที่ pivot ที่เลือกเกิดขึ้นเป็นองค์ประกอบที่เล็กที่สุด (k = 1) ซึ่งหมายความว่าอาร์เรย์จะถูกแบ่งออกเป็นส่วนที่ว่างเปล่าทางด้านซ้าย (ไม่มีองค์ประกอบที่น้อยกว่าเดือย) และส่วนทางด้านขวาที่มีองค์ประกอบทั้งหมดยกเว้นสำหรับเดือย (องค์ประกอบอื่น ๆ ทั้งหมดมีค่ามากกว่าเดือย ) ซึ่งหมายความว่าปัญหาย่อยที่คุณต้องการแก้ในขณะนี้มีขนาด 0 และ N – 1 (k – 1 และ N – k) ตามลำดับและต้องการการเปรียบเทียบ C (0) และ C (N-1); ดังนั้น C (0) + C (N – 1) ทั้งหมด

    หากเดือยเกิดขึ้นเป็นองค์ประกอบที่เล็กที่สุดเป็นอันดับสอง (k = 2) ขนาดของปัญหาย่อยคือ 1 และ N – 2 (k – 1 และ N – k; องค์ประกอบหนึ่งทางด้านซ้ายเพราะมันมีขนาดเล็กกว่าตัวเดียว เดือย) ดังนั้นการแก้ปัญหาย่อยเหล่านี้ซ้ำ ๆ จึงต้องเปรียบเทียบ C (1) + C (N – 2) และถ้าหาก pivot เป็นองค์ประกอบที่เล็กที่สุดอันดับสามส่วนที่สี่เป็นต้นนี่คือนิพจน์ในตัวเศษ

    เนื่องจากมีการเลือก pivot แบบสุ่มจากองค์ประกอบ N แต่ละกรณี (pivot มีขนาดเล็กที่สุด pivot มีขนาดเล็กที่สุดเป็นอันดับสอง ฯลฯ ) เกิดขึ้นโดยมีความน่าจะเป็นเท่ากับ 1 / N นั่นคือสิ่งที่ N ในตัวส่วนมาจาก

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