Không có thuật toán sắp xếp với tất cả các thuộc tính mong muốn cụ thể?


22

Trên trang web Sắp xếp thuật toán , yêu cầu sau được đưa ra:

Thuật toán sắp xếp lý tưởng sẽ có các thuộc tính sau:

  • Ổn định: Các khóa bằng nhau không được sắp xếp lại.
  • Hoạt động tại chỗ, yêu cầu không gian thêm .O(1)
  • So sánh khóa tồi tệ nhất .O(nlg(n))
  • Trường hợp xấu nhất hoán đổi .O(n)
  • Thích nghi: Tốc độ lên đến khi dữ liệu gần như được sắp xếp hoặc khi có một vài khóa duy nhất.O(n)

Không có thuật toán nào có tất cả các thuộc tính này, và vì vậy việc lựa chọn thuật toán sắp xếp phụ thuộc vào ứng dụng.

Câu hỏi của tôi là, có đúng không

không có thuật toán [sắp xếp] nào có tất cả các thuộc tính này

và nếu vậy, tại sao? Điều gì về những tính chất này làm cho tất cả chúng đồng thời không thể thực hiện được?


4
Chúng có lẽ chỉ có nghĩa là không có thuật toán sắp xếp đã biết nào có tất cả các thuộc tính này.
Yuval Filmus

3
Thậm chí có một cuộc họp sắp xếp dựa trên so sánh 3 & 4 không?
greybeard

4
@JohnFeminella Nó cần ít nhất so sánh , nhưng làm thế nào điều đó cho chúng ta biết bất cứ điều gì về số lần hoán đổi? Ω(nlog(n))
Tom van der Zanden 19/07/2015

2
@JohnFeminella Nitpick: "tốt hơn " là một tuyên bố trống rỗng. Bạn nên sử dụng hoặc nếu bạn muốn nói về giới hạn dưới. O(_)ΩΘ
Raphael

1
Bất kỳ thuật toán sắp xếp nào cũng có thể được thực hiện ổn định bằng cách thêm khóa phụ vào vị trí phần tử gốc. Tuy nhiên, điều đó làm cho nó không đúng chỗ vì nó sẽ chiếm thêm bộ nhớ O (n).
Giovanni Botta

Câu trả lời:


6

WikiSortGrailSort là hai thuật toán khá gần đây thực hiện các so sánh khóa ổn định, trường hợp xấu nhất . Thật không may, tôi không hiểu họ đủ rõ để biết họ tiếp cận giao dịch hoán đổi hay là thích nghi nên tôi không biết liệu họ có vi phạm các điều kiện thứ tư và thứ năm mà bạn có hay không.O(n lg(n))O(n)

Từ việc xem xét bài viết "Tỷ lệ hợp nhất tại chỗ ổn định dựa trên tỷ lệ", bởi Pok-Son Kim và Arne Kutzner được liên kết bởi trang WikiSort GitHub, Kim và Kutzner tuyên bố sẽ có một hoạt động 'hợp nhất' là (WikiSort là một biến thể của Mergesort) nhưng tôi không chắc điều đó có chuyển thành WikiSort có hoán đổi . GrailSort được tuyên bố là nhanh hơn (trong trang WikiSort GitHub) vì vậy tôi có thể tưởng tượng rằng có khả năng cả hai đều có trường hợp hoán đổi tồi tệ nhất và có khả năng thích ứng.O(m(nm+1))O(n)O(n)

Nếu bất cứ ai quản lý để hiểu WikiSort và / hoặc GrailSort, tôi sẽ đánh giá cao họ cũng trả lời câu hỏi mở của tôi về nó



3

Không có thuật toán được biết đến đáp ứng tất cả các tính chất này. Các thuộc tính này trở nên được tìm kiếm khi chúng tôi phát triển các thuật toán sắp xếp nhiều hơn. Ví dụ, sắp xếp bong bóng (được cho là thuật toán sắp xếp nguyên thủy nhất), rất có thể không ổn định trong lần thực hiện đầu tiên, nhưng được thiết kế để ổn định khi các nhà khoa học máy tính tìm cách làm cho nó hiệu quả hơn trong các lần thực hiện sau. Vì vậy, các nhà khoa học máy tính rất có thể đã chọn những đặc điểm tốt nhất từ ​​các thuật toán tốt nhất và kết quả là bạn đã đưa ra một danh sách tất cả các đặc điểm mong muốn này. Trong thực tế, thật khó để có những điều tốt nhất trong tất cả các thế giới trong bất cứ điều gì. Không phải là không thể, nhưng có thể là không thể với các kiến ​​trúc hiện tại của chúng tôi.

OΩΘ


1
Chào mừng bạn Điều này thật tuyệt nhưng tôi không thấy tính ổn định có liên quan gì đến hiệu quả: đó chỉ là một ưu tiên mà các phần trong danh sách có các khóa giống nhau không nên được thuật toán "ngẫu nhiên" cho phép.
David Richerby

Có, nhưng nó thể chứng minh là có thể hoặc không thể?
James Faulcon 7/03/2016

1

(Mặc dù đây là một câu hỏi cũ, tôi đã vấp phải nó và những người khác cũng vậy.)

Thực sự có một thuật toán thỏa mãn (1) - (4) và nửa sau của (5), vì vậy rất gần với yêu cầu trên. Nó được mô tả trong [1] và kết hợp một số thủ thuật được phát minh trong những thập kỷ qua.

[1]: Franceschini, G. Syst Comput Syst (2007) 40: 327. https://doi.org/10.1007/s00224-006-1311-1

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.