Ich denke, ich kann jetzt eine nichttriviale Untergrenze demonstrieren. Die Idee ist, ein solches Programm mit einer Familie von Vergleichsverzweigungsprogrammen zu implementieren. Die "Nur-Lese" -Annahme bedeutet, dass unsere Familie von Verzweigungsprogrammen nur wenig Platz benötigt, dh . Dann wenden wir die untere Grenze S T = Ω ( n 2 ) an , die von Borodin et al. in "Ein Time-Space-Tradeoff für das Sortieren auf nicht vergessenen Maschinen." Dies gibt uns eine Untergrenze von n 2 / log n für die Zeit.O (logn )ST=Ω(n2)n2/logn
Im Detail: Auf die obige Operation 5 können wir verzichten. Wenn wir schon die Köpfe zweier Listen vergleichen und den Kopf einer Liste ausdrucken können, brauchen wir den Kopf einer Liste nicht in einem bestimmten Register zu isolieren. Angenommen, wir sehen, dass jedes Register in der Maschine immer nur eine letzte Teilzeichenfolge der Eingabe speichert.
Angenommen, unser Registerprogramm hat Codezeilen und k Register, X 1 , … , X k .ℓkX1,…,Xk
Fix . Wir konstruieren das Vergleichsverzweigungsprogramm für Zeichenketten der Länge n wie folgt. Erstellen Sie einen Knoten für jedes Tupel ( i , d 1 , … , d k ) mit 1 ≤ i ≤ ℓ und 0 ≤ d 1 , … , d k ≤ n . Die Idee ist, dass Berechnungen in der Registermaschine Pfaden im Verzweigungsprogramm entsprechen und wir uns am Knoten ( i , d 1 , … , dnn(i,d1,…,dk)1≤i≤ℓ0≤d1,…,dk≤n , wenn wir anLinie sind i im Register Maschine und die Länge des Strings gespeichert in X i ist d i . Nun müssen wir die gerichteten Kanten des Verzweigungsprogramms definieren(i,d1,…,dk)iXidi
Wenn Zeile von der Form isti
wenn dann gehe zu i 1 sonst gehe zu i 2Xu<Xvi1i2
dann für all , den Knoten ( i , d 1 , ... , d k ) wird durch Vergleichen des markierten d u ' ten und d v -te Element der Eingabe, und die "wahren" edge gehen zu müssen , um ( i 1 , d 1 , … , d k ) und die "falsche" Kante zu ( i 2 , d 1 , … , d kd1,…,dk(i,d1,…,dk)dudv(i1,d1,…,dk) .(i2,d1,…,dk)
Wenn Zeile von der Form istich
, gehe zur Linie i 'X1← t a i l ( X2)ich′
dann gibt es einen Pfeil von einem beliebigen Knoten zu ( i ' , d 2 - 1 , … , d k ) .( i , d1, … , Dk)( i′, d2- 1 , … , dk)
Wenn Zeile von der Form istich
, gehe zur Linie i 'print(head(Xu))i′
dann gibt es einen Pfeil von jedem Knoten bis ( i ' , d 1 , ... , d k ) , die durch den gekennzeichnet ist d u -ten Knoten des Einganges.(i,d1,…,dk)(i′,d1,…,dk)du
Hoffentlich machen diese Beispiele deutlich, wie ich mein Verzweigungsprogramm aufbauen will. Wenn alles gesagt und getan ist , diese Verzweigung Programm hat höchstens Knoten, so dass es Raum hat O ( log n )l ⋅ nkO ( logn )