Rozważ następujący problem:
Dane wejściowe : wyświetla liczb całkowitych
Cel : ustalenie, czy istnieje liczba całkowita która znajduje się na obu listach.
Załóżmy, że obie listy mają rozmiar . Czy dla tego problemu istnieje deterministyczny algorytm czasu liniowego? Innymi słowy, czy możesz rozwiązać ten problem deterministycznie w czasie bez losowości?
Niestety nie można założyć, że wszystkie elementy listy są małe.
Widzę, jak rozwiązać go w oczekiwanym czasie za pomocą algorytmu losowego: losowo wybierz 2-uniwersalną funkcję skrótu , zapisz elementy w tablicy mieszającej (używając jako funkcji skrótu), a następnie wyszukaj każdy element aby sprawdzić, czy znajduje się w tablicy mieszającej. Oczekiwany czas działania to . Jednak nie widzę, jak znaleźć algorytm deterministyczny z czasem działania . Jeśli spróbujesz to zdemandomizować i naprawić pojedynczą konkretną funkcję skrótu, pojawi się dane wejściowe najgorszego przypadku, które powodują uruchomienie tej procedury wczas. Najlepszy deterministyczny algorytm, jaki mogę znaleźć, polega na sortowaniu wartości, ale nie będzie to czas liniowy. Czy możemy osiągnąć liniowy czas pracy?
Widzę też, jak rozwiązać ten problem w czasie liniowym, jeśli założymy, że wszystkie elementy listy są liczbami całkowitymi z zakresu (w zasadzie sortuj według liczenia) - ale interesuje mnie to, co dzieje się ogólnie przypadek, gdy nie możemy tego założyć.
Jeśli odpowiedź zależy od modelu obliczeniowego, model pamięci RAM przywołuje na myśl, ale interesują mnie wyniki dla każdego rozsądnego modelu obliczeniowego. Zdaję sobie sprawę z dolnych granic algorytmów drzewa decyzyjnego dla unikalności elementu , ale nie jest to ostateczne, ponieważ czasami możemy znaleźć algorytmy czasu liniowego, nawet jeśli istnieje związany w modelu drzewa decyzyjnego.