Documentos de Académico
Documentos de Profesional
Documentos de Cultura
63
2i = 264 20 = 1,8*1019
i=0
Polinomio es Bueno
Algoritmos Corregidos
Problema a resolver. Lenguaje de programacin. Compilador Hardware Habilidad del programador Eficacia del programador Algoritmo
Resumen
Confianza en los algoritmo desde las pruebas y pruebas corregidas Corregir algoritmos recursivos probar directamente por induccin Corregir algoritmos iterativos usando loop invariantes e induccin
Correcciones
Confianza en los algoritmo desde las pruebas y pruebas corregidas Corregir algoritmos recursivos probar directamente por induccin Corregir algoritmos iterativos usando loop invariantes e induccin
Correcciones
Lgico Mtodo de Corregir Chequeando Testing Pruebas Corregidas
: Prueba matemticamente Puede no encontrar problemas : : Puede no encontrar problemas Usar test solo puede ser peligroso
Testing
Fibonacci
Int fibonacci(int n) { if ((n==0) II (n==1)) return n; else return fibonacci(n-1) + fibonacci(n-2); }
T(n) = T(n) =
si 1 si n > 1
Anlisis
La operacin bsica que se hace es la suma, se define C(n) como la cantidad de sumas necesarias para calcular fibonacci(n). Si a C(0),C(1),,(Cn) es claro que C0 = 0 y C1 = 0 y para n 2, es Cn = Cn-1 + Cn-2 + 1 Su generatriz es: C(z) = CnZn no
Se sacan factores
Como C0 = 0, entonces
, sumando y restando 1 + Z
Ahora como
resulta que
Simplificando Las races del polinomio Siendo son comnmente conocido como razn aurea y su conjugado
Aplicando la propiedad
se llega a
Lo que descomponemos en
Extrayendo coeficientes:
Como el mdulo de
O(
ANALISIS DE ALGORITMO
Implementando Algoritmos
Gran O(h)
Definicin:
f(n) es del orden de g(n), f(n) = O(g(n)), si existe c, no R+ tal que ara todo n no, f(n) cg(n)
Ejemplo:
log(n) es O(n) Reivindica: Para todo n 1, log(n) n.
Gran (h)
Definicin:
f(n) es del orden de g(n), f(n) = (g(n)), si existe c > 0, tales que son muchos infinitamente n N tal que, f(n) cg(n)
Gran (h)
Definicin:
f(n) es del orden de g(n), f(n) = (g(n)), si existe c,n0 R+> 0, tales que para todo n n0, f(n) cg(n)
Gran (h)
Definicin:
f(n) es (g(n)), s y solo s f(n) es O(g(n)) y f(n) es (g(n))
Sumando O(h)
Si f1(n) es O(g1(n)) y f2(n) es O(g2(n)) f1(n) + f2(n) es O(g1(n) + g2(n))
Multiplicando O(h)
Si f1(n) es O(g1(n)) y f2(n) es O(g2(n)) f1(n) f2(n) es O(g1(n)*g2(n))
Tipo de Anlisis
Peor Caso: El tiempo que toma en el peor caso posible. Es el mximo T(n) sobre una entrada de tamao n. Caso Promedio: Es la expectativa de tiempo corriendo, dada alguna probabilidad o distribucin de tiempo (usualmente uniforme). T(n) es el tiempo que toma sobre toda entrada de tamao n en promedio. Caso Probabilstico: Es la expectativa de tiempo que corre sobre una rango de entradas posibles. Caso Amortizado: El tiempo de corrida pata una serie de ejecuciones, dividida por el nmero de ejecuciones.
Complejidad Tiempo
Analizando los tiempos en el peor caso: asignacin procedimiento entrada procedimiento salida si el test hay dos ramas loop O(1) O(1) O(1) O(mximo de las dos ramas) suma sobre todas las iteraciones del tiempo de cada iteracin.
Multiplicacin
function multiply(y,z) comment Return yz, donde y,z IN 1. x:= 0; 2. while z>0 do 3. if z is odd then x:= x + y; 4. y:=2y; z:=(z/2); 5. return(x) Supuesto y y z tienen n bits. procedimiento de entrada y salida costo O(1) veces lineas 3,4 costo O(1) cada vez el while loop sobre lmeas 2-4 costos O(n) veces (es ejecutada a lo ms n veces) lnea 1 costos O(1) veces
Bubblesort
1. procudere bubblesort(A[1..n]) 2. for i:=1 to n-1 do 3. for j:=0 to n-i do 4. if A[j] > A[j+1] then 5. Swap A[j] with A[j+1] procedimiento de entrada y salida costo O(1) veces lnea 5costo O(1) cada vez el if de la sentencia de lneas 4-5 costosO(1) El for-loop sobre lneas 3-5 costos O(n-i) veces El for-loop sobre lneas 2-5 costos O( ) El bubblesort toma tiempo de O(n2) en el peor caso.
Heap
El Heap: es una popular implementacin. Un heap es un rbol binario con los datos cargados en los nodos, Tiene dos importantes propiedades.
1. Balance. Completar el rbol binario sin prdida de hojas, en los ltimos niveles del lado izquierdo.
2. El valor de las hoja del padre es menor que el valor de las hojas del hijo.
Borrar el Mnimo
Borrarlo de la raz, y devolver el valor.
Supuesto b c y a no est en el lugar correcto. Esto es a>b o a>c . En este caso b c, nosotros sabemos que a > b.
Lo que lleva a:
Si b es ms pequeo que sus hijos? Si, porque b < c y b c. C es el ms pequeo de estos hijos? Si, porque se verific antes. Es a ms pequeo que stos hijos? No necesariamente, as puede continuar intercambindose y bajando por el rbol. El sub rbol de c, tiene la condicin de estructura? Si, dado que esto no ha cambiado.
Preservando balance
Implementando un Heap
Un heap de n nodos usados en un arreglo A[1..n]
* La raz est cargada con A[1] * Los hijos a la izquierda de un nodo en A[i] est cargada en nodo A[2i] * Los hijos a la derecha de un nodo A[i] est cargada en nodo A[2i+1]
Implementando un Heap
Un heap de n nodos usados en un arreglo A[1..n]
* La raz est cargada con A[1] * Los hijos a la izquierda de un nodo en A[i] est cargada en nodo A[2i] * Los hijos a la derecha de un nodo A[i] est cargada en nodo A[2i+1]
Borrar el Mnimo Remover raz Reemplazar raz Swaps O(1) O(1) O(l(n))
Insertar
Poner una hoja Swaps O(1) O(l(n))
Anlisis de l(n) Un rbol binario completo con k niveles, tiene exactamente 2k-1 nodos. Entonces con k niveles tiene no menos 2k-1 y no ms que 2k-1 .
Resumen
Anlisis de algoritmos recursivos: * relacin de recurrencia * como deriva * como se soluciona
Ejemplos:
As, T(n) el tiempo para multiply(y,z), donde z es un n-bits nmero natural. Entonces para algn c,d IR T(n) = c T(n-1) + d si n=1 en otro caso
Entonces, para una gran cantidad de n T(n) T(n-1) T(n-2) = = = . . = = = = = = . . = T(n-1) + d T(n-2) + d T(n-3) + d
T(2) T(1)
T(n-i)+id Si i=n-1 dn +c d
T(n)
(hiptesis de induccin)
Teorema General
Si n es una potencia de c, la solucin para la recurrencia: T(n) = d aT(n/c) +bn si n 1 en otro caso
T(n) =
Dividir y Reinar
Para solucionar un problema: * * * Dividir dentro de pequeos problemas Solucionar el pequeo problema Combinar las soluciones y ponerlas dentro del gran problema
n n-1 2n-1
Multiplicacin de Matrices
Asume que toda operacin de enteros toma O(1) tiempo: El algoritmo de mutiplicacin de matriz ingenua toma O(n3). Se puede mejorar?
Entonces:
As, T(n) es el tiempo de multiplicar 2 n*n matrices. La aproximacin est dada por:
Entonces:
T(n) = 8T(n/2) + dn2 8(8T(n/4) +d(n/2)2) +dn2 82*T(n/4) + 2dn2 + dn2 83*T(n/8) + 4dn2 + 2dn2 + dn2 8 T(n/2 ) + dn 2j
j=0 i i 2 i-1
logn
T(1) + dn
logn-1 2j j=0
Algoritmo de Strassen
Clculo
Entonces
Esto es:
Esto es:
PROGRAMACION DINAMICA
Dividir para reinar con una tabla:
Combinatoria Problemas de Knapsack Contando Combinaciones Elige r desde n, a su Elegir el primer items. As elegir el remanente r-1 items desde n-1. No elegir el primer item. Entonces se debe elegir r entre los n-1 As:
PROGRAMACION DINAMICA
Dividir para reinar con una tabla:
Combinatoria Problemas de Knapsack Contando Combinaciones Elige r desde n, a su Elegir el primer items. As elegir el remanente r-1 items desde n-1. No elegir el primer item. Entonces se debe elegir r entre los n-1 As:
Anlisis:
Ejemplo:
Repiten clculos
Inicializacin
Regla General
Para llenar T[i,j] = T[i-1,j-1] + T[i-1,j]
Anlisis Algoritmo
Cuanto toma llenar la tabla. (n-r+1)(r+1) = nr + n r2 + 1 n(r + 1) +1 Cada entrada toma O(1) el total requerido es O(n2) es mejor que O(2n)
Programacin Dinmica
Cuando se subdivide para reinar, se generan un nmero importante de problemas idnticos, luego la recursin tambin se pude mejorar. Luego la solucin es una tabla. La tcnica es llamada programacin dinmica.
Grafos
Un grafo es un par ordenado G = (V,E) V es un conjunto finito de vrtices E C VxV es un conjunto de arcos Por Ejemplo:
V = {1,2,3,4,5}
E = {(1,2),(1,4),(1,5),(2,3),(3,4),(3,5),(4,5)} Grafo Dirigido Un grafo dirigido es un grafo con direcciones sobre los arcos. Por ejemplo:
Aplicaciones: Ciudades y distancias de camino. Costos de produccin asociados a un proceso. Convencin: n es el nmero de vrtices e es el nmero de arcos
Caminos en Grafo
Un camino en un grafo G = (V,E) es una secuencia de arcos (v1,v2),(v2,v3),..,(vn,vn+1) E. El largo del sendero es el nmero de arcos. El costo del sendero es la suma del costo de los arcos. Por ejemplo; (1,2),(2,3),(3,5). Largo 23, costo 70.grafo dirigido es un grafo con direcciones sobre los arcos y costos positivos sobre los costos.
v,w V en costo de los caminos (es decir al menos el costo) del camino de v a w.
Se define Ak una matriz de n*n con Ak[i,j] el costo de i a j con vrtices internos numerados <k. Ao[i,j] iguales * Si i j y (i,j) E, es el costo del arco desde i a j * Si i j y (i,j) no pertenece a E, entonces * Si i=j, entonces 0
Calculando Ak
Considerar el camino de i a j con vrtices internos 1..k. As, No pasa por k, en su lugar es el costo Ak-1[ i, j]. Pasa a travs de k, en cuyo caso pasa por k solo una vez, por lo que el costo Ak-1[i,k] + Ak-1[k,j]
Por lo tanto:
Todas entradas en Ak dependen a fila k y columna k de Ak-1 Las entradas en fila k y columna k de Ak son algunas de las elegidas en Ak-1
O(n3)
Programacin Dinmica