La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.

Presentaciones similares


Presentación del tema: "Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos."— Transcripción de la presentación:

1 Oscar F. Bedoya L. oscarbed@eisc.univalle.edu.co Fundamentos de análisis y diseño de algoritmos

2 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 Algoritmo Entrada Salida “Un algoritmo se puede ver como una herramienta para resolver un problema computacional bien especificado”

3 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 Algoritmo Entrada Salida “Un algoritmo se puede ver como una herramienta para resolver un problema computacional bien especificado” Entrada/Salida especifican los problemas

4 Algoritmos en la computación Problema 1: Cambio de monedas Entrada: A={a 1, a 2, …, a n } tal que a 1 <a 2 < …<a n, P  N Salida: tal que y es mínimo

5 Algoritmos en la computación 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}

6 Algoritmos en la computación Problema 3: ??? Entrada: S= Salida: una permutación de S, S’= tal que a 1 ’<a 2 ’<…,<a n ’

7 Algoritmos en la computación Instancia de un problema (instancia del problema) Una instancia es una entrada válida para el algoritmo Algoritmo de ordenamiento

8 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 Entrada 1 Salida 1 Entrada 2 Entrada n Salida 2 Salida n

9 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?

10 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?

11 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?

12 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

13 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

14 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)

15 Análisis del algoritmo Insertion sort

16 Algoritmos en la computación Insertion sort

17 Algoritmos en la computación Insertion sort

18 Algoritmos en la computación Insertion sort

19 Algoritmos en la computación Insertion sort

20 Algoritmos en la computación Insertion sort Se recorre de derecha a izquierda buscando el lugar que debe ocupar

21 Algoritmos en la computación Insertion sort

22 Algoritmos en la computación Insertion sort

23 Algoritmos en la computación Insertion sort

24 Algoritmos en la computación Insertion sort

25 Algoritmos en la computación Insertion sort

26 Algoritmos en la computación Insertion sort

27 Algoritmos en la computación Insertion sort

28 Algoritmos en la computación Insertion sort

29 Algoritmos en la computación Insertion sort

30 Algoritmos en la computación Insertion sort

31 Algoritmos en la computación Insertion sort

32 Algoritmos en la computación Insertion sort

33 Algoritmos en la computación Insertion sort

34 Algoritmos en la computación Insertion sort 103269 A:

35 Algoritmos en la computación Insertion sort Desarrolle el algoritmo INSERTION-SORT(A) 103269 A:

36 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key

37 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 103269

38 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 103269 j=2 Key=A[2]=3

39 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 103269 j=2 Key=A[2]=3 i=1

40 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 10 269 j=2 Key=A[2]=3 i=0

41 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 310269 A[1]=3

42 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 310269 j=3 Key=A[3]=2

43 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 310269 j=3 Key=A[3]=2 i=2

44 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 310 69 j=3 Key=A[3]=2 i=2

45 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 310 69 j=3 Key=A[3]=2 i=1

46 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 331069 j=3 Key=A[3]=2 i=0

47 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 231069 j=3 Key=A[3]=2 i=0

48 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 231069 j=4 Key=A[4]=6 i=3

49 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 2310 9 j=4 Key=A[4]=6 i=3

50 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 2310 9 j=4 Key=A[4]=6 i=2

51 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 236109 j=4 Key=A[4]=6 i=2

52 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 236109 j=5 Key=A[5]=9 i=4

53 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 23610 j=5 Key=A[5]=9 i=4

54 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 23610 j=5 Key=A[5]=9 i=3

55 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 236910 j=5 Key=A[5]=9 i=3

56 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

57 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

58 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?

59 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

60 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

61 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 T 1 (n)=3n 2 T 2 (n)=6n 3 por ejemplo, para n=100, se tiene: T 1 (n)=3*100 2 =30.000 T 2 (n)=6*100 3 =6.000.000

62 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 T 1 (n)=3n 2 T 2 (n)=6n 3 por ejemplo, para n=100, se tiene: T 1 (n)=3*100 2 =30.000 T 2 (n)=6*100 3 =6.000.000 Operaciones primitivas Pasos Instrucciones

63 Algoritmos en la computación Note que los pasos ejecutados se calculan independientemente de la máquina y de la implementación

64 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key

65 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 2 do key  A[j]c2c2 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

66 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  1 to length[A]c1c1 2 print A[j]c2c2

67 Algoritmos en la computación for j  1 to 3for (int j=1; j<=3; j++) j=1  j=2  j=3  j=4 

68 Algoritmos en la computación for j  1 to 3for (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

69 Algoritmos en la computación for j  1 to 3for (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

70 Algoritmos en la computación for j  1 to n ¿Cuántas veces se repite?

71 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  1 to length[A]c1c1 n+1 2 print A[j]c2c2 n

72 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 ? 2 print A[j]c2c2 ?

73 Algoritmos en la computación for j  2 to 4for (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

74 Algoritmos en la computación for j  2 to 4for (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

75 Algoritmos en la computación for j  2 to 6for (int j=2; j<=6; j++) ???

76 Algoritmos en la computación for j  2 to n La cantidad de comparaciones en el for es:

77 Algoritmos en la computación for j  2 to n La cantidad de comparaciones en el for es: (n-2+1) + 1 = n

78 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 ??? 2 do key  A[j]c2c2 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

79 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

80 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 ??? 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

81 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

82 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7

83 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 Depende de qué tan ordenados se encuentran los datos en A

84 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 Para cada j, se puede repetir una cantidad diferente de veces

85 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 Sea t j, la cantidad de comparaciones que se hacen en el while para cada valor de j Por ejemplo, t 2,es un número que indica cuántas veces se cumple la condición cuando j=2

86 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 t 2 + t 3 + t 4 + … + t n 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 Por ejemplo, t 2,es un número que indica cuántas veces se cumple la condición cuando j=2 Sea t j, la cantidad de comparaciones que se hacen en el while para cada valor de j

87 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 t 2 + t 3 + t 4 + … + t n 5do A[i+1]  A[i]c5c5 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 6 i  i-1c6c6 7 A[i+1]  keyc7c7

88 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 t 2 + t 3 + t 4 + … + t n 5do A[i+1]  A[i]c5c5 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 6 i  i-1c6c6 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 7 A[i+1]  keyc7c7

89 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 t 2 + t 3 + t 4 + … + t n 5do A[i+1]  A[i]c5c5 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 6 i  i-1c6c6 (t 2 -1)+(t 3 -1)+(t 4 -1)+ … + (t n -1) 7 A[i+1]  keyc7c7 n-1

90 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 T(n)=???

91 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el mejor de los casos, cuánto vale t j ?

92 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 23101619 j=2 t 2 =?

93 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 23101619 j=3 t 3 =?

94 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el mejor de los casos, t j =1. T(n)=???

95 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 0 6 i  i-1c6c6 0 7 A[i+1]  keyc7c7 n-1 En el mejor de los casos, t j =1. T(n)=???

96 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el peor de los casos, cuánto vale t j ?

97 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 32169 j=2 t 2 =?

98 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 32169 j=2 t 2 =? i=1

99 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 23169 j=2 t 2 =? i=0

100 Algoritmos en la computación INSERTION-SORT(A) 1 for j  2 to length[A] 2 do key  A[j] 3 i  j-1 4 while i >0 and A[i] > key 5do A[i+1]  A[i] 6 i  i-1 7 A[i+1]  key 23169 j=3 t 3 =?

101 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el peor de los casos, t j =j. T(n)=???

102 Algoritmos en la computación InstrucciónCostoVeces que se repite 1 for j  2 to length[A]c1c1 n 2 do key  A[j]c2c2 n-1 3 i  j-1c3c3 n-1 4 while i >0 and A[i] > keyc4c4 5do A[i+1]  A[i]c5c5 6 i  i-1c6c6 7 A[i+1]  keyc7c7 n-1 En el caso promedio, se supone que se necesitan j/2 comparaciones, esto es, t j =j/2. T(n)=???

103 Algoritmos en la computación InstrucciónCosto 1 i=1c1c1 2 while i<=len(mat1)c2c2 3 j  1c3c3 4 while j<=len(mat2)c4c4 5 mat3[i][j]  mat1[i][j]+mat2[i][j]c5c5 6 j  j+1c6c6 7 i  i+1c7c7 Calcule el tiempo de computo para el algoritmo def programa1(mat1, mat2) # suponga que len(mat1)=len(mat2)=n

104 Algoritmos en la computación InstrucciónCosto 1 s  0 c1c1 2 i  1 c2c2 3 while i<=n c3c3 4 t  0 c4c4 5 j  1 c5c5 6 while j<=i c6c6 7 t  t+1 c7c7 8 j  j+1c8c8 9 s  s+tc9c9 10 i  i+1c 10 Calcule el tiempo de computo para el algoritmo def programa2(n)

105 Algoritmos en la computación InstrucciónCosto 1 i  1 c1c1 2 while i<=n c2c2 3 k  i c3c3 4 while k<=n c4c4 5 k  k+1 c5c5 6 k  1 c6c6 7 while k<=i c7c7 8 k  k+1c8c8 9 i  i+1c9c9 Calcule el tiempo de computo para el algoritmo def programa3(n)

106 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

107 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

108 Algoritmos en la computación Merge Sort 52461326 5246 1326 5246 1326 52461326 Dividir

109 Algoritmos en la computación Merge Sort 12234566 2456 1236 2546 1326 52461326 Combinar

110 Algoritmos en la computación Merge sort Entrada: Dividir: Conquistar: a’ 1  a’ 2  …  a’ q y a’ q+1  a’ q+2  …  a’ n Combinar: si a’ 1  a’ q+1 y a’ 2 >a’ q+1 entonces sino …

111 Algoritmos en la computación Merge sort T(n)= 1n=1 Dividir(n) + Conquistar(n) + Combinar(n)

112 Algoritmos en la computación Merge sort T(n)= 1n=1 1 + 2T(n/2) + nn>1 al resolver la recurrencia, T(n) = n lg n

113 Algoritmos en la computación Análisis de algoritmos Insertion sort y Merge sort Computador 1Computador 2 10 8 instrucciones/seg10 6 instrucciones/seg Implementación 1(Insertion)Implementación 2(Merge) 2n 2 50n*lg n

114 Algoritmos en la computación Analisis de algoritmos Insertion sort y Merge sort Computador 1Computador 2 10 8 instrucciones/seg10 6 instrucciones/seg Implementación 1(Insertion)Implementación 2(Merge) 2n 2 50n*lg n Tiempo 1(Insertion)Tiempo 2(Merge) 2(10 6 ) 2 /10 8 =20.000segs=5.56horas50*10 6 lg 10 6 /10 6 =1.000segs=16.67 mins Ordenar un arreglo de 10 6 números


Descargar ppt "Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos."

Presentaciones similares


Anuncios Google