ไม่มีอัลกอริทึมการเรียงลำดับพร้อมคุณสมบัติที่ต้องการทั้งหมดหรือไม่?


22

บนเว็บไซต์อัลกอริทึมการเรียงลำดับจะทำการอ้างสิทธิ์ต่อไปนี้:

อัลกอริทึมการเรียงลำดับในอุดมคติจะมีคุณสมบัติดังต่อไปนี้:

  • มีเสถียรภาพ: คีย์ที่เท่าเทียมกันจะไม่ถูกจัดลำดับใหม่
  • ทำงานในสถานที่ที่ต้องการพื้นที่เพิ่มเติมO(1)
  • การเปรียบเทียบคีย์แย่ที่สุดO(nLG(n))
  • กรณีที่เลวร้ายที่สุดในการแลกเปลี่ยนO(n)
  • Adaptive: เพิ่มความเร็วสูงถึงเมื่อข้อมูลเกือบจะถูกจัดเรียงหรือเมื่อมีคีย์เฉพาะไม่กี่ตัวO(n)

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

คำถามของฉันคือจริงหรือไม่

ไม่มีอัลกอริทึม [การเรียงลำดับ] ที่มีคุณสมบัติเหล่านี้ทั้งหมด

และถ้าเป็นเช่นนั้นทำไม มันเกี่ยวกับคุณสมบัติเหล่านี้ที่ทำให้พวกเขาทั้งหมดเป็นไปไม่ได้ที่จะเติมเต็ม?


4
พวกเขาอาจหมายถึงว่าอัลกอริทึมการเรียงลำดับที่ไม่รู้จักมีคุณสมบัติเหล่านี้ทั้งหมด
Yuval Filmus

3
มีการประชุมเรียงตามการเปรียบเทียบ 3 รายการเดียวหรือ 4 รายการใช่หรือไม่
greybeard

4
@JohnFeminella มันต้องอย่างน้อยการเปรียบเทียบแต่วิธีการที่ไม่บอกให้เราทราบอะไรเกี่ยวกับจำนวนของสัญญาแลกเปลี่ยนหรือไม่ Ω(nเข้าสู่ระบบ(n))
Tom van der Zanden

2
@JohnFeminella Nitpick: "better than " เป็นคำสั่งที่ว่างเปล่า คุณควรใช้หรือถ้าคุณต้องการพูดถึงขอบเขตที่ต่ำกว่า O(_)ΩΘ
กราฟิลส์

1
อัลกอริทึมการเรียงลำดับใด ๆ สามารถทำให้มีเสถียรภาพโดยการเพิ่มเป็นคีย์รองตำแหน่งองค์ประกอบเดิม อย่างไรก็ตามนั่นไม่ได้เกิดขึ้นเพราะจะใช้หน่วยความจำเสริม O (n)
Giovanni Botta

คำตอบ:


6

WikiSortและGrailSortเป็นอัลกอริธึมที่เพิ่งเกิดขึ้นเมื่อไม่นานมานี้ซึ่งมีความเสถียรและเป็นกรณีที่แย่ที่สุดการเปรียบเทียบที่สำคัญ น่าเสียดายที่ฉันไม่เข้าใจพวกเขาดีพอที่จะรู้ว่าพวกเขาเข้าใกล้ swaps หรือปรับตัวได้หรือไม่ดังนั้นฉันไม่รู้ว่าพวกเขาละเมิดเงื่อนไขที่สี่และห้าที่คุณมีหรือไม่O(n ล.ก.(n))O(n)

จากการดูที่กระดาษ"อัตราส่วนการรวมที่เสถียรในสถานที่" โดย Pok-Son Kim และ Arne Kutznerเชื่อมโยงกับหน้า WikiSort GitHub Kim และ Kutzner อ้างว่ามีการดำเนินการ 'ผสาน' ที่ (WikiSort แตกต่างจาก Mergesort) แต่ฉันไม่แน่ใจว่าแปลเป็น WikiSort ที่มี swaps หรือไม่ GrailSort ได้รับการอ้างว่าเร็วขึ้น (ในหน้า WikiSort GitHub) ดังนั้นฉันจึงจินตนาการได้ว่าเป็นไปได้ว่าพวกเขาทั้งสองมีกรณีที่เลวร้ายที่สุด swaps และปรับตัวได้O(ม.(nม.+1))O(n)O(n)

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



3

ไม่มีอัลกอริทึมที่รู้จักตอบสนองคุณสมบัติเหล่านี้ทั้งหมด คุณสมบัติเหล่านี้เป็นที่ต้องการในขณะที่เราพัฒนาอัลกอริทึมการเรียงลำดับมากขึ้น ตัวอย่างเช่นการจัดเรียงฟอง (ขั้นตอนวิธีการเรียงลำดับแบบดั้งเดิมที่สุด) น่าจะไม่เสถียรในการใช้งานครั้งแรก แต่ถูกออกแบบมาให้มีความเสถียรเนื่องจากนักวิทยาศาสตร์คอมพิวเตอร์พยายามทำให้มีประสิทธิภาพมากขึ้นในการใช้งานในภายหลัง ดังนั้นนักวิทยาศาสตร์คอมพิวเตอร์มักเลือกคุณลักษณะที่ดีที่สุดจากอัลกอริธึมที่ดีที่สุดและด้วยเหตุนี้คุณจึงได้รวบรวมรายการคุณลักษณะที่พึงประสงค์ทั้งหมดเหล่านี้ ในความเป็นจริงมันเป็นเรื่องยากที่จะมีสิ่งที่ดีที่สุดของโลกในทุกสิ่ง ไม่เป็นไปไม่ได้ แต่อาจเป็นไปไม่ได้ด้วยสถาปัตยกรรมปัจจุบันของเรา

OΩΘ


1
ยินดีต้อนรับ! นี่เป็นสิ่งที่ดี แต่ฉันไม่เห็นความเสถียรของประสิทธิภาพ: มันเป็นเพียงการตั้งค่าที่ส่วนของรายการที่มีคีย์เหมือนกันไม่ควร "สุ่ม" ที่เปลี่ยนแปลงโดยอัลกอริทึม
David Richerby

ใช่ แต่มันเป็นสรรพสิ่งเป็นไปได้หรือเป็นไปไม่ได้?
James Faulcon

1

(แม้ว่านี่จะเป็นคำถามเก่าฉันก็สะดุดกับมันและคนอื่นอาจจะ)

มีอัลกอริทึมที่สอดคล้องกับ (1) - (4) และครึ่งหลังของ (5) ดังนั้นจึงใกล้เคียงกับข้อกำหนดข้างต้น มันอธิบายไว้ใน [1] และรวมเทคนิคต่างๆที่คิดค้นในช่วงทศวรรษที่ผ่านมา

[1]: Franceschini, G. ทฤษฎีการคำนวณ Syst (2007) 40: 327. https://doi.org/10.1007/s00224-006-1311-1

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