Programación Dinámica
|
|
|
- Laura Serrano Río
- hace 8 años
- Vistas:
Transcripción
1 Programación Dinámica Agustín Santiago Gutiérrez, Juan Cruz Piñero Facultad de Ciencias Exactas y Naturales - Universidad de Buenos Aires Facultad de Informática - Universidad Nacional del Comahue Training Camp 2017 Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
2 Contenidos 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
3 Contenidos Programación Dinámica Recursión 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
4 Programación Dinámica Sucesión de Fibonacci Recursión Sucesión de Fibonacci La sucesión de Fibonacci se define como f 0 = 1, f 1 = 1 y f n+2 = f n + f n+1 para todo n 0 Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
5 Programación Dinámica Sucesión de Fibonacci Recursión Sucesión de Fibonacci La sucesión de Fibonacci se define como f 0 = 1, f 1 = 1 y f n+2 = f n + f n+1 para todo n 0 Cómo podemos computar el término 100 de la sucesión de Fibonacci? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
6 Programación Dinámica Sucesión de Fibonacci Recursión Sucesión de Fibonacci La sucesión de Fibonacci se define como f 0 = 1, f 1 = 1 y f n+2 = f n + f n+1 para todo n 0 Cómo podemos computar el término 100 de la sucesión de Fibonacci? Cómo podemos hacerlo eficientemente? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
7 Programación Dinámica Algoritmos recursivos Recursión Definición Un algoritmo se dice recursivo si calcula instancias de un problema en función de otras instancias del mismo problema hasta llegar a un caso base, que suele ser una instancia pequeña del problema, cuya respuesta generalmente está dada en el algoritmo y no es necesario calcularla. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
8 Programación Dinámica Algoritmos recursivos Recursión Definición Un algoritmo se dice recursivo si calcula instancias de un problema en función de otras instancias del mismo problema hasta llegar a un caso base, que suele ser una instancia pequeña del problema, cuya respuesta generalmente está dada en el algoritmo y no es necesario calcularla. Ejemplo Para calcular el factorial de un número, un posible algoritmo es calcular Factorial(n) como Factorial(n 1) n si n 1 o 1 si n = 0 Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
9 Programación Dinámica Algoritmos recursivos Recursión Definición Un algoritmo se dice recursivo si calcula instancias de un problema en función de otras instancias del mismo problema hasta llegar a un caso base, que suele ser una instancia pequeña del problema, cuya respuesta generalmente está dada en el algoritmo y no es necesario calcularla. Ejemplo Para calcular el factorial de un número, un posible algoritmo es calcular Factorial(n) como Factorial(n 1) n si n 1 o 1 si n = 0 Veamos como calcular el n-ésimo fibonacci con un algoritmo recursivo Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
10 Programación Dinámica Recursión Cálculo Recursivo de Fibonacci 1 int fibo( int n) 2 { 3 i f (n<=1) 4 return 1; 5 else 6 return fibo(n 2)+fibo(n 1); 7 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
11 Programación Dinámica Recursión Cálculo Recursivo de Fibonacci 1 int fibo( int n) 2 { 3 i f (n<=1) 4 return 1; 5 else 6 return fibo(n 2)+fibo(n 1); 7 } Notemos que fibo(n) llama a fibo(n 2), pero después vuelve a llamar a fibo(n 2) para calcular fibo(n 1), y a medida que va decreciendo el parámetro que toma fibo son más las veces que se llama a la función fibo con ese parámetro. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
12 Programación Dinámica Problemas de la recursión Recursión La función que usamos para calcular Fibonacci tiene un problema. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
13 Programación Dinámica Problemas de la recursión Recursión La función que usamos para calcular Fibonacci tiene un problema. Llamamos muchas veces a la misma función con los mismos parámetros Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
14 Programación Dinámica Problemas de la recursión Recursión La función que usamos para calcular Fibonacci tiene un problema. Llamamos muchas veces a la misma función con los mismos parámetros Básicamente tenemos problemas de memoria. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
15 Programación Dinámica Problemas de la recursión Recursión La función que usamos para calcular Fibonacci tiene un problema. Llamamos muchas veces a la misma función con los mismos parámetros Básicamente tenemos problemas de memoria. Podemos solucionar esto? Podemos hacer que la función sea llamada pocas veces para cada parámetro? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
16 Programación Dinámica Problemas de la recursión Recursión La función que usamos para calcular Fibonacci tiene un problema. Llamamos muchas veces a la misma función con los mismos parámetros Básicamente tenemos problemas de memoria. Podemos solucionar esto? Podemos hacer que la función sea llamada pocas veces para cada parámetro? Para lograr resolver este problema, vamos a introducir el concepto de programación dinámica Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
17 Contenidos Programación Dinámica Programación Dinámica 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
18 Programación Dinámica Programación dinámica Programación Dinámica But do not despise the lore that has come down from distant years; for oft it may chance that old wives keep in memory word of things that once were needful for the wise to know. Celeborn the Wise, The Fellowship of the Ring, J. R. R. Tolkien La programación dinámica consiste, esencialmente, en una recursión con una suerte de memorización o cache. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
19 Programación Dinámica Programación dinámica Programación Dinámica Visión tradicional: La programación dinámica es una técnica que consiste en: Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
20 Programación Dinámica Programación dinámica Programación Dinámica Visión tradicional: La programación dinámica es una técnica que consiste en: Dividir un problema en dos o más subproblemas o reducirlo a una instancia más fácil de calcular del problema. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
21 Programación Dinámica Programación dinámica Programación Dinámica Visión tradicional: La programación dinámica es una técnica que consiste en: Dividir un problema en dos o más subproblemas o reducirlo a una instancia más fácil de calcular del problema. Resolver las instancias de cada subproblema de la misma manera (dividiendo en subproblemas o reduciendo a otra instancia) hasta llegar a un caso base. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
22 Programación Dinámica Programación dinámica Programación Dinámica Visión tradicional: La programación dinámica es una técnica que consiste en: Dividir un problema en dos o más subproblemas o reducirlo a una instancia más fácil de calcular del problema. Resolver las instancias de cada subproblema de la misma manera (dividiendo en subproblemas o reduciendo a otra instancia) hasta llegar a un caso base. Guardar el resultado de cada instancia del problema la primera vez que se calcula, para que cada vez que se vuelva a necesitar el valor de esa instancia ya esté almacenado, y no sea necesario calcularlo nuevamente. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
23 Programación Dinámica Programación dinámica Programación Dinámica Visión tradicional: La programación dinámica es una técnica que consiste en: Dividir un problema en dos o más subproblemas o reducirlo a una instancia más fácil de calcular del problema. Resolver las instancias de cada subproblema de la misma manera (dividiendo en subproblemas o reduciendo a otra instancia) hasta llegar a un caso base. Guardar el resultado de cada instancia del problema la primera vez que se calcula, para que cada vez que se vuelva a necesitar el valor de esa instancia ya esté almacenado, y no sea necesario calcularlo nuevamente. Cómo hacemos para calcular una sóla vez una función para cada parámetro, por ejemplo, en el caso de Fibonacci? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
24 Programación Dinámica Programación Dinámica Cálculo de Fibonacci mediante Programación Dinámica 1 int fibo[100]; 2 int calcfibo( int n) 3 { 4 i f (fibo [n]!= 1) 5 return fibo [n] ; 6 fibo [n] = calcfibo(n 2)+calcFibo(n 1); 7 return fibo [n] ; 8 } 9 int main() 10 { 11 for ( int i=0;i <100;i++) 12 fibo [ i ] = 1; 13 fibo [0] = 1; 14 fibo [1] = 1; 15 int fibo50 = calcfibo(50); 16 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
25 Programación Dinámica Programación Dinámica Ventajas de la Programación Dinámica La función que vimos recién que usa programación dinámica tiene una ventaja con respecto a la versión recursiva que vimos anteriormente: Llama menos veces a cada función Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
26 Programación Dinámica Programación Dinámica Ventajas de la Programación Dinámica La función que vimos recién que usa programación dinámica tiene una ventaja con respecto a la versión recursiva que vimos anteriormente: Llama menos veces a cada función Para calcular calcfibo(n-1) necesita calcular calcfibo(n-2), pero ya lo calculamos antes, por lo que no es necesario volver a llamar a calcfibo(n-3) y calcfibo(n-4) Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
27 Programación Dinámica Programación Dinámica Ventajas de la Programación Dinámica La función que vimos recién que usa programación dinámica tiene una ventaja con respecto a la versión recursiva que vimos anteriormente: Llama menos veces a cada función Para calcular calcfibo(n-1) necesita calcular calcfibo(n-2), pero ya lo calculamos antes, por lo que no es necesario volver a llamar a calcfibo(n-3) y calcfibo(n-4) Así podemos calcular calcfibo(50) mucho más rápido ya que este algoritmo es lineal mientras que el anterior era exponencial. Esta forma particularmente sencilla de implementar programación dinámica, es decir, mediante el agregado al código exacto de la recursión ingenua, un par de líneas para guardar y leer respuestas previas de la cache, se llama memoización (del inglés memoization). Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
28 Programación Dinámica Números combinatorios Programación Dinámica Ejemplo Otro ejemplo de un problema que puede ser resuelto mediante programación dinámica es el de los números combinatorios Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
29 Programación Dinámica Números combinatorios Programación Dinámica Ejemplo Otro ejemplo de un problema que puede ser resuelto mediante programación dinámica es el de los números combinatorios Cómo lo calculamos El combinatorio ( ) n k se puede calcular como n! k!(n k)!, pero si en lugar de un único combinatorio queremos precalcular una tabla completa de combinatorios, lo más práctico es usar el procedimiento del triángulo de pascal. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
30 Programación Dinámica Programación Dinámica Calculo recursivo del número combinatorio Algoritmo recursivo 1 int comb( int n, int k) 2 { 3 i f (k==0 k==n) 4 return 1; 5 else 6 return comb(n 1,k 1)+comb(n 1,k) ; 7 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
31 Programación Dinámica Programación Dinámica Calculo recursivo del número combinatorio Algoritmo recursivo 1 int comb( int n, int k) 2 { 3 i f (k==0 k==n) 4 return 1; 5 else 6 return comb(n 1,k 1)+comb(n 1,k) ; 7 } Este algoritmo tiene un problema. Cuál es el problema? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
32 Programación Dinámica Programación Dinámica Calculo recursivo del número combinatorio Algoritmo recursivo 1 int comb( int n, int k) 2 { 3 i f (k==0 k==n) 4 return 1; 5 else 6 return comb(n 1,k 1)+comb(n 1,k) ; 7 } Este algoritmo tiene un problema. Cuál es el problema? Calcula muchas veces el mismo número combinatorio. Cómo arreglamos esto? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
33 Programación Dinámica Programación Dinámica Número combinatorio calculado con programación dinámica Algoritmo con Programación Dinámica 1 int comb[100][100]; 2 void llenartablacombinatorioshasta( int n) 3 { 4 for ( int i = 0; i <= n; i++) 5 { 6 comb[ i ][0] = comb[ i ] [ i ] = 1; 7 for ( int k = 1; k < i ; k++) 8 comb[ i ] [k] = comb[ i 1][k] + comb[ i 1][k 1]; 9 } 10 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
34 Programación Dinámica Programación Dinámica Número combinatorio calculado con programación dinámica (continuado) Este algoritmo no utiliza memoización (según algunos autores, esta forma bottom-up es programación dinámica, pero memoización no). Esta forma es mucho más eficiente que memoización, cuando se calculan la mayoría de las entradas de la tabla cache. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
35 Programación Dinámica Superposición de subproblemas Programación Dinámica Los dos ejemplos vistos presentan una característica típica de la programación dinámica: La superposición de subproblemas. El beneficio de la programación dinámica se da justamente porque evitamos recalcular subproblemas que se superponen. Sin superposición de subproblemas, podríamos usar programación dinámica, pero la complejidad extra de la cache no aportaría nada, porque nunca se reutilizaría un subproblema ya calculado, y podríamos haber usado directamente una recursión común (divide and conquer). Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
36 Contenidos Programación Dinámica Principio de Optimalidad 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
37 Programación Dinámica Otro tipo de problemas Principio de Optimalidad Hasta ahora vimos problemas en los que hay que calcular una cantidad determinada. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
38 Programación Dinámica Otro tipo de problemas Principio de Optimalidad Hasta ahora vimos problemas en los que hay que calcular una cantidad determinada. En algunos casos lo que tenemos que calcular es el mínimo o máximo de alguna función objetivo, sobre un conjunto de soluciones posibles, es decir, resolver un problema de optimización. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
39 Programación Dinámica Otro tipo de problemas Principio de Optimalidad Hasta ahora vimos problemas en los que hay que calcular una cantidad determinada. En algunos casos lo que tenemos que calcular es el mínimo o máximo de alguna función objetivo, sobre un conjunto de soluciones posibles, es decir, resolver un problema de optimización. En estos casos para poder usar programación dinámica necesitamos asegurarnos de que la solución de los subproblemas sea parte de la solución de la instancia original del problema. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
40 Programación Dinámica Principio de optimalidad Principio de Optimalidad Definición Se dice que un problema cumple el principio de optimalidad de Bellman cuando en una o más partes de una solución óptima al mismo, debe aparecer necesariamente una solución óptima a un subproblema. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
41 Programación Dinámica Principio de optimalidad Principio de Optimalidad Definición Se dice que un problema cumple el principio de optimalidad de Bellman cuando en una o más partes de una solución óptima al mismo, debe aparecer necesariamente una solución óptima a un subproblema. Bellman, quien estudió la programación dinámica en 1953, afirmó que el principio de optimalidad es un requisito indispensable para poder aplicar esta técnica. Notar que justamente es el principio de optimalidad lo que nos permite utilizar recursión. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
42 Programación Dinámica Principio de optimalidad Principio de Optimalidad Definición Se dice que un problema cumple el principio de optimalidad de Bellman cuando en una o más partes de una solución óptima al mismo, debe aparecer necesariamente una solución óptima a un subproblema. Bellman, quien estudió la programación dinámica en 1953, afirmó que el principio de optimalidad es un requisito indispensable para poder aplicar esta técnica. Notar que justamente es el principio de optimalidad lo que nos permite utilizar recursión. Veamos un ejemplo de problema clásico. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
43 Programación Dinámica Viaje óptimo en matriz Principio de Optimalidad Supongamos que tenemos una matriz de n m, con números enteros, y queremos encontrar el camino de la esquina superior-izquierda, a la esquina inferior-derecha, que maximice la suma de las casillas recorridas. El camino está restringido a utilizar únicamente movimientos de tipo derecha y abajo. Cómo resolveríamos este problema? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
44 Programación Dinámica Viaje óptimo en matriz Principio de Optimalidad Supongamos que tenemos una matriz de n m, con números enteros, y queremos encontrar el camino de la esquina superior-izquierda, a la esquina inferior-derecha, que maximice la suma de las casillas recorridas. El camino está restringido a utilizar únicamente movimientos de tipo derecha y abajo. Cómo resolveríamos este problema? f (x, y) = M x,y + max(f (x 1, y), f (x, y 1)) f (1, y) = M 1,y + f (1, y 1)) f (x, 1) = M x,1 + f (x 1, 1)) f (1, 1) = M 1,1 Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
45 Programación Dinámica Viaje óptimo en matriz (camino) Principio de Optimalidad La recursión anterior lleva a un algoritmo de programación dinámica para calcular la suma óptima en el recorrido. Pero cómo recuperaríamos el camino en sí? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
46 Programación Dinámica Viaje óptimo en matriz (camino) Principio de Optimalidad La recursión anterior lleva a un algoritmo de programación dinámica para calcular la suma óptima en el recorrido. Pero cómo recuperaríamos el camino en sí? Y si quisiéramos el camino lexicográficamente mínimo? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
47 Programación Dinámica Viaje óptimo en matriz (camino) Principio de Optimalidad La recursión anterior lleva a un algoritmo de programación dinámica para calcular la suma óptima en el recorrido. Pero cómo recuperaríamos el camino en sí? Y si quisiéramos el camino lexicográficamente mínimo? Y si quisiéramos el camino número 420 en orden lexicográfico? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
48 Programación Dinámica Viaje óptimo en matriz (camino) Principio de Optimalidad La recursión anterior lleva a un algoritmo de programación dinámica para calcular la suma óptima en el recorrido. Pero cómo recuperaríamos el camino en sí? Y si quisiéramos el camino lexicográficamente mínimo? Y si quisiéramos el camino número 420 en orden lexicográfico? Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
49 Contenidos Programación Dinámica Visión constructiva 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
50 Programación Dinámica Visión constructiva de DP Visión constructiva En el ejemplo anterior, nos encontramos con que definimos la recursión de una cierta manera, pero después nos quedó al revés. Notar que si solamente quisiéramos calcular el resultado (numerito), daría lo mismo el orden o la recursión concreta. El problema surge al querer reconstruir el camino: Tenemos en mente un procedimiento de construcción de la solución Ese procedimiento está formado por una secuencia ordenada de pasos, que son parte del problema y queremos ser capaces de reconstruir Cada paso transforma un estado intermedio (o subproblema) en otro, durante el proceso de construcción de la solución. Pero nada de esto fue tenido en cuenta cuando pensamos la construcción! Por lo tanto, si nos importa reconstruir o razonar sobre el camino, se puede pensar programación dinámica de otra forma. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
51 Programación Dinámica Visión constructiva Visión constructiva de DP (continuado) Identificamos un proceso de construcción de la solución, identificando estados y transiciones. El estado debe contener toda la información relevante que necesitaremos para poder decidir las transiciones óptimas. Las transiciones posibles no deben producir ciclos, (o nuestra recursión se volvería infinita). Ahora cada estado se corresponde a una entrada en la tabla o cache de nuestro algoritmo de DP, y las transiciones vienen dadas por las llamadas recursivas. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
52 Programación Dinámica Visión constructiva Visión constructiva de DP (continuado) Si aplicamos esto al problema anterior, la función y estados nos quedan al revés que antes: Esto es de atrás para adelante, pero notar que nos permite reconstruir el camino en el orden natural. Ahora sí podemos encontrar el camino lexicográficamente mínimo! También podemos encontrar si utilizamos este orden, el camino 420 en orden lexicográfico, pero dejemos eso para más adelante. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
53 Contenidos Programación Dinámica 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
54 Programación Dinámica Mismo problema de antes, pero ahora podemos hacer hasta K movimientos del tipo izquierda. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
55 Programación Dinámica Mismo problema de antes, pero ahora podemos hacer hasta K movimientos del tipo izquierda. Mismo problema de arriba, pero además podemos usar hasta W elefantes mágicos, que nos permiten hacer un movimiento de alfil de ajedrez en la matriz. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
56 Programación Dinámica Mismo problema de antes, pero ahora podemos hacer hasta K movimientos del tipo izquierda. Mismo problema de arriba, pero además podemos usar hasta W elefantes mágicos, que nos permiten hacer un movimiento de alfil de ajedrez en la matriz. Mismo problema de arriba, pero además podemos usar hasta Z globos aerostáticos, que nos permiten hacer un movimiento de torre de ajedrez en la matriz. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
57 (más) Programación Dinámica Subset sum: Dados n números enteros positivos, decidir si se puede obtener una suma S usando algunos de ellos (a lo sumo una vez cada uno). Knapsack o problema de la mochila: Dados objetos con peso y valor, queremos meter el máximo valor posible en una mochila que soporta hasta P de peso. Resolvamos ambos pensándolos de la manera constructiva ( Por ejemplo, porque nos piden la solución lexicográficamente más chica, y no queremos tener que reescribir todo al final porque nos quedó al revés!) Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
58 Resumiendo Programación Dinámica Hemos visto dos maneras de pensar la programación dinámica: Tradicional (recursiva) Pensando en un proceso de construcción de solución (constructiva) Si solo interesa el numerito, usar cualquier opción de las anteriores (la que resulte más natural o fácil). Si interesa reconstruir el camino, y muy especialmente si interesa algún camino en orden lexicográfico, pensarlo de la manera constructiva puede ser útil. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
59 Programación Dinámica Resumiendo (continuado) Y dos maneras de implementarla: Memoización (La más fácil, no hay que pensar en qué orden iterar los subproblemas. Buena cuando solo se usan algunos pocos subproblemas, difíciles de caracterizar o iterar) Bottom-up (Más eficiente si se usan casi todos los estados posibles, pero requiere poder iterar todos los estados relevantes, y pensar con cuidado el orden de recorrida) Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
60 Contenidos Programación Dinámica Problemas 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
61 Problemas Programación Dinámica Problemas Algunos problemas para practicar programación dinámica Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
62 Contenidos Dinámicas en rangos Introducción 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
63 Introducción Dinámicas en rangos Introducción El patrón de Dinámicas en rangos es un patrón típico que aparece mucho. Consiste en estados (o subproblemas) de la forma (a, b), es decir, intervalos o rangos. Lo mejor es estudiar algunos ejemplos concretos. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
64 Contenidos Dinámicas en rangos 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
65 ABB óptimo Dinámicas en rangos Dada una secuencia de valores ordenados v 1 < v 2 < < v n, junto a sus frecuencias o probabilidades de aparición f 1,, f n, dar un algoritmo que compute un árbol binario de búsqueda que minimice el tiempo (cantidad de comparaciones realizadas = profundidad) esperado para encontrar un elemento. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
66 Parentesis Dinámicas en rangos Dada una cadena de caracteres {, }, [, ], ( y ), de longitud par, dar la mínima cantidad de reemplazos de caracteres que se le deben realizar a este string para dejar una secuencia bien parenteseada. Una secuencia bien parenteseada T se puede formar con las siguientes reglas a partir de secuencias bien parenteseadas S y S 2 : T = T = SS 2 T = (S) T = [S] T = {S} Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
67 Contenidos Dinámicas en rangos Tarea 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
68 Tarea Dinámicas en rangos Tarea Problema de la IOI de México day2/mexico/mexico.pdf Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
69 Contenidos Máscaras de bits Iterando sobre subconjuntos 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
70 Subconjuntos Máscaras de bits Iterando sobre subconjuntos Subconjuntos de un conjunto Es muy común que aparezcan problemas en los que hay que iterar sobre los subconjuntos de un conjunto, y que para calcular una función sobre un subconjunto haya que calcularla previamente sobre sus subconjuntos, para esto utilizamos programación dinámica. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
71 Subconjuntos Máscaras de bits Iterando sobre subconjuntos Subconjuntos de un conjunto Es muy común que aparezcan problemas en los que hay que iterar sobre los subconjuntos de un conjunto, y que para calcular una función sobre un subconjunto haya que calcularla previamente sobre sus subconjuntos, para esto utilizamos programación dinámica. Problema de los Peces Hay n peces en el mar. Cada un minuto se encuentran dos peces al azar (todos los pares de peces tienen la misma probabilidad) y si los peces que se encuentran son el pez i y el pez j, entonces el pez i se come al pez j con probabilidad p[i][j] y el pez j se come al pez i con probabilidad p[j][i]. Sabemos que p[i][j] + p[j][i] = 1 si i j y p[i][i] = 0 para todo i. Cual es la probabilidad de que sobreviva el pez 0? Sabemos que hay a lo sumo 18 peces. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
72 Máscaras de bits Máscaras de bits Iterando sobre subconjuntos Podemos iterar sobre los subconjuntos de un conjunto usando vectores que tengan los elementos del conjunto y crear vectores con todos los subconjuntos, pero esto es muy caro en tiempo y memoria. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
73 Máscaras de bits Máscaras de bits Iterando sobre subconjuntos Podemos iterar sobre los subconjuntos de un conjunto usando vectores que tengan los elementos del conjunto y crear vectores con todos los subconjuntos, pero esto es muy caro en tiempo y memoria. Un subconjunto de un conjunto se caracteriza por tener (1) o no tener (0) a cada elemento del conjunto. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
74 Máscaras de bits Máscaras de bits Iterando sobre subconjuntos Podemos iterar sobre los subconjuntos de un conjunto usando vectores que tengan los elementos del conjunto y crear vectores con todos los subconjuntos, pero esto es muy caro en tiempo y memoria. Un subconjunto de un conjunto se caracteriza por tener (1) o no tener (0) a cada elemento del conjunto. Por ejemplo, si tenemos un conjunto de 10 elementos, sus subconjuntos pueden ser representados como números entre 0 y 1023 (2 10 1). Para cada número, si el i-ésimo bit en su representación binaria es un 1 lo interpretamos como que el i-ésimo pez del conjunto está en el subconjunto representado por ese número. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
75 Máscaras de bits Máscaras de bits Iterando sobre subconjuntos Cuando un número representa un subconjunto de un conjunto según los ceros o unos de su representación binaria se dice que este número es una máscara de bits Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
76 Máscaras de bits Máscaras de bits Iterando sobre subconjuntos Cuando un número representa un subconjunto de un conjunto según los ceros o unos de su representación binaria se dice que este número es una máscara de bits Para ver si un número a representa un subconjunto del subconjunto que representa un número b tenemos que chequear que bit a bit si hay un 1 en a hay entonces un 1 en b Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
77 Máscaras de bits Máscaras de bits Iterando sobre subconjuntos Cuando un número representa un subconjunto de un conjunto según los ceros o unos de su representación binaria se dice que este número es una máscara de bits Para ver si un número a representa un subconjunto del subconjunto que representa un número b tenemos que chequear que bit a bit si hay un 1 en a hay entonces un 1 en b Esto se puede chequear viendo que a OR b sea igual a b donde OR representa al OR bit a bit Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
78 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos Para resolver el problema de los peces, podemos tomar cada subconjunto de peces, y ver qué pasa ante cada opción de que un pez se coma a otro. Esto nos genera un nuevo subconjunto de peces para el cual resolver el problema. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
79 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos Para resolver el problema de los peces, podemos tomar cada subconjunto de peces, y ver qué pasa ante cada opción de que un pez se coma a otro. Esto nos genera un nuevo subconjunto de peces para el cual resolver el problema. Cuando llegamos a un subconjunto de un sólo pez, si el pez es el pez 0, entonces la probabilidad de que sobreviva el pez 0 es 1, sino es 0. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
80 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos Para resolver el problema de los peces, podemos tomar cada subconjunto de peces, y ver qué pasa ante cada opción de que un pez se coma a otro. Esto nos genera un nuevo subconjunto de peces para el cual resolver el problema. Cuando llegamos a un subconjunto de un sólo pez, si el pez es el pez 0, entonces la probabilidad de que sobreviva el pez 0 es 1, sino es 0. En cada paso, la probabilidad de que sobreviva el pez 0 es, la probabilidad de reducir el problema a otro subconjunto, por la probabilidad de que sobreviva dado ese subconjunto. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
81 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos 1 double dp[1<<18]; 2 int n; 3 double p[18][18]; 4 5 int main() 6 { 7 forn( i,(1<<18)) 8 dp[ i ] = 1; 9 cin >> n; 10 forn( i,n) 11 forn( j,n) 12 cin >> p[ i ] [ j ] ; 13 printf ( " %.6l f \n", f((1<<n) 1)) ; 14 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
82 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos 1 double f ( int mask) { 2 i f (dp[mask] > 0.5) return dp[mask] ; 3 int vivos = 0; 4 forn( i,n) i f ((mask>>i ) %2==1) vivos++; 5 double pares = (vivos (vivos 1)) /2; 6 i f (vivos==1) { 7 i f (mask==1) dp[mask] = 1.; 8 else dp[mask] = 0.; 9 return dp[mask] ; 10 } 11 dp[mask] = 0.; 12 forn( i,n) forn( j, i ) i f ((mask>>i ) %2==1&&(mask>>j ) %2==1) { 13 i f ( i!=0 && j!=0) dp[mask] += ( f (mask^(1<<i ) ) p[ j ] [ i ]+f (mask^(1<<j ) ) p[ i ] [ j ]) /pares; 14 else i f ( i==0) dp[mask] += f (mask^(1<<j ) ) p[ i ] [ j ] /pares; 15 else i f ( j==0) dp[mask] += f (mask^(1<<i ) ) p[ j ] [ i ] /pares; 16 } 17 return dp[mask] [pez] ; 18 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
83 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos Supongamos que ahora tenemos que resolver el mismo problema, pero en lugar de para un sólo pez, para todos los peces. Podríamos usar el mismo código y resolver el problema 18 veces, pero hay algo más eficiente. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
84 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos Supongamos que ahora tenemos que resolver el mismo problema, pero en lugar de para un sólo pez, para todos los peces. Podríamos usar el mismo código y resolver el problema 18 veces, pero hay algo más eficiente. Lo que hicimos anteriormente fue movernos de un conjunto a sus subconjuntos. Lo que vamos a hacer ahora es movernos de un conjunto a sus superconjuntos. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
85 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos 1 double dp[1<<18]; 2 int n; 3 double p[18][18]; 4 5 int main() 6 { 7 cin >> n; 8 forn( i,n) 9 forn( j,n) 10 cin >> p[ i ] [ j ] ; 11 forn( i,(1<<n) ) 12 dp[ i ] = 1; 13 dp[(1<<n) 1] = 1.; 14 forn( i,n) 15 printf ( " %.6l f \n", f(1<<i ) ) ; 16 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
86 Máscaras de bits Problema de los Peces Iterando sobre subconjuntos 1 double f ( int mask) 2 { 3 i f (dp[mask]> 0.5) 4 return dp[mask] ; 5 dp[mask] = 0; 6 int vivos = 1; 7 forn( i,n) 8 i f ((mask>>i ) %2==1) 9 vivos++; 10 double pares = (vivos (vivos 1)) /2; 11 forn( i,n) 12 forn( j,n) 13 { 14 i f ((mask&(1<<i ) )!=0&&(mask&(1<<j ) )==0) 15 dp[mask] += f (mask (1<< j ) ) p[ i ] [ j ] /pares; 16 } 17 return dp[mask] ; 18 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
87 Contenidos Máscaras de bits 1 Programación Dinámica Recursión Programación Dinámica Principio de Optimalidad Visión constructiva Problemas 2 Dinámicas en rangos Introducción Tarea 3 Máscaras de bits Iterando sobre subconjuntos 4 Longest Increasing Subsequence 5 Bonus track Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
88 Máscaras de bits Compañeros de grupo Enunciado En una clase hay 2n alumnos (n 8) y tienen que hacer trabajos prácticos en grupos de a 2. El i-ésimo alumno vive en el punto (x i, y i ) de la ciudad y tarda (x i x j ) 2 + (y i y j ) 2 minutos en llegar a la casa del j-ésimo alumno. El profesor sabe que los alumnos se reunen para hacer los trabajos prácticos en la casa de uno de los dos miembros del grupo. Por eso decide que la suma de las distancias entre compañeros de grupo debe ser mínima. Dar esta distancia. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
89 Máscaras de bits Compañeros de grupo Enunciado En una clase hay 2n alumnos (n 8) y tienen que hacer trabajos prácticos en grupos de a 2. El i-ésimo alumno vive en el punto (x i, y i ) de la ciudad y tarda (x i x j ) 2 + (y i y j ) 2 minutos en llegar a la casa del j-ésimo alumno. El profesor sabe que los alumnos se reunen para hacer los trabajos prácticos en la casa de uno de los dos miembros del grupo. Por eso decide que la suma de las distancias entre compañeros de grupo debe ser mínima. Dar esta distancia. Como son 16 alumnos podemos iterar sobre los subconjuntos, en cada paso tomamos una máscara y le sacamos dos bits (que representan dos alumnos). Resolvemos el problema con la nueva máscara y le sumamos la distancia entre la casa de esos dos alumnos. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
90 Máscaras de bits Problema del viajante de comercio Enunciado Un viajante debe recorrer n 20 ciudades exactamente una vez cada una, formando un ciclo para vender sus productos en cada ciudad. Conociendo la tabla de distancias entre cada par de ciudades, proponer un ciclo que minimice la longitud total recorrida. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
91 Máscaras de bits Problema del viajante de comercio Enunciado Un viajante debe recorrer n 20 ciudades exactamente una vez cada una, formando un ciclo para vender sus productos en cada ciudad. Conociendo la tabla de distancias entre cada par de ciudades, proponer un ciclo que minimice la longitud total recorrida. Podemos encontrar una solución O(2 n n 2 ) utilizando programación dinámica. Notar que esto es muchísimo mejor que el sencillo O(n!). Como estado podemos tomar la ciudad actual, y el conjunto (máscara) de las ciudades ya recorridas, asumiendo que se empezó de una ciudad fija arbitraria. n 2 n n 2 n! Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
92 Tarea Máscaras de bits Tutorial de topcoder: A bit of fun: fun with bits, por Bruce Merry d1=tutorials&d2=bitmanipulation problem&problem= Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
93 Longest Increasing Subsequence Subsecuencia creciente más larga Subsecuencia creciente más larga El problema consiste en, dada una secuencia de números, encontrar la subsecuencia de números que aparezcan de manera creciente y que sea lo más larga posible. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
94 Longest Increasing Subsequence Subsecuencia creciente más larga Subsecuencia creciente más larga El problema consiste en, dada una secuencia de números, encontrar la subsecuencia de números que aparezcan de manera creciente y que sea lo más larga posible. Solución cuadrática La solución trivial a este problema consiste en calcular en cada paso, la subsecuencia creciente más larga que usa los primeros i números de la secuencia, recorriendo la solución para todos los j < i. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
95 Longest Increasing Subsequence Subsecuencia creciente más larga Existe una solución O(n log n) donde n es la longitud de la secuencia. Para implementar esa solución vamos a tener tres vectores: el input (al que llamamos seq), m y p. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
96 Longest Increasing Subsequence Subsecuencia creciente más larga Existe una solución O(n log n) donde n es la longitud de la secuencia. Para implementar esa solución vamos a tener tres vectores: el input (al que llamamos seq), m y p. En la i-ésima iteración, vamos a tener en m[j] un k < i tal que hay una subsecuencia de largo j que termina en k, con seq[k] mínimo, mientras que m[0] comienza inicializado en -1. Observación: m está ordenado por los valores de seq[m[i]] (esto nos permite hacer búsqueda binaria en tales valores). Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
97 Longest Increasing Subsequence Subsecuencia creciente más larga Existe una solución O(n log n) donde n es la longitud de la secuencia. Para implementar esa solución vamos a tener tres vectores: el input (al que llamamos seq), m y p. En la i-ésima iteración, vamos a tener en m[j] un k < i tal que hay una subsecuencia de largo j que termina en k, con seq[k] mínimo, mientras que m[0] comienza inicializado en -1. Observación: m está ordenado por los valores de seq[m[i]] (esto nos permite hacer búsqueda binaria en tales valores). En la i-ésima posicion de p vamos a ir guardando el elemento anterior al i-ésimo en la subsecuencia creciente más larga que termina en el i-ésimo elemento del input. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
98 Longest Increasing Subsequence Subsecuencia creciente más larga 1 vector<int> lis () 2 { 3 int n = seq.size(), L = 0; m.resize(n+1); m[0] = 1; p.resize(n) ; 4 for ( int i =0;i<n; i++){ 5 int j = bs(l,seq[ i ]) ; 6 p[ i ] = m[ j ] ; 7 i f ( j==l input [ i ]<seq[m[ j +1]]){ 8 m[ j+1] = i ; 9 L = max(l, j+1); 10 } 11 } 12 vector<int> res; 13 int t = m[l] ; 14 while( t!= 1){ 15 res.push_back(seq[ t ]) ; 16 t = p[ t ] ; 17 } 18 reverse(res.begin(),res.end() ) ; 19 return res; 20 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
99 Longest Increasing Subsequence Subsecuencia creciente más larga 1 int bs( int L, int num) 2 { 3 int mx = L+1, mn = 0; 4 while(mx mn>1) 5 { 6 int mid = (mx+mn) /2; 7 i f (seq[m[mid]]<num) 8 mn = mid; 9 else 10 mx = mid; 11 } 12 return mn; 13 } Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
100 Longest Increasing Subsequence Subsecuencia creciente más larga Observemos que m va a estar definido para todo j < L y que m[j] está en el rango de vec para todo 0 < j L. Además en la búsqueda binaria nunca evaluamos seq[m[0]]. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
101 Longest Increasing Subsequence Subsecuencia creciente más larga Observemos que m va a estar definido para todo j < L y que m[j] está en el rango de vec para todo 0 < j L. Además en la búsqueda binaria nunca evaluamos seq[m[0]]. También podemos ver que p va a estar siempre definido para todo 0 i < n. Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
102 Tarea Longest Increasing Subsequence Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
103 Bonus track Cosas de las que se puede hablar si sobra tiempo y hay que llenar Dinámicas con frente. Cálculo de la iésima solución lexicográficamente Juan Cruz Piñero (UBA) Programación Dinámica TC / 61
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
Análisis de algoritmos
Tema 09: Programación dinámica Solicitado: Ejercicios 06: Programación dinámica de Fibonacci y Coeficientes Binomiales M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom
Complejidad computacional (Análisis de Algoritmos)
Definición. Complejidad computacional (Análisis de Algoritmos) Es la rama de las ciencias de la computación que estudia, de manera teórica, la optimización de los recursos requeridos durante la ejecución
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
Algoritmos glotones. mat-151
Algoritmos glotones (greedy) mat-151 Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 Algoritmos glotones Algoritmos utilizados en problemas de optimización. Estos algoritmos siguen típicamente
Ecuaciones Diofánticas
2 Ecuaciones Diofánticas (c) 2011 leandromarin.com 1. Introducción Una ecuación diofántica es una ecuación con coeficientes enteros y de la que tenemos que calcular las soluciones enteras. En este tema
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
Profesorado de Nivel Medio y Superior en Biología Matemática - 1º Cuatrimestre Año 2013 FUNCIÓN CUADRÁTICA
Matemática - º Cuatrimestre Año 0 FUNCIÓN CUADRÁTICA Hemos definido anteriormente la función lineal como una función f: R R de la forma f()a+b con a R y b R, que se representa en el plano mediante una
Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos
Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos
UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.
UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO Recursividad: La recursividad es una técnica de programación
El determinante de una matriz se escribe como. Para una matriz, el valor se calcula como:
Materia: Matemática de 5to Tema: Definición de Determinantes Marco Teórico Un factor determinante es un número calculado a partir de las entradas de una matriz cuadrada. Tiene muchas propiedades e interpretaciones
Algoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
1. (F, +) es un grupo abeliano, denominado el grupo aditivo del campo.
Capítulo 5 Campos finitos 5.1. Introducción Presentaremos algunos conceptos básicos de la teoría de los campos finitos. Para mayor información, consultar el texto de McEliece [61] o el de Lidl y Niederreiter
Colegio Universitario Boston
Función Lineal. Si f función polinomial de la forma o, donde y son constantes reales se considera una función lineal, en esta nos la pendiente o sea la inclinación que tendrá la gráfica de la función,
Programación dinámica p. 1
Técnicas de diseño de algoritmos Programación dinámica Dra. Elisa Schaeffer [email protected] PISIS / FIME / UANL Programación dinámica p. 1 Programación dinámica En programación dinámica, uno
Jueves, 30 de abril. Ejemplo de recursión. Ejemplo de PD. Ejemplo de programación dinámica. Programación dinámica
.0 Jueves, 0 de abril Programación dinámica. Recursión. Principio de optimalidad. Entregas: material de clase. Programación dinámica Transforma un problema de optimización complejo en una secuencia problemas
Estatutos de Control C# Estatutos de Decisión (Selección)
SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente
MatemáticaDiscreta&Lógica 1
MatemáticaDiscreta&Lógica 1 Sistemas de numeración Aylen Ricca Tecnólogo en Informática San José 2014 http://www.fing.edu.uy/tecnoinf/sanjose/index.html SISTEMAS DE NUMERACIÓN.::. Introducción. Podemos
Ecuaciones Lineales en Dos Variables
Ecuaciones Lineales en Dos Variables Una ecuación lineal en dos variables tiene la forma general a + b + c = 0; donde a, b, c representan números reales las tres no pueden ser iguales a cero a la misma
Representación de números enteros: el convenio exceso Z
Representación de números enteros: el convenio exceso Z Apellidos, nombre Martí Campoy, Antonio ([email protected]) Departamento Centro Informàtica de Sistemes i Computadors Escola Tècnica Superior d
Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.
Unidad IV: Sistemas continuos (continuación) Objetivo específico: Entender ampliamente el fenómeno del comportamiento de los modelos matemáticos para la resolución de problemas enfocados a las ecuaciones
INSTITUCIÓN EDUCATIVA GABRIEL TRUJILLO CORREGIMIENTO DE CAIMALITO, PEREIRA
INSTITUCIÓN EDUCATIVA GABRIEL TRUJILLO CORREGIMIENTO DE CAIMALITO, PEREIRA Pobre del estudiante que no aventaje a su maestro. LA LÍNEA RECTA Leonardo da Vinci DESEMPEÑOS Identificar, interpretar, graficar
Problema - Sumando Digitos
Primera Olimpiada de Informática Problema - Sumando Digitos Comenzando con un entero entre 00 y 99 inclusive, escritos como dos dígitos (use un cero a la izquierda en caso de que el numero sea menor que
Grafos. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Grafos 1 / 30
Grafos AMD Grado en Ingeniería Informática AMD Grado en Ingeniería Informática (UM) Grafos / 0 Objetivos Al finalizar este tema tendréis que: Conocer la terminología básica de la teoría de grafos. Pasar
Notación Asintótica 2
Notación Asintótica 2 mat-151 1 Éxamen Rápido (6 minutos) Cada operación fundamental usa c milisegundos, cuánto tiempo toma contar hasta 1,000,000? Cuál es el valor de N? Cuál es el órden de complejidad
3 Polinomios y funciones racionales
Programa Inmersión, Verano 2016 Notas escritas por Dr. M Notas del cursos. Basadas en los prontuarios de MATE 3001 y MATE 3023 Clase #19: viernes, 24 de junio de 2016. 3 Polinomios y funciones racionales
SESIÓN N 07 III UNIDAD RELACIONES Y FUNCIONES
SESIÓN N 07 III UNIDAD RELACIONES Y FUNCIONES RELACIONES BINARIAS PAR ORDENADO Es un arreglo de dos elementos que tienen un orden determinado donde a es llamada al primera componente y b es llamada la
Algoritmos para determinar Caminos Mínimos en Grafos
Problemas de camino mínimo Algoritmos para determinar Caminos Mínimos en Grafos Algoritmos y Estructuras de Datos III DC, FCEN, UBA, C 202 Problemas de camino mínimo Dado un grafo orientado G = (V, E)
Métodos que devuelven valor Dado el siguiente triángulo rectángulo:
Métodos que devuelven valor Dado el siguiente triángulo rectángulo: hipotenusa altura base Para dibujar este triángulo necesitamos los siguientes datos: base y altura La base y la altura, se utilizarán
Parciales Matemática CBC Parciales Resueltos - Exapuni.
Parciales Matemática CBC 2012 Parciales Resueltos - Exapuni www.exapuni.com.ar Compilado de primeros parciales del 2012 Parcial 1 1) Sea. Hallar todos los puntos de la forma, tales que la distancia entre
<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.
Sistemas de ecuaciones lineales
Tema 1 Sistemas de ecuaciones lineales 11 Definiciones Sea K un cuerpo Una ECUACIÓN LINEAL CON COEFICIENTES EN K es una expresión del tipo a 1 x 1 + + a n x n = b, en la que n es un número natural y a
Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.
Algoritmos Estructuras de Datos I Primer cuatrimestre de 2014 Departamento de Computación - FCEN - UBA Programación imperativa - clase 10 Memoria dinámica listas enlazadas Clases e instancias El paquete
Problemas de Recursividad
Problemas de Recursividad Problema 1. El factorial de un número entero n 0, denotado como n!, se define! como!!! i = 1 2 n cuando n > 0, y 0! = 1. Por ejemplo 6! = 1 2 3 4 5 6 = 720 Diseñad una método
Árboles Filogenéticos. BT7412, CC5702 Bioinformática Diego Arroyuelo. 2 de noviembre de 2010
Unidad 6: Árboles Filogenéticos BT7412, CC5702 Bioinformática Diego Arroyuelo 2 de noviembre de 2010 Temario (Introduction to Computational Molecular Biology Setubal y Meidanis Capítulo 6) 1. Introducción
OPTIMIZACIÓN VECTORIAL
OPTIMIZACIÓN VECTORIAL Métodos de Búsqueda Directa Utilizan sólo valores de la función Métodos del Gradiente Métodos de Segundo Orden Requieren valores aproimados de la primera derivada de f) Además de
Matrices Invertibles y Elementos de Álgebra Matricial
Matrices Invertibles y Elementos de Álgebra Matricial Departamento de Matemáticas, CSI/ITESM 20 de agosto de 2008 Índice 121 Introducción 1 122 Transpuesta 1 123 Propiedades de la transpuesta 2 124 Matrices
Lección 11: Ecuaciones lineales con dos incógnitas
Lección : Ecuaciones lineales con dos incógnitas Ecuaciones con dos incógnitas Eisten muchos problemas que pueden plantearse a través de ecuaciones con más de una incógnita. Veamos el siguiente ejemplo:
Retículos y Álgebras de Boole
Retículos y Álgebras de Boole Laboratorio de Matemática Discreta Jesús Martínez Mateo [email protected] Práctica 1. Ordenación topológica A. Herramientas necesarias Para la práctica que vamos a realizar
Lección 5: Ecuaciones con números naturales
GUÍA DE MATEMÁTICAS I Lección 5: Ecuaciones con números naturales Observe la siguiente tabla y diga cuáles son los números que faltan. 1 2 3 4 5 6 7 8 9 10 11 12 3 6 9 12 Es sencillo encontrar la regla
Definición de Memoria
Arquitectura de Ordenadores Representación de Datos en Memoria Abelardo Pardo [email protected] Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Definición de Memoria DRM-1 La memoria
DIAGRAMAS DE FLUJOS. Qué son Los Diagramas de Flujo y Para qué se Usan?
DIAGRAMAS DE FLUJOS Los diagramas de flujo representan la secuencia o los pasos lógicos para realizar una tarea mediante unos símbolos. Dentro de los símbolos se escriben los pasos a seguir. Un diagrama
TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS.
TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. 1. MATRICES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS. DEFINICIÓN: Las matrices son tablas numéricas rectangulares
Percentil q (p q ) Si en este conjunto de valores se quiere encontrar el percentil 20, la solución gráfica es muy simple
Percentil q (p q ) Una medida de posición muy útil para describir una población, es la denominada 'percentil'. En forma intuitiva podemos decir que es un valor tal que supera un determinado porcentaje
Este método se basa en buscar el elemento menor el vector y colocarlo en la primera
Lectura ORDENACIÓN DE ARREGLOS Con frecuencia se requiere clasificar u ordenar los elementos de un vector (arreglo unidimensional) en algún orden en particular. Por ejemplo, ordenar un conjunto de números
El Juego como Problema de Búsqueda
El Juego como Problema de Búsqueda En este algoritmo identificamos dos jugadores: max y min. El objetivo es encontrar la mejor movida para max. Supondremos que max mueve inicialmente y que luego se turnan
DISTRIBUCIÓN N BINOMIAL
DISTRIBUCIÓN N BINOMIAL COMBINACIONES En muchos problemas de probabilidad es necesario conocer el número de maneras en que r objetos pueden seleccionarse de un conjunto de n objetos. A esto se le denomina
La segunda observación permite reformular el problema de una manera más simple:
Problema partición Enunciado A: dados N enteros positivos, N>1, decir si estos pueden dividirse en dos grupos cuya suma sea la misma. Ejemplo: si el conjunto es {1,2,3,9,2,11,4}, una forma de partirlo
GUIA INFORMATIVA DE RAZONES TRIGONOMÉTRICAS
GUIA INFORMATIVA DE RAZONES TRIGONOMÉTRICAS Para el estudio de la Trigonometría es importante tomar en cuenta conocimientos básicos sobre: concepto de triángulo, su clasificación, conceptos de ángulos
Ámbito Científico-Tecnológico Módulo IV Bloque 2 Unidad 1 Tan real como la vida misma
Ámbito Científico-Tecnológico Módulo IV Bloque 2 Unidad 1 Tan real como la vida misma Estamos acostumbrados a trabajar con números naturales o enteros en la vida cotidiana pero en algunas ocasiones tendrás
Espacios Vectoriales. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Espacios Vectoriales 1 / 21
Espacios Vectoriales AMD Grado en Ingeniería Informática AMD Grado en Ingeniería Informática (UM) Espacios Vectoriales 1 / 21 Objetivos Al finalizar este tema tendrás que: Saber si unos vectores son independientes.
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
Lección 1: Números reales
GUÍA DE MATEMÁTICAS III Lección 1: Números reales Los números irracionales En los grados anteriores estudiamos distintas clases de números: Vimos en primer lugar: los naturales, que son aquellos que sirven
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 2.- Formas Cuadráticas.
Álgebra. 004 005. Ingenieros Industriales. Departamento de Matemática Aplicada II. Universidad de Sevilla. Tema.- Formas Cuadráticas. Definición y representación matricial. Clasificación de las formas
El Algoritmo E-M. José Antonio Camarena Ibarrola
El Algoritmo E-M José Antonio Camarena Ibarrola Introducción Método para encontrar una estimación de máima verosimilitud para un parámetro ѳ de una distribución Ejemplo simple 24 Si tiene las temperaturas
Función lineal Ecuación de la recta
Función lineal Ecuación de la recta Función constante Una función constante toma siempre el mismo valor. Su fórmula tiene la forma f()=c donde c es un número dado. El valor de f() en este caso no depende
lasmatemáticas.eu Pedro Castro Ortega materiales de matemáticas
1. Fracciones Una fracción es una expresión del tipo a b, donde a y b son números naturales llamados numerador y denominador, respectivamente. 1.1. Interpretación de una fracción a) Fracción como parte
Tema 2: Teorema de estructura de los grupos abelianos finitamente generados.
ESTRUCTURAS ALGEBRAICAS GRADO EN MATEMÁTICAS. CURSO 215/216 Tema 2: Teorema de estructura de los grupos abelianos finitamente generados. 1.1. Grupo abeliano libre. Bases. Definición 1.1. El grupo Z n con
Ecuaciones de primer grado o lineales
CATÁLOGO MATEMÁTICO POR JUAN GUILLERMO BUILES GÓMEZ BASE 8: ECUACIONES DE PRIMER Y DE SEGUNDO GRADO RESOLUCIÓN DE PROBLEMAS ECUACIONES DE PRIMER GRADO O LINEALES CON UNA SOLA INCÓGNITA: Teoría tomada de
Tablas de dispersión (hash tables)
Tablas de dispersión (hash tables) La dispersión es una técnica empleada para realizar inserciones, eliminaciones y búsquedas en un tiempo promedio constante. La estructura de datos ideal para la tabla
Unidad II. 2.1 Concepto de variable, función, dominio, condominio y recorrido de una función.
Unidad II Funciones 2.1 Concepto de variable, función, dominio, condominio y recorrido de una función. Función En matemática, una función (f) es una relación entre un conjunto dado X (llamado dominio)
FUNDAMENTOS DEL ÁLGEBRA. Folleto De Trabajo Para La Clase ECUACIONES LINEALES EN DOS VARIABLES
FUNDAMENTOS DEL ÁLGEBRA Folleto De Trabajo Para La Clase ECUACIONES LINEALES EN DOS VARIABLES NOMBRE ID SECCIÓN SALÓN Prof. Eveln Dávila Contenido TEMA: Ecuaciones Lineales En Dos Variables... Solución
Universidad de Santiago de Chile Facultad de Ciencia Departamento de Matemática y Ciencias de la Computación
Universidad de Santiago de Chile Facultad de Ciencia Departamento de Matemática y Ciencias de la Computación EJERCICIOS RESUELTOS DE ECUACIONES NO LINEALES Profesor: Jaime Álvarez Maldonado Ayudante: Rodrigo
funciones printf scanf
FUNCIONES EN C FUNCIONES Los módulos en C se llaman funciones. Hemos estado utilizando funciones de la biblioteca estandar stdio.h como por ejemplo printf y scanf. Comenzaremos viendo algunas funciones
Algebra lineal y conjuntos convexos
Apéndice A Algebra lineal y conjuntos convexos El método simplex que se describirá en el Tema 2 es de naturaleza algebraica y consiste en calcular soluciones de sistemas de ecuaciones lineales y determinar
DEPARTAMENTO DE MATEMATICAS Y FISICA Matemáticas Discreta
DEPARTAMENTO DE MATEMATICAS Y FISICA Matemáticas Discreta SUCESIONES Y RELACIONES DE RECURRENCIA Esta última sección la dedicamos a presentar el concepto de recurrencia, que esta muy ligado al axioma de
Formulación del problema de la ruta más corta en programación lineal
Formulación del problema de la ruta más corta en programación lineal En esta sección se describen dos formulaciones de programación lineal para el problema de la ruta más corta. Las formulaciones son generales,
https://dac.escet.urjc.es/docencia/etc-sistemas/teoria-cuat1/tema2.pdf
1.3 Sistemas numéricos 1.3.1. Introducción Un sistema de representación numérica es un lenguaje que consiste en: Un conjunto ordenado de símbolos (dígitos o cifras) y otro de reglas bien definidas para
Derivadas Parciales (parte 2)
40 Derivadas Parciales (parte 2) Ejercicio: Si donde y. Determinar Solución: Consideraremos ahora la situación en la que, pero cada una de las variables e es función de dos variables y. En este caso tiene
Introducción a la Programación Dinámica. El Problema de la Mochila
Tema 1 Introducción a la Programación Dinámica. El Problema de la Mochila La programación dinámica no es un algoritmo. Es más bien un principio general aplicable a diversos problemas de optimización que
TEST DE RAZONAMIENTO NUMÉRICO. Consejos generales
TEST DE RAZONAMIENTO NUMÉRICO Consejos generales 1 I. INTRODUCCIÓN En lo relativo a los cálculos de porcentajes, es fundamental tener en cuenta que los porcentajes, en realidad, son referencias abstractas,
RESOLUCIÓN DE SISTEMAS MEDIANTE DETERMINANTES
3 RESOLUCIÓN DE SISTEMAS MEDIANTE DETERMINANTES Página 74 Determinantes de orden 2 Resuelve cada uno de los siguientes sistemas de ecuaciones y calcula el determinante de la matriz de los coeficientes:
Aritmética de Enteros
Aritmética de Enteros La aritmética de los computadores difiere de la aritmética usada por nosotros. La diferencia más importante es que los computadores realizan operaciones con números cuya precisión
MATEMATICA GRADO 9 II PERIODO PROF. LIC. ESP. BLANCA NIEVES CASTILLO R. CORREO: cel
GUIA DE TEORIA NO. 1 LO QUE DEBO SABER Regla de Cramer Un sistema de ecuaciones lineales se dice de Cramer cuando cumple las siguientes condiciones: Es un sistema cuadrado, con igual número de ecuaciones
NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.
NOTACIÓN O GRANDE El análisis de algoritmos estima el consumo de recursos de un algoritmo. Esto nos permite comparar los costos relativos de dos o más algoritmos para resolver el mismo problema. El análisis
UNIDAD 2. Logaritmos DEFINICION DE LOGARITMO. Definiciones:
Matemática UNIDAD. Logaritmos Medio GUÍA N 1 DEFINICION DE LOGARITMO Qué valor de x satisface la ecuación x = 7? Fácilmente podemos verificar que x = es una solución para esta ecuación, pues = 7. Pero
SISTEMAS DE NUMERACION
SISTEMAS DE NUMERACION INTRODUCCION El número de dígitos de un sistema de numeración es igual a la base del sistema. Sistema Base Dígitos del sistema Binario 2 0,1 Octal 8 0,1,2,3,4,5,6,7 Decimal 10 0,1,2,3,4,5,6,7,8,9
sobre un intervalo si para todo de se tiene que. Teorema 1 Sean y dos primitivas de la función en. Entonces,
Integral indefinida Primitiva e integral indefinida. Cálculo de primitivas: métodos de integración. Integración por cambio de variable e integración por partes. Integración de funciones racionales e irracionales.
Alonso Ramírez Manzanares Computación y Algoritmos 10.03
Recursividad mat-151 1 Ejercicio de recursión: dibujando una regla Queremos dibujar las marcas de diferentes tamaños de una regla. Marcas grandes cada 1/2 cm, marcas más pequeñas cada 1/4 cm... hasta una
En una recta numérica el punto que representa el cero recibe el nombre de origen.
1. Conjuntos numéricos Los conjuntos numéricos con los que has trabajado tanto en Enseñanza Básica como en Enseñanza Media, se van ampliando a medida que se necesita resolver ciertas problemáticas de la
Materia: Matemática de Tercer Año Tema: Pendiente
Materia: Matemática de Tercer Año Tema: Pendiente Suponga que tiene un avión de juguete sobre el despegue, que se eleva 5 pies por cada 6 metros que recorre a lo largo de la horizontal. Cuál sería la pendiente
Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo
TEMA 2: CONCEPTOS BÁSICOS DE ALGORÍTMICA 1. Definición de Algoritmo 1.1. Propiedades de los Algoritmos 2. Qué es un Programa? 2.1. Cómo se construye un Programa 3. Definición y uso de herramientas para
ESTADÍSTICA DESCRIPTIVA
ESTADÍSTICA DESCRIPTIVA Medidas de tendencia central y de dispersión Giorgina Piani Zuleika Ferre 1. Tendencia Central Son un conjunto de medidas estadísticas que determinan un único valor que define el
Tema: Excel Formulas, Funciones y Macros
1 Facultad Escuela Lugar de Ejecución : Ingeniería. : Biomédica : Laboratorio de Biomédica Tema: Excel Formulas, Funciones y Macros Objetivos Específicos Conocer los conceptos básicos en relación a la
REPASO DE Nºs REALES y RADICALES
REPASO DE Nºs REALES y RADICALES 1º.- Introducción. Números Reales. Números Naturales Los números naturales son el 0, 1,,,. Hay infinitos naturales, es decir, podemos encontrar un natural tan grande como
Funciones Tipos de funciones y Recursividad
Funciones Tipos de funciones y Recursividad SESION 4 Definición Una función es una subrutina o subprograma que forman un programa que realiza tareas bien definidas. Todo programa en C consta de una o más
Programación NO Lineal (PNL) Optimización sin restricciones
Programación NO Lineal (PNL) Optimización sin restricciones Ejemplos de los problemas que se aplica la programación NO Lineal: Problema de transporte con descuentos por cantidad : El precio unitario de
Tema 13: Distribuciones de probabilidad. Estadística
Tema 13: Distribuciones de probabilidad. Estadística 1. Variable aleatoria Una variable aleatoria es una función que asocia a cada elemento del espacio muestral, de un experimento aleatorio, un número
Diagramas de secuencia
Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación Diagramas de secuencia Fragmentos Combinados: caminos alternativos Departamento de Ingeniería de Sistemas y Computación - Universidad
Programación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????
Programación. Tema : Tablas Hash /Mayo/ Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el???? Tema : Tabla Hash Las tabla hash aparece para conseguir
JUNIO Opción A
Junio 010 (Prueba Específica) JUNIO 010 Opción A 1.- Discute y resuelve según los distintos valores del parámetro a el siguiente sistema de ecuaciones: a x + a y + az 1 x + a y + z 0.- Una panadería se
OPTIMIZACIÓN Y SIMULACIÓN PARA LA EMPRESA. Tema 4 Optimización no Lineal
OPTIMIZACIÓN Y SIMULACIÓN PARA LA EMPRESA Tema 4 Optimización no Lineal ORGANIZACIÓN DEL TEMA Sesiones: El caso sin restricciones: formulación, ejemplos Condiciones de optimalidad, métodos Caso con restricciones:
Sistemas de ecuaciones lineales dependientes de un parámetro
Vamos a hacer uso del Teorema de Rouché-Frobenius para resolver sistemas de ecuaciones lineales de primer grado. En particular, dedicaremos este artículo a resolver sistemas de ecuaciones lineales que
Conjuntos y matrices. Sistemas de ecuaciones lineales
1 Conjuntos y matrices Sistemas de ecuaciones lineales 11 Matrices Nuestro objetivo consiste en estudiar sistemas de ecuaciones del tipo: a 11 x 1 ++ a 1m x m = b 1 a n1 x 1 ++ a nm x m = b n Una solución
Universidad Nacional de Ingeniería Facultad de Ciencias. Física Computacional CC063. Algebra Lineal. Prof: J. Solano 2012-I
Universidad Nacional de Ingeniería Facultad de Ciencias Física Computacional CC063 Algebra Lineal Prof: J. Solano 2012-I Introduccion Aqui trabjaremos con operaciones basicas con matrices, tales como solucion
SISTEMAS DE ECUACIONES LINEALES Y MATRICES Dos ecuaciones lineales con dos
de SISTEMAS DE ECUACIONES ES Y MATRICES Dos m con n Sergio Stive Solano 1 Febrero de 2015 1 Visita http://sergiosolanosabie.wikispaces.com de SISTEMAS DE ECUACIONES ES Y MATRICES Dos m con n Sergio Stive
Cálculo I (Grado en Ingeniería Informática) Problemas adicionales resueltos
Cálculo I (Grado en Ingeniería Informática) - Problemas adicionales resueltos Calcula el ĺımite lím ( n + n + n + ) n Racionalizando el numerador, obtenemos L lím ( n + n + n (n + n + ) (n + ) + ) lím
Representación de números enteros: el convenio complemento a uno
Representación de números enteros: el convenio complemento a uno Apellidos, nombre Martí Campoy, Antonio ([email protected]) Departamento Centro Informàtica de Sistemes i Computadors Escola Tècnica Superior
