我想我现在可以证明一个不重要的下限。这个想法是用一系列比较分支程序来实现任何这样的程序。“只读”假设意味着我们的分支程序家族使用的空间很少,即空间。然后我们应用由Borodin等人证明的下限S T = Ω (n 2)。在“在非遗忘的机器上进行排序的时空折衷”中。这给我们一个n 2 / log nO(logn)ST=Ω(n2)n2/logn下界。
更详细一点:我们可以省去上面的操作5。宽松地说,如果我们已经可以比较两个列表的开头并打印一个列表的开头,那么就没有必要在特定寄存器上隔离列表的开头。假设这样做,我们看到机器中的每个寄存器仅存储输入的最后一个子串。
假设我们的寄存器程序有行代码和k个寄存器X 1,… ,X k。ℓkX1,…,Xk
修复。我们为长度为n的字符串构造比较分支程序,如下所示。创建用于每个元组的一个节点(我,d 1,... ,d ķ)其中1 ≤ 我≤ ℓ 和0 ≤ d 1,... ,d ķ ≤ Ñ。这个想法是,寄存器机中的计算与分支程序中的路径相对应,并且我们位于节点(i ,d 1,… ,dnn(i,d1,…,dk)1≤i≤ℓ0≤d1,…,dk≤n如果我们在套准机的第 i行,并且存储在 X i中的字符串的长度是 d i(i,d1,…,dk)iXidi。现在,我们必须定义分支程序的有向边
如果i的格式为
如果则转到i 1否则转到i 2Xu<Xvi1i2
然后,对于所有,通过比较输入的d u -th和d v -th元素来标记节点(i ,d 1,… ,d k),并使“真”边变为(i 1,d 1,… ,d k)和(i 2,d 1,… ,d)的“假”边缘d1,…,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′
(i,d1,…,dk)(i′,d1,…,dk)dü
ℓ &CenterDot;&ñķO (对数n )