Está en la página 1de 28

ANALISIS DE ALGORITMOS –

COMO HACER ANALISIS DE ALGORITMOS


Mg. Richard E. Mendoza G.
Docente
CONTENIDOS PROGRAMATICOS
UNIDAD 1 ANALISIS BASICO DE ALGORITMOS
• Tiempo de ejecución de un programa
• Medición del tiempo de un programa
• Eficiencia de los algoritmos
• Notación asintótica y funciones de crecimiento
• Límite superior asintótico (O mayúscula)
• Límite inferior asintótico ( mayúscula)
• Límites por ambos lados (θ)
Co m p u tac i ó n iterativa
U n a c o m p u t a c i ó n iterativa s e c a r a c t e r i z a por
c o m e n z a r e n u n e s t a d o inicial S 0 y transformar e s e
e s t a d o e n u n conjunto d e e s t a d o s intermedios h a s t a
llegar a un estado final Sj

S0 ® S1 ® S2 ® … ® Sj

Todo e s t a d o s e d e b e caracterizar por cu mp lir u n a


condición, l l a m a d a i nv a r i a n t e .
Co m p u tac i ó n iterativa
¿Qué es u n a especificación?
U n a e s p e c i f i c a c i ó n s e d e f i n e c o m o l a descripción d e
los s i g u i e n t e s p a r á m e t ro s :

E n t r a d a : i n d i c a l a s precondiciones
S a l i d a : i n d i c a l a s poscondi ci ones

I d e a i t e r at i v a: m u e s t r a c óm o d e b e r í a n c a m b i a r los e s t a d o s ,
c o m e n z a n d o d e s d e el inicial h a s t a l l e g a r a l f i n a l
E s t a d o s : e s p e c i f i c a l a fo r m a d e c a d a e s t a d o e n fo r m a d e t u p l a , a d e m á s ,
s e m u e s t r a c u á l e s el i nv a r i a n t e d e e s t a d o
E s t a d o i ni ci al : m u e s t r a los val ores q u e f o r m a n el e s t a d o inicial
E s t a d o f i n a l : m u e s t r a los val ores q u e f o r m a n el e s t a d o f i n a l
Transformación d e e s t a d o s : d e m a n e r a formal e s p e c i f i c a c ó m o s e
re al i z an , e n términos g e n e r a l e s , los c a m b i o s d e u n e s t a d o a l s i g u i e n t e
Co m p u tac i ó n iterativa
¿ Q u é e s d e mo s t ra r correctitud d e u n a l go r i t m o ?
Un algoritmo e s correcto con respecto a
u n a especificación

S e r á correcto si p a r a c a d a e n t r a d a q u e c u m p l e l a s
precondiciones, el algoritmo t e r m i n a c u m p l i e n d o l a
poscondición

A d e m á s , p a r a el c a s o e s p e c í f i c o d e a l go r i t m o s
iterativos, s e c u e n t a co n u n m é t o d o fo r m a l d e probar
l a correctitud
Co m p u tac i ó n iterativa
E s p e c i f i c a c i ó n p a r a el cá lcu lo d e factorial
Entrada: N ³0

S a l i d a : res ult ad o=N !


I d e a : Iteración
(0,1) ® (1,1) ® (2,2) ® (3,6) ® …® (N,N!)
E s t a d o s : Tupla d e l a fo r m a (índice , resultado) tal q u e
re s u l t a d o = i n d i c e ! (Invariante)
E s t a d o inicial : i n d i c e = 0 , re s u t a d o = 1
E s t a d o f i n a l : i n d i c e = N Transformación
de estados:

(índice , resultado) ® (índice + 1 , re s u l t a d o * ( í n d i c e + 1 ) )


Corrección

Un e s p e c i f i c a c i ó n e s l a definición d e u n p ro b l e m a e n
términos d e s u precondición Q y poscondición R

Un algoritmo A e s correcto con respecto a u n a


e s p e c i f i c a c i ó n si p a r a c a d a conjunto d e va lo re s q u e
c u m p l e n Q, los va lo re s d e s a l i d a c u m p l e n R

S e d e n o t a c o m o { Q } A { R } . “A e s correcto con
respecto a l a precondición Q y a l a poscondición R”
Co m p u tac i ó n iterativa
Algoritmo p a r a el cá lcu lo d e factorial
Factorial(int N ) {

int i n d i c e = 0 ;
E s t a d o inicial
int re s u l t a d o = 1 ;
while ! ( i n d i c e = = N ) {
indice=indice + 1 ;
resultado= resultado * indice;
}
System.out.println(resultado);
}
Co m p u tac i ó n iterativa
Algoritmo p a r a el cá lcu lo d e factorial
Factorial(int N ) {
¿Es correcto el
int i n d i c e = 0 ;
algoritmo con
int re s u l t a d o = 1 ; resp e cto a la
e specificación?
while ! ( i n d i c e = = N ) {

indice=indice + 1 ;
re s u l t a d o = resultado * i n d i c e ;
}
System.out.println(resultado);
}
Co m p u tac i ó n iterativa
E s p e c i f i c a c i ó n p a r a el c á l c u l o d e raiz d e X

E n t r a d a : X £ 0^ X Î R^ d >0

S a l i d a : atal q u e |a 2 -X| £ d
I d e a : Dado X, inicie l a ap rox i m a c i ó n d e a co n el valor 1 . 0 y
mejorela utilizando el c a m b i o d e a por (a +X/a)/2
(1, 1 . 0 ) ® (2, (1.0+x/1.0)/2) ® …® (N,a)
E s t a d o s : Tupla d e l a fo r m a (índice , aproximación) tal q u e
a > 0 (Invariante)
E s t a d o s inicial: a = 1 . 0
E s t a d o f i n a l : a t a l q u e |a2-X| £ d
Transformación d e e s t a d o s : (índice , a ) ( i n d i c e + 1 ,
(a+X/2)/2)
Co m p u tac i ó n iterativa
Algoritmo p a r a el cá lcu lo d e raiz d e X
raizIterativa(double X, d o u b l e d e l t a ) {

double a = 1 . 0 ;
while ( ! ( M a t h . a b s ( a * a - X ) < = d e l t a ) ) {
a = ( a + X/a)/2.0;

}
System.out.println(a);
}
Co m p u tac i ó n iterativa
I de n t ifi que e n los a l go r i t m o s Factorial(int N) y
raizIterativa(double X, d o u b l e d e l t a ) los e s t a d o s inicial
y f i n a l , a s i c o m o l a t ra n s fo rma ció n d a d a e n l a
especificación

¿ C ó mo s e m a n e j a n l a s co n d icio n e s d e e n t r a d a e n el
a l go r i t m o ?
Co m p u tac i ó n iterativa
Algoritmo p a r a el cá lcu lo d e factorial
Factorial(int N ) {

int i n d i c e = 0 ;
Condiciones iniciales
int re s u l t a d o = 1 ;
while ! ( i n d i c e = = N ) {
indice=indice + 1 ;
resultado= resultado * indice;
}
System.out.println(resultado);
}
Co m p u tac i ó n iterativa
Algoritmo p a r a el cá lcu lo d e factorial
Factorial(int N ) {
Transformación d e e s t a d o s :
int i n d i c e = 0 ; (í ndi ce , resultado) ® (í ndi ce +1,
re s u l t a d o * ( í n d i c e +1 ) )
int re s u l t a d o = 1 ;
Estado
inicial
while ! ( i n d i c e = = N ) {

indice=indice + 1 ;
re s u l t a d o = resultado * i n d i c e ;
}
System.out.println(resultado);
}
Co m p u tac i ó n iterativa
Algoritmo p a r a el cá lcu lo d e raiz d e X
raizIterativa(double X, d o u b l e d e l t a ) {

double a = 1 . 0 ; Condición inicial

while ( ! ( M a t h . a b s ( a * a - X ) < = d e l t a ) ) {
a = ( a + X/a)/2.0;

}
System.out.println(a);
}
Co m p u tac i ó n iterativa
Algoritmo p a r a el cá lcu lo d e raiz d e X
raizIterativa(double X, d o u b l e d e l t a ) {

double a = 1 . 0 ;
while ( ! ( M a t h . a b s ( a * a - X ) < = d e l t a ) ) {
Transformación d e e s t a d o s :
a = ( a + X/a)/2.0; (í ndi ce , a ) ( i n d i c e + 1 ,
(a+X/2)/2)
}
System.out.println(a);
}
Co m p u tac i ó n iterativa
El e s q u e m a d e u n algoritmo iterativo e s el s i g u i e n t e :

E s t a d o inicial
S¬S0
while ! isFinal(S) do Iterador : El c u a l v a transformar
los e s t a d o s y p a r a s e t e n g a el
S ¬ Tr a n s fo rm (S ) e s t a d o f i n al
Co m p u tac i ó n iterativa
Cómo probar q u e u n algoritmo iterativo A e s
correcto co n respecto a u n e s p e c i f i c a c i ó n
(precondición Q, poscondición R)

1. Inicialización: P r u e b e q u e el e s t a d o inicial S 0 c u m p l e
el i nv a r i a n t e
2 . I n v a r i a n z a : P r u e b a q u e l a t ra n s fo rma ció n c o n s e r v a
el i nv a r i a n t e
3. Éxito: S i S e s u n e s t a d o f i n a l ^ s e c u m p l e el
i nv a r i a n t e P ® R
4. Terminación: A t e r m i n a
Co m p u tac i ó n iterativa
C o m p u t a (int A, int B ) {
1) ¿Como p u e d o describir
int r e s = 0 , i = 1 ; los e s t a d o e n e s t e a l go r i t m o ?

while ( i < = B ) {
i=i+1; 2) ¿Como e s el e s t a d o i n i c i al ?
re s = re s + A;

} 3) ¿Como c a m b i a n los e s t a d o s
a m e d i d a q u e itera (transforma-
System.out.println(res); ción d e e s t a d o s ) ?

Qué c a l c u l a C o m p u t a ( 2 , 3 ) ?
Co m p u tac i ó n iterativa
Probar correctitud
1 . Inicialización:Pruebe que el estado inicial S 0 cumple
el invariante
El e s t a d o inicial e s (1,0), S e ve rif ica q u e s e c u m p l a
el i nv a r i a n t e , s e t i e n e q u e i = 1 .
Co m p u tac i ó n iterativa

2 . Invarianza:Prueba que la transformación conserva


el invariante

S e c o n s i d e r a q u e a n t e s d e entrar el ciclo, i = k y s e
prueba.
Si i=k, res=∑ A
Co m p u tac i ó n iterativa
C o m p u t a (int A, int B ) {
int r e s = 0 , i = 1 ;
while ( i < = B ) {

i=i+1;
re s = re s + A;
}
System.out.println(res);
}
Algoritmos en la computación
Calcule el tiempo Instrucción Costo
de computo para el
algoritmo
1 iß 1 c1

def programa5(n) 2 while i<=n c2


3 kß i c3
4 while k<=n c4
5 k ß k+2 c5
6 kß 1 c6
7 while k<=i c7
8 k ß k+1 c8

9 i ß 2i c9
Algoritmos en la computación

Diseño de algoritmos

Otras alternativas para el diseño de algoritmos


son:

• Solución ingenua
• Dividir y conquistar
• Programación dinámica
• Técnicas voraces
Referencias

Thomas H. Cormen, Charles E. Leiserson, Ronald L.


Rivest, and Clifford Stein. 2009. Introduction to
Algorithms, Third Edition (3rd ed.). The MIT Press.
Pages 5-29
Gracias

Próximo tema:
Computación iterativa:

Concepto de estado
Transición de estados
Invariante de ciclo
Formando líderes para la
construcción de un nuevo país en
paz

También podría gustarte