Sortowanie X + Y

Nierozwiązany problem w informatyce :

Czy istnieje algorytm sortowania szybszy niż log

wizualizacja . Zbiory wejściowe i posortowanie punktów przecięcia według pozycji czerwonej przekątnej linie przez nie.

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

jednego elementu z i jednego elementu z , wymienionych w kolejności według sumy par
Jednym ze sposobów rozwiązania tego problemu byłoby skonstruowanie par do sortowania ( iloczyn kartezjański dwóch kolekcji) i użycie tych par jako danych wejściowych do standardowego algorytmu sortowania porównawczego , takiego jak sortowanie przez scalanie lub sortowanie na stosie . Gdy dane wejściowe mają długość tworzą a czas na posortowanie par w ten sposób to . Pod względem O jest najszybszym znanym algorytmem sortowania To, czy istnieje szybszy algorytm, jest otwartym problemem , postawionym przez Elwyna Berlekampa przed 1975 rokiem.

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:

Stopnie są zawsze liczbami całkowitymi, więc można zastosować algorytmy oparte na całkowitych Jednak w przypadku wielomianów, których liczba wyrazów jest porównywalna z ich stopniem, algorytmy mnożenia wielomianów oparte na FFT mogą być znacznie bardziej wydajne niż mnożenie wyraz po wyrazie.

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

Liczba komórek, na które ta liczba hiperpłaszczyzn może podzielić przestrzeń o wymiarze, wynosi
Dlatego zbiór _

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:

  1. posortuj dwa zestawy i }
  2. ≤ wywnioskować posortowane uporządkowania i bez dodatkowych porównań .
  3. Połącz dwa zestawy i w jedną posortowaną kolejność, używając szeregu porównań liniowych w ich całkowitym
  4. 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:

  1. Podziel na dwie równe listy podrzędne i .
  2. Sortuj rekurencyjnie i
  3. Wywnioskuj o kolejności na porównań z jednego etapu scalania, jak
  4. wyniki razem _ _

Liczbę porównań potrzebnych do wykonania tego algorytmu na danych wejściowych elementów przeanalizować za pomocą rekurencji do

gdzie zlicza liczbę porównań w rekurencyjnych wywołaniach algorytmu sortowania i B a zlicza liczbę porównań użytych Twierdzenie mistrza dla relacji rekurencyjnych tej postaci pokazuje, Całkowita złożoność czasowa jest wolniejsza, , ponieważ kroków algorytmu, które wykorzystują już wykonane porównania, aby wywnioskować uporządkowanie innych zbiorów. Te kroki można wykonać w czasie przy użyciu standardowego algorytmu sortowania porównawczego, w którym kroki porównania zostały zastąpione podanymi wnioskami.

) { \ 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.