La regla del lmite: Nos permite comparar dos funciones en cuanto a la
notacin asinttica se refiere. Tendremos que calcular el siguiente lmite: lim n ](n) g(n) . Al resolver el limite se nos darn 3 posibles resultados: 1. lim n ](n) g(n) =c R
_ (n) 0(g(n)) (n) 0(g(n)) (n) 0(g(n)) g(n) 0((n)) g(n) 0((n)) g(n) 0((n)) _. Estas funciones se comportan igual, diferencindose en una constante multiplicativa.
2. lim n ](n) g(n) =
_ (n) 0(g(n)) (n) 0(g(n)) (n) 0(g(n)) g(n) 0((n)) g(n) 0((n)) g(n) 0((n)) _. Por muy alta que sea la constante multiplicativa de g(n) nunca superar a (n).
3. lim n ](n) g(n) =0
_ (n) 0(g(n)) (n) 0(g(n)) (n) 0(g(n)) g(n) 0((n)) g(n) 0((n)) g(n) 0((n)) _. g(n) crece ms exponencialmente que (n), por lo que sera su cota superior.
Tendremos dos tipos: - Reduccin por sustraccin: La ecuacin de la recurrencia es la siguiente:
c n k si 0 n <b I(n) = o I(n b) +c n k si n b
La resolucin de la ecuacin de recurrencia es:
0(n k ) si o <1 I(n) = 0(n k+1 ) si o =1 0(o n d b ) si o >1
- Reduccin por divisin: La ecuacin de la recurrencia es la siguiente:
c n k si 1 n <b I(n) = o I(n/ b) +c n k si n b
La resolucin de la ecuacin de recurrencia es:
0(n k ) si o <b k
I(n) = 0[n k log(n) si o =b k
0(n Iog b u ) si o >b k
siendo: a: Nmero de llamadas recursivas. b: Reduccin del problema en cada llamada. c n k : Todas aquellas operaciones que hacen falta adems de las de recursividad.
El esquema voraz es el siguiente: funcion voraz (C: Conjunto): conjunto { C es el conjunto de candidatos } S { Construimos la solucin en el conjunto S } mientras C 0 y solucin (S) hacer x sclcccionor (C) C C\ {x}; si factible (S {x}) entonces S S {x} si solucin (S) entonces devolver S si no devolver no hay solucin
Los esquemas de vuelta atrs: fun vuelta-atrs (ensayo) si valido (ensayo) entonces devolver ensayo si no para cada hijo en compleciones (ensayo) hacer si condiciones-de-poda (hijo) entonces vuelta-atrs (hijo) fsi fpara fsi ffun
fun vueltaatrs (:[1..k]) { v es un vector k-prometedor } si v es una solucin entonces escribir v si no para cada vector (k+1)-prometedor w tal que w[1..k] =:[1..k] hacer vueltaatrs (w[1..k +1])
El de ramificacin y poda (problemas de maximizacin): fun ramificacin-y-poda (ensayo) m montculo-vaco cota-superior inicializar-cota-superior solucin solucin-vaca aadir-nodo (ensayo, m) mientras no vaco (m) hacer nodo extraer-raz (m) si valido (nodo) entonces si coste (nodo) < cota-superior entonces solucin nodo cota-superior coste (nodo) fsi si no { Nodo no es vlido (solucin) } si cota-inferior (nodo) cota-superior entonces devolver solucin si no { cota-inferior (nodo) < cota-superior } para cada hijo en compleciones (nodo) hacer si condiciones-de-poda (hijo) y cota-inferior (hijo) < cota-superior entonces aadir-nodo (hijo, m) fsi fsi fpara fsi fmientras ffun
El esquema de divide y vencers: fun divide-y-vencers (problema) si suficientemente-simple (problema) entonces dev solucion-simple (problema) si no { No es solucin suficientemente simple } {p 1 ..p k } decomposicion (problema) para cada p