เหตุใด Quicksort จึงเรียกว่า“ Quicksort”


9

ประเด็นของคำถามนี้ไม่ได้เป็นการอภิปรายถึงข้อดีของอัลกอริทึมการเรียงลำดับอื่น ๆ - แน่นอนว่ามีคำถามอื่น ๆ อีกมากมายที่ทำเช่นนี้ คำถามนี้เกี่ยวกับชื่อ เหตุใด Quicksort จึงเรียกว่า "Quicksort" แน่นอนว่ามันเป็น "เร็ว" ส่วนใหญ่ แต่ไม่เสมอไป ความเป็นไปได้ของการเสื่อมสภาพไปยัง O (N ^ 2) เป็นที่รู้จักกันดี มีการแก้ไข Quicksort มากมายที่ช่วยลดปัญหานี้ แต่กรณีที่นำกรณีที่แย่ที่สุดมาสู่ O (n log n) ที่รับประกันจะไม่เรียกว่า Quicksort อีกต่อไป (เช่น Introsort)

ฉันแค่สงสัยว่าทำไมอัลกอริธึมการเรียงลำดับที่รู้จักกันดีทั้งหมดนี่เป็นสิ่งเดียวที่สมควรได้รับชื่อ "ด่วน" ซึ่งไม่ได้อธิบายว่าอัลกอริทึมทำงานอย่างไร แต่เร็วแค่ไหน (ปกติ) การรวมกันเรียกว่าเพราะมันรวมข้อมูล Heapsort เรียกว่าเพราะใช้ฮีป Introsort ได้รับชื่อจาก "Introspective" เนื่องจากตรวจสอบประสิทธิภาพของตัวเองเพื่อตัดสินใจว่าเมื่อใดที่จะเปลี่ยนจาก Quicksort เป็น Heapsort ในทำนองเดียวกันสำหรับคนที่ช้ากว่า - Bubblesort, Insertion Sort, Selection Selection ฯลฯ พวกมันทั้งหมดตั้งชื่อตามวิธีการทำงานของมัน ข้อยกเว้นอื่น ๆ ที่ฉันนึกได้คือ "Bogosort" ซึ่งเป็นเรื่องตลกที่ไม่มีใครใช้จริง ๆ ในทางปฏิบัติ เหตุใด Quicksort จึงไม่เรียกสิ่งที่อธิบายเพิ่มเติมเช่น "การจัดเรียงพาร์ติชัน" หรือ "การเรียงลำดับ Pivot" ซึ่งอธิบายสิ่งที่มันทำจริง? มันไม่ใช่กรณีของ "มาที่นี่ก่อน" การควบรวมกิจการได้รับการพัฒนา 15 ปีก่อน Quicksort (1945 และ 1960 ตามลำดับตาม Wikipedia)

ฉันเดาว่านี่เป็นคำถามเชิงประวัติศาสตร์มากกว่าการเขียนโปรแกรม ฉันแค่อยากรู้ว่ามันได้ชื่อมา - มันเป็นเพียงการตลาดที่ดีหรือไม่?


1
Timsort ซึ่งเป็น quicksort ที่ดีขึ้นไม่ได้ตั้งชื่อตามวิธีการทำงาน แต่เป็นของนักประดิษฐ์ ชื่ออย่างflashsortหรือintrosort ก็ไม่ได้บอกอะไรคุณเกี่ยวกับอัลกอริทึมมากนัก
vartec

What's in a name? that which we call a rose By any other name would smell as sweet;หรือว่าเป็นเพียงอย่างรวดเร็ว นอกจากนี้ความเป็นไปได้ของการเสื่อมสภาพไปยัง O (N ^ 2) มีโอกาสเกิดขึ้นเล็กน้อยและ N LogN ค่อนข้างดีสำหรับอัลกอริทึมแม้ว่าความจริงที่ว่าเรามีอัลกอริทึมเร็วกว่าในปัจจุบัน นอกจากนี้เมื่อถึงเวลาที่บางสิ่งที่เร็วขึ้นมามันก็สายเกินไปทุกคนก็เรียกมันว่า Quicksort!
Ampt

1
@vartec Timsort มาจากการควบรวมกิจการไม่ใช่ Quicksort แต่ฉันจะเห็นด้วยนั่นเป็นข้อยกเว้นอีกประการหนึ่ง Introsort ไม่ได้ให้อัลกอริทึมทั้งหมดแก่คุณ แต่อย่างน้อยก็อธิบายบางอย่างเกี่ยวกับวิธีการทำงาน - เป็น "ครุ่นคิด" Flashsort ฉันไม่คุ้นเคย แต่ฉันคิดว่ามันเรียกว่าเพราะมัน "กะพริบ" แต่ละองค์ประกอบเป็นการเดาที่ดีที่สุดว่าควรจะอยู่ที่ไหน
Darrel Hoffman

1
@Ampt ที่จริงแล้วในรูปแบบพื้นฐานที่สุดของ Quicksort กรณี O (N ^ 2) นั้นค่อนข้างเป็นไปได้ในกรณีทั่วไปที่ข้อมูลถูกเรียงลำดับหรือเกือบจะเป็นเช่นนั้น เป็นที่ยอมรับว่าการพัฒนาในภายหลังเช่น Median-of-3 หรือ pivot แบบสุ่มทำให้มันหายากมากขึ้น แต่ชื่อนั้นยังคงใช้สำหรับการใช้งานที่ขาดการปรับปรุงดังกล่าว
Darrel Hoffman

เห็นได้ชัดว่าดีกว่าเร็วที่สุด
JeffO

คำตอบ:


13

ในปี 1962 การวิจัยเกี่ยวกับการเรียงลำดับอัลกอริธึมยังไม่ก้าวหน้าเท่าที่ทุกวันนี้และนักวิทยาศาสตร์คอมพิวเตอร์Tony Hoareพบอัลกอริทึมใหม่ที่เร็วกว่าอีกวิธีหนึ่งดังนั้นเขาจึงตีพิมพ์กระดาษที่เรียกว่า Quicksortและตามที่อ้างถึง

การอ้างถึงนามธรรม:

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


เชิงอรรถในหน้า 11 ใน PDF ที่เชื่อมโยงแนะนำว่ามีเอกสารก่อนหน้านี้ใน Quicksort ที่ตีพิมพ์ในปี 1961 เอกสารดังกล่าวถูกกล่าวถึงในส่วนการอ้างอิงในตอนท้ายของบทความด้วย
FrustratedWithFormsDesigner

1961, Algorythm 64: Quicksort
Pieter B

ฉันเดาว่านี่ใกล้เคียงกับคำตอบที่ถูกต้องที่สุดเท่าที่จะเป็นไปได้ มันอธิบายว่าใครตั้งชื่อมัน แต่ทำไมมันยังใช้ชื่อนั้นอยู่เมื่อมีทางเลือกที่ใหม่กว่าและเร็วกว่า อ่านดี - มันน่าสนใจที่จะเห็นว่าสิ่งต่าง ๆ จากยุค 60 ยังคงใช้กับเทคโนโลยีที่ทันสมัย
Darrel Hoffman

3
@DarrelHoffman ทำไมชื่อถึงเปลี่ยน ข้อเสียของการเรียกใช้อัลกอริธึม Quicksort จะมีค่ามากกว่าค่าใช้จ่ายในการพยายามทำให้ทุกคนเรียกมันว่า PartitionSort หรืออะไรก็ตาม?
prosfilaes

0

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


-1

ฉันเชื่อว่าเป็นเพราะในขณะที่มันถูกประดิษฐ์ขึ้นมันเร็วกว่ามาก (หรือค่อนข้างมากที่สุดเนื่องจากความเร็วยังขึ้นอยู่กับชนิดของข้อมูลและในบางกรณีอัลกอริทึมอื่น ๆ กลายเป็นเร็วกว่า quicksort มาก) อัลกอริทึมออกมี

ใช่แล้วมันเป็นเรื่องทางประวัติศาสตร์ (ฉันไม่รู้ประวัติที่แน่ชัด แต่ ... )

แต่ฉันยอมรับว่าชื่อควรมีคำใบ้ของอัลกอริทึมแทน ...

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