Documente Academic
Documente Profesional
Documente Cultură
Complejidad Algortmica
Introduccin
n
n .( Suma( n) i )
i 1
Verificacin formal
{P} S {Q}
S es una parte del cdigo.
Cualquier asercin o predicado {P} se denomina
precondicin de S si {P} slo implica el estado inicial.
Cualquier asercin o predicado {Q} se denomina
postcondicin si {Q} slo implica el estado final.
Su interpretacin es:
Si P es cierta antes de la ejecucin de S y S
termina, entonces Q ser cierta.
Precondicin y postcondicin
Precondicin: Es una condicin que debe cumplirse
antes de la ejecucin de una porcin de cdigo
(subprograma o mtodo). A veces no existe precondicin.
Postcondicin: Es una condicin que debe satisfacerse
despus de la ejecucin de un cdigo o de una operacin.
Ejemplo1: Clculo del factorial de un nmero N,
Precondicin: la entrada N debe cumplir la precondicin de ser
un entero mayor o igual que cero.
{N Z n >= 0}
Postcondicin: El resultado es un entero mayor o igual que 1.
{N Z n >= 1}
Ternas de Hoare
Ejemplo 2:
{ y0 } x=1/y { x=1/y }
Ejemplo 3:
{ } a=b { a=b }
No existe precondicin: { } asercin vaca.
Esto significa que siempre se obtienen estados que
satisfacen la postcondicin independientemente de la
precondicin.
Ejemplo 4:
P : { x X y Y X 0 Y 0}
S :m x y
Q : {m X Y }
Complejidad algortmica
Algoritmia
Algoritmo
Entrada Salida
C ( CM CP ) / 2
Caso peor, mejor y promedio
Ejemplo: Bsqueda de un elemento en un vector
Funcin Bsqueda(vector, n, valor)
i0
Mientras (vector[i] < > valor y i<= n) hacer
i i+1;
Fin mientras
Si vector[i] = valor entonces
retornar i
sino
retornar -1
Fin Si
Fin Funcin
Caso peor, mejor y promedio
n
Complejidad asinttica
n log2n n nlog2n n2 n3 2n
5 3 5 15 25 125 32
T(n) = 3 n3 + 2 n2 es O (n3 )
Sean n0 = 0 y c = 5.
Entonces para n>=0, existe c = 5, tal que
3 n3 + 2 n2 <= 5 n3
T(n) = ( n + 1) 2
T(n) es O (n2) , cuando n0 = 1 y c = 4, es decir para n >= 1
Notacin Asinttica O(n) O grande de n
Paso 2:
para i de 1 a n
para j de 1 a n La complejidad del bucle es el
producto del nmero de
escribir i + j O(2n) ejecuciones por la complejidad
fpara de la/s sentencia/s ejecutada/s.
fpara
Notacin Asinttica O(n) O grande de n
Paso 3:
para i de 1 a n La complejidad del bucle es
el producto del nmero de
para j de 1 a n
ejecuciones por la
escribir i + j 2 2
O(2n.n) = O(2n ) <=O(n ) complejidad de la/s
fpara sentencia/s ejecutada/s.
fpara
Eficiencia y notacin asinttica -
Resumen
Para resolver un problema pueden existir varios algoritmos. Por
tanto, es lgico elegir aquel que use menos recursos (tiempo o
espacio).
Al hablar de la eficiencia en tiempo de ejecucin de un algoritmo nos
referiremos a lo rpido que se ejecuta.
La eficiencia de un algoritmo depender, en general, del tamao de
los datos de entrada.
Un algoritmo que afirma resolver un problema debe resolver todos los
ejemplares del mismo. Si hay un solo ejemplar que no sea resuelto
por el algoritmo el algoritmo no es correcto.
No todos los ejemplares de un problema son iguales. Por ello, la
eficiencia del algoritmo puede variar en funcin del ejemplar o del
grupo de ejemplares.
Eficiencia y notacin asinttica -
Resumen
A la hora de analizar un algoritmo es necesario saber que pueden
darse tres tipos de ejemplares o casos: caso mejor, caso peor y
caso medio.
Una operacin elemental es aquella cuyo tiempo de ejecucin tiene
una cota superior constante que slo depende de su implementacin.
Se considera que son de coste unitario.
La eficiencia no tiene unidades de medida, se usa la notacin O(n).
La notacin anterior bsicamente nos dice que si tenemos un
algoritmo cuyo tiempo de ejecucin es f(n) podemos encontrar otra
funcin de n, g(n), y un tamao de problema n0 de tal forma que g(n)
acota superiormente al tiempo de ejecucin para todos los problemas
de tamao superior a n0.
Eficiencia y notacin asinttica -
Resumen
Esta notacin, facilitar en las comparaciones de eficiencia entre
algoritmos diferentes.
Existen reglas y mtodos para calcular el orden de complejidad de
nuestros algoritmos para poder compararlos.