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=