Añadiría una pequeña cosa a la respuesta de DW:
He visto personas que piensan que debido a que la mochila unaria está en P, por lo tanto, podemos usarla en lugar de la mochila cuyos mejores algoritmos actuales tienen un tiempo exponencial.
Deje que la entrada sea y k y considerar el algoritmo de programación dinámica para la mochila y la mochila unario. El tiempo de ejecución para ambos es O ( n k ) . Es el mismo tiempo de ejecución. Es decir, si tiene una entrada, no importará si utiliza la programación dinámica para la mochila unaria o la programación dinámica para la mochila. Ambos tomarán (aproximadamente) la misma cantidad de tiempo para resolver la instancia del problema. Teóricamente, en cualquier lugar donde use uno, también puede usar el otro. Solo necesita convertir números de unario a binario y viceversa.W={w1,…,wn}kO(nk)
O(nk)
Si le preocupa un problema de forma aislada, puede hacerlo. En realidad, eso es lo que a menudo hacen las personas en algoritmos. La complejidad de los algoritmos gráficos a menudo se expresa en términos de la cantidad de vértices y la cantidad de aristas, no del tamaño de la cadena que los codifica.
Pero esto es solo cuando estamos lidiando con un problema aislado. No es útil cuando se trata de problemas con diferentes tipos de entradas. Para los gráficos podemos hablar sobre el tiempo de ejecución wrt para el número de vértices y bordes. Para la mochila podemos hablar sobre la cantidad de artículos y el tamaño de la mochila. Pero, ¿y si queremos hablar de ambos? Por ejemplo, cuando queremos reducciones entre problemas, o discutir una clase de problemas que incluye problemas arbitrarios, no solo aquellos con un gráfico como entrada. Necesitamos un parámetro universal de entradas. Una entrada en general es solo una cadena, somos nosotros quienes interpretamos sus símbolos como números unarios, números binarios, gráficos, etc. Para desarrollar una teoría general de la complejidad del algoritmo y los problemas, necesitamos un parámetro general de las entradas. El tamaño de la entrada es una opción obvia y resulta ser lo suficientemente robusta como para que podamos construir una teoría razonable sobre ella. No es la única posibilidad. Para uno artificial podemos construir una teoría basada en2
k100100k2100−1kk2100−1
nnp(n)kp(n)k2p(n)−1kk
nk