Figura 1: Dag y caminos mínimos
camino_minimo(G,s): // Inicializar todos los nodos con distancia infinita. dist[s] = 0; for(Nodo v:G.V) { for ((u,v): G.E) { dist[v] = min(dis[v], dist[u] + l(u,v)); } }
Se puede, de forma fácil, ordenar los subproblemas y partir estos en problemas más pequeños de forma que la solución a los subproblemas se pueda reconstruir en una solución total.
Dada una secuencia de números, tenemos que encontrar la subsecuencia creciente más larga que podamos.
Figura 2: Ejemplo de secuencia 5,2,3,7,1 y su modelización como grafo
LIS(S): L = new int[S.length]; for (int i=0; i<L.length; i++) { for(int j=0; j<i; j++) { if (S[i]<S[j]) L[j] = 1+ max(L[i],L[j]); } } return max(L);
calcular_L_i(S, i): if (i==0) return 1; int L = 0; for(int j =0; j<i; j++) { if (S[j]<S[i]) L = 1 + max(L, calcular_L_i(S,j)); } return L;
Dada dos palabras, se define la distancia de edición como el mínimo número de ediciones que hay que hacer para transformar una palabra en la otra. Una edición puede ser cualquiera de las siguientes operaciones:
Sean \(x,y\) dos cadenas de caracteres y denotemos por \(E_{ij}\) la distancia de edición de los primeros \(i\) caracteres de \(x\) y los \(j\) primeros caracteres de \(y\). ¿Cómo podemos calcularlo?
i/j | R | O | P | A |
---|---|---|---|---|
E | 1 | 2 | 3 | 4 |
S | 2 | 2 | 3 | 4 |
T | 3 | 3 | 3 | 4 |
O | 4 | 3 | 4 | 4 |
Figura 3: DAG oculto
El DAG oculto se genera a partir de los subproblemas. Las llamadas que se hacen y los problemas que se resuelven hacen que la solución sea más efectiva o menos.
Las cadenas de ADN pueden ser vistas como cadenas de texto con solo cuatro símbolos \(A,C,T,G\).
La degeneración macular es una enfermedad que empieza a los treinta años y que deriva en que la zona central de la visión es muy borrosa.
Figura 4: Suffix trie de casa