Myślę, że mogę teraz zademonstrować nietrywialną dolną granicę. Chodzi o to, aby wdrożyć dowolny taki program z rodziną porównawczych programów rozgałęziających. Założenie „tylko do odczytu” oznacza, że nasza rodzina programów rozgałęziających zużywa niewiele, tj. , przestrzeni. Następnie stosujemy dolną granicę S T = Ω ( n 2 ) udowodnioną przez Borodina i in. w „Kompromisie czasoprzestrzennym dla sortowania na nieświadomych maszynach”. To daje nam n 2O(logn)S.T.= Ω ( n2)) dolnej granicy czasu.n2)/ logn
Mówiąc bardziej szczegółowo: możemy zrezygnować z operacji 5 powyżej. Mówiąc luźniej, jeśli możemy już porównać nagłówki dwóch list i wydrukować nagłówek listy, nie musimy izolować nagłówka listy w konkretnym rejestrze. Zakładając to, widzimy, że każdy rejestr w maszynie zawsze przechowuje tylko końcowy podciąg danych wejściowych.
Załóżmy, że nasz program rejestrów ma wierszy kodu i rejestrów k , X 1 , …ℓk .X1, … , Xk
Fix . Tworzymy porównawczy program rozgałęziający dla ciągów o długości n w następujący sposób. Utwórz węzeł dla każdej krotki ( i , d 1 , … , d k ), gdzie 1 ≤ i ≤ ℓ i 0 ≤ d 1 , … , d k ≤ n . Chodzi o to, że obliczenia w maszynie rejestrującej odpowiadają ścieżkom w programie rozgałęziającym, a my jesteśmy w węźle ( i , d 1 , … , dnn( i , d1, … , Dk)1≤i≤ℓ0≤d1,…,dk≤n jeśli znajdujemy się w linii iwynosi d i . Teraz musimy zdefiniować ukierunkowane krawędzie programu rozgałęziającego(i,d1,…,dk)iw maszynie rejestrującej i długość ciągu zapisanego w Xidi
Jeśli linia ma postaći
jeśli to goto i 1Xu<Xvi1 else gotoi2
następnie dla wszystkich , węzeł ( i , d 1 , … , d k ) jest oznaczony poprzez porównanie d u-tego i d v-tego elementu wejściowego, a „prawdziwa” krawędź przechodzi do ( i 1 , d 1 , … , d k ) , a „fałszywa” krawędź do ( i 2 , d 1d1,…,dk(i,d1,…,dk)dudv(i1,d1,…,dk) .(i2,d1,…,dk)
Jeśli linia ma postaći
, linia gotoX1←tail(X2)i′
następnie jest strzałka z dowolnego węzła do ( i ′ , d 2 - 1 , … , d(i,d1,…,dk) .(i′,d2−1,…,dk)
Jeśli linia ma postaći
, goto lineprint(head(Xu))i′
Następnie znajduje się strzałka z dowolnego węzła do ( I ' , d 1 , ... , d k ) , który jest oznaczony przez D u -ty węzła wejścia.(i,d1,…,dk)(i′,d1,…,dk)du
Mam nadzieję, że te przykłady wyjaśniają, w jaki sposób zamierzam zbudować program rozgałęziający. Kiedy wszystko jest powiedziane i zrobione, ten program rozgałęzienia ma co najwyżej węzłów, a więc ma miejsce O ( log n )ℓ⋅nkO(logn)