Załóżmy, że otrzymujemy tablicę zawierającą nieujemne liczby całkowite (niekoniecznie różne).
Oczywistym rozwiązaniem jest sortowanie a następnie obliczanie . Daje to algorytm działający w czasie w najgorszym przypadku.
Czy można to zrobić lepiej? Czy możemy obliczyć czasie liniowym?
Moje główne pytanie to powyższe. Byłoby jednak interesujące wiedzieć o następującym uogólnieniu problemu.
Niech być sortowane według niektórych porównania oracle i w zależności od danego wyrocznię. Biorąc pod uwagę i wyrocznie dla i , co możemy powiedzieć o czasie potrzebnym do obliczenia ?
Możemy obliczyć jeszcze w czasu. Ale czy możemy udowodnić superliniową granicę dolną dla tego uogólnionego przypadku?
Jeśli odpowiedź brzmi „tak”, czy dolna granica jest zachowana, jeśli założymy, że jest zwykłą kolejnością na liczbach całkowitych, a jest funkcją „ładną” (monotoniczną, wielomianową, liniową itp.)?
Jeśli tablica składa się z różnych liczb całkowitych, to , ponieważ odległość między sąsiednimi wpisami w wynosi co najmniej ; sytuacja jest bardziej interesująca, gdy nie muszą być wyraźne.A m=max(A)+1 B 1
W przypadku bardziej ogólnego pytania wyobraź sobie sytuację, w której jest „interesujące” tylko wtedy, gdy . Wydaje się, że możliwe jest skonstruowanie argumentu przeciwnika, który zmusza cię do zapytania dla wszystkich zanim będziesz mógł poznać , dlatego musisz posortować , aby znajdź odpowiedź, która bierze porównania . (Istnieją pewne komplikacje, ponieważ może się zdarzyć, że możemy przetestować, czy w stałym, a nie liniowym czasie, poprzez zapytanie .) Tak jest, nawet jeśli jest wielomianem (wysokiego stopnia).f(B[i],j) i=j f(B[i],i) i maxif(B[i],i) A Ω(nlogn) A[i]=B[j] f(A[i],j) f
źródło