6 Introducción al Análisis de Algoritmos

Tamaño: px
Comenzar la demostración a partir de la página:

Download "6 Introducción al Análisis de Algoritmos"

Transcripción

1 Quick_Sort(A,izq,k-1); Quick_Sort(A,k+1,der); fin_si En este caso, el algoritmo depende de la elección del pivote. Es recomendable determinar el pivote aleatoriamente para minimizar la probabilidad de la ocurrencia de malos casos. Pues Quick Sort tiene costo cuadrático en el peor caso. Sin embargo, en promedio, su desempeño práctico es mejor que Merge Sort. El costo promedio de Quick Sort también es O(nlogn). 6 Introducción al Análisis de Algoritmos Los algoritmos realizan un número de operaciones de acuerdo a la cantidad de datos (n) que procesan. El análisis de algoritmos consiste en determinar teóricamente el orden de la cantidad de estás operaciones. Cuando el número de operaciones es fijo o constante y no depende de n se dice que el algoritmo es de orden 1 y lo representaremos como O(1). En este sentido, un número fijo de asignaciones, multiplicaciones o comparaciones será de orden 1 (O(1)). En general definimos el número de operaciones como T (n), cumpliendo: T (n) R, T (n) 0. n N, n 0. y T (n) =O(f(n)) si: T (n) cf(n) (1) para c Ryc>0. Por lo general, f(n) tiene un solo término (Ej, 1, n, n 2,2 n ) y es la menor función que cumple Eq.1. Entonces, si un algoritmo está asociado a un T (n) y T (n) =O(f(n)) diremos que el algoritmo es de orden f(n). Así podríamos tener los siguiente tipos de algoritmos: Algoritmo de tiempo constante, si T (n) = O(1). Algoritmo logarítmico, si T (n) = O(logn). Algoritmo lineal, si T (n) = O(n). Algoritmo cuadrático, si T (n) =O(n 2 ). Algoritmo exponencial, si T (n) =O(a n ), para una constante a. Así, mientras menor sea el orden de los algoritmos, más eficientes son estos. Muchos algoritmos tienen un T (n) representado por un polinomio de la forma: T (n) =a 0 + a 1 n + a 2 n a p n p, en este caso el orden del algoritmo está gobernado por el orden del polinomio. Por lo tanto, T (n) =O(n p ). Por ejemplo, si un algoritmo tiene asociado un T (n) = 1 2 n2 + n 3, el algoritmo tiene orden cuadrático, es decir T (n) =O(n 2 ). Regla del Máximo: La regla del máximo dice que si T (n) =t 1 (n) +t 2 (n), siendo t 1 = O(f 1 (n)) y t 2 (n) =O(f 2 (n)), entonces T (n) =O(max(f 1 (n),f 2 (n))). 14 José M. Saavedra

2 6.1 Recurrencias Los algoritmos recursivos expresan su T (n) también en forma recursiva, como por ejemplo el número de operaciones del algoritmo Merge Sort está dado por: { ( 1 si n 1 T (n) = n ) 2T + n si n>1 2 Calcular el orden de un T (.) recursivo no es fácil, por lo que debemos transformar T (.) en una funcíon equivalente pero no recursiva. Este proceso se denomina resolución de recurrencia. Algunas estrategias para resolver la recurrencia se muestran a continuación Recurrencias Teléscopicas Las recurrencias telescópicas tienen la siguiente forma: X n+1 = a n + X n resolviendo X n hasta el caso base X 0 tenemos: X n+1 = X 0 + a 0 + a a n n X n+1 = X 0 + i=0 Ejercicios: Resolver las siguientes recurrencias: 1. T (n) = 2 n + T (n 1), donde T (0) = T (n) =T (n 1) + log 2 (n), donde T (0) = Cambios de variable En algunos casos, la forma telescópica no se observa directamente. Utilizando cambios de variable podemos hacer notoria la forma anterior y facilitar la resolución de la recurrencia. Por ejemplo, sea T (n) =2T ( n 2 )+n con el caso base T (n) = 1 cuando n 1. Para solucionar este problema supondremos que n =2 p, entonces tenemos: a i T (2 p )=2T (2 p 1 )+2 p La forma telescópicas no es notoria, pero veamos lo que ocurre si hacemos que T (2 p )=y(p), tedremos: y(p) =2y(p 1) + 2 p y luego dividimos todo por 2 p, haciendo que y(p)/(2 p )=r(p) tendremos r(p) =r(p 1) + 1 ahora sí tenemos la forma telescópica que al resolverla nos queda: p 1 r(p) = r(0) + 1 r(p) = 1 + p i=0 15 José M. Saavedra

3 Ahora obtenemos T (n) =y(p) =r(p)2 p =2 p + p2 p = O(nlogn), Ejercicios: Resolver las siguientes recurrencias: 1. T (n) = 2T (n 1) + 1, donde T (0) = Ecuación característica Sea la ecuación de la forma: a k T n+(k) + a k 1 T n+(k 1) + + a 0 T n =0 reemplazamos T n = λ n, y tenemos: λ n (a k λ k + a k 1 λ k a 0 λ 0 )=0 pero como λ n no puede ser 0, entonces: a k λ k + a k 1 λ k a 0 λ 0 =0. Ahora, tenemos k raíces: λ 1,..., λ k. Solución General: T n = c 1 λ n 1 + c 2 λ n c k λ n k Ejercicios: Resolver las siguientes recurrencias: 1. T (n) = 5T (n 1) 4T (n 2), donde T (1) = 3,T(2) = T (n + 1) = T (n)t (n 1), donde T (0) = 1,T(1) = Casos de Estudio En esta parte revisaremos algunos problemas interesantes con diferentes alternativas de solución usando estrategias como Divide & Conquista y Programación Dinámica Subsecuencia de Suma Máxima Sea Q = a 1,a 2,..., a n una secuencia de n enteros (posiblemente negativos), el objetivo es encontrar (i, j), 1 i j n, representando una subsecuencia j contigua a i,..., a j en Q, tal que a k sea la mayor para cualquier i, j. Visto k=i desde el punto de vista de optimización sería: argmax 1 i j n ( j k=i a k ). Si para todo a Q, a < 0 entonces la suma máxima es 0. Ejemplo: S =-2, 11, -4, 13, José M. Saavedra

4 SSM= 20 Algoritmo de Fuerza Bruta Aquí, simplemente calculamos la suma para toda posible subsecuencia. Nos quedamos con la que tenga la mayor suma. Algorithm 1 Algoritmo de fuerza bruta para SSM. 1: smax 0 2: for i = 1 to n do 3: for j = i to n do 4: s 0 5: for k = i to j do 6: s s + a k 7: if s > smax then 8: smax s 9: i i 10: j j 11: end if 12: end for 13: end for 14: end for 15: return [smax, i,j ] El algoritmo mostrado en Alg. 1 es un algoritmo ingenuo, muy ineficiente, n n j cuyo tiempo está dado por: T = 1, dando un orden O(n 3 ). i=1 j=i k=i Algoritmo de Fuerza Bruta Mejorado Podríamos hacer algo mejor que lo anterior al notar que para un i fijo estamos recalculando sumas al variar j. Es decir, podemos evitar una ciclo iterativo si evitamos recalcular la suma desde i hasta j 1 para un nuevo valor de j. Así, tendríamos el siguiente algoritmo: n n Ahora tenemos un algoritmo con T = 1 de orden cuadrático O(n 2 ). i=1 j=i Algoritmos Divide & Conquista Es posible aún obtener una mayor eficiencia si dividimos el problema en dos subproblemas, resolviéndolos por separado, para finalmente obtener una solución mezclando ambas soluciones parciales (principio divide & conquista). Entonces, dada la secuencia Q, la dividimos en mitades como se muestra en la Figura 1. Luego resolvemos por separado cada mitad. Llamemos m 1 a la ssm de la izquierda y m 2 a la correspondiente suma de la derecha. Además, supongamos que m1 corresponde a la subsecuencia que va dese p hasta q, mientras que m2 corresponde a la subsecuencia que va desde r hasta s. Tenemos dos soluciones, la pregunta ahora es cómo mezclar ambas?. Para obtener el resultado final, tenemos que notar que al descomponer la secuencia en dos partes dejamos de evaluar el comportamiento de las subsecuencias que cruzan el centro. Por lo tanto, debemos encontrar la ssm que pasa 17 José M. Saavedra

5 Algorithm 2 Algoritmo de fuerza bruta para SSM mejorado 1: smax 0 2: for i = 1 to n do 3: s 0 4: for j = i to n do 5: s s + a j 6: if s > smax then 7: smax s 8: i i 9: j j 10: end if 11: end for 12: end for 13: return [smax, i,j ] Figure 1: Esquema divide y conquista para el problema SSM. por el centro y va hasta p por la izquierda y hasta s por la derecha. Llamemos x a esta última ssm. El resultado final es max(x, m 1,m 2 ). El Alg. 3 describe el algoritmo completo. Ahora, tenemos un tiempo recursivo de T (n) = 2T (n/2) + O(n), que al resolverlo nos da T (n) = nlog(n). Por lo tanto, tenemos un algoritmo de orden O(nlogn), mucho más eficiente que los dos previamente discutidos. Habrá un algoritmo más eficiente?. Algoritmo SSM Lineal Podemos llegar a un orden lineal para resolver el problema de subsecuencia de suma máxima. Definamos primero la siguiente aserción: La mejor subsecuencia no puede comenzar con un número negativo. En general, ninguna subsecuencia de suma negativa puede ser prefijo de la subsecuencia óptima. El algoritmo se basa en dos invariantes para cada posición j, t.q. 1 j n. Se conoce la mejor subsecuencia desde 1 hasta j. Se conoce la mejor subsecuencia que termina en j. Por lo tanto, necesitamos dos variables, ssm y sp, que almacenen los valores antes descritos, respectivamente. Inicialmente, ambas variables son cero. Cuando la mejor subsecuencia que termina en j se hace negativa, reseteamos la segunda variable, pues ninguna subsecuencia que termina en j puede ser parte 18 José M. Saavedra

6 Algorithm 3 SSM DC Require: Q : a1,..., a n ; izq, der 1: centro izq+der 2 2: if izq = der then 3: if a izq < 0 then 4: return [0, 1, 1] 5: else 6: return [a izq, izq, der] 7: end if 8: else 9: [m 1, p, q] SSM DC(Q, izq, centro) 10: [m 2, r, s] SSM DC(Q, centro +1, der) 11: sp 0; 12: max izq 0; 13: x izq 1 14: for i = centro down to p (p >0) do 15: sp sp + a i 16: if sp > max izq then 17: max izq sp 18: x izq i 19: end if 20: end for 21: sp 0 22: max der 0 23: x der 1 24: for i = centro + 1 to s do 25: sp sp + a i 26: if sp > max der then 27: max der sp 28: x der i 29: end if 30: end for 31: ssm = max(m 1,m 2, max izq + max der ) 32: if m 1 = ssm then 33: return [m 1, p, q] 34: else 35: if m 2 = ssm then 36: return [m 2, r, s] 37: else 38: return [max izq + max der,x izq,x der ] 39: end if 40: end if 41: end if de la subsecuencias buscada. El algoritmo en Alg. 4 describe la propuesta lineal. Es fácil notar que el algoritmo mostrado en Alg. 4 tiene un tiempo de ejecución de orden O(n). 19 José M. Saavedra

7 Algorithm 4 Algoritmo lineal para SSM 1: ssm 0 2: sp 0 3: i 0 0 4: for j = 1 to n do 5: sp sp + a j 6: if sp > ssm then 7: ssm sp 8: i i : j j 10: else if sp < 0 then 11: sp 0 12: i 0 j 13: end if 14: end for 15: return [ssm, i,j ] Multiplicación de Matrices Dadas dos matrices cuadradas A, B de N N (si A y B tienen diferentes dimensiones se pueden rellenar con ceros siempre que ambas sean multiplicables) el problema es obtener C = A B eficientemente. Algoritmo tradicional El algoritmo tradicional consiste en recorrer cada fila de A y cada columna de B, obtener el producto punto de la fila i en A y columna j en B, el resultado es asignado a la posición i, j en C. Esto toma tiempo O(N 3 ), el algoritmo se muestra en Alg. 5. Algorithm 5 Algoritmo tradicional para multiplicar matrices 1: for i = 1 to N do 2: for j = 1 to N do 3: s 0 4: for k = 1 to N do 5: s A[i][k] B[k][j]+s 6: end for 7: C[i][j] s 8: end for 9: end for Algoritmo Divide & Conquista Supongamos que dividimos las matrices en cuatro zonas, tal como se muestra en la Figura 2. En este caso tenemos 8 subproblemas a resolver cuyas soluciones componen la solución final de la siguiente manera: C 11 = A 11 B 11 + A 12 B 21 C 12 = A 11 B 12 + A 12 B José M. Saavedra

8 Figure 2: Esquema divide y conquista para la multimplicación de matrices. C 21 = A 21 B 11 + A 22 B 21 C 22 = A 21 B 12 + A 22 B 22 La composición final toma tiempo O(N 2 ). Sin embargo, este algoritmo tiene un tiempo recursivo de T (N) =8T (N/2) + O(N 2 ) cuyo orden sigue siendo cúbico, O(N 3 ). Algoritmo de Strassen Strassen propuso en 1969 una forma de calcular el producto de matrices basada en la estrategia divide & conquista, como se describió anteriormente, pero en la que solamente se necesitan resolver 7 subproblemas. La propuesta es la siguiente: M 1 =(A 12 A 22 )(B 21 + B 22 ) M 2 =(A 11 + A 22 )(B 11 + B 22 ) M 3 =(A 11 A 21 )(B 11 + B 12 ) M 4 =(A 11 + A 12 )B 22 M 5 = A 11 (B 12 B 22 ) M 6 = A 22 (B 21 B 11 ) M 7 =(A 21 + A 22 )B 11 La composición de la solución final está dada por: C 11 = M 1 + M 2 M 4 + M 6 C 12 = M 4 + M 5 C 21 = M 6 + M 7 C 22 = M 2 M 3 + M 5 M 7 Esta solución tiene un tiempo recursivo de T (N) = 7T (N/2) + O(N 2 ) cuyo orden es O(7 log2n ) O(N 2.81 ). La complejidad asintótica de este algoritmo es ligeramente menor que la del algoritmo tradicional para multiplicar matrices. Sin embargo, en la práctica el algoritmo de Strassen funciona mucho mejor. 21 José M. Saavedra

9 6.2.3 Subsecuencia Común más larga En los dos casos anteriores hemos visto cómo aplicar la estrategia Divide & Conquista en la solución de problemas. Ahora veremos cómo aplicar la Programación Dinámica en el problema de la Subsecuencia Común más larga (LCS). LCS es uno de los problemas con muchas aplicaciones en Bioinformática, como por ejemplo encontrar patrones similares en secuencias de ADN. En términos generales, el objetivo de LCS es econtrar la subsecuencia (no necesariamente contigua) común más larga entre dos secuencias (ej. strings). Sea X, Z dos secuencias de largo m y n, respectivamente. Por simplicidad pensemos en secuencias de carácteres: X = x 1,x 2,..., x m Z = z 1,z 2,..., z n diremos, en este problema, que Z es una subsecuencia de X, si existe una secuencia i 1,..., i n, t.q. i j es una posición en X, en donde se cumple: i j <i j+1 j =1... n 1y x ij = z j j =1... n. Problema: Dados 2 strings X, Y encontrar la subsecuencia Z de mayor longitud común a X e Y. Algoritmo de Fuerza Bruta El algoritmo de fuerza bruta requiere calcular todas las subsecuecias de X y de Y, para luego buscar la común de mayor longitud. Calcular todas las subsecuencias de un string X es como calcular el conjunto potencia del conjunto de símbolos de X, en el que cada símbolo es considerado diferente al resto. Así, el tiempo requerido para este cálculo es O(2 X ), lo que lo hace inaplicable. Algoritmo Recursivo Sea X i el i-ésimo prefijo del string X, es decir: X i = x 1,x 2,... x i donde, 0 i m, siendo m = X y X = X m. Además definimos, X 0 = ε (cadena vacía). Así, LCS(X, Y ) = LCS(X m,y n ) y se sigue la siguiente definición recursiva: LCS(X i 1,Y j 1 ) x i si x i = y j LCS(X i,y j )= argmax( LCS(X i,y j 1 ), LCS(X i 1,Y j ) ) en otro caso. (2) donde, indica concatenación. Implementar la solución recursiva es muy caro, también de orden exponencial. Sin embargo, el uso de programación dinámica nos permite implementar la solución recursiva eficientemente. Algoritmo basado en Programación Dinámica 22 José M. Saavedra

10 Considerando la solución recursiva anterior, definimos L como una matriz de tamaño (m + 1) (n + 1), en donde L[i, j] = LCS(X i,y j ). Inicialmente, L[i, 0] = L[0,j]=0 i =0,..., m; j =0...., n. Luego, la matriz L es llenada de la siguiente manera: L[i 1,j 1] + 1 si x i = y j L[i, j] = (3) max(l[i, j 1],L[i 1,j]) en otro caso. Finalmente, LCS(X, Y ) = L[m, n], pero no tenemos la secuencia en sí. Sin embargo, se puede recuperar el string correspondiene a LCS(X, Y ), si a partir L[m.n], retrocedemos por donde se encontró los máximos valores o por la diagonal, recuperando lo símbolos correspondientes. Para ello, necesitamos un matriz adicional B de tamaño (m + 1) (n + 1), que almacene la dirección de retorno, como se muestra a continuación. B[i, j] =D si x i = y i B[i, j] = B[i, j] =I si L[i, j 1] >L[i 1,j] (4) B[i, j] =A si L[i, j 1] <L[i 1,j] A: arriba, D: diagonal, I: izquierda. Un algoritmo simple para recuperar LCS(X, Y ), dados B, X e Y es el que se muestra en Alg. 6. En este caso, el algoritmo se basa en llenar las matrices L y B, por lo que el tiempo de ejecución es de orden O(m n). Algorithm 6 Recuperar LCS Require: X, Y, B, i, j 1: s ε 2: if i! = 0ANDj! = 0 then 3: if B[i, j] = A then 4: s Recuperar LCS(X, Y, B, i 1,j) 5: else if B[i, j] = I then 6: s Recuperar LCS(X, Y, B, i, j 1) 7: else 8: s Recuperar LCS(X, Y, B, i 1,j 1) X[i] 9: end if 10: end if 11: return s En la Figura 3 se muestra un ejemplo de la solucióm de LCS usando programación dinámica Distancia de Edición entre Cadenas Otro problema interesante es el de comparar cadenas usando una distancia que nos dice que tan diferentes son dos cadenas. Para eso existe un algoritmo famoso que se denomina Distancia de Edición o Distancia de Levenshtein cuyo funcionamiento se describe a continuación. Sean X = x 1,x 2,... x m y Y = y 1,y 2,..., y n dos cadenas (strings) de largo m y n respectivamente, la distancia de edición entre X, Y se define como el 23 José M. Saavedra

11 7 ORDEN ESTÁTICO Figure 3: En la derecha se muestra la matriz L, mientras que en la izquierda aparece la matriz B. El texto recuperado se muestra de color verde. mínimo número de operaciones elementales que hay que realizar para convertir una cadena en la otra. Las operaciones elementales son de tres tipos: (1) Inserción, cuando se agrega un caracter a una de las cadenas, (2) Eliminación, cuando se quita un caracter de una de las cadenas, y (3) Sustitución, si un caracter se cambia por otro. Además definimos X i como la subcadena con los primeros i caracteres de la cadena X. Así, X i = x 1,... x i. La distancia de edición entre X i e Y j, DE(X i,y j ) se define recursivamente como: DE(X i 1,Y j 1 ) x i = y j min(de(x DE(X i,y j )= i 1,Y i 1 ), (5) DE(X i 1,Y i ), DE(X i,y i 1 )) + 1 x i y j donde DE(X 0,Y i )=i ó DE(X i,y 0 )=i. Finalmente, DE(X, Y )=DE(X m,y n ). Solucionar este problema en forma recursiva resulta en un algoritmo ineficiente. La forma de atacar este problema es usando Programación Dinámica. En este sentido definimos una matriz D de (m+1) (n+1) celdas, donde D[i, j] almacena la distancia de edición calculada entre X i e Y j. Inicialización: D[i, 0] = i, para i =0,m y D[0,j]=j, para i =0,n. Proceso: La matriz se llena siguiendo la especificación recursiva descrita en Ecuación 5: D(i 1,j 1) x i = y j min(d(i 1,i 1), D(i, j) = (6) D(i 1,j), D(i, j 1)) + 1 x i y j De este modo, DE(X, Y ) = D( X, Y ). Llenando la matriz apropiadamente tendremos un tiempo de O(m n). El algoritmo se muestra en Alg 7. 7 Orden Estático Dado un arreglo A de tamaño n no necesariamente ordenado, el objetivo es encontrar el k-ésimo menor elemento en A, donde 1 k n. En otras palabras, se debe encontrar el elemento de la posición k, si es que A se ordena previamente (esto se puede extender también al caso de buscar el k-ésimo mayor.) 24 José M. Saavedra

12 7 ORDEN ESTÁTICO Algorithm 7 DE Require: X, Y 1: m X 2: n Y 3: D crear matriz de (m + 1) (n + 1) 4: for i = 1 to m do 5: for j = 1 to n do 6: if x i = y i then 7: D[i, j] =D[i 1,j 1] 8: else 9: D[i, j] =min(d[i 1,j 1],D[i, j 1],D[i 1,j]) : end if 11: end for 12: end for 13: return D[m,n] 7.1 Algoritmo QuickSelect Este algoritmo es una extensión del algoritmo de ordenación QuickSort, procesando en cada llamada recursiva solamente una de las partes resutantes de la partición. Una vez que el pivote queda ubicado, supogamos en la posición p, tal pivote no cambiará de posición, entonces su orden estático es p. Si k es menor que p, buscamos recursivamente en la parte izquierda, en otro caso buscaremos en la parte derecha el elemento de posición k p. El algoritmo se presenta en Alg. 8. Algorithm 8 QuickSelect Require: A, izq, der, k 1: piv seleccionar pivote. 2: p particionar(a, izq, der, piv). 3: p p izq +1 4: if k = p then 5: return p 6: else if k < p then 7: return QuickSelect(A, izq, p 1, k) 8: else 9: return QuickSelect(A, p +1, der, k p ) 10: end if El algoritmo QuickSelect tiene un tiempo promedio T (n) = T (n/2) + n, por lo que T (n) =O(n). Sin embargo, en el peor caso el pivote puede quedar primero o último, por lo que se descartaría solamente un elemento necesitando buscar recursivamente en los restantes n 1. Así, en el peor caso se tiene T (n) =T (n 1) + n cuya complejidad es O(n 2 ). De igual modo que en el caso del algoritmo QuickSort, el punto crítico en este algoritmo es la selección del pivote. Algunas formas de minimizar la ocurrencia del peor caso es seleccionar el pivote usando alguna de las siguientes heurísticas: Pivote aleatorio. 25 José M. Saavedra

Diseño y Análisis de Algoritmos

Diseño y Análisis de Algoritmos 1. Recursividad 2. "Dividir para Reinar" 3. Recursividad y Tabulación (Programación Dinámica) 4. Métodos Matemáticos Funciones discretas Notación O Ecuaciones de recurrencia 5. Casos de Estudio Breve descripción

Más detalles

Programación Análisis de Algoritmos: Tiempo de Ejecución (Introducción)

Programación Análisis de Algoritmos: Tiempo de Ejecución (Introducción) Programación 2 5 - Análisis de Algoritmos: Tiempo de Ejecución (Introducción) 1 Análisis de Algoritmos: Introducción Qué algoritmos elegir para resolver un problema? Que sean fáciles de entender, codificar

Más detalles

Multiplicación de matrices simétricas

Multiplicación de matrices simétricas Multiplicación de matrices simétricas La traspuesta de una matriz A n n es definida como una matriz A T n n tal que A T [i, j] =A[j, i] paracadai, j 2{1,...,n} Además, una matriz A es simétrica si A =

Más detalles

Programa de teoría. Algoritmos y Estructuras de Datos II. 2. Divide y vencerás. 1. Análisis de algoritmos

Programa de teoría. Algoritmos y Estructuras de Datos II. 2. Divide y vencerás. 1. Análisis de algoritmos Programa de teoría Algoritmos y Estructuras de Datos II 1. Análisis de algoritmos 2. Divide y vencerás 3. Algoritmos voraces 4. Programación dinámica 5. Backtracking 6. Ramificación y poda A.E.D. II 1

Más detalles

Programación Dinámica 1

Programación Dinámica 1 Programación Dinámica 1 El método de programación dinámica sirve para resolver problemas combinando las soluciones de subproblemas. Normalmente es usada para resolver problemas de optimización. Al construir

Más detalles

Programación Dinámica

Programación Dinámica Programación Dinámica La técnica de programación dinámica se aplica en general a problemas de optimización. l igual que "dividir y conquistar", el problema es dividido en subproblemas de tamaños menores

Más detalles

Muchas de las ecuaciones de recurrencia que vamos a usar en este curso tienen la siguiente forma: ( c n =0 T (n) = a T (b n b.

Muchas de las ecuaciones de recurrencia que vamos a usar en este curso tienen la siguiente forma: ( c n =0 T (n) = a T (b n b. El Teorema Maestro Muchas de las ecuaciones de recurrencia que vamos a usar en este curso tienen la siguiente forma: ( c n =0 T (n) = a T (b n b c)+f (n) n 1 donde a, b y c son constantes, y f (n) es una

Más detalles

PARTE II: ALGORÍTMICA

PARTE II: ALGORÍTMICA Programa de teoría Parte I. Estructuras de Datos.. Abstracciones y especificaciones.. Conjuntos y diccionarios.. Representación de conjuntos mediante árboles. 4. Grafos. Parte II. Algorítmica.. Análisis

Más detalles

Introducción al Análisis del Coste de Algoritmos

Introducción al Análisis del Coste de Algoritmos 1/11 Introducción al Análisis del Coste de Algoritmos Josefina Sierra Santibáñez 7 de noviembre de 2017 2/11 Eficiencia de un Algoritmo Analizar un algoritmo significa, en el contexto de este curso, predecir

Más detalles

Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios

Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios 6.1.(Clase) Un programa que utiliza la técnica divide y vencerás, divide un problema de tamaño n en a subproblemas de tamaño n/b. El tiempo g(n) de la resolución directa (caso base) se considerará constante.

Más detalles

Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos

Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos Estructura de Datos y Algoritmos Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos 1. Algoritmos de ordenación recursivos 1.1. Mergesort, Ordenamiento por fusión Mergesort se ejecuta en un tiempo

Más detalles

Tema 01: Fundamentos del Análisis Asintótico de Algoritmos

Tema 01: Fundamentos del Análisis Asintótico de Algoritmos Tema 01: Fundamentos del Análisis Asintótico de Algoritmos Noviembre, 2003 CS0218: Algoritmos y Programación II Introducción En Ciencias de la Computación se presenta con frecuencia la situación de analizar

Más detalles

Tema 2. Divide y vencerás.

Tema 2. Divide y vencerás. Programa de teoría Parte I. Estructuras de Datos. 1. Abstracciones especificaciones. 2. Conjuntos diccionarios. 3. Representación de conjuntos mediante árboles. 4. Grafos. Parte II. Algorítmica. 1. Análisis

Más detalles

Programa de teoría. Algoritmos y Estructuras de Datos II. 3. Algoritmos voraces. 1. Análisis de algoritmos 2. Divide y vencerás

Programa de teoría. Algoritmos y Estructuras de Datos II. 3. Algoritmos voraces. 1. Análisis de algoritmos 2. Divide y vencerás Programa de teoría Algoritmos y Estructuras de Datos II 1. Análisis de algoritmos 2. Divide y vencerás 3. Algoritmos voraces 4. Programación dinámica 5. Backtracking 6. Ramificación y poda A.E.D. II 1

Más detalles

Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 3: Divide y Vencerás

Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 3: Divide y Vencerás Estructuras de Datos y Algoritmos Facultad de Informática Universidad Politécnica de Valencia Curso 2009/2010 Tema 3: Divide y Vencerás FI UPV: Curso 2009/2010 TEMA 3. Divide y Vencerás Objetivos Estudio

Más detalles

Análisis de algoritmos

Análisis de algoritmos Tema 05: no recursivos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1 Contenido no recursivos La notación de Landau O La notación O Principio

Más detalles

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013 Técnicas de diseño de algoritmos Algoritmos y Estructuras de Datos III Segundo cuatrimestre 2013 Técnicas de diseño de algoritmos Algoritmos golosos Backtracking (búsqueda con retroceso) Divide and conquer

Más detalles

Tema 9. Recursividad

Tema 9. Recursividad Tema 9. Recursividad http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz@icc.uji.es Estructuras de datos y de la información Universitat

Más detalles

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos Estructura de Datos y Algoritmos Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos 1. Algorimos de ordenación Discutiremos el problema de ordenar un array de elementos. A los efectos de simplificar

Más detalles

Ordenamiento (Sorting)

Ordenamiento (Sorting) Ordenamiento (Sorting) El problema del ordenamiento Ordenar: arreglo[α] arreglo[α], donde α es un tipo tal que está definida la relación < α Uno de los problemas más clásicos, útiles y estudiados de la

Más detalles

Análisis de Algoritmos

Análisis de Algoritmos Análisis de Algoritmos IIC1253 IIC1253 Análisis de Algoritmos 1 / 36 Complejidad de un algoritmo Un algoritmo A puede ser pensado como una función A : {0,1} {0,1} Qué tan general es esta representación?

Más detalles

Divide-y-vencerás, backtracking y programación dinámica

Divide-y-vencerás, backtracking y programación dinámica Divide-y-vencerás, backtracking y programación dinámica Diseño y Análisis de Algoritmos Cátedra de Programación Carrera de Ingeniería de Sistemas Prof. Isabel Besembel Carrera Noviembre, 2012 Prof. Isabel

Más detalles

Análisis de Algoritmos

Análisis de Algoritmos Análisis de Algoritmos IIC1253 IIC1253 Análisis de Algoritmos 1 / 36 Complejidad de un algoritmo Un algoritmo A puede ser pensado como una función A : {0,1} {0,1} Qué tan general es esta representación?

Más detalles

Taller de Programación Dinámica. Definiciones. Caso base. Laboratorio de Algoritmos y Estructuras de Datos III. 10 de Septiembre de 2010

Taller de Programación Dinámica. Definiciones. Caso base. Laboratorio de Algoritmos y Estructuras de Datos III. 10 de Septiembre de 2010 Menú del día Taller de 1 Definiciones Laboratorio de Algoritmos y Estructuras de Datos III Departamento de Computación Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires 10 de Septiembre

Más detalles

Dividir-conquistar y podar-buscar

Dividir-conquistar y podar-buscar Técnicas de diseño de algoritmos Dividir-conquistar y podar-buscar Dra. Elisa Schaeffer elisa.schaeffer@gmail.com PISIS / FIME / UANL DC y PB p. 1 Diseño de algoritmos La meta: encontrar una manera eficiente

Más detalles

Esquema de Dividir y Vencer

Esquema de Dividir y Vencer Esquema de Dividir y Vencer Amalia Duch Barcelona, marzo de 2006 Índice 1. Esquema general 1 2. Búsqueda binaria (binary search) 2 3. Ordenación por fusión (merge sort) 2 4. Ordenación rápida (quick sort)

Más detalles

Tema 3. Análisis de costes

Tema 3. Análisis de costes Tema 3. Análisis de costes http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de la información

Más detalles

Decrementa y vencerás II

Decrementa y vencerás II Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 21 de febrero de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 1 / 22 1 Decrementa y vencerás II Dr. Eduardo

Más detalles

Análisis de algoritmos

Análisis de algoritmos Tema 08: Divide y vencerás (DyV) M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1 Contenido Introducción Divide y vencerás Observaciones

Más detalles

1. Planteamiento general

1. Planteamiento general Algoritmos de tipo Divide y Vencerás 1. Planteamiento general 2. Determinación del caso base 3.1. Búsqueda binaria 3.3. Problema de la selección 3.4. Multiplicación de matrices de Strassen 1. Planteamiento

Más detalles

Programación dinámica

Programación dinámica Parte de Algoritmos de la asignatura de Programación Master de Bioinformática Programación dinámica Web asignatura: http://dis.um.es/~domingo/algbio.html E-mail profesor: domingo@um.es Transparencias preparadas

Más detalles

ANÁLISIS Y DISEÑO DE ALGORITMOS

ANÁLISIS Y DISEÑO DE ALGORITMOS ANÁLISIS Y DISEÑO DE ALGORITMOS CURSO 2005/2006 BOLETÍN DE PROBLEMAS: DIVIDE Y VENCERÁS Ejercicio 1 Dado un vector ordenado y rotado k veces: diseñar un algoritmo O(log n) que encuentre el elemento mayor

Más detalles

1/16. Coste de Algoritmos. 8 de abril de 2018

1/16. Coste de Algoritmos. 8 de abril de 2018 1/16 Coste de Algoritmos Josefina Sierra Santibáñez 8 de abril de 2018 2/16 Coste de un Algoritmo Analizar un algoritmo significa, en el contexto de este curso, estimar los recursos que requiere. Aunque

Más detalles

Algoritmos de Búsqueda

Algoritmos de Búsqueda Introducción a la Computación Algoritmos de Búsqueda Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 11/10/2017 E. Mocskos (UBA CONICET) Algoritmos de Búsqueda

Más detalles

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Divide y vencerás

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Divide y vencerás Parte de Algoritmos de la asignatura de Programación Master de Bioinformática Divide y vencerás Web asignatura: http://dis.um.es/~domingo/algbio.html E-mail profesor: domingo@um.es Transparencias preparadas

Más detalles

Tema: Programación Dinámica.

Tema: Programación Dinámica. Programación IV. Guía No. 12 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Programación Dinámica. Objetivos Específicos Definir el concepto de programación dinámica. Interpretar

Más detalles

La eficiencia de los programas

La eficiencia de los programas La eficiencia de los programas Jordi Linares Pellicer EPSA-DSIC Índice General 1 Introducción... 2 2 El coste temporal y espacial de los programas... 2 2.1 El coste temporal medido en función de tiempos

Más detalles

Tema 15: Preprocesamiento. Algoritmos Numéricos. Evaluación de Polinomios Multiplicación de Matrices Resolución de Ecuaciones Lineales

Tema 15: Preprocesamiento. Algoritmos Numéricos. Evaluación de Polinomios Multiplicación de Matrices Resolución de Ecuaciones Lineales Tema 15: Preprocesamiento. Algoritmos Numéricos Evaluación de Polinomios Multiplicación de Matrices Resolución de Ecuaciones Lineales Eficiencia de Algoritmos Numericos Los programas numericos suelen hacer

Más detalles

Programación dinámica

Programación dinámica Algoritmos y Estructura de Datos III Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires 03 de Abril de 2013 Repaso Aplica a problemas de optimización donde obtenemos una solución utilizando

Más detalles

Notación Asintótica. Temas. Introducción Notación O Notación Omega Notación Theta. Análisis de Algoritmos

Notación Asintótica. Temas. Introducción Notación O Notación Omega Notación Theta. Análisis de Algoritmos Notación Asintótica Análisis de Algoritmos Temas Introducción Notación O Notación Omega Notación Theta 1 Introducción Por qué el análisis de algoritmos? Determinar tiempos de respuesta (runtime) Determinar

Más detalles

Algorítmica y Lenguajes de Programación. Eficiencia y notación asintótica (ii)

Algorítmica y Lenguajes de Programación. Eficiencia y notación asintótica (ii) Algorítmica y Lenguajes de Programación Eficiencia y notación asintótica (ii) Eficiencia y notación asintótica. Análisis de algoritmos En la lección anterior el concepto de eficiencia asintótica. En ésta

Más detalles

Programación Dinámica

Programación Dinámica Programación Dinámica Adaptado de Algorithm Design Goodrich and Tamassia Programación Dinámica 1 Calculando la serie de Fibonacci 1,1,2,3,5,8,13,21,. fib(n) = 1 si n = 0,1 fib(n 1) + fib(n 2) o.c. Programación

Más detalles

Diseño de algoritmos

Diseño de algoritmos Diseño de algoritmos Programación Dinámica Jesús Bermúdez de Andrés Universidad del País Vasco/Euskal Herriko Unibertsitatea (UPV/EHU) Curso 2008-09 1 Programación Dinámica Definición de la técnica Funciones

Más detalles

Complejidad de los Algoritmos

Complejidad de los Algoritmos Que es un Algoritmo? Complejidad de los Algoritmos Webster: cualquier método especial para resolver cierta clase de problemas. Horowitz: método preciso utilizable en una computadora para la solución de

Más detalles

Tema: Programación Dinámica.

Tema: Programación Dinámica. Programación IV. Guía 11 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Programación Dinámica. Objetivos Específicos Definir el concepto de programación dinámica. Interpretar

Más detalles

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande Complejidad computacional Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Algoritmos - clase 10 Introducción a la complejidad computacional y

Más detalles

dit UPM Tema 1: Algoritmos /complejidad /java Análisis y diseño de software José A. Mañas

dit UPM Tema 1: Algoritmos /complejidad /java Análisis y diseño de software José A. Mañas Análisis y diseño de software dit UPM Tema 1: Algoritmos /complejidad /java José A. Mañas http://jungla.dit.upm.es/~pepe/doc/adsw/index.html 21.2.2018 referencias http://www.dit.upm.es/~pepe/doc/adsw/

Más detalles

Apuntes de Teórico PROGRAMACIÓN 3

Apuntes de Teórico PROGRAMACIÓN 3 Apuntes de Teórico PROGRAACIÓN Programación Dinámica Versión. Índice Índice... Introducción... Principio de optimalidad...5 Ejemplo: Camino de menor costo...6 Ejemplo: problema de la mochila...6 Aplicación

Más detalles

Programación Dinámica

Programación Dinámica Programación Dinámica Es aplicada típicamente a problemas de optimización, donde puede haber muchas soluciones, cada una tiene un valor asociado y prentendemos obtener la solución con valor óptimo. Al

Más detalles

Algoritmos: Análisis de algoritmos

Algoritmos: Análisis de algoritmos Algoritmos: Análisis de algoritmos Alberto Valderruten LFCIA - Departamento de Computación Facultad de Informática Universidad de A Coruña, España www.lfcia.org/alg www.fi.udc.es Contenido Análisis de

Más detalles

Francisco J. Hernández López

Francisco J. Hernández López Francisco J. Hernández López fcoj23@cimat.mx Acomodar algo en alguna secuencia especifica Objetos ordenados: Directorio telefónicos Registro de pacientes Libros en una biblioteca Cosas del hogar Se puede

Más detalles

Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Ejercicio 1: Estructuras de Datos y Algoritmos Año 2018 Práctico 2: Evaluación de Algoritmos (Finalización: 27/08) Ingeniería en Computación - Ingeniería en Informática - Profesorado en Computación Dados

Más detalles

ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS

ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS 2004-2005 PRACTICA 1: MEDICIÓN DEL TIEMPO. ALGORITMOS DE ORDENACIÓN Crear un conjunto de funciones que permitan la medición del tiempo de ejecución de los programas,

Más detalles

259. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m

259. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m 258. Aplicar el algoritmo de programación dinámica para el problema del cambio de monedas sobre el siguiente ejemplo: n = 3, P = 9, c = (1, 3, 4). Qué ocurre si multiplicamos P y c por un valor constante,

Más detalles

Estructura de datos y de la información Boletín de problemas - Tema 9

Estructura de datos y de la información Boletín de problemas - Tema 9 Estructura de datos y de la información Boletín de problemas - Tema 9 1. Dada la siguiente función recursiva: void F(char c) { if (( A

Más detalles

Tema 3.2: Eficiencia de algoritmos recursivos. Diseño y Análisis de Algoritmos

Tema 3.2: Eficiencia de algoritmos recursivos. Diseño y Análisis de Algoritmos Diseño y Análisis de Algoritmos Contenidos Contenidos 1 Introducción 2 3 Método general para resolución de relaciones de recurrencia URJC DAA 2 / 37 Introducción Análisis de algoritmos recursivos La matemática

Más detalles

Decrementa y vencerás

Decrementa y vencerás Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 19 de febrero de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás 19 de febrero de 2018 1 / 30 1 Decrementa y vencerás Tipos de algoritmos

Más detalles

Formulando con modelos lineales enteros

Formulando con modelos lineales enteros Universidad de Chile 19 de marzo de 2012 Contenidos 1 Forma de un problema Lineal Entero 2 Modelando con variables binarias 3 Tipos de Problemas Forma General de un MILP Problema de optimización lineal

Más detalles

MATRICES. Se simboliza tal matriz por y se le llamará una matriz x o matriz de orden x (que se lee por ).

MATRICES. Se simboliza tal matriz por y se le llamará una matriz x o matriz de orden x (que se lee por ). 1 MATRICES 1 Una matriz es una disposición rectangular de números (Reales); la forma general de una matriz con filas y columnas es Se simboliza tal matriz por y se le llamará una matriz x o matriz de orden

Más detalles

Análisis y Diseño de Algoritmos

Análisis y Diseño de Algoritmos Análisis y Diseño de Algoritmos Notación Asintótica DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Introducción Por qué el análisis de algoritmos? Determinar tiempos de respuesta (runtime)

Más detalles

TEMA 1: DIVIDE Y VENCERÁS

TEMA 1: DIVIDE Y VENCERÁS TEMA 1: DIVIDE Y VENCERÁS l OBJETIVOS: n Estudio de la estrategia de diseño de algoritmos (recursivos) Divide y Vencerás n Estudio de los algoritmos de Ordenación Rápida: MergeSort y QuickSort n Estudio

Más detalles

Análisis y Diseño de Algoritmos. Complejidad Computacional

Análisis y Diseño de Algoritmos. Complejidad Computacional Análisis y Diseño de Algoritmos Complejidad Computacional Multiplicación Método Tradicional Método Russé Método Particiones Complejidad Computacional Tan pronto como una máquina análitica exista, será

Más detalles

Estructuras de Datos y Algoritmos

Estructuras de Datos y Algoritmos Estructuras de Datos y Algoritmos Práctico 2: Evaluación de Algoritmos (Finalización: 03/09) Ingeniería en Computación - Ingeniería en Informática Año 2015 Ejercicio 1: Dados los siguientes vectores, correspondientes

Más detalles

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos

Más detalles

Análisis de Algoritmos

Análisis de Algoritmos Análisis de Algoritmos Amalia Duch Barcelona, marzo de 2007 Índice 1. Costes en tiempo y en espacio 1 2. Coste en los casos mejor, promedio y peor 3 3. Notación asintótica 4 4. Coste de los algoritmos

Más detalles

Sistemas de Ecuaciones Lineales y Matrices

Sistemas de Ecuaciones Lineales y Matrices Capítulo 4 Sistemas de Ecuaciones Lineales y Matrices El problema central del Álgebra Lineal es la resolución de ecuaciones lineales simultáneas Una ecuación lineal con n-incógnitas x 1, x 2,, x n es una

Más detalles

Tema 5: Funciones. Límites de funciones

Tema 5: Funciones. Límites de funciones Tema 5: Funciones. Límites de funciones 1. Concepto de función Una aplicación entre dos conjuntos y es una transformación que asocia a cada elemento del conjunto un único elemento del conjunto. Una función

Más detalles

Tema 5- Diseño Recursivo y Eficiente. Tema 5- Diseño Recursivo y. Descomposición recursiva ascendente de un vector. Etapas del diseño recursivo

Tema 5- Diseño Recursivo y Eficiente. Tema 5- Diseño Recursivo y. Descomposición recursiva ascendente de un vector. Etapas del diseño recursivo Tema 5- Diseño Recursivo y Eficiente Tema 5- Diseño Recursivo y Eficiente Germán Moltó Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica de Valencia Índice general: 1. Introducción

Más detalles

Diseño de algoritmos

Diseño de algoritmos Diseño de algoritmos Jesús Bermúdez de Andrés. UPV-EHU Guías para la solución de ejercicios: Análisis de algoritmos Curso 2008-09 1. Con un algoritmo de función de coste temporal f(n) = n 3 resolvemos

Más detalles

Dadas dos secuencias, X = (x 1 x 2 x m ) e Y = (y 1 y 2 y n ), encontrar la forma de alinearlas con un coste mínimo.

Dadas dos secuencias, X = (x 1 x 2 x m ) e Y = (y 1 y 2 y n ), encontrar la forma de alinearlas con un coste mínimo. Análisis y Diseño de Algoritmos Aplicaciones Aplicaciones Bioinformática: Alineación de secuencias de ADN Ingeniería del Software: Detección de clones (fragmentos de código duplicado) Procesamiento del

Más detalles

Programación Dinámica

Programación Dinámica , Algoritmos y Programación 6 de Abril de 2010 Alejandro Deymonnaz Definiciones Divide and Conquer Deiniciones previas Problema recursivo Un problema recursivo es un problema que se puede resolver en base

Más detalles

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2 Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2 Diseño de algoritmos recursivos 1. Dado un vector de enteros de longitud N,

Más detalles

Programación Dinámica

Programación Dinámica Programación Dinámica Agustín Santiago Gutiérrez Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Septiembre 2014 Agustín Gutiérrez (UBA) Programación Dinámica Septiembre 2014 1 / 10

Más detalles

Universidad del Valle EISC

Universidad del Valle EISC Recurrencias Raúl E Gutiérrez de Piñerez R. raul.gutierrez@correounivalle.edu.co Ing. Carlos Andres Delgado S. 2 carlos.andres.delgado@correounivalle.edu.co Universidad del Valle EISC Septiembre 2017 1

Más detalles

Algoritmos y Complejidad

Algoritmos y Complejidad Algoritmos y Complejidad Introducción Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre 2017 Introducción Algoritmos y Algoritmia Problemas

Más detalles

Tema 4: Funciones. Límites de funciones

Tema 4: Funciones. Límites de funciones Tema 4: Funciones. Límites de funciones 1. Concepto de función Una aplicación entre dos conjuntos A y B es una transformación que asocia a cada elemento del conjunto A un único elemento del conjunto B.

Más detalles

Análisis de algoritmos

Análisis de algoritmos Tema 03: Análisis temporal M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1 Contenido Caso de entrada Ejemplo 1 (Búsqueda lineal) Operación

Más detalles

Generación de variables aleatorias continuas Método de la transformada inversa

Generación de variables aleatorias continuas Método de la transformada inversa Generación de variables aleatorias continuas Método de la transformada inversa Georgina Flesia FaMAF 17 de abril, 2012 Generación de v.a. discretas Existen diversos métodos para generar v.a. discretas:

Más detalles

Temario. Tipos de recursión. Eficiencia y recursión

Temario. Tipos de recursión. Eficiencia y recursión RECURSION Temario Tipos de recursión Eficiencia y recursión Tipos de RECURSION Según desde donde se realice el llamado recursivo: Directa: la función se llama a sí misma. Indirecta: la función A llama

Más detalles

Primero se triangulariza la matriz: Multiplicando la primera fila por (-1/3) y sumando a la segunda fila: ( ) ( )=( ) ( ) ( )

Primero se triangulariza la matriz: Multiplicando la primera fila por (-1/3) y sumando a la segunda fila: ( ) ( )=( ) ( ) ( ) MAT 115 B EJERCICIOS RESUELTOS Resolver el siguiente sistema de ecuaciones: a) Por el método de eliminación de Gauss La matriz aumentada del sistema es: 3 2 6 1 5 Primero se triangulariza la matriz: Multiplicando

Más detalles

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos 1! 1. Algoritmos recursivos " 1.1 Algoritmos recursivos. Recursión simple " 1.2 Algoritmos con vuelta atrás y ejemplos! 2. Complejidad de

Más detalles

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO FACULTAD DE ECONOMIA LICENCIATURA DE ACTUARIA Algebra Lineal Práctica: Matriz inversa 1 M. en I. Elizabeth Almazán Torres 2 Resultado de Aprendizaje El estudiante

Más detalles

Programación dinámica: un último ejemplo

Programación dinámica: un último ejemplo Programación dinámica: un último ejemplo Dado: matrices A m n, B n r, C r s de números enteros Para calcular A m n B n r el algoritmo usual realiza m n r multiplicaciones de números enteros Cuántas multiplicaciones

Más detalles

<tipo> Tipo de dato de los elementos del vector

<tipo> Tipo de dato de los elementos del vector Vectores y matrices Declaración Vector (array unidimiensional): []; Tipo de dato de los elementos del vector Identificador de la variable.

Más detalles

Divide y vencerás. Dr. Eduardo A. RODRÍGUEZ TELLO. 7 de marzo de CINVESTAV-Tamaulipas

Divide y vencerás. Dr. Eduardo A. RODRÍGUEZ TELLO. 7 de marzo de CINVESTAV-Tamaulipas Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 7 de marzo de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Divide y vencerás 7 de marzo de 2018 1 / 50 1 Divide y vencerás Dr. Eduardo RODRÍGUEZ T. (CINVESTAV)

Más detalles

Técnicas de diseño de algoritmos Divide y Vencerás

Técnicas de diseño de algoritmos Divide y Vencerás Técnicas de diseño de algoritmos Divide y Vencerás Luis Javier Rodríguez Fuentes Amparo Varona Fernández Departamento de Electricidad y Electrónica Facultad de Ciencia y Tecnología, UPV/EHU luisjavier.rodriguez@ehu.es

Más detalles

Geometría. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012

Geometría. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012 Geometría Leopoldo Taravilse Francisco Roslán Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Training Camp 2012 Leopoldo Taravilse, Francisco Roslán (UBA) Geometría TC 2012 1 / 30

Más detalles

Algoritmos en teoría de números

Algoritmos en teoría de números Algoritmos en teoría de números IIC2283 IIC2283 Algoritmos en teoría de números 1 / 92 Para recordar: aritmética modular Dados dos números a, b Z, si b > 0 entonces existen α, β Z tales que 0 β < b y a

Más detalles

Unidad 2. Matrices Conceptos básicos 2.2. Operaciones con matrices 2.3. Matriz Inversa 2.4. El método de Gauss-Jordan 2.5.

Unidad 2. Matrices Conceptos básicos 2.2. Operaciones con matrices 2.3. Matriz Inversa 2.4. El método de Gauss-Jordan 2.5. Unidad. Matrices.. Conceptos básicos.. Operaciones con matrices.. Matriz Inversa.. El método de Gauss-Jordan.. Aplicaciones Objetivos particulares de la unidad Al culminar el aprendizaje de la unidad,

Más detalles

1. Introducción al análisis de algoritmos

1. Introducción al análisis de algoritmos 1. Introducción al análisis de algoritmos 1. Introducción al concepto de algoritmia 2. Eficiencia de un algoritmo 3. Notación asintótica 4. Reglas generales Bibliografía Brassard y Bratley, 97; capítulos

Más detalles

Concentración de Medida en Algoritmos Aleatorizados.

Concentración de Medida en Algoritmos Aleatorizados. Concentración de Medida en Algoritmos Aleatorizados. Nicolás Rivera 23 de Junio de 2011 Pontificia Universidad Católica de Chile Índice 1 Introducción Concentración de Medida Índice 1 Introducción Concentración

Más detalles

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani Introducción Introducción Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Algoritmos y Algoritmia Problemas e instancias Primer Cuatrimestre 2014 Algoritmos

Más detalles

Programación II. Mario Aldea Rivas Programación II 13/04/11 1. Mario Aldea Rivas Programación II 13/04/11 2

Programación II. Mario Aldea Rivas Programación II 13/04/11 1. Mario Aldea Rivas Programación II 13/04/11 2 Programación II Bloque temático 1. Lenguajes de programación Bloque temático 2. Metodología de programación Bloque temático 3. Esquemas algorítmicos Tema 4. Introducción a los Algoritmos Tema 5. Algoritmos

Más detalles

Capítulo VI. Algoritmos: Ordenamiento

Capítulo VI. Algoritmos: Ordenamiento Capítulo VI Algoritmos: Ordenamiento VI.1. Algoritmos Un algoritmo es una secuencia de instrucciones precisas para llevar a cabo una tarea. Ya hemos visto algunos ejemplos: un algoritmo para resolver el

Más detalles

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot Algoritmos de ordenación Análisis y Diseño de Algoritmos Algoritmos de ordenación Algoritmos básicos: Θ(n 2 ) Ordenación por inserción Ordenación por selección Ordenación por intercambio directo (burbuja)

Más detalles

Capítulo 2. Determinantes Introducción. Definiciones

Capítulo 2. Determinantes Introducción. Definiciones Capítulo 2 Determinantes 2.1. Introducción. Definiciones Si nos centramos en la resolución de un sistema A x = b con A una matriz n n, podemos calcular A 1 y la resolución es inmendiata. El problema es

Más detalles