Mi scuso in anticipo per aver dato troppi dettagli, ma sto per contraddire le persone.
CircaK(x)≤K′(x)+c
Il fatto che solito provenga da un interprete della lingua di descrizione n. 2 nella lingua di descrizione n. 1 e non da una traduzione da programmi di n. 2 a programmi di n. 1.K1(x)≤K2(x)+c
Ad esempio e ottieni questa disuguaglianza semplicemente come questa:KC(x)≤KPython(x)+cpy2c
void py_run(char * s) {
// code of your Python interpreter
}
int main(void) {
py_run("Put here your Python program of size Kpython(x)");
}
Quindi la tua costante sarà qualcosa come dove è il numero di bit per questo codice e bit è la dimensione dell'interprete ufficiale di Python scritta in C. Naturalmente devi solo interpretare ciò che è possibile nel linguaggio di descrizione per Python in modo da poter fare meglio di 69 MB :-) 528 + 490240688 528 490240688cpy2c528+490240688528490240688
Ciò che è importante è che puoi scrivere il tuo programma Python in modo lineare nel tuo codice C. Ad esempio, una lingua in cui è necessario inserire "BANANA" tra ogni personaggio non è un ottimo programma di descrizione e la proprietà è quindi falsa. (Ma se il linguaggio descrittivo ti autorizza a scrivere i dati in un file separato o in un blocco, questo problema scompare)
Perché il tuo è difettosoK1(x)=q
Il problema con la tua definizione di è che potresti aver bisogno di più di bit per descrivere una macchina di Turing con stati perché devi codificare le transizioni. q qK1qq
Quindi nessun e probabilmente non sono equivalenti, ma è principalmente colpa di . Penso che possiamo dimostrare che per tutti esiste un tale che . Ovviamente qualsiasi è sufficiente per confutare il fatto che non è una funzione valida, poiché ciò significherebbe che possiamo codificare più tutte le possibili stringhe di lunghezza in bit .K1K2K1a>0caK1(x)≤a|x|+caa<1K12nnan+ca
Ma le dimensioni sono un limite incredibilmente stretto quando si costruiscono macchine Turing. L'idea è che in un blocco di stati ci sono modi per trovare le transizioni per ogni stato ed è meglio dei soliti 2 b modi in cui puoi riempire b bit. Quindi è possibile memorizzare in ciascun blocco di registro 2 b bit di informazione. (non 2 log 2 b perché devi entrare e uscire dal blocco in un modo o nell'altro)bb2b2bblog2b2log2b
Quindi sì ... Con blocchi di dimensioni probabilmente potresti provare K 1 ( x ) ≤ a | x | + c a . Ma ho già scritto troppo sul perché il numero di stati non è una valida funzione di complessità di Kolmogorov. Se vuoi che ti elabori, lo farò.21/aK1(x)≤a|x|+ca
Ora su K2
La lingua descrittiva ingenua corrisponde approssimativamente a (cioè log 2 q per ogni stato successivo e dettagli su scrittura e terminazione).K2(x)=q⋅2⋅(log2q+2)log2q
Come sembri, sono convinto che un modo migliore / imbroglione sarebbe quello di autorizzare la codifica di "dati" nella macchina di Turing, magari aggiungendo un tag binario nel linguaggio descrittivo che indica se uno stato è uno stato di dati ( che scrive solo un po 'e passa allo stato successivo) o se fa qualcos'altro. In questo modo potresti memorizzare un bit della tua in un bit del tuo linguaggio descrittivo.x
Tuttavia se mantieni lo stesso potresti usare la stessa tecnica che ho usato nella parte precedente per salvare alcuni bit, ma mi sembra di essere bloccato a K 2 ( x ) ≤ a | x | log | x | + c (per qualsiasi a > 0 ) .. forse inferiore a log | x | , anche, ma ottenere O ( | x | ) sembra difficile. (E mi aspetto che dovrebbe essere | x | , nemmeno O ( |K2K2(x)≤a|x|log|x|+ca>0log|x|O(|x|)|x| .)O(|x|)