Điều đó có ý nghĩa gì đối với một thuật toán sắp xếp để được ổn định thành công?


43

Khi đọc về các thuật toán sắp xếp khác nhau, tôi đã thấy nó đề cập rằng một số là "ổn định" và một số thì không. Điều đó có nghĩa là gì, và sự đánh đổi nào có liên quan trên cơ sở đó khi chọn một thuật toán?


32
Câu hỏi này sẽ dễ dàng được trả lời trong vòng một phút với wikipedia. vi.wikipedia.org/wiki/Sorting_alacticm
Mare Infinitus


4
Đây là một câu hỏi thiếu nghiên cứu riêng. Trả lời với một hình ảnh wikipedia. Và nó nhận được phản hồi thực sự tốt, điều này bằng cách nào đó làm tôi buồn. IMHO nó nên được đóng lại, và không nhận được upvote.
Mare Infinitus

4
Mặt khác, tôi chỉ thấy điều này và học được một điều mới. Nếu tôi biết rằng tôi không biết điều này thì tôi có thể đã nghiên cứu nó nhưng vì OP đã hỏi câu hỏi nên bây giờ tôi biết những gì tôi không biết mà tôi không biết.
Kazark

4
Nói chung, "chỉ cần google nó" hoặc "tìm kiếm nó trên wikipedia" không phải là những phản hồi đáng kể có thể chấp nhận được trên các trang web StackExchange. Bởi vì họ không cung cấp câu trả lời cho những gì người khiếu nại đang xác minh là một câu hỏi hợp lệ với lời kêu gọi tới các cơ quan có thẩm quyền của google và wikipedia. NẾU câu hỏi dễ dàng là một bản sao của một câu hỏi hoặc câu hỏi khác trong lập trình viên.stackexchange, thì bạn có thể khiếu nại.
Michael Paulukonis

Câu trả lời:


88

Một loại ổn định là một loại duy trì thứ tự ban đầu của bộ đầu vào, trong đó thuật toán so sánh không phân biệt giữa hai hoặc nhiều mục.

Xem xét một thuật toán sắp xếp sắp xếp các thẻ theo thứ hạng , nhưng không phù hợp. Loại ổn định sẽ đảm bảo rằng thứ tự ban đầu của thẻ có cùng thứ hạng được giữ nguyên; loại không ổn định sẽ không.

nhập mô tả hình ảnh ở đây


38
Sửa lỗi: Thuật toán không ổn định thể hiện hành vi không xác định khi hai phần tử bằng nhau, hoàn toàn có thể là thứ tự đôi khi được bảo toàn.
aaaaaaaaaaaa

9
Hình ảnh đẹp, rất giống với wikipedia en.wikipedia.org/wiki/Sorting_alacticm
Mare Infinitus

9
@MareInfinitus: Nó thuộc phạm vi công cộng. Kiểm tra sự ghi nhận trên hình ảnh gốc.
Robert Harvey

2
Một bức tranh tốt giải thích nhanh hơn và sâu hơn rất nhiều từ trên trường hợp trung bình. Vấn đề pháp lý không phải là điều tôi muốn nói.
Mare Infinitus

3
@RobertHarvey Thật ra, tôi tin rằng biên tập viên là chính xác. Bài đăng của bạn hiện nói rằng một loại ổn định sẽ duy trì thứ tự các thẻ trong cùng một bộ đồ, nhưng các thẻ trong cùng một bộ đồ sẽ có các cấp bậc khác nhau và do đó phải được sắp xếp lại để đạt được thứ tự sắp xếp. Ví dụ, loại không bảo vệ thứ tự của 2 và 5 trái tim. Chính việc sắp xếp các thẻ có cùng cấp bậc (và các bộ đồ khác nhau) tạo nên sự khác biệt giữa ổn định và không ổn định.
David Z

26

Các thuật toán ổn định bảo tồn thứ tự tương đối của các yếu tố.

Vì vậy, một thuật toán sắp xếp ổn định sẽ giữ nguyên thứ tự tương đối của các giá trị so sánh bằng nhau.

Hãy xem xét một thuật toán sắp xếp trong đó chúng tôi sắp xếp một tập hợp các điểm 2d dựa trên kích thước X của chúng.

Bộ sưu tập được sắp xếp: {(6, 3), (5, 5), (6, 1), (1, 3)}

Sắp xếp ổn định: {(1, 3), (5, 5), (6, 3), (6, 1)}

Sắp xếp thường xuyên: Hoặc {(1, 3), (5, 5), (6, 3), (6, 1)}, hoặc{(1, 3), (5, 5), (6, 1), (6, 3)}


Đối với sự đánh đổi ... tốt, phân loại ổn định sẽ kém hiệu quả hơn, nhưng đôi khi bạn cần nó.

Ví dụ: khi người dùng nhấp vào tiêu đề cột để sắp xếp các giá trị trong giao diện người dùng, thật hợp lý khi hy vọng thứ tự sắp xếp trước đó của anh ta sẽ được sử dụng trong trường hợp các giá trị bằng nhau.


2
Là nó ít hiệu quả hơn mặc dù? Có vẻ như "hiển nhiên", nhưng một số thuật toán sắp xếp tốt nhất về bản chất là ổn định (ví dụ: mọi thứ dựa trên sắp xếp hợp nhất, chẳng hạn như Tim sort), chúng không cần thực hiện bất kỳ công việc bổ sung rõ ràng nào để ổn định.

9
Ổn định không có gì để làm với hiệu suất nói chung. Mergesort chạy trong O (n * log n) và ổn định. Heapsort có hiệu suất tương tự, nhưng không ổn định.
Mare Infinitus

2
"Ổn định" cũng có thể áp dụng cho các cấu trúc dữ liệu, vd. một "đống ổn định" là một đống mà xử lý các mặt hàng có cùng mức độ ưu tiên theo thứ tự chúng được xếp hàng. Điều này rất quan trọng đối với các thuật toán tìm đường hiệu quả.
BlueRaja - Daniel Pflughoeft

1
Không có loại ổn định nào là so sánh O (n ln n)O (1) trên bộ nhớ. Tốc độ không phải là thước đo duy nhất của hiệu quả. Thực tế là bạn không thể sắp xếp ổn định các vấn đề tại chỗ.
Câu hỏi

3
@QuestionC Có vẻ như sắp xếp khối ổn định và phù hợp với các giới hạ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.