Nel senso più formale, la dimensione dell'input viene misurata in riferimento all'implementazione di Turing Machine dell'algoritmo ed è il numero di simboli alfabetici necessari per codificare l'input.
Questo è ovviamente piuttosto astratto, ed è molto difficile lavorare in pratica, o almeno molto fastidioso - dovremmo considerare come andremo a specificare delimitatori ecc. Ecc. Ciò che accade normalmente in pratica è che cerchiamo una misura proxy della dimensione dell'input - qualcosa di più conveniente e accessibile, ma ciò non causa problemi matematici nella nostra analisi.
Usando il tuo esempio "abcde", di solito l'alfabeto che usiamo per l'input è piccolo, quindi anche usando la misura proxy di caratteri, sappiamo che anche su una Turing Machine, possiamo, se ci disturbiamo, specifica una codifica di input che converta "abcde" in una forma codificata che abbia una lunghezza al massimo di per una costante . Questa espansione di una costante in genere non farebbe alcuna differenza nella nostra analisi asintotica, poiché eliminiamo regolarmente i fattori costanti.5 × c c55 × c c
In un caso diverso, spesso misuriamo la dimensione di un grafico di input per il numero di vertici . Chiaramente se vogliamo specificare grafici arbitrariamente grandi, la dimensione dell'input codificato non è semplicemente - cosa è successo ai bordi, per esempio? Quello che sappiamo è che possiamo usare uno schema di codifica ragionevole che rappresenta il grafico in bit. Si tratta di un'espansione un po 'più che costante, ma in molti casi interessanti, abbiamo a che fare solo con una granularità di polinomi, e i polinomi compongono bene in molti modi - in particolare, ad esempio, se determiniamo che il nostro tempo di esecuzione è dove è un polinomio, quindi sappiamo che esiste un polinomion N = c ⋅ n 2 log n O ( p ( n ) ) p p ′ O ( p ( n ) ) = O ( p ′ ( N ) )nnN= c ⋅ n2lognO ( p ( n ) )pp' tale che , quindi quando torniamo alla misura formale dell'input, siamo ancora in tempo polinomiale.O ( p ( n ) ) = O ( p'( N) )
Un posto in cui questo potrebbe cadere è quando si lavora con i numeri. Poiché un numero con magnitudine può essere codificato in bit, se il nostro tempo di esecuzione fosse , questo sarebbe - esponenziale nella dimensione di input effettiva - che renderebbe la grandezza una cattiva scelta per un proxy per le dimensioni di input se volessimo parlare dell'appartenenza a per esempio (quando si arriva a Strongly- -completo e debolmente- -completo, ricordalo). D'altra parte, se tutto ciò a cui eravamo interessati fosse la decidibilità, allora sarebbe una misura delega abbastanza buona.n = O ( log m ) O ( m ) O ( 2 n ) m P N P N Pmn = O ( logm )O ( m )O ( 2n)mPNPNP
Pertanto, sebbene non vi siano regole stabilite per la scelta di una misura proxy per la dimensione di input, il requisito è che l'espansione o la contrazione della dimensione del proxy rispetto alla dimensione di input sia compatibile con ciò che si sta tentando di dimostrare. Come regola generale, i cambiamenti costanti dei fattori non contano quasi mai, i piccoli fattori polinomiali vanno normalmente bene e funzionano per la maggior parte della teoria di base che vedi, i grandi fattori polinomiali potrebbero ancora funzionare per la teoria, ma può essere una brutta sorpresa nella pratica, e quantità esponenziali di cambiamento sono normalmente troppo estreme.