Sortowanie X + Y
Czy istnieje algorytm sortowania szybszy niż log
W informatyce to problem par liczb sum . Zastosowania problemu obejmują minimalizację opłat tranzytowych , projektowanie VLSI i rzadkie mnożenie wielomianów. Podobnie jak w przypadku sortowania porównawczego i sortowania liczb całkowitych bardziej ogólnie, algorytmy dla tego problemu mogą opierać się tylko na porównaniach tych sum lub na innych operacjach, które działają tylko wtedy, gdy dane wejściowe są małymi liczbami całkowitymi.
Nie wiadomo, czy ten problem ma rozwiązanie oparte na porównaniach, którego czas działania jest asymptotycznie szybszy niż sortowanie nieustrukturyzowanej listy równie wielu elementów. Dlatego badania nad tym problemem koncentrowały się na dwóch podejściach do rozstrzygnięcia kwestii, czy taka poprawa jest możliwa: opracowaniu algorytmów, które ulepszają nieustrukturyzowane sortowanie pod względem liczby porównań, a nie całkowitego czasu działania, oraz dolnych granic dla liczba porównań opartych na zliczaniu komórek w podpodziałach przestrzeni wielowymiarowych. Oba podejścia są ze sobą historycznie powiązane, ponieważ pierwsze algorytmy, które wykorzystywały niewiele porównań, opierały się na słabości dolnych granic liczenia komórek.
Opis problemu i historia
Dane wejściowe do z dwóch skończonych liczb i o samej problemu jest zbiór wszystkich liczby z liczby z , ułożonych w porządku posortowanym według sumy każdej pary. Jako mały przykład, dla wejść i , wyjście powinno być lista par
Wariant problemu sortuje sumset , zbiór sum par, ze zduplikowanymi sumami skondensowanymi do jednej wartości. przypadku tego wariantu rozmiar sumsetu może być znacznie mniejszy niż zbadano jego konstruowania wrażliwe na dane wyjściowe.
Aplikacje
Steven Skiena opowiada o praktycznym zastosowaniu w minimalizacji opłat tranzytowych , przykładzie problemu najkrótszej ścieżki : znajdź najtańszy bilet lotniczy z dwoma przeskokami między dwoma danymi miastami, na podstawie danych wejściowych opisujących zarówno koszt każdego przeskoku, jak i pary przeskoków, które mogą być połączone w jeden bilet. Rozwiązanie Skieny polega na sortowaniu par chmielu według ich całkowitego kosztu jako przykład problem z sortowaniem, a następnie testowanie powstałych par w tej posortowanej kolejności, aż do znalezienia takiej, która jest dozwolona. Aby wygenerować posortowane pary w tej kolejności, Skiena używa priorytetowej kolejki par, początkowo zawierającej tylko jedną parę, składającą się z dwóch najtańszych przeskoków. Następnie, gdy para i uznana za niedozwoloną, dodawane są jeszcze dwie pary, przy czym jedna z tych dwóch par łączy x następny przeskok po na posortowanej liście przeskoków do miejsca docelowego, a druga para łączy się z następnym przeskokiem po na liście przeskoków W ten sposób każdą kolejną parę można znaleźć w czasie logarytmicznym i należy posortować tylko pary do pierwszej dopuszczalnej.
Sortowanie jest najdroższą procedurą algorytmu dla problemu w VLSI , w należy umieścić dwie podjednostki obwodu VLSI obok siebie wzdłuż kanału komunikacyjnego, szerokość kanału potrzebna do poprowadzenia par przewodów z jednej podjednostki do drugiej. Ponieważ jedna podjednostka jest w sposób ciągły przesuwana względem drugiej, szerokość kanału zmienia się tylko w dyskretnych pozycjach, w których końce dwóch drutów pokrywają się ze sobą, i znalezienie posortowanej kolejności tych pozycji w celu obliczenia sekwencji zmian szerokości może być wykonany przez . Gdyby można było przyspieszyć ten problem z sortowaniem, przyspieszyłoby to również zadanie projektowania VLSI.
Inne zastosowanie obejmuje mnożenie wielomianów dla wielomianów pojedynczej zmiennej, które mogą mieć o wiele mniej wyrazów niż ich stopnie . Iloczyn dwóch wielomianów można wyrazić jako sumę iloczynów par wyrazów, po jednym z każdego wielomianu, a umieszczenie tych iloczynów wyraz po wyrazie w porządku stopniowym jest równoznaczne z posortowaniem ich według sumy stopni. przypadek sortowania z podanym jako przykład powyżej odpowiada mnożeniu dwóch wielomiany trójczłonowe , aby uzyskać wielomian dziewięcioczłonowy:
Liczba zamówień
Dobrze znana dolna granica sortowania nieustrukturyzowanego w modelu drzewa decyzyjnego jest oparta na silni liczby posortowanych rzędów, które może mieć lista nieustrukturyzowana. Ponieważ każde porównanie może co najwyżej zmniejszyć liczbę możliwych porządków o współczynnik dwa, sortowanie wymaga liczby porównań co najmniej równej logarytmowi binarnemu silni , czyli . Wczesne prace nad sortowanie przebiegało w podobny sposób, pytając, ile różnych uporządkowań posortowanych jest możliwych dla tego problemu i udowadniając, że liczba ta wynosi co najwyżej . najwyżej niż znane sortowania, ta metoda może prowadzić jedynie do słabych dolnych granic liczby porównań.
Dowód tego powiązania dotyczy układu hiperpłaszczyzn geometrii wielowymiarowej. Dwa zbiory wejściowe dla obejmują jako współrzędne kartezjańskie punktu w - 2 przestrzeń wymiarowa . Przestrzeń tę można podzielić na komórki, tak aby w obrębie pojedynczej komórki wszystkie punkty odpowiadały danym wejściowym, które tworzą ten sam posortowany porządek. W przypadku tego podziału każda granica między dwiema komórkami leży w hiperpłaszczyźnie określonej przez równość par , gdzie i to dwie pary, których kolejność zmienia się z jednej sąsiedniej komórki do drugiej. Te hiperpłaszczyzny pary, albo mają uproszczone formy lub , więc liczba odrębnych hiperpłaszczyzn, które można określić w ten sposób, wynosi
Podobny styl analizy był bardziej skuteczny w wykluczaniu szybkich rozwiązań pewnych uogólnień pokazując, że mają zbyt wiele uporządkowań, aby można je było szybko W szczególności Harper i in. (1975) sugerują oddzielne sortowanie i , a następnie skonstruowanie dwuwymiarowej macierzy wartości posortowanych danych do zakończenia sortowania . Ten pomysł użycia macierzy posortowanej według wierszy i kolumn stanowi podstawę metody stosowanej przez Skiena w aplikacji transportowej i może zmniejszyć liczbę porównań o stały współczynnik w stosunku do naiwnego sortowania porównań. Jednak dla macierzy, których wiersze i kolumny są posortowane w ten sposób, liczba możliwych uporządkowań całej macierzy jest znacznie większa niż , tak duży, że każdy algorytm sortowania porównawczego, który może działać dla dowolnych według wierszy i kolumn, nadal porównania. Dlatego jeśli problem sortowania ma zostać szybko rozwiązany, rozwiązanie musi wykorzystywać dodatkowe informacje o zbiorze poza tym uporządkowaniem macierzy.
Liczba porównań
W przypadku klasycznego problemu sortowania porównań czas sortowania i liczba porównań potrzebnych do sortowania mieszczą się w stałych współczynnikach. Ale w przypadku porównań jest mniejsza niż najlepsza znana granica czasowa: w r., Że wykonać tylko przy użyciu porównania. Bardziej ogólnie, pokazał, że każdy zestaw zostało już ograniczone do rodziny , można sortować za pomocą przez formę binarnego sortowania przez wstawianie . Dla , , i , więc i granica Fredmana oznacza, że tylko potrzebne są porównania. Jednak w metodzie Fredmana czas potrzebny na podjęcie decyzji, które porównania wykonać, może być znacznie dłuższy niż granica liczby porównań.
Pierwszy jawny algorytm, który osiąga zarówno , jak i sumę ^ złożoność została opublikowana szesnaście lat po Fredmanie przez Lamberta (1992) . Algorytm wykonuje następujące kroki:
- posortuj dwa zestawy i }
- ≤ wywnioskować posortowane uporządkowania i bez dodatkowych porównań .
- Połącz dwa zestawy i w jedną posortowaną kolejność, używając szeregu porównań liniowych w ich całkowitym
- Użyj połączonej kolejności i równoważności wywnioskować posortowaną kolejność bez dodatkowych porównań.
Część algorytmu, która rekurencyjnie sortuje lub równoważnie wykonując następujące kroki:
- Podziel na dwie równe listy podrzędne i .
- Sortuj rekurencyjnie i
- Wywnioskuj o kolejności na porównań z jednego etapu scalania, jak
- wyniki razem _ _
Liczbę porównań potrzebnych do wykonania tego algorytmu na danych wejściowych elementów przeanalizować za pomocą rekurencji do
) { \ liczby elementów
Algorytmy nie oparte na porównaniach
Tak jak sortowanie liczb całkowitych liczb całkowitych, to samo dotyczy sortowania. W szczególności, przy wprowadzaniu liczb całkowitych zakresie od pewnej górnej granicy , problem można rozwiązać w operacji za pomocą szybkiej transformaty Fouriera .
Powiązane problemy
Kilka innych problemów w geometrii obliczeniowej ma taką samą lub większą złożoność jak , w tym konstruowanie sum Minkowskiego wielokątów schodowych, znajdowanie punktów przecięcia układu w posortowanej kolejności według ich współrzędne, wyświetlanie par punktów w kolejności posortowanej według ich odległości i sprawdzanie, czy jeden prostoliniowy wielokąt można przełożyć tak, aby pasował do innego.
Problem sprawdzania, czy dwie pary w rozwiązać, sortując pary, a następnie testując kolejne pary pod kątem Z kolei można go użyć do rozwiązania problemu 3SUM , co sugeruje, że jest mało prawdopodobne, aby miał silnie subkwadratowy algorytm.