Rozważ następujący problem:
Dane wejściowe: dwie tablice i o długości , gdzie jest posortowane.B n B
Pytanie: czy i zawierają te same elementy (z ich wielokrotnością)?B.
Jaki jest najszybszy algorytm deterministyczny dla tego problemu?
Czy można to rozwiązać szybciej niż ich sortowanie? Czy ten problem można rozwiązać w deterministycznym czasie liniowym?
algorithms
reference-request
sorting
Albert Hendriks
źródło
źródło
Odpowiedzi:
Nie określiłeś modelu obliczeniowego, więc przyjmuję model porównawczy.
Rozważ szczególny przypadek, w którym tablica jest pobierana z listy Innymi słowy, tym elementem jest albo albo .{ 1 , 2 } × { 3 , 4 } × ⋯ × { 2 n - 1 , 2 n } . i 2 i - 1 2 iB
Zastrzeżenia patentowe że jeśli algorytm stwierdzono, że i zawierają takie same elementy, że algorytm porównaniu każdy element jej odpowiednika w . Istotnie, przypuśćmy, że algorytm stwierdza, że i zawierają te same elementy, ale nie porównuje pierwszy element do swojego odpowiednika w . Jeśli zmienimy pierwszy element, algorytm działałby dokładnie w ten sam sposób, nawet jeśli odpowiedź jest inna. To pokazuje, że algorytm musi porównać pierwszy element (i żadnego innego elementu) do jego odpowiednika w .B B A A B B A AA B B A A B B A A
Oznacza to, że i zawierają takie same elementy, a po stwierdzeniu, to algorytm wie posortowane kolejność . Dlatego musi mieć co najmniejróżne liście, więc zajmuje to czas .B A n ! Ω ( n log n )A B A n! Ω(nlogn)
źródło
Ta odpowiedź dotyczy innego modelu obliczeń: modelu pamięci RAM kosztu jednostkowego. W tym modelu słowa maszynowe mają rozmiar , a operacje na nich zajmują czas . Przyjmujemy również dla uproszczenia, że każdy element tablicy mieści się w jednym słowie maszynowym (a więc ma co najwyżej wielkości).O(logn) O(1) nO(1)
Skonstruujemy losowy algorytm liniowy z jednostronnym błędem (algorytm może zadeklarować, że dwie tablice zawierają te same elementy, nawet jeśli tak nie jest), w celu trudniejszego ustalenia, czy dwie tablice i zawierają te same elementy. (Nie wymagamy sortowania żadnego z nich.) Nasz algorytm popełni błąd z prawdopodobieństwem co najwyżej .a1,…,an b1,…,bn 1/n
Chodzi o to, że następująca tożsamość utrzymuje, że tablice zawierają te same elementy: Dokładne obliczenie tych wielomianów zajmie zbyt dużo czasu. Zamiast tego wybieramy losową liczbę pierwszą i losową i testujemy, czy Jeśli tablice są równe, test zawsze się powiedzie, więc skoncentrujmy się na przypadkach, w których tablice są różne. W szczególności pewien współczynnik jest niezerowy. Ponieważ mają wielkość , współczynnik ten ma wielkośćpx0 n ∏ i = 1 (x0-ai)≡ n ∏ i = 1 (x0-bi)
Podsumowując, jeśli wybierzemy losowe wielkości mniej więcej spośród zestawu co najmniej różnych liczb pierwszych i losowego modulo , to gdy tablice nie zawierają tych samych elementów, nasz test zakończy się niepowodzeniem z prawdopodobieństwem . Przeprowadzenie testu zajmuje czas ponieważ mieści się w stałej liczbie słów maszynowych.p n2 n2 x0 p 1−O(1/n) O(n) p
Używając wielomianowego testowania pierwotności czasu, a ponieważ gęstość liczb pierwszych z grubsza wynosi , możemy wybrać losową liczbę pierwszą w czasie . Wybór losowy modulo mogą być realizowane na różne sposoby, a jest łatwiejsze, ponieważ w naszym przypadku nie musimy całkowicie jednolite losowo .n2 Ω(1/logn) p (logn)O(1) x0 p x0
Podsumowując, nasz algorytm działa w czasie , zawsze zwraca TAK, jeśli tablice zawierają te same elementy, i zwraca NIE z prawdopodobieństwem jeśli tablice nie zawierają tych samych elementów. Można zwiększyć prawdopodobieństwo błędu do dla każdego stałego .O(n) 1−O(1/n) 1−O(1/nC) C
źródło
zaproponuję inny algorytm (lub przynajmniej schemat takiego algorytmu)
Schemat zakłada, że wartości (zakładane „ liczby całkowite ”) mieszczą się w (wąskim?) Zakresie między[min,max]
W czasie skanowania dwóch tablic, możemy znaleźć wartości i dla obu i ich wielokrotności, jeśli się różnią, tablice nie są wzajemnymi permutacjamiO(n)
min
max
Odejmij
min
wszystkie wartości z obu tablic (tutaj nie bierze się pod uwagę faktu, że jedna tablica jest już posortowana, prawdopodobnie można to poprawić)Załóżmy, że wartości w tablicach reprezentują masy i do każdej wielkości stosujemy przyspieszenie / prędkość ( w niektórych przypadkach można to poprawić do wartości )1 c>1
przesuwać masy, aż osiągną maksymalną wartośćO((max−min)n)
max-min
, ma to złożoność . Pozwala to na znalezienie zarówno tych samych wartości, jak i ich wielokrotności, jeśli się różnią, tablice nie są wzajemnymi permutacjami. W innym przypadku tablice są wzajemnymi permutacjami.zauważ, że powyższy schemat algorytmu może być (deterministycznie) dość szybki w wielu praktycznych sytuacjach.
Powyższy schemat algorytmu jest odmianą algorytmu sortującego w czasie liniowym wykorzystującym „ ruchome masy ”. Fizyczna intuicja stojąca za algorytmem sortowania „ ruchomych mas ” jest następująca:
Załóżmy, że wartość każdego elementu faktycznie reprezentuje jego masę i wyobraź sobie, że układasz wszystkie przedmioty w linii i przykładasz taką samą siłę przyspieszenia.
Następnie każdy przedmiot przesunie się na odległość związaną z jego masą, bardziej masywny mniejszy dystans i odwrotnie. Następnie, aby odzyskać posortowane przedmioty, po prostu zbierz przedmioty w odwrotnej kolejności według przebytej odległości.
Algorytm ten jest liniowo-czasowy i deterministyczny , ale jest zastrzeżenie, że wielkość początkowej siły przyspieszenia i odległości do podróży (lub czasu oczekiwania) jest związana z rozkładem wartości (tj. „ Masami ”, współczynnik powyżej). Można także spróbować dyskretyzować miejsce, w którym przedmioty mogą podróżować do siatki i uzyskać stały współczynnik prędkości algorytmu (i użyć procedury szybkiego sortowania do sortowania różnych przedmiotów w tej samej komórce ).max−min
W związku z tym, powyższy algorytm jest podobne do algorytmów oparte sortowania (na przykład podstawa sortowania , zliczanie sortowania )
Można by pomyśleć, że ten algorytm może niewiele znaczyć, ale pokazuje przynajmniej jedną rzecz. To, że „ zasadniczo ”, na poziomie fizycznym, sortowanie dowolnych liczb jest operacją w czasie liniowym dla liczby elementów.
źródło