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,…,anb1,…,bn1/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)
∏i=1n(x−ai)=∏i=1n(x−bi).
px0∏i=1n(x0−ai)≡∏i=1n(x0−bi)(modp).
a i , b i n O ( 1 ) 2 n n O ( n ) = n O ( n ) O ( n ) Ω ( n ) n 2 p n∏ni=1(x−ai)−∏ni=1(x−bi)ai,binO(1)2nnO(n)=nO(n), a więc ma co najwyżej podstawowe czynniki wielkości . Oznacza to, że jeśli wybierzemy zestaw co najmniej liczb pierwszych o rozmiarze co najmniej (powiedzmy), to dla losowej liczby pierwszej tego zestawu będzie on z prawdopodobieństwem wynosić co najmniej że
Przypadkowy modulo będzie świadkiem tego z prawdopodobieństwem (ponieważ wielomian stopnia co najwyżej ma co najwyżej pierwiastków).
O(n)Ω(n)n2pn2p1−1/n∏i=1n(x−ai)−∏i=1n(x−bi)≢0(modp).
x0p1−n/p≥1−1/nnn
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.pn2n2x0p1−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)x0px0
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