Dla ludzi takich jak ja, którzy badają algorytmy życia, standardowym modelem obliczeń XXI wieku jest całkowita liczba pamięci RAM . Model ma dokładniej odzwierciedlać zachowanie prawdziwych komputerów niż model maszyny Turinga. Komputery w świecie rzeczywistym przetwarzają wiele bitów liczb całkowitych w stałym czasie przy użyciu równoległego sprzętu; nie dowolne liczby całkowite, ale (ponieważ rozmiary słów stale rosną z czasem) nie są też liczbami całkowitymi o stałej wielkości .
Model zależy od jednego parametru , zwanego rozmiarem słowa . Każdy adres pamięci zawiera jedną liczbę całkowitą w- bit lub słowo . W tym modelu wielkość wejściowa n to liczba słów na wejściu, a czas działania algorytmu to liczba operacji na słowach . Standardowe operacje arytmetyczne (dodawanie, odejmowanie, mnożenie i dzielenie całkowite, pozostałość porównanie) i operacji logicznych (bitowe, i, albo XOR, zmiany, obraca się) słów wymaga O ( 1 ) razem z definicji .wwnO ( 1 )
Formalnie rozmiar słowa NIE jest stałąw do celów analizy algorytmów w tym modelu. Aby model był zgodny z intuicją, wymagamy , ponieważ w przeciwnym razie nie możemy nawet zapisać liczby całkowitej n w jednym słowie. Niemniej jednak w przypadku większości algorytmów nienumerycznych czas działania jest w rzeczywistości niezależny od w , ponieważ algorytmy te nie dbają o binarną reprezentację ich danych wejściowych. Mergesort i heapsort działają w czasie O ( n log n ) ; mediana-z-3-szybkich biegów działa w O ( n 2w ≥ log2)nnwO ( n logn ) czas w najgorszym przypadku. Jednym wyjątkiem jest binarny rodzaj podstawa, która rozciąga się w O ( n W ) czasu.O ( n2))O ( n w )
Ustawienie daje nam tradycyjny model RAM o koszcie logarytmicznym. Ale niektóre algorytmy liczb całkowitych RAM są zaprojektowane dla większych rozmiarów słów, jak algorytm sortowania liczb całkowitych w czasie liniowym Andersson i in. , co wymaga w = Ω ( log 2 + ε n ) .w = Θ ( logn )w = Ω ( log2 + εn )
Dla wielu algorytmów, które pojawiają się w praktyce, wielkość słowo to nie tylko problem, a my możemy (i robią) spadnie z powrotem na znacznie prostszą jednolity kosztach modelu RAM. Jedyna poważna trudność pochodzi z zagnieżdżonego mnożenia, które mogą być wykorzystane do budowy bardzo dużych liczb całkowitych bardzo szybko. Gdybyśmy mogli wykonywać arytmetykę na dowolnych liczbach całkowitych w stałym czasie, moglibyśmy rozwiązać każdy problem w PSPACE w czasie wielomianowym .w
Aktualizacja: Powinienem również wspomnieć, że istnieją wyjątki od „modelu standardowego”, takiego jak algorytm mnożenia liczb całkowitych Fürera , który wykorzystuje maszyny Turinga na wielu taśmach (lub równoważnie „bitowa pamięć RAM”) oraz większość algorytmów geometrycznych, które są analizowane teoretycznie czysty, ale wyidealizowany model „prawdziwej pamięci RAM” .
Tak, to puszka robaków.