L'esempio seguente dimostra che un algoritmo che impiega O ( n log ( n ) ) per risolvere un problema su word-Ram potrebbe aver bisogno di O ( n 2 log ( n ) 3 ) su una Turing Machine (TM) a 1 nastro che esegue esattamente tutti i calcoli indicati da A . Comprendo che la domanda riguarda la TM a 1 nastro e la uso solo nella mia risposta. Questa è una modifica per rispondere alle osservazioni di Emil Jeřábek.UNO ( n log( n ) )O ( n2log( n )3)UN
Troveremo la seguente conclusione più generale . Per dimostrare che il TM può risolvere in un problema risolto in O ( T ( n ) ) da un algoritmo A RAM, è non sufficiente corsa A sul TM. Potrebbe essere necessario un algoritmo intelligente . Lo stesso vale se si vuole dimostrare una O ( n log ( n ) )O ( T( n )2)O ( T( n ) )UNUNO ( n log( n ) )spese generali. Dimostrare l'esistenza di un algoritmo intelligente quando necessario sembra tutt'altro che immediato, per non dire altro. Ciò non è in linea con altre risposte che fondamentalmente propongono di simulare / eseguire sul TM tutti i calcoli della RAM (dell'algoritmo ) per annunciare una complessità TM come O ( T ( n ) 2 ) o O ( T ( n ) n log ( n ) ) .UNO ( T( n )2)O ( T( n ) n registro( n ) )
Problema: ci viene fornita una array / tabella con n = 2 k numeri interi ciascuno memorizzato su bit di registro ( n ) . Ci viene dato un secondo array d con posizioni log ( n ) , ciascuna delle quali registra un numero di bit log ( n ) . Per ogni t ∈ [ 0 .. log ( n ) - 1 ] , definiamo X t = 1 se tab [ i ]linguettan = 2 klog( n )dlog( n )log( n )t ∈ [ 0 .. log( n ) - 1 ]Xt= 1tab [i]MOD MOD d [ t ] ∀ i ∈ [ 0 .. n / 2 - 1 ] . Altrimenti, X t = 0 . Uscita ∑ log ( n ) - 1 t = 0 X t . Ritengo che l'input sia dato come un nastro con n log ( n ) +d [t]= tab [n / 2+i]d [t]∀i∈[0 ..n / 2-1] Xt= 0Σlog( n ) - 1t=0Xt cifre binarie, per rispondere ai commenti di Emil Jeřábek.nlog(n)+log(n)log(n)
Algoritmo su RAMA Una RAM con dimensioni di parole richiede O ( n log ( n ) + log ( n ) 2 ) = O ( n log ( n ) ) per leggere i dati di input della stringa binaria. Ma dopo aver letto i dati, può funzionare solo con parole di dimensioni log ( n ) . L'algoritmo A calcola qualsiasi X t in O ( nw=log(n)O(nlog(n)+log(n)2)O(nlog( n ) )log( n )UNXt esaminandotutto i ∈ [ 0 .. n / 2 - 1 ] e verificando la condizione. Il ciclo principale di A èFOR t = 0 , 1 , 2 , … log ( n ) - 1 : calcola X t . La complessità totale è O ( n log ( n ) ) (lettura dati) + O ( n log ( n ) )O ( n )i ∈ [ 0 .. n / 2 - 1 ]UNt = 0 , 1 , 2,…log( n ) - 1XtO(nlog( n ) )O(nlog( n ) )(facendo i calcoli), quindi può fare tutto in O ( n log ( n ) ) su RAM.UNO(nlog( n ) )
Algoritmo sulla TM a 1 nastro:UN sostengo che la TM a nastro singolo abbia bisogno del tempo per una t fissa . Dal punto di vista della TM, determinare A t equivale a verificare l'uguaglianza di due stringhe binarie di lunghezza O ( n log ( n ) ) . Ad esempio, la scheda operativa MOD [ i ] MOD d [ t ] potrebbe essere equivalente alla rimozione del bit 0 della schedaO (n2log( n)2)tUNtO ( nlog( n ) )tab [i]d [t]0 . In tali casi, determinare A t equivale al test di uguaglianza su stringhe di bit con lunghezza n ( log ( n ) - 1 ) / 2 . È noto che testare l'uguaglianza di due stringhe di lunghezza m richiede O ( m 2 ) sul TM a 1 nastro, ma non riesco proprio a trovare un riferimento in questo momento. Tuttavia, fornisco una prova in ps. Se la TM esegue ilciclo principaledi A , deve spendere almeno O ( ( n log nlinguetta [ i ]UNtn (log( n ) - 1 ) / 2mO ( m2)UN per ogni t = 0 , 1 , 2 , … log ( n ) - 1 , che termina in O ( n 2 log ( n ) 3 ) .O ( ( nlogn )2)t = 0 , 1 , 2 , ...log( n ) - 1O( n2log( n)3)
ps. Mostro che il test di uguaglianza su stringhe di bit con bit non può essere più veloce del test di palinite su stringhe con bit m (è noto che la palindrome impiega almeno O ( m 2 ) tempo). Possiamo modificare qualsiasi algoritmo TM per test di uguaglianza per risolvere palindromo. Supponiamo che il test di uguaglianza TM inizi con due numeri interi: uno a sinistra della testa, uno a destra (questa è la forma di input più semplice per la TM). Ogni spostamento sulle posizioni di sinistra può essere speculare (riflesso) sulle posizioni di destra. Costruiamo una TM con mirroring: ogni volta che la TM iniziale si trova in una posizione - x < 0 (a sinistra), la TM con mirroring è nella posizione xmmO (m2)- x < 0X(sulla destra). Se una TM risolse il test di uguaglianza in meno di , questa TM speculare modificata risolverebbe il palindromo in meno di O ( m 2 ) .O (m2)O (m2)
Inoltre, ci sono alcuni algoritmi TM per il test di uguaglianza e tutti richiedono tempo quadratico perché hanno bisogno di un po 'di zigzag, vedi per esempio l'esempio 2 di Turing Machine a corsi.cs.washington.edu/courses/cse431/14sp/scribes/ lec3.pdf