Académique Documents
Professionnel Documents
Culture Documents
Analisis de Algoritmos
Que es un Algoritmo ?
Analisis de Algoritmos
Un algoritmo es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permiten realizar una actividad mediante pasos sucesivos que no generen dudas a quien lo ejecute .
Analisis de Algoritmos
El Analisis de Algoritmos estudia, desde un punto de vista teorico , los recursos computacionales que nesecita la ejecucion de un programa de ordenador, es decir, su eficiencia .
Analisis de Algoritmos
Cual es el Sentido de estudiar la eficiencia de los algoritmos? Poder tener un mayor nivel de comprension de la realidad , para asi comprender la barrera entre lo factible y lo imposible .
Analisis de Algoritmos
Ejemplo : Los algoritmos de Ordenacion . El tiempo de ejecucion dependera del tamao del conjunto de datos a ordenar . Objetivo : Parametrizar el tiempo de ejecucion en funcion del tamao de datos, intentando buscar una cota superior que nos sirva de garantia .
Analisis de Algoritmos
Entonces, Podemos comparar distintos algoritmos para saber cual de ellos se comporta de mejor manera frente a un determinado problema?
Analisis de Algoritmos
Como en todo orden de cosas, existen distintos casos en los que puedo evaluar un algoritmo . Estos casos son intuitivos , y corresponden a una forma natural de analisis, analisis por casos.
Analisis de Algoritmos
Suponiendo que nuestro algoritmo para llegar a la universidad desde el hogar sea(a grandes rasgos) : despertar->ducharnos->vestirnos>desayunar->caminar al paradero->esperar la micro>llegar al metro->llegar a la u
Analisis de Algoritmos
Este algoritmo de acercamiento a la universidad posee muchas variables que pueden, de cierta manera, condicionar la respuesta que obtendremos, es decir, el tiempo de demora en el viaje a la universidad.
Analisis de Algoritmos
Muchos de nosotros hemos tenido dias malos, donde el agua caliente en la maana no funciona, se nos fue la carga del pase, se nos olvido el libro que tenemos que devolver en la u o nos subimos a la micro equivocada. Bien, eso seria entonces...
Analisis de Casos
Cual es el tiempo que nesecitaria un algoritmo concreto? Varia en funcion del ordenador que utilicemos . Varia en funcion del compulador que seleccionemos . Varia en funcion de nuestra habilidad de programacion.
Analisis de Casos
Idea : Ignorar las constantes que dependen del contexto . Solucion : Fijarse en el crecimiento de T(n) cuando
Analisis de Casos
Analisis de Casos
En la practica, es posible que un algoritmo mas ineficiente pueda resultar mas adecuado para resolver un problema real ya que hay que tener en cuenta otros aspectos ademas de la eficiencia .
Analisis de Casos
Analisis de Casos
Analisis de Casos
Ejemplo: Algoritmo de ordenacin por insercin void OrdenarInsercion (double v[], int N) { int i, j; double tmp; for (i=1; i<N; i++) {
tmp = v[i];
for (j=i; (j>0) && (tmp<v[j-1]); j--) v[j] = v[j-1]; v[j] = tmp; } }
Analisis de Casos
Peor Caso : Vector inivialmente ordenado alreves
Es Eficiente el algoritmo de ordenacion por insercion ? Si, para casos de n pequeo. NO para n grande.
Analisis de Casos
Para algunos algoritmos, diferentes entradas (inputs) para un tamao dado pueden requerir diferentes cantidades de tiempo. Por ejemplo, consideremos el problema de encontrar la posicin particular de un valor K, dentro de un arreglo de n elementos. (suponiendo que slo ocurre una vez).
Analisis de Casos
En cambio, cuando un algoritmo se ejecuta muchas veces en muchos tipos de entrada, estamos interesados en el comportamiento promedio o tpico. Desafortunadamente, esto supone que sabemos cmo estn distribuidos los datos.
Si conocemos la distribucin de los datos, podemos sacar provecho de esto, para un mejor anlisis y diseo del algoritmo. Por otra parte, si no conocemos la distribucin, entonces lo mejor es considerar el peor de los casos.
Resolucion de Recurrencias
Existen diversas tecnicas y trucos para el desarrollo y resolucion de las recurrencias. Metodo de Sustitucion: 1.-Adivinar la forma de la solucin. 2.-Demostrar por induccin. 3.-Resolver las constantes.
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Resolucion de Recurrencias
Teorema Maestro
Algoritmos de Ordenamiento
Dado un conjunto de n elementos (a1,a2,...,an) y una relacion de orden total entre dichos elementos (> por ejemplo) el problema de ordenar el conjunto de elementos se reduce a realizar permutaciones sobre el conjunto numerico con tal de ordenar dichos elementos en forma de que cumplan la relacion de orden total definida anteriormente. Aunque tanto el tipo y tamao de los elementos como el dispositivo en donde se encuentran almacenados pueden influir en el mtodo que utilicemos para ordenarlos, en este tema vamos a solucionar el caso en que los elementos son nmeros enteros y se encuentran almacenados en un vector.
Algoritmos de Ordenamiento
Existen muchos algoritmos de ordenamientos. MUCHOS. Algunos de los mas conocidos son Bubble sort, Insertion sort , Shell sort, Merge sort , Heapsort , Quicksort , Counting Sort , Bucket sort , Radix sort , Distribution sort , etc etc etc De momento, estudiaremos Mergesort (ordenamiento mediante Mezcla) y ShellSort (derivacion de InsertSort).
empezar con k=n/2, siendo n el nmero de elementos de arreglo, y utilizando siempre la divisin entera.... despus iremos variando k hacindolo ms pequeo mediante sucesivas divisiones por 2, hasta llegar a k=1. Pero vamos a ello... En nuestro ejemplo, n=11 (porque hay 11 elementos). As que k=n/2=11/2=5 (division entera )
30, 14, 21, 44, 38, 74, 11, 78, 65, 88, 97
Fjate qu curioso. El 30, un elemento relativamente pequeo se ha ido hacia el principio y el 97 hacia el final... pero dando saltos (gap) de 5 en 5 lugares! Cada uno ha avanzado en saltos de 5 hacia una posicin cercana a su ubicacin definitiva.
30, 14, 21, 44, 38, 74, 11, 78, 65, 88, 97
30, 11, 21, 44, 38, 74, 14, 78, 65, 88, 97
Ordenando de pasada la parte rosada que se mantiene igual , lo mismo ocurre con el naranjo y el celeste !. Hemos formado 5 sub-arreglos en los cuales los elementos estn separados por 5 lugares (porque k=5). Hemos ordenado cada subarreglo por separado utilizando insercin directa, y hemos logrado que cada elemento se dirija hacia su ubicacin definitiva en pasos de 5 lugares. Por supuesto, no hemos terminado todava, pero resulta evidente que algunos elementos, como el 30, el 97 o el 11 han dado un gran salto y que no deben andar muy lejos de su sitio final.
11, 14, 21, 30, 38, 44, 65, 74, 78, 88, 97
Cada elemento descolocado ha tenido que moverse pocos lugares. Muchos de ellos ni siquiera se han movido.