เรียงลำดับอาร์เรย์ของจำนวนเต็ม 5 จำนวนโดยเปรียบเทียบได้สูงสุด 7 รายการ


19

ฉันจะเรียงลำดับรายการจำนวนเต็ม 5 ตัวได้อย่างไรในกรณีที่แย่ที่สุดใช้เวลา 7 เปรียบเทียบ? ฉันไม่สนใจว่าจะมีการปฏิบัติการอื่นอีกกี่ครั้ง ฉันไม่รู้อะไรเป็นพิเศษเกี่ยวกับจำนวนเต็ม

ฉันได้ลองวิธีการแบ่งและพิชิตที่แตกต่างกันสองสามข้อซึ่งทำให้ฉันเปรียบเทียบได้ 8 ข้อเช่นต่อไปนี้วิธีการผสานหรือผสานการผสานกับการใช้การค้นหาแบบไบนารีเพื่อค้นหาตำแหน่งการแทรก แต่ทุกครั้งที่ฉันจบด้วย 8 เปรียบเทียบกรณีที่เลวร้ายที่สุด .

ตอนนี้ฉันแค่มองหาคำใบ้ไม่ใช่วิธีแก้ปัญหา


คุณลองเขียนต้นไม้ "เปรียบเทียบกับ" แล้วหรือยัง มันมีใบแต่ละใบสอดคล้องกับการเปลี่ยนแปลงของจำนวนเต็ม หากคุณไม่รู้ว่าฉันหมายถึงอะไรโดยต้นไม้ "เปรียบเทียบกับ" คุณรู้หรือไม่ว่าหลักฐานที่คุณต้องการเปรียบเทียบ ? ปล. อะไรทำให้คุณคิดว่าเป็นไปได้ n บันทึกn5!=120nlogn
Pål GD

1
ในส่วนที่สองของ 8 บิตif(x > y)นั้นเหมือนกับif((x - y) & 0x80)การเปรียบเทียบ ฉันเดาว่าเราควรลืมว่าวัตถุนั้นเป็นจำนวนเต็มและสมมติว่าเราต้องใช้compare(x, y)ฟังก์ชั่นเวทมนต์เพื่อเปรียบเทียบวัตถุเหล่านั้น ...
Karolis Juodelė

2
'ตรวจสอบส่วนที่ 5.3 เกี่ยวกับการเรียงลำดับที่ดีที่สุดในเล่ม 3 ของศิลปะการเขียนโปรแกรมคอมพิวเตอร์ซึ่งครอบคลุมคำถามนี้อย่างแม่นยำ' นับเป็นคำใบ้หรือวิธีแก้ปัญหาหรือไม่ :-)
Steven Stadnicki

3
ข้อ จำกัด คือและ128 ดังนั้นจึงเป็นไปได้ (ตามหลักการ) 5 ! = 120 < 2 7 = 1282cn!5!=120<27=128
vonbrand

คำตอบ:


23

มีเพียงวิธีเดียวในการเริ่มต้นกระบวนการนี้ (และสำหรับการตัดสินใจเกือบทั้งหมดของคุณเกี่ยวกับสิ่งที่จะเปรียบเทียบในขั้นตอนหลังมีเพียงหนึ่งวิธีที่ถูกต้อง) นี่คือวิธีการคิดออก ก่อนอื่นให้สังเกตว่ามีคำตอบที่เป็นไปได้ที่คุณจะได้รับสำหรับการเปรียบเทียบของคุณและพีชคณิตที่แตกต่างกันที่คุณต้องแยกแยะ5 ! = 12027=1285!=120

การเปรียบเทียบครั้งแรกนั้นง่าย: คุณต้องเปรียบเทียบสองปุ่มและเนื่องจากคุณไม่รู้อะไรเลยเกี่ยวกับพวกมันตัวเลือกทั้งหมดจึงดีพอ ๆ กัน ดังนั้นสมมติว่าคุณเปรียบเทียบและและพบว่าข ตอนนี้คุณเหลือคำตอบที่เป็นไปได้และเหลืออีกพีชคณิตที่เหลือ (เนื่องจากเราได้ลบครึ่งหนึ่ง)b a b 2 6 = 64 60abab26=6460

ต่อไปเราสามารถเปรียบเทียบและหรือเราสามารถเปรียบเทียบกับหนึ่งในคีย์ที่เราใช้ในการเปรียบเทียบครั้งแรก หากเราเปรียบเทียบและและเรียนรู้ว่าเรามีคำตอบที่เหลือและการเปลี่ยนลำดับที่เป็นไปได้ ในทางกลับกันถ้าเราเปรียบเทียบกับและเราค้นพบว่าเรามีการเปลี่ยนลำดับที่เป็นไปได้ที่เหลืออยู่เพราะเราตัดการเปลี่ยนรูปแบบที่เป็นไปได้ (ที่มี ) . เรามีเท่านั้นd 32 30 40 1 / 3 32cdccdcd3230caac401/3cab32 เหลือคำตอบที่เป็นไปได้ดังนั้นเราจึงไม่มีโชค

ตอนนี้เรารู้แล้วว่าเราต้องเปรียบเทียบคีย์ตัวแรกและตัวที่สองกับคีย์ที่สามและสี่ เราสามารถสมมติว่าเรามีและd หากเราเปรียบเทียบกับปุ่มสี่ปุ่มใด ๆ เหล่านี้ด้วยเหตุผลเดียวกับที่เราใช้ในขั้นตอนก่อนหน้าเราอาจกำจัดเพียงแค่ของการเปลี่ยนลำดับที่เหลือและเราไม่มีโชค ดังนั้นเราจึงมีการเปรียบเทียบสองของปุ่ม D คำนึงถึงความสมมาตรบัญชีเรามีสองทางเลือกเปรียบเทียบและหรือเปรียบเทียบและdที่คล้ายกันแสดงให้เห็นว่าข้อโต้แย้งนับเราต้องเปรียบเทียบและคเราสามารถสมมติได้โดยไม่สูญเสียความเป็นนายพลที่d E 1 / 3 , , , วันที่d C dabcde1/3a,b,c,dacadacacและตอนนี้เรามีและdabacd

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


คุณไม่ได้รับวิธีที่เปรียบเทียบเพื่อเพียงได้รับคุณลงถึง 40 พีชคณิต? ac
Robert S. Barnes

1
@ Robert: สมมติว่าคุณมีและ จากนั้นมีสองพีชคณิต, , สอดคล้องกับข้อ จำกัด เหล่านี้< < และ< < สำหรับการเรียงสับเปลี่ยนทั้งสองนี้มีสี่ตำแหน่งที่คุณสามารถเพิ่มdและห้าตำแหน่งที่คุณสามารถเพิ่มeได้ abaca,b,ca<b<ca<c<bde
Peter Shor

8

คุณสามารถค้นหาได้ใน The Art of Computer Programming vol III โดย D.Knuth แต่กลยุทธ์เป็นเช่นนี้ (ฉันจะสมมติว่าคุณมีอาร์เรย์ ): หากคุณต้องการคำใบ้อ่าน เพียงสองคำตอบแรกของฉัน{a,b,c,d,e}

  • กลุ่มแรกคู่ของตัวเลข: )(a,b),(c,d)
  • เปรียบเทียบคู่ขึ้นไปจัดเรียงพวกเขาเช่น: < B , C < da<b,c<d
  • เปรียบเทียบองค์ประกอบที่เล็กที่สุดของคู่เราจะส่งผลเช่น<a<c
  • เปรียบเทียบองค์ประกอบสุดท้ายกับองค์ประกอบที่ใหญ่กว่าในการเปรียบเทียบล่าสุด ( c ) ec
    • หากเป็นเรื่องง่ายที่จะจบลงด้วยการเปรียบเทียบที่เหลืออีก 3 รายการ เสร็จe<c
    • ถ้าแล้วคุณควรเรียงลำดับ{ B , C , D , E }มีความรู้< E , C < d e>c{b,c,d,e}c<e,c<d
      • ถ้า d < อีแล้ว Compare(d,e)d<e
        • ถ้า B > dCompare(b,d)b>d
          • ) เสร็จCompare(b,e)
        • ถ้าb<d
          • ) เสร็จCompare(b,c)
      • ถ้าd>e
        • ถ้า B > อีCompare(b,e)b>e
          • ) เสร็จCompare(b,d)
        • ถ้าb<e
          • ) เสร็จCompare(b,c)

ทุกวิธีที่กล่าวมาข้างต้นเป็นสาเหตุให้ได้มากที่สุดสามเปรียบเทียบหลังจากเปรียบเทียบแรกของที่มีค (หมายถึง 7 ไม่เกิน) ec


คุณแน่ใจหรือไม่ว่าถูกต้อง? สมมติว่าคุณได้รับผลลัพธ์ต่อไปนี้: a <b, c <d, a <c จากนั้น c <e, b <e, c <b และ d <e การจัดลำดับ <c <b <d <e และ a <c <d <b <e นั้นสอดคล้องกัน เหตุผลก็คือว่าจะไม่มีการเปรียบเทียบ b และ d โดยปริยายหรืออย่างชัดเจน บางทีฉันอาจเข้าใจผิดบางแห่งถ้าเป็นเช่นนั้นโปรดแก้ไขให้ถูกต้อง
จอร์จ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.