Stavo giocando con l'interessantissima e ancora aperta domanda " Alphabet of single-tape Turing machine " (di Emanuele Viola) e mi è venuta in mente la seguente lingua:
dove è il numero di 1 s nella stringa x.
Ad esempio, se x = 01101111, allora n = 8, m = 3, k = 2; così
L può essere riconosciuto da una macchina di Turing con un singolo nastro e un alfabeto di 3 simboli nei passaggi O ( n log n ) ?
Se utilizziamo 4 simboli la risposta è sì:
- controlla se sostituendo 0 s con ϵ e 1 s con 2 e allo stesso tempo memorizza m 1 s a destra;
- quindi contare il numero di s modulo m in O ( n log n ) .
Per esempio:
....01101111....... input x (|x| = 8 = 2^3)
000.021.1212.0001.. div 2, first sweep (000. can safely be used as a delimiter)
000.022.1222.00011. div 2, second sweep
000.022.2222.000111 div 2, third sweep --> m = 3 (= log(n) )
000..22.2222....111 cleanup (original 1s are preserved as 2)
000..22.2221102.... start modulo m=3 calculation
000..22.2210022.... mod 3 = 2
000..22.2000222.... mod 3 = 0
000..22.0012222.... mod 3 = 1
000..20112.2222.... mod 3 = 2
000..11122.2222.... ACCEPT