Diseño y análisis de algoritmos

Slides:



Advertisements
Presentaciones similares
El tamaño asignado para cada partición es el mismo. Cada partición, será ocupada por un proceso de menor o igual tamaño. El programador debe diseñar el.
Advertisements

Unidad 6 Métodos de Ordenamiento Internos
Método de ordenación por inserción
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Programación de Computadores
Sesión 13 Tipos de datos Estruturados Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Programación de Computadores
Guia ejercicios 5: D&AA Universidad Viña del Mar 1) Calcular la factibilidad de resolver el siguiente estado del juego de 15 Resolver el juego usando el.
Complejidad de Algoritmos
ALGORITMOS DE ORDENAMIENTO
Type tipo_bf = ; tipo_dato = word; tipo_puntero = ^tipo_nodo; tipo_nodo = record dato: tipo_dato; izquierdo, derecho: tipo_puntero; bf: tipo_bf;
Seminario de Actualización - Excel Avanzado y Macros
Realizado por: Ing. Mauricio Rivera1 Colas. Realizado por: Ing. Mauricio Rivera2 ¿Qué es una Cola? Una cola es un grupo ordenado de elementos homogéneos.
ORDENACION POR EL METODO DE LA SACUDIDA (SHAKER SORT)
1.5 Algoritmos, Pseudocódigo y Diagramas de Flujo
Curso de Programación 1 Plan 97
Bloque 2: Divide y Vencerás
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 1: Consideraciones acerca de la eficiencia.
Unidad 4: Análisis de algoritmos (parte II)
MÉTODOS DE CLASIFICACION
PROGRAMACION DE ESTRUCTURAS DE DATOS
PROGRAMACION DE ESTRUCTURAS DE DATOS IV. MÉTODOS DE ORDENAMIENTO.
IBD Plan 2003 Clase 4. UNLP - Facultad de InformáticaIBD - CLASE 4 2 Archivos - Búsqueda Búsqueda de información (costo) # de comparaciones (operaciones.
Preguntas tipo test (I)
Algoritmos de Búsqueda
Estructuras de control
ALGORITMOS 2 DIGITALES II
METODO DE ORDENAMIENTO POR SELECCIÓN.
Solución de problemas por búsqueda inteligente
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Ordenación, Clasificación
1 Concurrencia Procesos y Programas. 2 Establecer Comunicación entre procesos (memoria común)
Análisis de Algoritmos
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )
Algoritmos para Ordenar datos
Introducción al análisis de algoritmos
Algoritmos.
Estructuras de Datos Arreglos.
COMPUTACION 2009 Clase 6 Clase 7.
Programación I Universidad Nacional de Luján
Programación IMC José Andrés Vázquez Flores. Definición Un arreglo es un conjunto finito e indexado de elementos homogéneos, que se referencian por un.
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Sesión 17 Tipos de datos Estruturados Arreglos de Registros Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
ELO3201 Contenedores Biblioteca Estándar de Templates Agustín J. González ELO320 Contenido Contenedores: Vector, List, Deque, Stack, Queue, Priority Queue,
Ingeniería en Sistemas Computacionales Estructura de Datos
Programación I Arreglos II- Matrices.
75.40 Algoritmos y Programación I
Forma de Trabajo 1- Comprender el problema 2- Estudiar todas las posibles situaciones 3- Plantear todas las estrategias posibles 4- Seleccionar la más.
Ordenación y Búsqueda.
Teoría – Alejandro Gonzalez
NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En.
Diseño y análisis de algoritmos Clasificación II.
Arreglos Programación I MC Beatriz Beltrán Martínez.
Sincronización de Procesos
1. Desarrollo de Programas iterativos usando invariante
Programación I Arreglos. Los elementos de un arreglo son todos del mismo tipo de dato (todos integer o real o char o registros o aún arreglos)
Definir un vector Forma general Variable=[tipo]*tamaño Tipo: es el valor inicial con el cual quedarán llenas todas las posiciones creadas del vector. Tamaño:
Análisis y Diseño de Algoritmos
Tema 8: Tipos de Datos Estructurados I
1 Quicksort Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
1 Análisis de algoritmos Generalidades Agustín J. González 1er. Sem
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 2: Divide y Vencerás Unidad 1: Nociones básicas.
Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.
Diseño y análisis de algoritmos Análisis de Algoritmos II.
Estructura: COLA Profesor: Ing. Erick López Ch. M.R.I.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
MODULA Lenguaje de Programación Anabel Martín González
CICLOS ESTRUCTURA DE REPETICIÓN PROG 2270LGUILLERMO SOLLA.
Transcripción de la presentación:

Diseño y análisis de algoritmos

Temario Clasificación Arreglos Ej:inserción Ej:Selección Ej:Intercambio Ej:Partición :QuikSort

Clasificación Arreglos Estructura base TYPE index = INTEGER ; VAR d:ARRAY[1..N] of item Estos métodos se conocen como directos Se verán rápidamente porque: Permitien dilucidar los princípos de los problemas de clasificación Algoritmos cortos y fáciles de entender Lós algoritmos más eficientes son más complejos y deben usarse sólo para n Grándes

Clasificación Arreglos Alg1.1: Inserción directa Pseudocódigo Para i:=2 a n { X:=d[i]: Insertar x en el sitio que corresponde en d1...di } Cond. Término: Se en encuentra un elemento aj que tiene una llave menor que la x El extremo izquierdo de la secuencia de destino se ha alcanzado Se agrega en cada ciclo un centinela por lo tanto el arreglo aumenta [0..n] Procedure insersión directa; Var i,j:index;x:item; BEGIN For i:=2 TO n DO x:=d[i];d[0]:=x;j:=i; WHILE (x<d[j-1]) DO d[j]:=d[j-1];j:=j-1 END; d[j]:=x END Análisis: Mejor Caso pert O(n) Resto pert O(n ) Es dependiente del orden Inicial de los datos?? 2

Clasificación Arreglos Alg1.1: Inserción directa Ejemplo: Datos iniciales: 44 55 12 42 94 18 06 67 i=2 44 55 12 42 94 18 06 67 i=3 12 44 55 42 94 18 06 67 i=4 12 42 44 55 94 18 06 67 i=5 12 42 44 55 94 18 06 67 i=6 12 18 42 44 55 94 06 67 i=7 06 12 18 42 44 55 94 67 i=8 06 12 18 42 44 55 67 94 El algoritmo es sensible al orden inicial, y el número de copmaraciones depende de los valores Si los elementos están ordenados no entrará nunca al mientras, por lo tanto hará un Recorrido lo que da un O(n). El peor caso se da cuando los elementos están en orden inverso al deseado Notar que de 1 hasta i se mantiene siempre un orden (relativo). Esto sugiere buscar más rápidmente el punto de inserción que un retroceso secuencial. La idea es agregar una búsquda binaria que prueba la secuencia destino en la mitad, luego reduce la busqueda a la mitad hasta encontrar el punto de inserción. El algoritmo de inserción modificado se llama inserción binaria

Clasificación Arreglos Alg2.1: Inserción directa, Insersión binaria Procedure InsBin; VAR i,j,m,L,R:index;x:item; BEGIN FOR i:=2 TO n DO X:=d[i];L:=1;R:=i; WHILE L<R DO m:= (L+R)DIV2; IF d[m] <= x THEN L:= m+1 ELSE R:=m END; FOR j:=i DOWNTO R+1 DO d[j]:=d[j-1]; d[R]:=x END

Clasificación Arreglos Alg1.2: Inserción directa, Insersión binaria El algoritmo es sensible al orden inicial, La posición de inserción se encuentra si L=R, por lo que el intervalo final de búsqueda debe ser de largo 1, por lo que cada vez se divide el intervalo de búusqueda en la mitad. Por lo tanto se supone dividir a la mitad el intervalo de longitud i veces por tanto: Esta suma se puede aproximar por la integral Por lo tanto el número de comparaciones pruducto de la búsqueda binaria es del orden , sin embargo aún queda el segundo for que en conjunto con el primero mantien el Algoritmo en un orden El prblema de fondo de este método de ordenamiento es que cada vez que debe reorenar desplaza un segmento completo de los datos. Veremos otras Alternativas, como el ordenamiento por selección directa.

Clasificación Arreglos Alg2: Selección directa Diseño Seleccionar el elemento que tenga la llave menor. Intercambiarlo con el primer elemento d[1]. Repetir 1 y 2 con (n-1) elementos restantes, (n-2) elementos restantes FIN queda un solo elemento --- El más grande Pseudocódigo Para i:=1 a n -1 {Asignar el índice del elemento más pequeño entred1...di a k Intercambiar di con dk } Procedure selecdirecta; Var i,j,k:index;x:item; BEGIN FOR i:=1 TO n-1 DO k:=i; x=d[i]; FOR j:=i+1 TO n DO IF (d[j] <x) THEN k:=1; x :=d[j]; END; d[k]:=d[i]; d[i]:=x END Arreglo inicial: 44 55 12 42 94 18 06 67 06 55 12 42 94 18 44 67 06 12 55 42 94 18 44 67 06 12 18 42 94 55 44 67 06 12 18 42 44 55 94 67 06 12 18 42 44 55 67 94

Clasificación Arreglos Alg 2: Selección directa El algoritmo es sensible al orden inicial, el número de comparaciones es independiente de los datos, al contrario que la inserción directa. Hay un segundo for fijo. Si es el número de comparaciones necesarias, se puede pensar que, dado que el segundo for se va haciendo cada vez más pequeño en una unidad: El patrón se puede reconocer dándose valores: Por otro lado en el mejor habrá que ahcer alrdedor de n asignaciones y las comparaciones se por lo que el algoritmo será del así como en el peor caso. Preferible alanterior

Clasificación Arreglos Alg3: intercambio directo Diseño Todos los métodos tienen de alguna manera operaciones de intercambio. Este algoritmo es el famoso ordenamiento de burbuja Procedure burbuja; Var i,j:index;x:item; BEGIN FOR i:=2 TO n DO FOR j:=n DOWNTO i DO IF (d[j-1] > d[j]) THEN x:=d[j-1]; d[j-1]:=d[j]; d[j]:=x END Arreglo inicial: 44 55 12 42 94 18 06 67 06 44 55 12 42 94 18 67 06 12 44 55 18 42 94 67 06 12 18 44 55 42 67 94 06 12 18 42 44 55 67 94 El núero de comaraciones necesarias se calcula con la misma lógica que el Algoritmo anterior por lo que el orden es A pesar de que no se Puede mejorar su orden, deteniendo el algoritmo si el orden seha comletado.

Clasificación Arreglos Alg 4: Partición:Quiksort El es l más rápido para clasificar. Se basa en intercambiar y particionar. Una primera Aproximación: Seleccionar un elemento al azar del arreglo x Se recorre el arreglo a partir de la izquierda hasta encontrar un elemento i > x Se recorre el arreglo desde la derecha hasta encontrar un elemento j < x A continuación se intercambian ambos elementos y se vuelve a 2 hasta que i y j se Encuentren en algún punto cerca del centro del arreglo. El resultado es que se ha dividido el arreglo la parte a la izquierda del elemento x con elementos menores o iguales a x y la derecha con elementos mayores o iguales. Procedure particion; Var i,j:index;w,x:item; BEGIN i:=1;j:=n; (*seleccionar un elemento de d al azar y asignar a x*) REPEAT WHILE d[i] < x DO i:=i+1; WHILE d[j] > x DO j:=j-1; IF i <=j THEN w:=a[i];a[i]:=a[j];a[j]:=w;i:=i+1;j:=j-1 END UNTIL i>j; Arreglo inicial:x=42 44 55 12 42 94 06 18 67 18 55 12 42 94 06 44 67 18 06 12 42 94 55 44 67

Clasificación Arreglos Alg 4: Partición:Quiksort Se debe recordar que lo que lo que se quiere es ordenar. Sin embargo Una vez que se tiene un algoritmo eficiente de partición, se tiene dividido el arrgelo, por lo que el sigueinte paso es aplicar el mismo procedimiento a la partición izquierda, luego a la derecha y así sucesivamente hasta que cada partición conste de un solo elemento. Claramente esta es una definición recursiva Criterio de parada, establecido cuando las particiones son de un elemento. Convergencia, asegurada porque las particiones siempre son cada vez más pequeñas. Procedure qsort(L,R:index); Var i,j:index;w,x:item; BEGIN i:=L;j:=R; x:= d[(L+R) DIV 2)] REPEAT WHILE d[i] < x DO i:=i+1; WHILE d[j] > x DO j:=j-1; IF i <=j THEN BEGIN w:=a[i];a[i]:=a[j];a[j]:=w;i:=i+1;j:=j-1 END UNTIL i>j; IF L< j THEN qsort(L,j); IF R> i THEN qsort(i,R); qsort(1,n); Arreglo inicial:x=42 44 55 12 42 94 06 18 67 18 55 12 42 94 06 44 67 18 06 12 42 94 55 44 67 qsort(1,3) x=6 18 06 12 06 18 12 06 fin Qsort(2,3) 18 12 12 18 fin Qsort(5,8)....

Clasificación Arreglos Alg3: QuikSORT Análisis: Cómo es el comportamiento del proceso de partición?? Tras haber seleccionado un límite x, recorre todo el arreglo. De ahí se efectúan exactamente n comparaciones El número de intercambios puede determinarse con el sguiente método probabilístico: Con un límite fijo x, el número previsto de operaciones de intercambio es igual al de elementos en la parte izquierda de la partición, o sea n – 1 * Prob( elemento haya alcanzado su su lugar mediante un INTERCAMBIO). Habrá tenido lugar un intercambio si el elemento ha sido antes parte de la partición DERECHA; P(de este evento)=(n-(x-1))/n. El número esperado de intercambios es el promedio de esos valores previstos sobre todos los LIMITES posibles x.: Si se eligiera SIEMPRE la mediana como límite , cada proceso divide el arreglo en 2 mitades y el número de pases necesarios sería de log(n). El número ideal de comparaciones será de f=n*log n E intercambio, g=n*log(n)/6 . Pero la probabilidad de esto es apenas de 1/n. El rendimientoMedio de QS es inferior al caso óptimo por 2*ln(2). Por otro lado se puede dar un mal caso y comportarse

Clasificación Arreglos Alg3: QuikSORT no recursivo: Procedure qsort; CONST M=100; Var i,j,L,R:index;w,x:item; s: 0..M; stack: ARRAY[1..M] of RECORD L,R:Index END; BEGIN s:=1; satack[1].L=1;stack[1].R=n; REPEAT (*tomar petición encima del stack*) L:= stack[s].L; R:= stack[s]. R;s:=s-1; REPEAT (*Particion*) i:=L;j:=R; x:= d[(L+R) DIV 2)]; REPEAT WHILE d[i] < x DO i:=i+1; WHILE d[j] > x DO j:=j-1; IF i <=j THEN BEGIN w:=a[i];a[i]:=a[j];a[j]:=w;i:=i+1;j:=j-1 END UNTIL i>j; IF R> i THEN (*apilar petición para ordenar paricion derecha* s:=s+1; stack[s].L=i; stack[s].R=R; R:=j; UNTIL L>=R (*ahora Ly R delelimitan particion izquierda*) UNTIL s=0 EBD qsort;