oscar f. bedoya l. [email protected] fundamentos de análisis y diseño de algoritmos
TRANSCRIPT
Algoritmos en la computación
Un algoritmo es un procedimiento computacional que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida
AlgoritmoEntrada Salida
“Un algoritmo se puede ver como una herramienta para resolver un problema computacional bien especificado”
Algoritmos en la computación
Un algoritmo es un procedimiento computacional que toma un valor o conjunto de valores como entrada y produce un valor o conjunto de valores como salida
AlgoritmoEntrada Salida
“Un algoritmo se puede ver como una herramienta para resolver un problema computacional bien especificado”
Entrada/Salida especifican los
problemas
Algoritmos en la computación
Problema 1: Cambio de monedas
Entrada: A={a1, a2, …, an} tal que a1<a2< …<an , PN
Salida: <m1, m2, …, mn> tal que y
es mínimo
n
i ii Pam1*
n
i im1
Algoritmos en la computación
Problema 2: ???
Entrada: nZ+
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: ???
Entrada: S=<a1, a2, …, an>
Salida: una permutación de S, S’=<a1’, a2’. …, an’> tal que a1’<a2’<…,<an’
Algoritmos en la computación
Instancia de un problema
<3,12,23,4,9><3,4,9,12,23>
(instancia del problema)
Una instancia es una entrada válida para el algoritmo
Algoritmo de ordenamiento
Algoritmos en la computación
Correctitud
Se dice que un algoritmo es correcto, si para cada instancia, el algoritmo termina con la salida correcta
Algoritmo
Entrada1Salida1
Entrada2
Entradan
Salida2
Salidan
Algoritmos en la computación
primo(int n){
if (n==1)
return 1;
if (n%2==0)
return 0;
else
return 1;
}
Para cada instancia, el algoritmo termina con la salida correcta
¿Es el algoritmo primo correcto?
Algoritmos en la computación
primo(int n){
if (n==1)
return 1;
else{
int c=0;
for (int i=2; i<n; i++)
if (n%i==0) c++;
if (c==0)
return 1;
else return 0;
}
Para cada instancia, el algoritmo termina con la salida correcta
¿Es el algoritmo primo correcto?
Algoritmos en la computación
primo(int n){
if (n==1)
return 1;
else{
int c=0;
for (int i=3; i<n; i++)
if (n%i==0) c++;
if (c==0)
return 1;
else return 0;
}
Para cada instancia, el algoritmo termina con la salida correcta
¿Es el algoritmo primo correcto?
Algoritmos en la computación
Tipos de problemas solucionados utilizando algoritmos:
•Proyecto del genoma humano: Identificar genes en secuencias de ADN que llegan hasta los 10000pb. Se almacena la información observada hasta el momento en bases de datos y se analizan con algoritmos que debe ser eficientes
•Búsquedas en Internet: Dada la cantidad de información indexada, responder de forma correcta la solicitud de una búsqueda en Internet
Algoritmos en la computación
Tipos de problemas solucionados utilizando algoritmos:
•Tratamiento de colisiones de objetos: Detectar una colisión entre dos cuerpos en un espacio 3D
•Búsquedas sobre videos: En un biblioteca, un usuario desea encontrar todos los videos donde aparezca JFK
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)
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(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
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
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
10 3 2 6 9
j=2
Key=A[2]=3
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
10 3 2 6 9
j=2
Key=A[2]=3
i=1
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
10 10 2 6 9
j=2
Key=A[2]=3
i=0
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
3 10 2 6 9
A[1]=3
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
3 10 2 6 9
j=3
Key=A[3]=2
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
3 10 2 6 9
j=3
Key=A[3]=2
i=2
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
3 10 10 6 9
j=3
Key=A[3]=2
i=2
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
3 10 10 6 9
j=3
Key=A[3]=2
i=1
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
3 3 10 6 9
j=3
Key=A[3]=2
i=0
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
2 3 10 6 9
j=3
Key=A[3]=2
i=0
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
2 3 10 6 9
j=4
Key=A[4]=6
i=3
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
2 3 10 10 9
j=4
Key=A[4]=6
i=3
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
2 3 10 10 9
j=4
Key=A[4]=6
i=2
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
2 3 6 10 9
j=4
Key=A[4]=6
i=2
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
2 3 6 10 9
j=5
Key=A[5]=9
i=4
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
2 3 6 10 10
j=5
Key=A[5]=9
i=4
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
2 3 6 10 10
j=5
Key=A[5]=9
i=3
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
2 3 6 9 10
j=5
Key=A[5]=9
i=3
Algoritmos en la computación
¿Qué es hacer análisis de algoritmos?
•Calcular tiempo de computación
•Espacio (memoria)
•Analizar las estructuras de datos utilizadas
•Identificar el tipo y número de datos de entrada al algoritmo
+ medidas de análisis (tiempo de ejecución)
medidas experimentales
Algoritmos en la computación
¿Qué es hacer análisis de algoritmos?
•Calcular tiempo de computación*
•Espacio (memoria)
•Analizar las estructuras de datos utilizadas
•Identificar el tipo y número de datos de entrada al algoritmo
+ medidas de análisis (tiempo de ejecución)
medidas experimentales
Algoritmos en la computación
primo(int n){
if (n==1)
return 1;
else{
int c=0;
for (int i=2; i<n; i++)
if (n%i==0) c++;
if (c==0)
return 1;
else return 0;
}
¿De qué depende la cantidad de operaciones básicas que realizará el algoritmo para un llamado específico?
Algoritmos en la computación
El tiempo de computo depende del tamaño de la entrada, los tiempos serán diferentes si se ordenan 10 números que si se ordenan 10000.
Además, es posible que para dos entradas de igual tamaño, el tiempo sea diferente. Esto depende, de qué tan ordenado ya se encontraba la secuencia de entrada
Algoritmos en la computación
El tiempo de computo T de un algoritmo depende del tamaño de la entrada,
T(n)=f(n), donde n es el tamaño de la entrada
Algoritmos en la computación
El tiempo de computo T de un algoritmo depende del tamaño de la entrada,
T(n)=f(n), donde n es el tamaño de la entrada
T1(n)=3n2
T2(n)=6n3
por ejemplo, para n=100, se tiene:
T1(n)=3*1002=30.000
T2(n)=6*1003=6.000.000
Algoritmos en la computación
El tiempo de computo T de un algoritmo depende del tamaño de la entrada,
T(n)=f(n), donde n es el tamaño de la entrada
T1(n)=3n2
T2(n)=6n3
por ejemplo, para n=100, se tiene:
T1(n)=3*1002=30.000
T2(n)=6*1003=6.000.000
Operaciones primitivas
Pasos
Instrucciones
Algoritmos en la computación
Note que los pasos ejecutados se calculan independientemente de la máquina y de la implementación
Algoritmos en la computación
Instrucción Costo
Veces que se repite
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
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1
2 do keyA[j] c2
3 ij-1 c3
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j1 to length[A] c1
2 print A[j] c2
Algoritmos en la computación
for j1 to 3 for (int j=1; j<=3; j++)
j=1
j=2
j=3
j=4
La cantidad de comparaciones en un for es:
cantidad de números válidos + 1
Algoritmos en la computación
for j1 to 3 for (int j=1; j<=3; j++)
j=1
j=2
j=3
j=4
La cantidad de comparaciones en un for es:
cantidad de números válidos + 1
Cantidad de comparaciones:
3 + 1
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j1 to length[A] c1 n+1
2 print A[j] c2 n
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 ?
2 print A[j] c2 ?
Algoritmos en la computación
for j2 to 4 for (int j=2; j<=4; j++)
j=2
j=3
j=4
j=5
La cantidad de comparaciones en un for es:
cantidad de números válidos + 1
Algoritmos en la computación
for j2 to 4 for (int j=2; j<=4; j++)
j=2
j=3
j=4
j=5
La cantidad de comparaciones en un for es:
(4-2+1) + 1
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 ???
2 do keyA[j] c2
3 ij-1 c3
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2
3 ij-1 c3
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 ???
3 ij-1 c3
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Depende de qué tan ordenados se encuentran los datos en A
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Para cada j, se puede repetir una cantidad diferente de veces
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Sea tj, la cantidad de comparaciones que se hacen en el while para cada valor de j
Por ejemplo, t2,es un número que indica cuántas veces se cumple la condición cuando j=2
Algoritmos en la computación
Instrucción Costo
Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4 t2 + t3 + t4 + … + tn
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7
Por ejemplo, t2,es un número que indica cuántas veces se cumple la condición cuando j=2
Sea tj, la cantidad de comparaciones que se hacen en el while para cada valor de j
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4 t2 + t3 + t4 + … + tn
5 do A[i+1]A[i] c5 (t2-1)+(t3-1)+(t4-1)+ … + (tn-1)
6 ii-1 c6
7 A[i+1]key c7
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4 t2 + t3 + t4 + … + tn
5 do A[i+1]A[i] c5 (t2-1)+(t3-1)+(t4-1)+ … + (tn-1)
6 ii-1 c6 (t2-1)+(t3-1)+(t4-1)+ … + (tn-1)
7 A[i+1]key c7
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4 t2 + t3 + t4 + … + tn
5 do A[i+1]A[i] c5 (t2-1)+(t3-1)+(t4-1)+ … + (tn-1)
6 ii-1 c6 (t2-1)+(t3-1)+(t4-1)+ … + (tn-1)
7 A[i+1]key c7 n-1
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7 n-1
n
j jt2
n
j jt2 )1(
n
j jt2 )1(
T(n)=???
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7 n-1
n
j jt2
n
j jt2 )1(
n
j jt2 )1(
En el mejor de los casos, cuánto vale tj?
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
2 3 10 16 19
j=2
t2=?
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
2 3 10 16 19
j=3
t3=?
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7 n-1
n
j jt2
n
j jt2 )1(
n
j jt2 )1(
En el mejor de los casos, tj=1.
T(n)=???
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5 0
6 ii-1 c6 0
7 A[i+1]key c7 n-1
n
j 21
En el mejor de los casos, tj=1.
T(n)=???
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7 n-1
n
j jt2
n
j jt2 )1(
n
j jt2 )1(
En el peor de los casos, cuánto vale tj?
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
3 2 1 6 9
j=2
t2=?
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
3 2 1 6 9
j=2
t2=?
i=1
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
2 3 1 6 9
j=2
t2=?
i=0
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
2 3 1 6 9
j=3
t3=?
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7 n-1
En el peor de los casos, tj=j.
T(n)=???
n
jj
2
n
jj
2)1(
n
jj
2)1(
Algoritmos en la computación
Instrucción Costo Veces que se repite
1 for j2 to length[A] c1 n
2 do keyA[j] c2 n-1
3 ij-1 c3 n-1
4 while i >0 and A[i] > key c4
5 do A[i+1]A[i] c5
6 ii-1 c6
7 A[i+1]key c7 n-1
En el caso promedio, se supone que se necesitan j/2 comparaciones, esto es, tj=j/2.
T(n)=???
2/2
n
jj
n
jj
2)12/(
)12/(2
n
jj
Algoritmos en la computación
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
Calcule el tiempo de computo para el algoritmo
def programa1(mat1, mat2) # suponga que len(mat1)=len(mat2)=n
Algoritmos en la computación Instrucción Costo
1 s0 c1
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
Calcule el tiempo de computo para el algoritmo
def programa2(n)
Algoritmos en la computación Instrucción Costo
1 i1 c1
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
Calcule el tiempo de computo para el algoritmo
def programa3(n)
Algoritmos en la computación
Diseño de algoritmos
Otras alternativas para el diseño de algoritmos son:
•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
Merge Sort
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
Dividir
Algoritmos en la computación
Merge Sort
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
Combinar
Algoritmos en la computación
Merge sort
Entrada: <a1, a2, …, an>
•Dividir: <a1, …, aq> <aq+1, …, an>
•Conquistar: a’1a’2… a’q y a’q+1a’q+2… a’n
•Combinar: si a’1a’q+1 y a’2>a’q+1 entonces <a’1,a’q+1, …>
sino …
Algoritmos en la computación
Merge sort
T(n)= 1 n=1
1 + 2T(n/2) + n n>1
al resolver la recurrencia, T(n) = n lg n
Algoritmos en la computación
Análisis de algoritmos Insertion sort y Merge sort
Computador 1 Computador 2
108 instrucciones/seg 106 instrucciones/seg
Implementación 1(Insertion)
Implementación 2(Merge)
2n2 50n*lg n
Algoritmos en la computación
Analisis de algoritmos Insertion sort y Merge sort
Computador 1 Computador 2
108 instrucciones/seg 106 instrucciones/seg
Implementación 1(Insertion)
Implementación 2(Merge)
2n2 50n*lg n
Tiempo 1(Insertion) Tiempo 2(Merge)
2(106)2/108=20.000segs=5.56horas 50*106lg 106/106=1.000segs=16.67 mins
Ordenar un arreglo de 106 números