Я думаю, що зараз можу продемонструвати нетривіальну нижню межу. Ідея полягає в тому, щоб реалізувати будь-яку таку програму з сімейством програм розгалуження порівняння. Припущення "лише для читання" означає, що наше сімейство програм розгалуження використовує мало, тобто простору. Потім застосуємо нижню межу S T = Ω ( n 2 ), доведену Бородіном та ін. в "Часово-космічний компроміс для сортування на непомітних машинах". Це дає нам нижню межу на час n 2 / log n .O(logn)ST=Ω(n2)n2/logn
Трохи детальніше: Ми можемо не відмовитися від операції 5 вище. Якщо говорити, якщо ми вже можемо порівняти заголовки двох списків та надрукувати заголовки списку, тоді нам не потрібно виділяти голову списку на певний реєстр. Припускаючи це, ми бачимо, що кожен реєстр в машині зберігає лише останню підрядку вводу.
Припустимо, у нашій програмі регістрів є рядки коду та k регістри, X 1 , … , X k .ℓkX1,…,Xk
Виправити . Побудуємо програму порівняння розгалуження для рядків довжиною n наступним чином. Створіть вузол для кожного кортежа ( i , d 1 , … , d k ), де 1 ≤ i ≤ ℓ і 0 ≤ d 1 , … , d k ≤ n . Ідея полягає в тому, що обчислення в машині реєстрації відповідають шляхам в програмі розгалуження, і ми знаходимося у вузлі ( i , d 1 , …nn(i,d1,…,dk)1≤i≤ℓ0≤d1,…,dk≤n. Тепер ми повинні визначити спрямовані краї програми розгалуження(i,d1,…,dk)якщо ми знаходимося в рядку в машині регістра, а довжина рядка, що зберігається в X i, є d iiXidi
Якщо рядок i має форму
якщо то goto i 1 else goto i 2Xu<Xvi1i2
то для всіх , вузол ( i , d 1 , … , d k ) позначається, порівнюючи d u -th та d v -th елемент введення та маючи “справжній” край перейти до ( i 1 , d 1 , ... , d k ) , а "хибний" край до ( i 2 , d 1 , ... , d kd1,…,dk(i,d1,…,dk)dudv(i1,d1,…,dk) .(i2,d1,…,dk)
Якщо рядок має формуi
, пряма лінія i ′X1←tail(X2)i′
то є стрілка від будь-якого вузла до ( i ′ , d 2 - 1 , … , d k ) .(i,d1,…,dk)(i′,d2−1,…,dk)
Якщо рядок має формуi
print(head(Xu))i′
then there is an arrow from any node (i,d1,…,dk) to (i′,d1,…,dk) which is labelled by the du-th node of the input.
Hopefully these examples make it clear how I intend to construct my branching program. When all is said and done, this branching program has at most ℓ⋅nk nodes, so it has space O(logn)