Là sắp xếp số nguyên có thể trong O (n) trong mô hình transdichotomous?


9

Theo hiểu biết của tôi, không tồn tại thuật toán trường hợp xấu nhất để giải quyết vấn đề sau:O(n)

Cho một chuỗi có độ dài bao gồm các số nguyên hữu hạn, tìm hoán vị trong đó mọi phần tử nhỏ hơn hoặc bằng với phần tử kế của nó.n

Nhưng có bằng chứng nào cho thấy nó không tồn tại, trong mô hình tính toán xuyên không?


Lưu ý rằng tôi không giới hạn phạm vi của các số nguyên. Tôi cũng không giới hạn các giải pháp để so sánh các loại.


Theo như tôi biết, có thể có thuật toán thời gian cho SAT! Vì vậy, câu trả lời là không. O(n)
Lembik

5
AFAIK, đây vẫn là một vấn đề mở.
Juho

2
Tôi không biết liệu có thể có một câu trả lời có ý nghĩa hay không cho đến khi bạn chỉ định mô hình tính toán nào bạn đang sử dụng, với điều kiện là bạn không giới hạn máy tính của mình để so sánh và hoán đổi. Chỉ với RAM và so sánh hai số, một đối số từ entropy sẽ giới hạn thời gian , ngay cả đối với các máy tính transdichotomous. Một cách tầm thường, nếu thay vì hoán đổi và so sánh, sắp xếp là một thao tác cơ bản, nó có thể được thực hiện trong . Nếu chèn một số nguyên vào đúng chỗ là một thao tác cơ bản, . Bạn đã có một mô hình vượt quá so sánh cụ thể trong tâm trí? Θ ( 1 ) Θ ( n )Ω(nlog(n))Θ(1)Θ(n)
Liêuwe Vinkhuijzen

2
@LieuweVinkhuijzen Câu hỏi của tôi chỉ định mô hình tính toán transdichotomous. Trong tiếng Anh đơn giản: một mô hình tính toán trong đó kích thước từ của máy đủ lớn để chứa bất kỳ số nguyên nào của vấn đề. Vì vậy, so sánh hai số nguyên bất kỳ là O (1), nhưng việc thêm, nhân, v.v. Trong mô hình tính toán này, giới hạn entropic đã bị đánh bại, xem Han, Yijie (2004), "Sắp xếp xác định theo thời gian O (n log log n) và không gian tuyến tính" .
orlp

@orlp tôi thấy; nếu bạn tận dụng cấu trúc của các số nguyên, bạn có thể đánh bại giới hạn entropic. Tôi không biết về sắp xếp số nguyên; Tôi chắc chắn sẽ đọc lên chủ đề đó!
Liêuwe Vinkhuijzen

Câu trả lời:


4

Các số nguyên có thể được sắp xếp ổn định trong thời gian với không gian bổ sung . O ( 1 )O(n)O(1)Chính xác hơn, nếu bạn có số nguyên trong phạm vi , thì có thể được sắp xếp theo thời gian O (n).[ 1 , n c ]n[1,nc]

Điều này chỉ được thể hiện một vài năm trước bởi một đội bao gồm cả Mihai Pătrașcu quá cố (điều này sẽ gây ngạc nhiên cho bất cứ ai quen thuộc với công việc của anh ta). Đó là một kết quả đáng chú ý mà tôi ngạc nhiên khi nhiều người không biết đến, bởi vì điều đó có nghĩa là vấn đề sắp xếp các số nguyên đã được giải quyết (về mặt lý thuyết).

Có một thuật toán thực tế (được nêu trong bài báo ở trên) nếu bạn được phép sửa đổi các khóa. Về cơ bản, bạn có thể nén các số nguyên được sắp xếp nhiều hơn bạn có thể nén các số nguyên chưa được sắp xếp và không gian thêm mà bạn có được chính xác bằng với bộ nhớ bổ sung cần thiết để thực hiện sắp xếp cơ số. Họ cũng đưa ra một thuật toán không thực tế hỗ trợ các khóa chỉ đọc.


1
Từ những gì tôi có thể hiểu từ bản tóm tắt, đây không phải là chung - nó chỉ có thể sắp xếp các từ có kích thước lên tới theo . Câu hỏi của tôi đề cập rõ ràng số nguyên không giới hạn. O ( n )lognO(n)
orlp

@orlp Thuật toán thứ ba trong bài báo nói về các số nguyên có độ dài không giới hạn.
Bút danh

1
Có lẽ tôi đang đọc sai nó, nhưng tôi chỉ có thể thấy một mô tả về một phương thức để giảm việc sử dụng bộ nhớ của các thuật toán sắp xếp số nguyên không giới hạn. Trích dẫn từ tóm tắt (nhấn mạnh của tôi): "Một câu hỏi thú vị khác là trường hợp tùy ý . Ở đây chúng tôi trình bày một phép biến đổi hộp đen từ bất kỳ thuật toán sắp xếp RAM nào sang thuật toán sắp xếp chỉ sử dụng không gian thừa O (1) và có cùng không gian thời gian chạy . " c
orlp

3
Hãy tha thứ cho tôi, nhưng ở trạng thái hiện tại, câu trả lời này hoàn toàn không trả lời câu hỏi . Tôi đã đề cập rõ ràng rằng các số nguyên không bị ràng buộc . Câu trả lời này giải quyết một vấn đề hoàn toàn khác.
orlp

1
Điểm cuối cùng bây giờ không còn ở một phông chữ nhỏ :)
orlp

-1

Đối với số nguyên, bạn có thể sử dụng sắp xếp Radix . Nó tạo các thùng và sau đó sắp xếp một danh sách các số trong trong đó là giới hạn trên của kích thước theo bit của bất kỳ số nguyên nào và số lượng phần tử cần sắp xếp.b nO(bn)bn

Nếu không có giới hạn trên về kích thước số nguyên của bạn, thì tôi không tin có bất kỳ thuật toán sắp xếp thời gian tuyến tính nào đã biết.


5
Chào mừng bạn Những gì bạn nói là hoàn toàn đúng nhưng tôi không nghĩ nó trả lời câu hỏi. Câu hỏi yêu cầu cụ thể cho một bằng chứng rằng thuật toán cần thiết không tồn tại trong một mô hình tính toán cụ thể; chỉ nói rằng không có thuật toán như vậy được biết không chứng minh rằng không tồn tại.
David Richerby

Trên thực tế, b là một hằng số trong vấn đề của chúng tôi, tôi coi thuật toán này nằm trong o (n)
RFC 2549

2
Câu hỏi không nói gì về là hằng số. Nó chỉ nói rằng chúng ta có số. Những con số đó có thể lớn tùy ý. (Ngoài ra, nó có thể chỉ là một lỗi đánh máy trong bình luận của bạn nhưng lưu ý rằng và là hai điều rất khác nhau.)n O ( n ) o ( n )bnO(n)o(n)
David Richerby

Vâng, chắc chắn là một lỗi đánh máy;) trong câu hỏi của anh ấy, khi bạn cho rằng một số phù hợp trong một từ có độ dài b, nó trở thành một hằng số.
RFC 2549

1
Điều đó không làm cho độ dài từ không đổi. (Nếu không, sẽ không có lý do gì để giả định một cách rõ ràng "rằng các hoạt động trên những từ đơn lẻ mất thời gian liên tục cho mỗi hoạt động".
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.