Aggiungerei una piccola cosa alla risposta di DW:
Ho visto persone che pensano che, poiché lo zaino unario è in P, quindi possiamo usarlo al posto dello zaino che i migliori algoritmi attuali hanno tempo esponenziale.
Lasciare che l'ingresso sia e k e considerare l'algoritmo di programmazione dinamica per Knapsack e unario zaino. Il tempo di esecuzione per entrambi è O ( n k ) . È lo stesso tempo di esecuzione. Ad esempio, se si dispone di un input, non importa se si utilizza la programmazione dinamica per Zaino unario o la programmazione dinamica per Zaino. Entrambi impiegheranno (approssimativamente) lo stesso tempo per risolvere l'istanza del problema. Teoricamente ovunque tu usi uno puoi usare anche l'altro. Hai solo bisogno di convertire i numeri da unari a binari e viceversa.W={w1,…,wn}kO(nk)
Allora, qual è il punto di definire la complessità degli algoritmi rispetto alla dimensione degli input? Perché non indicarli sempre in termini di parametri come ?O(nk)
Se ti preoccupi di un problema in isolamento puoi farlo. In realtà è quello che fanno spesso le persone negli algoritmi. La complessità degli algoritmi grafici è spesso espressa in termini di numero vertici e numero di spigoli, non della dimensione della stringa che li codifica.
Ma questo è solo quando abbiamo a che fare con un problema isolato. Non è utile quando abbiamo a che fare con problemi con diversi tipi di input. Per i grafici possiamo parlare del tempo di esecuzione rispetto al numero di vertici e bordi. Per lo zaino possiamo parlare del numero di articoli e delle dimensioni dello zaino. E se volessimo parlare di entrambi? Ad esempio quando vogliamo riduzioni tra i problemi o discutiamo di una classe di problemi che include problemi arbitrari, non solo quelli con un grafico come input. Abbiamo bisogno di un parametro universale di input. Un input in generale è solo una stringa, siamo noi che interpretiamo i suoi simboli come numeri unari, numeri binari, grafici, ecc. Per sviluppare una teoria generale della complessità dell'algoritmo e dei problemi abbiamo bisogno di un parametro generale degli input. La dimensione dell'input è una scelta ovvia e risulta essere abbastanza robusta da poter costruire una teoria ragionevole su di essa. Non è l'unica possibilità. Per uno artificiale possiamo costruire una teoria basata su2
k100100k2100−1kk2100−1
nnp(n)kp(n)k2p(n)−1kk
nk