Saya pikir saya sekarang dapat menunjukkan batas bawah nontrivial. Idenya adalah untuk mengimplementasikan program semacam itu dengan keluarga program percabangan perbandingan. Asumsi `read-only 'berarti bahwa keluarga kami dari program percabangan menggunakan sedikit, yaitu , ruang. Kemudian kita menerapkan batas bawah S T = Ω ( n 2 ) dibuktikan oleh Borodin et al. di "Pengorbanan Waktu-Ruang untuk Mengurutkan pada Mesin yang tidak sadar." Ini memberi kita aO ( logn )ST= Ω ( n2) batas bawah untuk saat itu.n2/ logn
Dengan sedikit lebih detail: Kita dapat membuang operasi 5 di atas. Secara longgar, jika kita sudah dapat membandingkan kepala dua daftar dan mencetak kepala daftar, maka tidak perlu bagi kita untuk mengisolasi kepala daftar pada daftar tertentu. Dengan asumsi ini, kita melihat bahwa setiap register di mesin hanya pernah menyimpan substring terakhir dari input.
Misalkan program register kita memiliki baris kode dan register k , X 1ℓk .X1, ... , Xk
Perbaiki . Kami membangun program percabangan perbandingan untuk string dengan panjang n sebagai berikut. Buat simpul untuk setiap tupel ( i , d 1 , … , d k ) di mana 1 ≤ i ≤ ℓ dan 0 ≤ d 1 , … , d k ≤ n . Idenya adalah, perhitungan dalam mesin register sesuai dengan jalur dalam program percabangan, dan kami berada di simpul ( i , d 1 , ... , dnn( saya , d1, ... , dk)1 ≤ i ≤ ℓ0 ≤ d1, ... , dk≤ n jika kita berada pada baris i di mesin register dan panjang string yang disimpan dalam X i adalah d i . Sekarang, kita harus mendefinisikan tepi diarahkan dari program percabangan( saya , d1, ... , dk)sayaXsayadsaya
Jika baris adalah dari formulirsaya
jika maka goto i 1 goto i 2Xkamu< Xvsaya1saya2
maka untuk semua , simpul ( i , d 1 , ... , d k ) dilabeli dengan membandingkan elemen d u -th dan d v -th input, dan memiliki edge "true" masuk ke ( i 1 , d 1 , … , d k ) , dan "false" edge to ( i 2 ,d1, ... , dk( saya , d1, ... , dk)dkamudv( saya1,d1, ... ,dk) .( saya2, d1, ... , dk)
Jika baris adalah dari formulirsaya
, goto line i ′X1← t a i l ( X2)saya′
lalu ada panah dari sembarang simpul ke ( i ′ , d 2 - 1 , … , d k ) .( saya , d1, ... , dk)( saya′, d2- 1 , … , dk)
Jika baris adalah dari formulirsaya
p r i n t ( h e a d( Xkamu) ) , goto line saya′
lalu ada panah dari sembarang simpul ke ( i ′ , d 1 , … , d k ) yang dilabeli oleh( saya , d1, ... , dk)( saya′, d1, ... , dk) simpul -th input.dkamu
Semoga contoh-contoh ini memperjelas bagaimana saya bermaksud membangun program percabangan saya. Ketika semua dikatakan dan dilakukan, program percabangan ini memiliki paling banyak node, sehingga memiliki ruang O ( log n )ℓ ⋅ nkO ( logn )