Je pense que je peux maintenant démontrer une borne inférieure non triviale. L'idée est de mettre en œuvre un tel programme avec une famille de programmes de branchement de comparaison. L'hypothèse "en lecture seule" signifie que notre famille de programmes de branchement utilise peu d' espace , c'est-à-dire . Ensuite, nous appliquons la borne inférieure S T = Ω ( n 2 ) prouvée par Borodin et al. dans "A Time-Space Tradeoff for Sorting on non-inconscious Machines". Cela nous donne un n 2 / log nO ( logn )ST= Ω ( n2)n2/ logn limite inférieure pour le moment.
Plus en détail: on peut se passer de l'opération 5 ci-dessus. En gros, si nous pouvons déjà comparer les têtes de deux listes et imprimer la tête d'une liste, il n'est pas nécessaire pour nous d'isoler la tête d'une liste sur un registre particulier. En supposant cela, nous voyons que chaque registre de la machine ne stocke que la sous-chaîne finale de l'entrée.
Supposons que notre programme de registres ait lignes de code et k registres, X 1 , … , X k .ℓkX1, … , Xk
Fixez . Nous construisons le programme de branchement de comparaison pour les chaînes de longueur n comme suit. Créez un nœud pour chaque tuple ( i , d 1 ,nn où 1 ≤ i ≤ ℓ et 0 ≤ d 1 , … , d k ≤ n . L'idée est que les calculs dans la machine de registre correspondent aux chemins dans le programme de branchement, et nous sommes au nœud ( i , d 1 , … , d(i,d1,…,dk)1≤i≤ℓ0≤d1,…,dk≤n si nous sommes à la ligne i dans la machine de registre et que la longueur de la chaîne stockée dans X i est d i . Maintenant, nous devons définir les bords dirigés du programme de branchement(i,d1,…,dk)jeXjeréje
Si la ligne est de la formei
si alors goto i 1 d' autre goto i 2Xu<Xvi1i2
alors pour tout , le nœud ( i , d 1 , … , d k ) est étiqueté en comparant le d ud1,…,dk(i,d1,…,dk)du élément -th et -th d'entrée, et en ayant le bord «vrai» aller à ( i 1 , d 1 , … , d k ) , et le bord «faux» à ( i 2 , d 1 , … , d kdv(i1,d1,…,dk) .(i2,d1,…,dk)
Si la ligne est de la formei
, passez à la ligne i ′X1←tail(X2)i′
alors il y a une flèche de n'importe quel nœud à ( i ′ , d 2 - 1 , … , d k )(i,d1,…,dk)(i′,d2−1,…,dk) .
Si la ligne est de la formei
, passez à la ligne i ′print(head(Xu))i′
alors il y a une flèche de n'importe quel nœud (i,d1,…,dk)(i′,d1,…,dk)du
ℓ⋅nkO(logn)