heapsort có lợi thế gì so với smoothsort?


8

Wikipedia nói rằng những lợi thế của smoothsort so với heapsort là đôi khi nó đến gần hơn với thời gian O (n).

Bây giờ tôi đã tự hỏi heapsort có lợi thế gì so với smoothsort?

Hoặc để viết lại câu hỏi này, smoothsort luôn là lựa chọn tốt hơn heapsort (ngay cả khi đầu vào chưa được sắp xếp ở bất kỳ mức độ nào)?


Bạn đã so sánh việc thực hiện? Có lẽ sự khác biệt là smoothsort có chi phí hoạt động lớn hơn cả về thời gian thực hiện và bộ nhớ được sử dụng.
Dave Clarke

8
Trong heapsort, bạn có thể xây dựng heap trong thời gian O (n), trong khi trong smoothsort, phải mất thời gian O (n log n) để xây dựng heap. Điều này cho thấy (nhưng không ngụ ý) rằng thời gian để sắp xếp đầu vào ngẫu nhiên có thể lâu hơn cho smoothsort.
Peter Shor

@DaveClarke Ý tôi không phải ở cách triển khai (có thể thay đổi) mà là ở chính thuật toán
Pacerier

@PeterShor Bạn có chắc chắn rằng phải mất O (n log n) để xây dựng heap trong smoothsort? Điều đó dường như sẽ bay lên khi đối mặt với tuyên bố rằng smoothsort là O (n) khi đầu vào đã được sắp xếp?
Paul Wagland

1
@PeterShor: Một biến thể của smoothsort sử dụng danh sách nhị phân nghiêng vì rừng heap có thể được heapized trong thời gian O (n). Để làm điều này, hãy chuyển đổi độ dài của đầu vào thành nhị phân xiên (O (log (n)). Các bit của số này cho bạn biết kích thước của vùng heap trong rừng. Giả sử một khu rừng như vậy đã tồn tại chưa có thuộc tính heap. Nó tương tự như trong heapsort giả vờ rằng bạn đã có một heap mà không có thuộc tính heap. Tuy nhiên, ngay cả với thay đổi này, smoothsort (sử dụng nhị phân xiên) chỉ nhanh hơn heapsort trong 10% hoặc ít hơn không được sắp xếp (sử dụng nghịch đảo để hủy ghép).
ScootyPuff

Câu trả lời:


10

Vừa mới đọc xong hai thuật toán, có vẻ như heapsort không có lợi thế O tiềm ẩn so với smoothsort. Kiểu này có ý nghĩa khi bạn nghĩ rằng smoothsort chỉ là một loại heapsort đặc biệt, sử dụng một loại heap đặc biệt.

Trường hợp heapsort có một lợi thế là nó dễ hiểu hơn và được ghi chép tốt hơn nhiều. Có rất ít triển khai smoothsort công khai, và rất ít tài liệu về chúng, tuy nhiên có rất nhiều tài liệu về heapsort.

Thật vậy, tài liệu thực sự duy nhất có thể truy cập được là bài viết này của Keith Schwarz. Nó cũng là cơ sở của bài viết wikipedia .

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.