SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
ANÁLISIS	
  DE	
  ALGORITMOS	
  Y	
  
COMPLEJIDAD
La	
  eficiencia	
  de	
  los	
  algoritmos
Gloria	
  Isabel	
  Bautista	
  Lasprilla.
bautistalasprilla.gloriaisabel@gmail.com
gbautista@unitecnologica.edu.co
gloria@utbvirtual.edu.co
Definición
Un algoritmo puede de ser lo más eficiente posible con independencia de
la plataforma Software/Hardware que se utilice.
Si el algoritmo es ya eficiente de por sí, más veloz será si se ejecuta en una
plataforma mucho más rápida.
Entonces, podemos afirmar que el responsable principal de la eficiencia (o
no) de un algoritmo es siempre el programador.
El análisis del costo computacional de los algoritmos se estima siempre en
el peor de los casos.
El caso promedio es difícil de establecer pues depende del contenido de
los datos de entrada.
El mejor de los casos es considerado un ideal que difícilmente se cumple.
Análisis	
  de	
  algoritmos	
  de	
  
ordenamiento
Eficiencia	
  y	
  Complejidad
Los	
  siguientes	
  ejercicios	
  analizan	
  dos	
  algoritmos	
  sencillos	
  de	
  ordenamiento,	
  
los	
  métodos	
  de	
  selección	
  e	
  inserción	
  directa:
• En	
  el	
  peor	
  de	
  los	
  Casos
• En	
  el	
  mejor	
  de	
  los	
  Casos
• En	
  el	
  Caso	
  Intermedio
Análisis	
  del	
  método	
  
selección
FOR	
  EXTERNO
INSTRUCCIÓN COSTO
i = 0 1
i <= n-­‐1 n	
  +	
  1
i++ n
sm = i n
for interno n	
  *	
  for	
  interno
aux = A[sm] n
A[sm] = A[i] n
A[i] = aux n
2	
  +	
  6n	
  +	
  n	
  *	
  for interno
void seleccionsort (int A[],	
  int n)	
  
{
int sm,	
  i,	
  j,	
  aux;
for (i	
  =	
  0;	
  i	
  <n-­‐1;	
  i++)	
  
{
sm =	
  	
  i;
for(j	
  =	
  i+1;	
  j	
  <	
  n;	
  j++)
if(A[sm]	
  >	
  A[j])
sm =	
  j;
aux =	
  A[sm];
A[sm]	
  =	
  A[i];
A[i]	
  =	
  aux ;
}
}	
  
FOR	
  INTERNO
INSTRUCCIÓN COSTO	
  
(Peor de	
  los	
  casos)
COSTO	
  
(Mejor de	
  los	
  casos)
COSTO	
  
(Caso	
  intermedio)
j	
  =	
  i	
  +	
  1 1 1 1
j	
  <=	
  n n	
  – (i+1)	
  +	
  1 n	
  – (i+1)	
  +	
  1 n	
  – (i+1)	
  +	
  1
j++ n	
  – i	
  +	
  1 n	
  – i	
  +	
  1 n	
  – i	
  +	
  1
if	
  (	
  ) n	
  – i	
  +	
  1 n	
  – i	
  +	
  1 n	
  – i	
  +	
  1
sm =	
  j	
   n	
  – i	
  +	
  1 (n	
  – i	
  +	
  1)/2
Análisis	
  del	
  método	
  
selección
Peor de	
  los	
  casos Mejor	
  de	
  los	
  casos Caso	
  intermedio
6	
  +	
  4	
  (n	
  – i) 5	
  +	
  3	
  (n	
  – i) 5	
  +	
  3	
  (n	
  – i)	
  +	
  (n	
  – i	
  +	
  1)	
  /	
  2
2	
  +	
  6n	
  +	
  n	
  *	
  for interno
Ecuación	
  general
Análisis	
  del	
  método	
  
selección,
el	
  peor	
  de	
  los	
  casos
å å å= =
-
=
ú
û
ù
ê
ë
é
+++
n
i
n
i
in
i1 1 1
4662 2102 2
++ nn
For interno,	
  el	
  peor	
  caso
6	
  +	
  4	
  (n	
  – i)
2	
  +	
  6n	
  +	
  n	
  *	
  for interno
Ecuación	
  general
=
Análisis	
  del	
  método	
  
selección,
el	
  mejor	
  de	
  los	
  casos
å å å= =
-
=
ú
û
ù
ê
ë
é
+++
n
i
n
i
in
i1 1 1
3562 2
2
19
2
3 2
++ nn
2	
  +	
  6n	
  +	
  n	
  *	
  for interno
Ecuación	
  general
For interno,	
  el	
  mejor	
  caso
5	
  +	
  3	
  (n	
  – i)
=
Análisis	
  del	
  método	
  
selección,
el	
  caso	
  intermedio
2	
  +	
  6n	
  +	
  n	
  *	
  for interno
Ecuación	
  general
å å å å= =
-
=
+-
=
ú
û
ù
ê
ë
é
++++
n
I
n
i
in
i
in
i1 1 1
1
1 2
1
3562 2
4
39
4
7 2
++ nn
For interno,	
  caso	
  intermedio
5	
  +	
  3	
  (n	
  – i)	
  +	
  (n	
  – i	
  +	
  1)	
  /	
  2
=
Análisis	
  del	
  método	
  
inserción
2	
  +	
  5	
  (n-­‐1)	
  +	
  (n-­‐1)	
  *	
  while interno
void	
  insercionDirecta(int A[],int n)
{
int i,	
  j,	
  Temp;
for	
  (i =	
  1;	
  i <	
  n;	
  i++)
{
Temp	
  =	
  A[i];
j	
  =	
  i -­‐ 1;
while	
  (j	
  >=	
  0	
  &&	
  A[j]	
  >	
  Temp)
{
A[j	
  +	
  1]	
  =	
  A[j];
j-­‐-­‐;
}
A[j	
  +	
  1]	
  =	
  Temp;
}
}
FOR	
  EXTERNO
INSTRUCCIÓN COSTO
i = 1 1
i < n n	
  – 1	
  +	
  1
i++ n	
  – 1
Temp = A[i] n	
  – 1
j = i – 1 n	
  – 1
while interno (n	
  – 1)	
  *	
  while	
  interno
A[j+1] = Temp n	
  – 1
Análisis	
  del	
  método	
  
inserción
FOR	
  INTERNO
INSTRUCCIÓN COSTO
(Peor de	
  los	
  casos)
COSTO
(Mejor de	
  los	
  casos)
COSTO
(Caso	
  intermedio)
(A[j]	
  >	
  Temp	
  &&	
  j	
  >=	
  0) i	
  – 1	
  +	
  1 1 i/2	
  – 1	
  +	
  1
A[j+1]	
  =	
  A[j] i	
  -­‐ 1 i/2
j-­‐-­‐ i	
  -­‐ 1 i/2
PEOR MEJOR INTERMEDIO
1	
  +	
  3	
  (i	
  – 1) 1 1	
  +	
  3/2	
  (i	
  – 1)
2	
  +	
  5	
  (n-­‐1)	
  +	
  (n-­‐1)	
  *	
  while interno
Ecuación	
  general
Análisis	
  del	
  método	
  
inserción,
el	
  peor	
  de	
  los	
  casos
2	
  +	
  5	
  (n-­‐1)	
  +	
  (n-­‐1)	
  *	
  while interno
Ecuación	
  general
1	
  +	
  3	
  (i	
  – 1)
while interno,	
  el	
  peor	
  caso
å å å
-
=
-
=
-
=
ú
û
ù
ê
ë
é
+++
1
1
1
1
1
1
3152
n
i
n
i
i
i
1
2
3
2
3 2
-+ nn=
Análisis	
  del	
  método	
  
inserción,
el	
  mejor	
  de	
  los	
  casos
2	
  +	
  5	
  (n-­‐1)	
  +	
  (n-­‐1)	
  *	
  while interno
1
while interno,	
  el	
  mejor	
  caso
Ecuación	
  general
å å
-
=
-
=
++
1
1
1
1
152
n
i
n
i
46 -n=
Análisis	
  del	
  método	
  
inserción,
el	
  caso	
  intermedio
2	
  +	
  5	
  (n-­‐1)	
  +	
  (n-­‐1)	
  *	
  while interno
Ecuación	
  general
while interno,	
  el	
  caso	
  intermedio
1	
  +	
  3/2	
  (i	
  – 1)
å å å
-
=
-
=
-
=
ú
û
ù
ê
ë
é
+++
1
1
1
1
1
1 2
3
152
n
i
n
i
i
i 2
5
4
15
4
3 2
-+ nn=
¿Preguntas?
Gloria	
  Isabel	
  Bautista	
  Lasprilla
gbautist@unitecnologica.edu.co
gloria@utbvirtual.edu.co
Bautistalasprilla.gloriaisabel@gmail.com

Más contenido relacionado

Más de Gloria Isabel Bautista Lasprilla (8)

Poster - presentación
Poster - presentaciónPoster - presentación
Poster - presentación
 
Abb árboles de búsqueda binaria
Abb árboles de búsqueda binariaAbb árboles de búsqueda binaria
Abb árboles de búsqueda binaria
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Poo presentacion
Poo presentacionPoo presentacion
Poo presentacion
 
Presentacion encuentro gloria bautista
Presentacion encuentro   gloria bautistaPresentacion encuentro   gloria bautista
Presentacion encuentro gloria bautista
 
Herencia y polimorfismo
Herencia y polimorfismoHerencia y polimorfismo
Herencia y polimorfismo
 
Modelo curricular por ciclos propedéuticos, programas técnicos y tecnológicos
Modelo curricular por ciclos propedéuticos, programas técnicos y tecnológicosModelo curricular por ciclos propedéuticos, programas técnicos y tecnológicos
Modelo curricular por ciclos propedéuticos, programas técnicos y tecnológicos
 
Articulación Educación Media con Superior
Articulación Educación Media con SuperiorArticulación Educación Media con Superior
Articulación Educación Media con Superior
 

Complejidad computacional 1

  • 1. ANÁLISIS  DE  ALGORITMOS  Y   COMPLEJIDAD La  eficiencia  de  los  algoritmos Gloria  Isabel  Bautista  Lasprilla. bautistalasprilla.gloriaisabel@gmail.com gbautista@unitecnologica.edu.co gloria@utbvirtual.edu.co
  • 2. Definición Un algoritmo puede de ser lo más eficiente posible con independencia de la plataforma Software/Hardware que se utilice. Si el algoritmo es ya eficiente de por sí, más veloz será si se ejecuta en una plataforma mucho más rápida. Entonces, podemos afirmar que el responsable principal de la eficiencia (o no) de un algoritmo es siempre el programador. El análisis del costo computacional de los algoritmos se estima siempre en el peor de los casos. El caso promedio es difícil de establecer pues depende del contenido de los datos de entrada. El mejor de los casos es considerado un ideal que difícilmente se cumple.
  • 3. Análisis  de  algoritmos  de   ordenamiento Eficiencia  y  Complejidad Los  siguientes  ejercicios  analizan  dos  algoritmos  sencillos  de  ordenamiento,   los  métodos  de  selección  e  inserción  directa: • En  el  peor  de  los  Casos • En  el  mejor  de  los  Casos • En  el  Caso  Intermedio
  • 4. Análisis  del  método   selección FOR  EXTERNO INSTRUCCIÓN COSTO i = 0 1 i <= n-­‐1 n  +  1 i++ n sm = i n for interno n  *  for  interno aux = A[sm] n A[sm] = A[i] n A[i] = aux n 2  +  6n  +  n  *  for interno void seleccionsort (int A[],  int n)   { int sm,  i,  j,  aux; for (i  =  0;  i  <n-­‐1;  i++)   { sm =    i; for(j  =  i+1;  j  <  n;  j++) if(A[sm]  >  A[j]) sm =  j; aux =  A[sm]; A[sm]  =  A[i]; A[i]  =  aux ; } }  
  • 5. FOR  INTERNO INSTRUCCIÓN COSTO   (Peor de  los  casos) COSTO   (Mejor de  los  casos) COSTO   (Caso  intermedio) j  =  i  +  1 1 1 1 j  <=  n n  – (i+1)  +  1 n  – (i+1)  +  1 n  – (i+1)  +  1 j++ n  – i  +  1 n  – i  +  1 n  – i  +  1 if  (  ) n  – i  +  1 n  – i  +  1 n  – i  +  1 sm =  j   n  – i  +  1 (n  – i  +  1)/2 Análisis  del  método   selección Peor de  los  casos Mejor  de  los  casos Caso  intermedio 6  +  4  (n  – i) 5  +  3  (n  – i) 5  +  3  (n  – i)  +  (n  – i  +  1)  /  2 2  +  6n  +  n  *  for interno Ecuación  general
  • 6. Análisis  del  método   selección, el  peor  de  los  casos å å å= = - = ú û ù ê ë é +++ n i n i in i1 1 1 4662 2102 2 ++ nn For interno,  el  peor  caso 6  +  4  (n  – i) 2  +  6n  +  n  *  for interno Ecuación  general =
  • 7. Análisis  del  método   selección, el  mejor  de  los  casos å å å= = - = ú û ù ê ë é +++ n i n i in i1 1 1 3562 2 2 19 2 3 2 ++ nn 2  +  6n  +  n  *  for interno Ecuación  general For interno,  el  mejor  caso 5  +  3  (n  – i) =
  • 8. Análisis  del  método   selección, el  caso  intermedio 2  +  6n  +  n  *  for interno Ecuación  general å å å å= = - = +- = ú û ù ê ë é ++++ n I n i in i in i1 1 1 1 1 2 1 3562 2 4 39 4 7 2 ++ nn For interno,  caso  intermedio 5  +  3  (n  – i)  +  (n  – i  +  1)  /  2 =
  • 9. Análisis  del  método   inserción 2  +  5  (n-­‐1)  +  (n-­‐1)  *  while interno void  insercionDirecta(int A[],int n) { int i,  j,  Temp; for  (i =  1;  i <  n;  i++) { Temp  =  A[i]; j  =  i -­‐ 1; while  (j  >=  0  &&  A[j]  >  Temp) { A[j  +  1]  =  A[j]; j-­‐-­‐; } A[j  +  1]  =  Temp; } } FOR  EXTERNO INSTRUCCIÓN COSTO i = 1 1 i < n n  – 1  +  1 i++ n  – 1 Temp = A[i] n  – 1 j = i – 1 n  – 1 while interno (n  – 1)  *  while  interno A[j+1] = Temp n  – 1
  • 10. Análisis  del  método   inserción FOR  INTERNO INSTRUCCIÓN COSTO (Peor de  los  casos) COSTO (Mejor de  los  casos) COSTO (Caso  intermedio) (A[j]  >  Temp  &&  j  >=  0) i  – 1  +  1 1 i/2  – 1  +  1 A[j+1]  =  A[j] i  -­‐ 1 i/2 j-­‐-­‐ i  -­‐ 1 i/2 PEOR MEJOR INTERMEDIO 1  +  3  (i  – 1) 1 1  +  3/2  (i  – 1) 2  +  5  (n-­‐1)  +  (n-­‐1)  *  while interno Ecuación  general
  • 11. Análisis  del  método   inserción, el  peor  de  los  casos 2  +  5  (n-­‐1)  +  (n-­‐1)  *  while interno Ecuación  general 1  +  3  (i  – 1) while interno,  el  peor  caso å å å - = - = - = ú û ù ê ë é +++ 1 1 1 1 1 1 3152 n i n i i i 1 2 3 2 3 2 -+ nn=
  • 12. Análisis  del  método   inserción, el  mejor  de  los  casos 2  +  5  (n-­‐1)  +  (n-­‐1)  *  while interno 1 while interno,  el  mejor  caso Ecuación  general å å - = - = ++ 1 1 1 1 152 n i n i 46 -n=
  • 13. Análisis  del  método   inserción, el  caso  intermedio 2  +  5  (n-­‐1)  +  (n-­‐1)  *  while interno Ecuación  general while interno,  el  caso  intermedio 1  +  3/2  (i  – 1) å å å - = - = - = ú û ù ê ë é +++ 1 1 1 1 1 1 2 3 152 n i n i i i 2 5 4 15 4 3 2 -+ nn=
  • 14. ¿Preguntas? Gloria  Isabel  Bautista  Lasprilla gbautist@unitecnologica.edu.co gloria@utbvirtual.edu.co Bautistalasprilla.gloriaisabel@gmail.com