Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

Documentos relacionados
<tipo> Tipo de dato de los elementos del vector

Programación de Sistemas

Práctica 4 El algoritmo QuickSort, comparación de algoritmos de ordenación

Algoritmos: Algoritmos sobre secuencias y conjuntos de datos

Algoritmos de Ordenamiento

Tema: Métodos de Ordenamiento. Parte 1.

Sorting++ Herman Schinca. Clase de Junio de 2011

ALGORITMOS DE ORDENACIÓN Y BÚSQUEDA

Metodología de la Programación II. Recursividad

Analisis de algoritmos

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Capítulo 2 ORDENACIÓN

Ampliación de Estructuras de Datos

Tema 8: Algoritmos de ordenación y búsqueda

VI Colas de prioridad

Integrantes. Leonardo Herrera Cristian Fernandez Jorge A Mondragón. Análisis y Diseño de Algoritmos. Docente Diana Mabel Díaz Herrera.

Eligiendo algoritmos: El caso de ordenamiento

Planificaciones Algoritmos y Programación II. Docente responsable: CALVO PATRICIA MABEL. 1 de 6

Notación Asintótica 2

Capítulo 3 Ordenación(Clasificación) y Búsqueda

Complejidad de Algoritmos

CAPÍTULO 10 ALGORITMOS DE ORDENACIÓN Y BÚSQUEDA Búsqueda en listas Resumen Ejercicios Problemas

Programación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????

NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.

Análisis asintótico: algoritmos recursivos e iterativos

Algoritmos de Búsqueda y Ordenación. Rosalía Laza Fidalgo. Departamento de Informática. Universidad de Vigo

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación

Estructuras de datos: Árboles binarios de

3. COLA DE PRIORIDAD DEFINICION (I)

Reconocímíentes y Agradecimientos 5 Indice 6 Prólogo 11

ARREGLOS DEFINICION GENERAL DE ARREGLO

Algorítmica y Lenguajes de Programación. Ordenación (i)

Capítulo 3 DIVIDE Y VENCERÁS

UNIVERSIDAD AUTONOMA DE BAJA CALIFORNIA DIRECCION GENERAL DE ASUNTOS ACADEMICOS PROGRAMA DE ASIGNATURA

Cómo ordenar una lista de números?

Problemas de Recursividad

CAPÍTULO 7 ALGORITMOS Y SU COMPLEJIDAD

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

Tema 10- Representación Jerárquica: Tema 10- Representación Jerárquica: Árboles Binarios

Algoritmos y Programación Clase 8

Algoritmos: Diseño de algoritmos por inducción

1. Sea A una matriz cuadrada n x n, conteniendo la siguiente información en cada fila i. para 1 j k n para k

Vectores y matrices. Arrays Declaración Creación Acceso a los elementos de un array Manipulación de vectores y matrices

7.4. UTILIDADES DE LAS PILAS

Tema 2. El lenguaje JAVA

Capítulo 6. Relaciones. Continuar

Algoritmos de ordenación

Estructuras de Datos. Montículos. Montículos. Montículos. Tema 3. Montículos. Definiciones básicas: Definiciones básicas:

Capítulo V Operaciones Booleanas

Algoritmos y Estructuras de Datos

Java para programadores

Algoritmos de Búsqueda y Ordenamiento

7. Agrupamiento (clustering)

greedy (adj): avaricioso, voraz, ávido, codicioso, glotón

Análisis probabilístico y Algoritmos Aleatorizados

Diseño de algoritmos paralelos

Preliminares. Tipos de variables y Expresiones

Fundamentos de Programación Visual Basic

NetC.Time. Historia. Tito Agudelo Pedro Fula Yesid Gutierrez Oscar Munevar

Apuntes de Algoritmos y Estructuras de Datos, Programación III, Fac. de Informática UNLP. Alejandro Santos. 7 de agosto de

Estructuras de Datos. Estructuras de Datos para Conjuntos Disjuntos

Aprender a desarrollar con JavaScript

Contenido. Capítulo 1. Introducción a lenguaje C 1

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Arboles Binarios de Búsqueda

Estructuras en LabVIEW.

MATEMATICAS DISCRETAS

Universidad de Cantabria

Algoritmos sobre secuencias y conjuntos de datos

ELO320 Estructuras de Datos y Algoritmos. Arboles Binarios. Tomás Arredondo Vidal

Tutorial 11. Temas. Búsqueda Clasificación Estructura de Java Collection Problemas del tutorial Ejercicios de diseño. Búsqueda

TEORÍA DE GRAFOS Ingeniería de Sistemas

UNIVERSIDAD NACIONAL DE INGENIERÍA CENTRO DE EXTENSIÓN Y PROYECCIÓN SOCIAL

ALGORITMICA III Capitulo I ANALISIS DE ALGORITMOS

La eficiencia de los programas

Algoritmos sobre Grafos

ALT: Algorithm Learning Tool

: Algorítmica y Estructura de Datos I

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Multiplicación de enteros Algoritmo clásico 1234*5678 = 1234* (5* *100+7*10+8) = 1234*5* *6* *7* *8 Operaciones bási

OPTIMIZACIÓN VECTORIAL

Código IN_0035. Nombre WORD Categoría INFORMÁTICA. Modalidad ONLINE. Duración 50 HORAS. Vídeo. Audio. Objetivos


Árboles de Búsqueda Binaria. Agustín J. González ELO-320: Estructura de Datos y Algoritmos

INTELIGENCIA EN REDES DE COMUNICACIONES PRÁCTICA FINAL. Ignacio Ribas Ramos Miguel Flecha Lozano Ingeniería de Telecomunicaciones

Introducción al Análisis de Algoritmos

ESTRUCTURA DE DATOS: ARREGLOS

Índice general. Capítulo 1 Conceptos básicos. Capítulo 2 Controles básicos I. Pág. N. 1

UNIVERSIDAD AUTÓNOMA DE YUCATÁN FACULTAD DE MATEMÁTICAS MISIÓN

El lenguaje C. 1. Identificadores, constantes y variables

Sincronización en base a relojes. relojes

Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad

3. ESTRUCTURAS DE DATOS NO LINEALES

Procesadores de lenguaje Tema 6 La tabla de símbolos

ESTADÍSTICA DESCRIPTIVA

Prof. Dr. Paul Bustamante

MICROSOFT EXCEL 2010

Árboles binarios de búsqueda

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Método de diferencias finitas para ecuaciones diferenciales parciales elípticas. (Parte II)

Transcripción:

Algoritmos de ordenación Análisis y Diseño de Algoritmos Algoritmos de ordenación Algoritmos básicos: Θ(n 2 ) Ordenación por inserción Ordenación por selección Ordenación por intercambio directo (burbuja) Algoritmos más eficientes Mergesort Quicksort Heapsort Shellsort Algoritmos para casos especiales Binsort (ordenación por urnas) 1

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden total (con las propiedades reflexiva, simétrica y transitiva). El objetivo de la ordenación es encontrar una secuencia de los elementos de X e σ(1) (1),,e σ(n) tal que se verifique: e σ(1) e σ(n) (n) 2 Introducción Observaciones Los datos pueden ser simples o complejos. El orden se establece de acuerdo al campo clave. Los conjuntos de datos pueden tener duplicados. Si se mantiene el orden relativo de los datos con clave repetida en el conjunto de datos original, el algoritmo se dice que es estable. 3

Introducción Tipos de algoritmos de ordenación Algoritmos de ordenación interna: En memoria principal (acceso aleatorio) Algoritmos de ordenación externa: En memoria secundaria (restricciones de acceso). 4 Aplicaciones Aplicaciones evidentes: Mostrar los ficheros de un directorio. Mostrar un listado ordenado del contenido de una base de datos (p.ej. listado alfabético). Ordenar los resultados de una búsqueda en Internet (p.ej p.ej. Google PageRank). Problemas que resultan más sencillos de resolver con los datos ordenados: Realizar una búsqueda (p.ej. búsqueda binaria). Encontrar la mediana. Encontrar el par más cercano. Identificar outliers / anomalías. Detectar duplicados. 5

Aplicaciones Otras aplicaciones (puede que no tan evidentes) : Compresión de datos. Informática gráfica. Planificación de tareas. Balanceado de carga en un ordenador paralelo. Biología computacional. Simulación (p.ej. sistemas de partículas). Árbol generador minimal [MST: Minimum Spanning Tree] Gestión de la cadena de suministro [SCM: Supply Chain Management] Recomendaciones de libros en Amazon.com 6 Ordenación por selección En cada iteración, se selecciona el menor elemento del subvector no ordenado y se intercambia con el primer elemento de este subvector: 7

Ordenación por selección void selectionsort (double v[]) { double tmp; int i, j, pos_min; int N = v.length; for (i=0; i<n-1; i++) { // Menor elemento del vector v[i..n-1] pos_min = i; for (j=i+1; j<n; j++) if (v[j]<v[pos_min]) pos_min = j; // Coloca el mínimo en v[i] tmp = v[i]; v[i] = v[pos_min]; v[pos_min pos_min] = tmp; 8 Ordenación por selección void selectionsort (double v[]) { double tmp; int i, j, pos_min; int N = v.length; for (i=0; i<n-1; i++) { // Menor elemento del vector v[i..n-1] pos_min = i; for (j=i+1; j<n; j++) if (v[j]<v[pos_min]) pos_min = j; // Coloca el mínimo en v[i] tmp = v[i]; v[i] = v[pos_min]; v[pos_min pos_min] = tmp; 9

Ordenación por inserción En cada iteración, se inserta un elemento del subvector no ordenado en la posición correcta dentro del subvector ordenado. 10 Ordenación por inserción En cada iteración, se inserta un elemento del subvector no ordenado en la posición correcta dentro del subvector ordenado. 11

Ordenación por inserción void insertionsort (double v[]) { double tmp; int i, j; int N = v.length; 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; 12 Método de la burbuja Ordenación por intercambio directo IDEA: Los elementos más ligeros ascienden 13

Método de la burbuja void bubblesort (double v[]) { double tmp; int i,j; int N = v.length; for (i = 0; i < N 1; i++) for (j = N 1; j > i; j--) if (v[j] < v[j-1]) { tmp = v[j]; v[j] = v[j-1]; v[j-1] = tmp; 14 Método de la burbuja Mejora: Usar un centinela y terminar cuando en una iteración del bucle interno no se produzcan intercambios. void bubblesort(double[] v) { boolean swapped = true; int i, j = 0; double tmp; while (swapped) { swapped = false; j++; for (i = 0; i < v.length - j; i++) if (v[i] > v[i + 1]) { tmp = v[i]; v[i] = v[i + 1]; v[i + 1] = tmp; swapped = true; 15

Análisis de eficiencia Ordenación por selección N 2 /2 comparaciones y N intercambios. Ordenación por inserción N 2 /4 comparaciones y N 2 /8 intercambios en media El doble en el peor caso. Casi lineal para conjuntos casi ordenados. Ordenación por burbuja N 2 /2 comparaciones y N 2 /2 intercambios en media (y en el peor caso). Lineal en su versión mejorada si el vector está ordenado. 16 Mergesort Algoritmo de ordenación divide y vencerás : 1. Dividir nuestro conjunto en dos mitades. 2. Ordenar recursivamente cada mitad. 3. Combinar las dos mitades ordenadas: O(n). 17

Mergesort A L G O R I T H M S A L G O R I T H M S Dividir O(1) Ordenar 2T(n/2) A G H I L M O R S T Mezclar O(n) 18 Mergesort Cómo combinar eficientemente dos listas ordenadas? Usando un array auxiliar y un número lineal de comparaciones: Controlar la posición del elemento más pequeño en cada mitad. Añadir el más pequeño de los dos a un vector auxiliar. Repetir hasta que se hayan añadido todos los elementos. A Optimización: In-place merge (Kronrud, 1969) Cantidad constante de almacenamiento extra. 19

Mergesort A A G 20 Mergesort A G H A G H I 21

Mergesort A G H I L A G H I L M 22 Mergesort A G H I L M O A G H I L M O R 23

Mergesort A G H I L M O R S A G H I L M O R S T 24 Mergesort Cómo combinar dos listas ordenadas eficientemente? Usando un array auxiliar y un número lineal de comparaciones: Controlar la posición del elemento más pequeño en cada mitad. Añadir el más pequeño de los dos a un vector auxiliar. Repetir hasta que se hayan añadido todos los elementos. A Optimización: In-place merge (Kronrud, 1969) Cantidad constante de almacenamiento extra. 25

Mergesort 26 Mergesort: Eficiencia T ( n) 1, = 2T ( n / 2) + n, n n = 1 > 1 T(n) n T(n/2) T(n/2) 2(n/2) T(n/4) T(n/4) T(n/4) T(n/4) log 2 n 4(n/4)... T(n / 2 k )... T(2) T(2) T(2) T(2) T(2) T(2) T(2) T(2) n/2 (2) n log 2 n 27

Mergesort: Eficiencia T ( n) 1, = 2T ( n / 2) + n, n n = 1 > 1 Expandiendo la recurrencia: T ( n) n = 2T ( n / 2) n + 1 = T ( n / 2) n / 2 + 1 = L = = T ( n / 4) n / 4 T ( n / n) n / n log 2 n + 1+ 1 + + + 1 123 L log2n 28 Mergesort: Eficiencia T ( n) 1, = 2T ( n / 2) + n, n n = 1 > 1 Usando el método de la ecuación característica: t i = T ( 2 i ) i i i ti = 2ti 1 + 2 ti = c1 2 + c2i2 log ( ) log ( ) ( ) 12 2 n 2 n T n = c + c2 log2( n)2 = c1n+ c2n log2( n ) T ( n) es O( nlog2n) 29

Quicksort 1. Se toma un elemento arbitrario del vector, al que denominaremos pivote (p). 2. Se divide el vector de tal forma que todos los elementos a la izquierda del pivote sean menores que él, mientras que los que quedan a la derecha son mayores que él. 3. Ordenamos, por separado, las dos zonas delimitadas por el pivote. 30 Quicksort void quicksort (double v[], int izda, int dcha) { int pivote; // Posición del pivote if (izda<dcha) { pivote = partir (v, izda, dcha); quicksort (v, izda, pivote-1); quicksort (v, pivote+1, dcha); Uso: quicksort (vector, 0, vector.length-1); 31

Quicksort Obtención del pivote Mientras queden elementos mal colocados con respecto al pivote: Se recorre el vector, de izquierda a derecha, hasta encontrar un elemento situado en una posición i tal que v[i] > p. Se recorre el vector, de derecha a izquierda, hasta encontrar otro elemento situado en una posición j tal que v[j] < p. Se intercambian los elementos situados en las casillas i y j (de modo que, ahora, v[i] < p < v[j]). 32 Quicksort 33

Quicksort int partir (double v[], int primero, int ultimo) { // Valor del pivote double pivote = v[primero]; // Variable auxiliar double temporal; int izda = primero+1; int dcha = ultimo; do { // Pivotear while ((izda<= <=dcha) && (v[izda]<=pivote)) izda++; while ((izda izda<= <=dcha) && (v[dcha]>pivote)) dcha--; if (izda < dcha) { temporal = v[izda]; v[izda izda] = v[dcha]; v[dcha dcha] = temporal; dcha--; izda++; while (izda <= dcha); // Colocar el pivote en su sitio temporal = v[primero]; v[primero] = v[dcha]; v[dcha dcha] = temporal; // Posición del pivote return dcha; 34 Quicksort: Eficiencia En el peor caso T(n) = T(1) + T(n-1) + c n O(n 2 ) Tamaño de los casos equilibrado (idealmente, usando la mediana como pivote) T(n) = 2T(n/2) + c n O(n log n) Promedio n 1 n 1 1 2 T ( n) = T ( n i) + T ( i) + cn= T ( i) + cn O( nlogn n n i= 1 [ ] ) i= 1 35

Heapsort Algoritmo de ordenación de la familia del algoritmo de ordenación por selección basado en la construcción de un árbol parcialmente ordenado ( heap ). Heapsort O(n log n) 36 Heapsort: Eficiencia 1. Construcción inicial del heap: n operaciones de inserción O(log n) sobre un árbol parcialmente ordenado O(n log n). 2. Extracción del menor/mayor elemento del heap: n operaciones de borrado O(log n) sobre un árbol parcialmente ordenado O(n log n). Por tanto, el heapsort es O(n log n). 37

Shellsort Mejora del algoritmo de ordenación por inserción: Compara elementos separados por varias posiciones y, en varias pasadas, de saltos cada vez menores, ordena el vector (Donald Shell, 1959). 38 Shellsort Mejora del algoritmo de ordenación por inserción: Compara elementos separados por varias posiciones y, en varias pasadas de saltos cada vez menores, ordena el vector (Donald Shell, 1959). Inserción O(n 2 ) Shellsort O(nlog 2 n) 39

Bucket sort & Binsort Se divide el array en un conjunto de urnas y cada urna se ordena por separado: O(n 2 ) Bajo ciertas condiciones (claves entre 0 y N-1 sin duplicados), la ordenación se puede hacer en O(n): void binsort (int[] v) { for (int i = 0; i < v.length; i++) while (v[i]!= i) { int tmp = v[v[i]]; v[v[i]] = v[i]; v[i] = tmp; 40 Otros algoritmos Radix sort Histogram sort Counting sort = ultra sort = math sort Tally sort Pigeonhole sort Bead sort Timsort Smoothsort 41

Resumen Burbuja Selección 42 Resumen Inserción Shellsort 43

Resumen Heapsort Quicksort 44 Resumen Timsort: Mergesort + Ordenación por inserción 45