Wszyscy wiemy, że odróżnienia elementów w modelu opartym na porównaniu nie można zrobić w czasie . Jednak na słownej pamięci RAM można osiągnąć lepiej.
Oczywiście, jeśli przyjmie się istnienie idealnej funkcji skrótu, którą można obliczyć w czasie liniowym, otrzymamy liniowy algorytm czasu dla odróżnienia elementu: po prostu utrzymuj wartości mieszania jeden po drugim i zwracaj 1, jeśli występuje kolizja.
Istnieją jednak dwa problemy: 1) większość konstrukcji doskonałych funkcji skrótu, które mogłem znaleźć, wykorzystała losowość i 2) Nie mogę nigdzie znaleźć dyskusji na temat czasu wstępnego przetwarzania, tj. Czasu potrzebnego do podjęcia decyzji, którą funkcję skrótu wybierzesz używać na podstawie wejściowego zestawu liczb.
Fredman i wsp. „ Przechowywanie rzadkiej tabeli z czasem dostępu najgorszym przypadku ” rozwiązuje pierwszy problem, zapewniając funkcję skrótu z czasem dostępu w najgorszym przypadku, ale nie mówi nic o drugim problemie .
Podsumowując, oto, czego chcę:
Zaprojektować algorytm danym zestawie z liczb (każda liczba jest bitów) na słowo-RAM o długości słowa , znajduje się funkcja mieszająca W czas, gdzie . Funkcja powinna mieć właściwość, że dla dowolnego liczba elementów odwzorowanych na jest stała, a obliczenie powinno przyjąćn w w h : S → { 1 , … , m } O ( n ) m = O ( n ) h j ∈ { 1 , … , m } S jO ( 1 )czas w „rozsądnym” słowie-modelu RAM, tzn. model nie powinien pozwalać na „egzotyczne” funkcje na słowach oceniane w czasie .
Chciałbym również wiedzieć, czy istnieją algorytmy rozwiązujące rozróżnienie elementów w słowie-RAM, które w ogóle nie używają funkcji skrótu.