Documentos de Académico
Documentos de Profesional
Documentos de Cultura
diseño de algoritmos
Oscar F. Bedoya L.
oscarbed@eisc.univalle.edu.co
Algoritmos en la computación
Entrada/Salida
especifican los
problemas
Problema 2: ???
Entrada: n Z+
Salida: 1, si n=2
1, si n=1
1, si n>2 n mod i 0 i {2, …., n-1}
0, si n>2 x | n mod x=0 x {2, …., n-1}
Algoritmos en la computación
Problema 3: ???
Instancia de un problema
Algoritmo de
<3,12,23,4,9> ordenamiento <3,4,9,12,23>
(instancia del problema)
Correctitud
Se dice que un algoritmo es correcto, si para cada
instancia, el algoritmo termina con la salida correcta
Entrada1 Salida1
Entrada2 Salida2
Algoritmo
Entradan Salidan
Algoritmos en la computación
primo(int n){
Para cada instancia, el
if (n==1) algoritmo termina con la
return 1; salida correcta
if (n%2==0)
¿Es el algoritmo primo
return 0; correcto?
else
return 1;
}
Algoritmos en la computación
primo(int n){
Para cada instancia, el
if (n==1) algoritmo termina con la
return 1; salida correcta
else{
¿Es el algoritmo primo
int c=0; correcto?
for (int i=2; i<n; i++)
if (n%i==0) c++;
if (c==0)
return 1;
else return 0;
}
Algoritmos en la computación
primo(int n){
Para cada instancia, el
if (n==1) algoritmo termina con la
return 1; salida correcta
else{
¿Es el algoritmo primo
int c=0; correcto?
for (int i=3; i<n; i++)
if (n%i==0) c++;
if (c==0)
return 1;
else return 0;
}
Algoritmos en la computación
Análisis de algoritmos
Meta: Comparar algoritmos que resuelven un mismo problema
•Correctitud
•Eficiencia
•Tiempo
•Espacio
•Estructuras de datos utilizadas
•Modelo computacional
•El tipo y número de datos con los cuales trabaja
(escalabilidad)
Análisis del algoritmo
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Se recorre de derecha a
izquierda buscando el lugar que
debe ocupar
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
Algoritmos en la computación
Insertion sort
A: 10 3 2 6 9
Algoritmos en la computación
Insertion sort
Desarrolle el algoritmo
INSERTION-SORT(A)
A: 10 3 2 6 9
Algoritmos en la computación
INSERTION-SORT(A)
1 for j2 to length[A]
2 do keyA[j]
3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
10 3 2 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 do keyA[j]
3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
10 3 2 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
j=2 2 do keyA[j]
Key=A[2]=3 3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
10 3 2 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
10 10 2 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
3 10 2 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
A[1]=3 2 do keyA[j]
3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
3 10 2 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
j=3 2 do keyA[j]
Key=A[3]=2 3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
3 10 2 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
3 10 10 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
3 10 10 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
3 3 10 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 10 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 10 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 10 10 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 10 10 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 6 10 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 6 10 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 6 10 10 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 6 10 10 INSERTION-SORT(A)
1 for j2 to length[A]
2 3 6 9 10 INSERTION-SORT(A)
1 for j2 to length[A]
int c=0;
for (int i=2; i<n; i++)
if (n%i==0) c++;
if (c==0)
return 1;
else return 0;
}
Algoritmos en la computación
j=1
j=2
j=3
j=4
Algoritmos en la computación
j=1
j=2
j=3
j=4
j=2 3+1
j=3
j=4
j=2
j=3
j=4
j=5
j=2
j=3
j=4
j=5
???
Algoritmos en la computación
for j2 to n
for j2 to n
6 ii-1 c6
n
j 2
(t j 1)
7 A[i+1]key c7 n-1
T(n)=???
Algoritmos en la computación
6 ii-1 c6
n
j 2
(t j 1)
7 A[i+1]key c7 n-1
2 3 10 16 19 INSERTION-SORT(A)
1 for j2 to length[A]
2 do keyA[j]
j=2
t2=?
3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
2 3 10 16 19 INSERTION-SORT(A)
1 for j2 to length[A]
2 do keyA[j]
j=3
t3=?
3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
6 ii-1 c6
n
j 2
(t j 1)
7 A[i+1]key c7 n-1
6 ii-1 c6
n
j 2
(t j 1)
7 A[i+1]key c7 n-1
3 2 1 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
2 do keyA[j]
j=2
t2=?
3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
3 2 1 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
i=1 2 do keyA[j]
j=2
t2=?
3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
2 3 1 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
i=0 2 do keyA[j]
j=2
t2=?
3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
2 3 1 6 9 INSERTION-SORT(A)
1 for j2 to length[A]
j=3 2 do keyA[j]
t3=? 3 ij-1
4 while i >0 and A[i] > key
5 do A[i+1]A[i]
6 ii-1
7 A[i+1]key
Algoritmos en la computación
6 ii-1 c6
n
j 2
( j 1)
7 A[i+1]key c7 n-1
Instrucción Costo
1 i=1 c1
2 while i<=len(mat1) c2
3 j1 c3
4 while j<=len(mat2) c4
5 mat3[i][j]mat1[i][j]+mat2[i][j] c5
6 jj+1 c6
7 ii+1 c7
Algoritmos en la computación
Calcule el tiempo de Instrucción Costo
computo para el
algoritmo
1 s0 c1
def programa2(n)
2 i1 c2
3 while i<=n c3
4 t0 c4
5 j1 c5
6 while j<=i c6
7 tt+1 c7
8 jj+1 c8
9 ss+t c9
10 ii+1 c10
Algoritmos en la computación
Calcule el tiempo de Instrucción Costo
computo para el
algoritmo
1 i1 c1
def programa3(n)
2 while i<=n c2
3 ki c3
4 while k<=n c4
5 k k+1 c5
6 k1 c6
7 while k<=i c7
8 kk+1 c8
9 ii+1 c9
Algoritmos en la computación
Diseño de algoritmos
•Aproximación incremental
•Dividir y conquistar
•Programación dinámica
•Técnicas voraces
Algoritmos en la computación
Dividir y conquistar
•Considera recursividad
•Dividir el problema en subproblemas
•Conquistar los subproblemas (solucionarlos
recursivamente)
•Combinar las soluciones de los subproblemas para crear
la solución al problema original
Algoritmos en la computación
5 2 4 6 1 3 2 6
5 2 4 6 1 3 2 6
5 2 4 6 1 3 2 6
5 2 4 6 1 3 2 6
Algoritmos en la computación
Merge Sort
Combinar
1 2 2 3 4 5 6 6
2 4 5 6 1 2 3 6
2 5 4 6 1 3 2 6
5 2 4 6 1 3 2 6
Algoritmos en la computación
Merge sort
Entrada: <a1, a2, …, an>
Merge sort
T(n)= 1 n=1
Dividir(n) + Conquistar(n) + Combinar(n)
Algoritmos en la computación
Merge sort
T(n)= 1 n=1
1 + 2T(n/2) + n n>1
Computador 1 Computador 2
108 instrucciones/seg 106 instrucciones/seg
Computador 1 Computador 2
108 instrucciones/seg 106 instrucciones/seg