Supongamos que se nos dan las alturas en orden ordenado. Queremos calcular f (N, K) = número de formas de ordenar a las N personas de modo que exactamente K sea visible desde el frente.
- Defina cnt [i] como el número de personas con alturas menores o iguales a la persona i. Si todas las alturas hubieran sido distintas, habríamos tenido cnt [i] = i para todo i.
- Defina g (i, j) = número de formas de ordenar a las personas numeradas i … N de modo que exactamente j sean visibles desde el frente. Obviamente, g (1, K) = f (N, K).
Tratemos de calcular g (i, k).
Tenemos la opción de colocar a cualquiera de las personas i … N como la primera persona en la fila. Supongamos que elegimos a la persona j. Tenga en cuenta que cualquier persona con una altura menor o igual a la de la persona j no será visible independientemente de dónde se coloquen. Esto sería cnt [j] – j people. Además, su ubicación no afecta la visibilidad de nadie más de ninguna manera. Esto significa que podemos colocar y permutar a las personas cnt [j] – j de la forma que quieran. De las personas restantes, necesitamos poder ver personas K-1. Esto nos da la recurrencia.
g (i, k) = suma de ((Ni) P (cnt [j] -i)) g (cnt [j] + 1, k-1) de j = i a N
- ¿Por qué factorizar números en números primos es un problema difícil?
- ¿Cuál es el objeto matemático más genial que se puede visualizar?
- Experimentos de pensamiento: ¿Cuáles son algunas formas interesantes, no necesariamente viables, de atacar la conjetura de la optimización dinámica?
- ¿Cuál es el propósito de probar el caso base en la inducción matemática?
- ¿Cuáles son algunos algoritmos eficientes para encontrar subgrafías planas con el número máximo de aristas?
Si todas las alturas hubieran sido diferentes, habríamos tenido:
g (i, k) = suma de ((Ni) P (ji)) g (j + 1, k-1) de j = i a N
Los casos base de la recurrencia son g (N + 1,0) = 1, g (N + 1, k) = 0 para k> 0.