Giả sử rằng chúng ta muốn sắp xếp một danh sách gồm số thực. Giả sử rằng chúng ta được cung cấp một hộp đen có thể sắp xếp số thực ngay lập tức. Chúng ta có thể đạt được bao nhiêu lợi thế khi sử dụng hộp đen này?
Ví dụ: chúng ta có thể sắp xếp các số chỉ với các lệnh gọi vào hộp đen không? Thuật toán tốt nhất mà tôi đã tìm thấy sử dụng cuộc gọi đến hộp đen. Nhưng tôi đã không thể cải thiện nó hơn nữa. Đây là thuật toán của tôi tương tự như merge-sort:
Đầu tiên phân vùng danh sách thành liệt kê với kích thước xấp xỉ . Sau đó sử dụng các cuộc gọi vào hộp đen để sắp xếp các danh sách này. Cuối cùng, hợp nhất các danh sách được sắp xếp bằng hộp đen như sau:
Đặt các phần tử nhỏ nhất của danh sách vào danh sách mới , sau đó gọi hộp đen để sắp xếp nó. Số trong (đầu tiên và phần tử nhỏ nhất của ) sẽ là số nhỏ nhất trong . Chúng ta có thể đặt nó ở vị trí đầu tiên của danh sách đầu ra.
Giả sử phần tử đã được chọn từ , chúng ta thay thế với phần tử nhỏ nhất thứ hai trong danh sách loại , và một lần nữa chạy hộp đen trên sẽ được tính toán thành viên nhỏ thứ hai của .
Chúng tôi tiếp tục cho đến khi tất cả các yếu tố được sắp xếp. Tổng số cuộc gọi hộp đen cho phần này sẽ là
. Do đó, tổng số cuộc gọi sẽ là .
Mặt khác, có vẻ như chúng ta sẽ có thể để có được một thấp-bound sử dụng thấp-bound trên so sánh số lượng cần thiết để phân loại như sau: Chúng ta có thể thực hiện các hộp đen sử dụng so sánhlgn. Nếu chúng ta có thể giải quyết vấn đề vớio( √các cuộc gọi đến hộp đen và hợp nhất theo thời gian tuyến tính, chúng ta có thể sắp xếpnsố thực với các phépso sánho(nlgn)không thể thực hiện được.
Tôi đoán chúng ta có thể chứng minh rằng là giới hạn thấp hơn cho số lượng cuộc gọi đến hộp đen, vì rất nhiều phép so sánh sử dụng trong hộp đen sẽ được chia sẻ và do đó được kể lại trong lập luận của chúng tôi.
UPDATE: Là các bài viết khác đề nghị, một cũng có thể đạt được.