Tại sao Quicksort được gọi là Quick Quickortort?


9

Điểm của câu hỏi này là không tranh luận về giá trị của điều này so với bất kỳ thuật toán sắp xếp nào khác - chắc chắn có nhiều câu hỏi khác làm điều này. Câu hỏi này là về tên. Tại sao Quicksort được gọi là "Quicksort"? Chắc chắn, đó là "nhanh chóng", hầu hết thời gian, nhưng không phải lúc nào cũng vậy. Khả năng thoái hóa thành O (N ^ 2) đã được biết đến. Có nhiều sửa đổi khác nhau đối với Quicksort giúp giảm thiểu vấn đề này, nhưng những sửa đổi mang đến trường hợp xấu nhất cho O (n log n) được bảo đảm thường không được gọi là Quicksort nữa. (ví dụ: Introsort).

Tôi chỉ tự hỏi tại sao trong tất cả các thuật toán sắp xếp nổi tiếng, đây là thuật toán duy nhất xứng đáng với cái tên "nhanh", mô tả không phải là thuật toán hoạt động như thế nào, mà là nó nhanh như thế nào. Mergesort được gọi là vì nó hợp nhất dữ liệu. Heapsort được gọi như vậy bởi vì nó sử dụng một đống. Introsort lấy tên từ "Intros perspective", vì nó theo dõi hiệu suất của chính nó để quyết định khi nào chuyển từ Quicksort sang Heapsort. Tương tự như vậy đối với tất cả những cái chậm hơn - Bubbledort, Sắp xếp chèn, Sắp xếp lựa chọn, v.v ... Chúng đều được đặt tên cho cách chúng hoạt động. Ngoại lệ duy nhất khác mà tôi có thể nghĩ đến là "Bogosort", đây thực sự chỉ là một trò đùa mà không ai từng thực sự sử dụng trong thực tế. Tại sao Quicksort không được gọi là một cái gì đó mang tính mô tả hơn, như "Sắp xếp phân vùng" hoặc "Sắp xếp theo trục", mô tả những gì nó thực sự làm? Nó thậm chí không phải là một trường hợp "đến đây trước". Mergesort được phát triển 15 năm trước Quicksort. (Năm 1945 và 1960 tương ứng theo Wikipedia)

Tôi đoán đây thực sự là một câu hỏi lịch sử hơn là một câu hỏi lập trình. Tôi chỉ tò mò làm thế nào nó có tên - nó chỉ là tiếp thị tốt?


1
Timsort, được cải tiến quicksort, không đặt tên theo cách nó hoạt động, mà là từ nhà phát minh của nó. Những cái tên như flashsort hoặc introsort cũng không cho bạn biết nhiều về thuật toán.
vartec

What's in a name? that which we call a rose By any other name would smell as sweet;Điều đó hoặc chỉ là nhanh như vậy. Bên cạnh đó, khả năng suy biến thành O (N ^ 2) có khả năng xảy ra nhỏ và N LogN khá tốt cho một thuật toán, mặc dù thực tế là chúng ta có thuật toán nhanh hơn ngày nay. Bên cạnh đó, vào thời điểm một cái gì đó nhanh hơn xuất hiện, đã quá muộn, mọi người đã gọi nó là Quicksort!
Ampt

1
@vartec Timsort thực sự có nguồn gốc từ Mergesort, không phải Quicksort, nhưng tôi đồng ý, đó là một ngoại lệ khác. Introsort không cung cấp cho bạn toàn bộ thuật toán, nhưng ít nhất nó mô tả một cái gì đó về cách thức hoạt động của nó - đó là "hướng nội". Flashsort Tôi không quen thuộc lắm, nhưng tôi đoán nó được gọi như vậy bởi vì nó "lóe" từng yếu tố thành dự đoán tốt nhất về vị trí của nó?
Darrel Hoffman

1
@Ampt Trên thực tế, ở dạng cơ bản nhất của Quicksort, trường hợp O (N ^ 2) hoàn toàn có khả năng trong trường hợp phổ biến khi dữ liệu đã được sắp xếp hoặc gần như vậy. Phải thừa nhận rằng, các phát triển sau này như Median-of-3 hoặc trục ngẫu nhiên làm cho nó trở nên hiếm hơn rất nhiều, nhưng tên này vẫn được sử dụng cho các triển khai thiếu các cải tiến như vậy.
Darrel Hoffman

Rõ ràng, nó tốt hơn nhanh nhất?
JeffO

Câu trả lời:


13

Vào năm 1962, nghiên cứu về các thuật toán sắp xếp không tiến bộ như ngày nay và nhà khoa học máy tính Tony Hoare đã tìm thấy một thuật toán mới nhanh hơn thuật toán khác nên ông đã xuất bản một bài báo có tên Quicksort và khi bài báo được trích dẫn.

Trích dẫn tóm tắt:

Một mô tả được đưa ra về một phương pháp sắp xếp mới trong cửa hàng truy cập ngẫu nhiên của máy tính. Phương pháp này so sánh rất thuận lợi với các phương pháp đã biết khác về tốc độ, tính kinh tế của việc lưu trữ và dễ lập trình. Một số tinh chỉnh nhất định của phương pháp, có thể hữu ích trong việc tối ưu hóa các vòng lặp bên trong, được mô tả trong phần thứ hai của bài báo.


Chú thích ở trang 11 trong tệp PDF được liên kết cho thấy có một bài báo trước đó về Quicksort được xuất bản năm 1961. Bài báo đó cũng được đề cập trong phần Tài liệu tham khảo ở cuối bài.
Thất vọngWithFormsDesigner

1961, Đại số 64: Quicksort
Pieter B

Tôi đoán đây là gần với câu trả lời đúng như tôi có thể nhận được. Nó giải thích ai đã đặt tên cho nó, nhưng không hiểu tại sao nó vẫn sử dụng tên đó, khi các lựa chọn thay thế gần đây hơn và có khả năng nhanh hơn tồn tại. Đọc tốt - thật thú vị khi thấy bao nhiêu thứ từ những năm 60 vẫn còn áp dụng cho công nghệ hiện đại.
Darrel Hoffman

3
@DarrelHoffman Tại sao tên sẽ thay đổi? Tại thời điểm nào thì những hạn chế của việc gọi thuật toán Quicksort sẽ lớn hơn chi phí của việc cố gắng khiến mọi người gọi nó là PartitionSort hay bất cứ điều gì?
prosfilaes

0

Tôi tin rằng ban đầu nó được gọi là Hoare Sort theo tên nhà phát minh nhưng tên đã thay đổi khá sớm do Hoare nghe hơi giống với tiếng điếm trong tiếng Anh. Về lý do tại sao họ chọn "nhanh" thay vì một cái gì đó khác, tôi không chắc chắn.


-1

Tôi tin rằng bởi vì, tại thời điểm nó được phát minh, nó nhanh hơn rất nhiều so với tất cả (hoặc, đúng hơn, vì tốc độ cũng phụ thuộc nhiều vào loại dữ liệu và trong một số trường hợp, thuật toán khác trở nên nhanh hơn nhiều so với quicksort) của thuật toán ngoài kia.

Vì vậy, có, đó là lịch sử (tuy nhiên tôi không biết chính xác lịch sử đó ...)

Nhưng tôi đồng ý rằng tên của nó thay vào đó nên chứa một gợi ý về thuật toán ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.