Według mojej wiedzy nie istnieje algorytm najgorszego przypadku, który rozwiązuje następujący problem:
Biorąc pod uwagę ciąg długości składający się ze skończonych liczb całkowitych, znajdź permutację, w której każdy element jest mniejszy lub równy jego następcy.
Ale czy istnieje dowód, że nie istnieje, w transdychotomicznym modelu obliczeniowym ?
Zauważ, że nie ograniczam zakresu liczb całkowitych. Nie ograniczam również rozwiązań do rodzajów porównawczych.
Odpowiedzi:
Liczby całkowite można stabilnie sortować w czasie z dodatkową przestrzenią .O ( n ) O ( 1 ) Dokładniej, jeśli masz liczb całkowitych z zakresu , można je posortować według czasu O (n).n [ 1 ,ndo]
Zostało to pokazane zaledwie kilka lat temu przez zespół, w tym zmarłego Mihai Pătrașcu (co nie powinno dziwić nikomu, kto jest zaznajomiony z jego pracą). To niezwykły wynik, co mnie dziwi, że więcej osób nie wie, ponieważ oznacza to, że problem sortowania liczb całkowitych został (teoretycznie) rozwiązany.
Istnieje praktyczny algorytm (podany w powyższym artykule), jeśli możesz modyfikować klucze. Zasadniczo możesz kompresować posortowane liczby całkowite bardziej niż kompresować nieposortowane liczby całkowite, a dodatkowa przestrzeń, którą zyskujesz, jest dokładnie równa dodatkowej pamięci potrzebnej do sortowania radix. Dają także niepraktyczny algorytm, który obsługuje klucze tylko do odczytu.
źródło
W przypadku liczb całkowitych można użyć sortowania Radix . Tworzy wiadra, a następnie sortuje listę liczbO ( b n ) gdzie b jest górną granicą rozmiaru w bitach dowolnej liczby całkowitej, oraz n liczba elementów do posortowania.
Jeśli nie ma górnej granicy wielkości liczb całkowitych, nie sądzę, że istnieje znany algorytm sortowania w czasie liniowym.
źródło