Załóżmy, że chcemy posortować listę z liczb rzeczywistych. Załóżmy, że otrzymujemy czarną skrzynkę, która może natychmiast posortować liczb rzeczywistych. Ile korzyści możemy zyskać dzięki tej czarnej skrzynce? √
Na przykład, czy możemy posortować numery za pomocą tylko wywołań do czarnej skrzynki? Najlepszy algorytm, jaki znalazłem, wykorzystuje wywołań do czarnej skrzynki. Ale nie byłem w stanie go jeszcze poprawić. Oto mój algorytm podobny do sortowania według scalenia:n
Najpierw podziel listę na listy o wielkości w przybliżeniu . Następnie użyj wywołań do czarnej skrzynki, aby posortować te listy. Na koniec połącz posortowane listy za pomocą czarnej skrzynki w następujący sposób:√ s1 √
Umieść najmniejsze elementy list na nowej liście , a następnie wywołaj czarną skrzynkę, aby ją posortować. Liczba w (pierwszy i najmniejszy element ) będzie najmniejsza liczba w . Możemy umieścić go na pierwszym miejscu listy wyników.
Zakładając, że element jest wybrany z , zastąpić z drugiej najmniejszej element listy rodzaj i ponownie uruchomić czarna skrzynka na to, aby obliczyć drugą najmniejszą członka .
Kontynuujemy, aż wszystkie elementy zostaną posortowane. Całkowita liczba wywołań czarnej skrzynki dla tej części będzie wynosićL [ 1 ] L S s j L [ 1 ] s j S n - √
. Dlatego ogólnie łączna liczba połączeń wyniesie .
Z drugiej strony wygląda na to, że powinniśmy być w stanie uzyskać dolną granicę za pomocą dolnej granicy na porównaniach liczb potrzebnych do sortowania w następujący sposób: Możemy zaimplementować czarną skrzynkę za pomocą porównań. Jeśli możemy rozwiązać problem z wywołaniami do czarnej skrzynki i scaleniem w czasie liniowym, możemy posortować liczb rzeczywistych z porównaniami co jest niemożliwe.o( √no(nlgn)
Wydaje mi się, że moglibyśmy udowodnić, że jest dolną granicą liczby wywołań do czarnej skrzynki, ponieważ wiele porównań używanych w czarnej skrzynce byłoby współdzielonych i dlatego są one uwzględnione w naszym argumencie.
AKTUALIZACJA: Jak sugerują inne posty, możliwe jest także .