6 Introducción al Análisis de Algoritmos
|
|
- Juan Carlos Cabrera Montoya
- hace 5 años
- Vistas:
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
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
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
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 =
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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?
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
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?
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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/
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
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
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
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
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
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,
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,
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
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
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
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
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
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)
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
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á
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
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
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
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
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
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
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
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
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
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,
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
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
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
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.
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
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:
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
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
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
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
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
<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.
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)
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
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
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
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,
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
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
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
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
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
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)
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