Francisco J. Hernández López

Documentos relacionados
Métodos de Ordenamiento. Unidad VI: Estructura de datos

Algorítmica y Complejidad. Tema 3 Ordenación.

Algoritmos de Ordenamiento

Algoritmos sobre Listas

Análisis y Diseño de Algoritmos

Ordenamiento en Tiempo Lineal - Medianas y Ordenes sticas

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

CAPITULO II ORDENAMIENTO Y BUSQUEDA. Ivan Medrano Valencia

Estructuras de Datos II

Métodos de ordenamiento y búsqueda en vectores

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

5 Métodos de Ordenamiento. 5.1 Métodos de Ordenamiento Internos Burbuja Quicksort Heapsort Inserción Simple 5.1.

Estructura de datos y de la información Boletín de problemas - Tema 10

PROGRAMACIÓN ESTRUCTURADA

Programación I (Plan 1999) Algoritmos y Estructuras de Datos II (Plan 2009) Mgter. Oscar Adolfo Vallejos FaCENA - UNNE

ELO320 Estructuras de Datos y Algoritmos. Heap & HeapSort. Tomás Arredondo Vidal

Tema: Métodos de Ordenamiento. Parte 3.

Ordenamiento (Sorting)

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz TEMA 4. Montículos binarios (heaps)

Tema: Métodos de Ordenamiento. Parte 3.

localizar de un dato con un acceso directo y en una sola comparación de la llave. HASH

Laboratorio de Estructuras de Datos II

Francisco J. Hernández López

Ordenamiento - Sorting - Sortin

Métodos de ordenamiento:

Tema 10: Árbol binario de búsqueda

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica

11-Ordenar Definiciones 11.2 Selección 11.3 Intercambio 11.4 Inserción 11.5 Shellsort 11.6 Quicksort 11.7 Mergesort.

Ordenamiento y Búsqueda

Métodos de ordenamiento:

Recursividad. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Francisco J. Hernández López

23. Ordenación de vectores (tablas) Diego Gutiérrez

Métodos de Ordenamiento

EDA. Tema 8 Colas de Prioridad: Heaps

Tema: Métodos de Ordenamiento. Parte 1.

Algoritmos de Ordenación

Este método se basa en buscar el elemento menor el vector y colocarlo en la primera

TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN

ESTRUCTURA DE DATOS: Tema 5. Ordenamiento y Búsqueda

Árboles Binarios Ordenados Árboles AVL

Guía práctica de estudio 3

Estructuras de Datos y Algoritmos

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Divide-y-vencerás, backtracking y programación dinámica

EJERCICIOS PARA EL PRIMER PARCIAL (de exámenes pasados)

95.12 Algoritmos y Programación II Práctica 7: árboles

Tema 14: ÁRBOLES Algoritmos y estructuras de datos I - Tema 14 1

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Capítulo. Algoritmos de ordenación y búsqueda. Contenido. Introducción

Tema 2.- Ordenación (Parte I)

Eduardo Andrés Medina Ramírez Angel Robles Pérez MÉTODO DE ORDENAMIENTO QUICKSORT

Métodos de ordenamiento y búsqueda para datos en memoria principal

Examen de Estructuras de Datos y Algoritmos. (Modelo 2)

Examen de Estructuras de Datos y Algoritmos. (Modelo 1)

Sorting++ Herman Schinca. Clase de Junio de 2011

Tema 1. ORDENACIÓN, BÚSQUEDA E INTERCALACIÓN INTERNA (Algoritmos)

Métodos de ordenamiento y búsqueda para datos en memoria principal

Colas con prioridad, montículos y el heapsort. Lección 18

Porque usar Arreglos?

Apunte de cátedra: Ordenación de Arreglos

Tema 9. Recursividad

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Tema 6. Estructuras de Datos Estáticas

Tema: Métodos de Ordenamiento. Parte 1.

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Solución - práctico 10

Árboles RN Montículos

CURSO DE PROGRAMACIÓN COMPETITIVA URJC

Estructuras de datos: Árboles binarios de

Análisis y Diseño de Algoritmos

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

PRÁCTICA No. 9 RECORRIDOS EN ÁRBOLES BINARIOS

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Estructuras de Datos Clase 20 Árboles de búsqueda

<tipo> Tipo de dato de los elementos del vector

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Análisis de algoritmos

Algoritmos de Ordenamiento

Manual de prácticas del Laboratorio de Estructuras de Datos y Algoritmos II

Lecturas 7 y 8. Capítulo Ordenamiento

Estructura de Datos Árboles Árboles 2-3

ESTRUCTURAS DE DATOS Y ALGORITMOS

Lenguaje de Diseño: Estructuración de Datos

Estructuras de datos Listas y árboles

Estructura de datos y Algoritmos. Tema III Clasificación en memoria secundaria

El TAD Árbol. El TAD Árbol

Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 3: Divide y Vencerás

Análisis y Diseño de Algoritmos (AyDA) Isabel Besembel Carrera

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

El método main de la clase PruebaArbol, empieza creando una instancia de un objeto Árbol vacío y asigna su referencia a la variable árbol

Estructuras Dinámicas de datos.

Ordenamiento de un arreglo. Algoritmos y Estructuras de Datos I. Demostración. Cota inferior de complejidad tiempo para sorting

Estructura de Datos. Índice

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

Transcripción:

Francisco J. Hernández López fcoj23@cimat.mx

Acomodar algo en alguna secuencia especifica Objetos ordenados: Directorio telefónicos Registro de pacientes Libros en una biblioteca Cosas del hogar Se puede definir de la siguiente manera: Sea A una lista de N elementos A 1, A 2, A 3,, A N, entonces, ordenar significa permutar estos elementos de tal forma que queden de acuerdo con una distribución preestablecida Ascendente: A 1 A 2 A 3 A N Descendente: A 1 A 2 A 3 A N 2

Ordenación de arreglos Métodos directos Ordenación por intercambio (método de la burbuja) Ordenación por inserción Ordenación por selección Métodos logarítmicos Quicksort Heapsort Métodos lineales Counting sort Radix sort Bucket sort Ordenación de archivos 3

4

También conocido como: intercambio directo Se le llama burbuja por la forma en que se van acomodando los datos Fácil de programar y entender Poco eficiente (fuerza bruta) La idea básica del algoritmo consiste en comparar pares de elementos adyacentes e intercambiarlos entre sí hasta que se encuentren ordenados 5

El siguiente algoritmo ordena los elementos de un arreglo A de menor a mayor: 1. Repetir con i desde 1 hasta N 1 1. Repetir con j desde 0 hasta N i 1. Si (A j > A[j + 1]) entonces 1. aux A j 2. A[j] A j + 1 3. A[j + 1] aux 2. Fin si 2. Fin ciclo 2. Fin ciclo O N N 1 2 O N 2 6

1. Hacer i 1 y ban 0 2. Mientras i N 1 y ban == 0 repetir 1. Hacer ban 1 2. Repetir con j desde 0 hasta N i 1. Si (A j > A[j + 1]) entonces 1. aux A j 2. A[j] A j + 1 3. A[j + 1] aux 4. ban 0 2. Fin si 3. Fin ciclo 4. i i + 1 3. Fin ciclo O N 2 7

Es una optimización del método de la burbuja La idea es mezclar las dos formas en que se pueden realizar las comparaciones del método de la burbuja Hay dos etapas en cada iteración: De Derecha a Izquierda (pasando los elementos pequeños hacia la izquierda) De Izquierda a Derecha (pasando los elementos grandes hacia la derecha del arreglo) Una variable auxiliar almacena la posición del último elemento intercambiado Se finaliza cuando ya no hay más intercambios o cuando el contenido de la variable que guarda el extremo izquierdo es mayor que el de la variable derecha 8

1. Hacer IZQ 1, DER N 1 y k N 1 2. Mientras (DER IZQ) repetir 1. Repetir con i desde DER hasta IZQ 1. Si (A i 1 > A[i]) entonces 1. swap A i 1, A[i] 2. k i 2. Fin si 2. Fin ciclo 3. Hacer IZQ k + 1 4. Repetir con i desde IZQ hasta DER 1. Si (A i 1 > A[i]) entonces 1. swap(a i 1, A[i]) 2. k i 2. Fin si 5. Fin ciclo 6. Hacer DER k 1 3. Fin ciclo swap a, b Inicio 1. aux a 2. a b 3. b aux Fin O N 2 9

También conocido como el método de la baraja Algoritmo 1. Repetir con i desde 1 hasta N 1 1. Hacer AUX A[i] y k i 1 2. Mientras (k 0) y AUX < A k repetir 1. Hacer A k + 1 A[k] y k k 1 3. Fin ciclo 4. Hacer A[k + 1] AUX 2. Fin ciclo O N 2 10

Más eficiente que los presentados anteriormente Idea: Buscar el menor y colocarlo en la primer posición Luego se busca el segundo menor y se coloca en la segunda posición Y así sucesivamente 11

1. Repetir con i desde 0 hasta N 2 1. Hacer MENOR A[i] y k = i 2. Repetir con j desde i + 1 hasta N 1 1. Si (A j < MENOR) entonces 1. Hacer MENOR A[j] y k j 2. Fin si 3. Fin ciclo 4. Hacer A[k] A[i] y A[i] MENOR 2. Fin ciclo Número de movimientos en el arreglo: N 1 Tiempo de ejecución: O(N 2 ) 12

13

También conocido como: método rápido ordenación por partición Idea: Se toma un elemento X de una posición cualquiera del arreglo Se trata de ubicar a X en la posición correcta del arreglo, de tal forma que: Los elementos a la izquierda sean menores o iguales que X Los elementos a la derecha sean mayores o iguales que X Se repiten los pasos anteriores pero ahora para los elementos que están a la izquierda y a la derecha de X (podemos pensar en recursividad) El proceso termina cuando todos los elementos se encuentran en su posición correcta 14

Quicksort(INI, FIN) 1. Hacer IZQ INI, DER FIN, POS INI y ban 1 2. Mientras (ban == 1) repetir 1. Hacer ban = 0 2. Mientras A POS A DER y POS DER repetir 1. Hacer DER DER 1 3. Fin ciclo 4. Si POS DER entonces 1. swap A POS, A DER 2. POS DER 3. Mientras A POS A IZQ y (POS IZQ) repetir 1. Hacer IZQ IZQ + 1 4. Fin ciclo 5. Si POS IZQ entonces 1. ban = 1 2. swap A POS, A IZQ 3. POS IZQ 6. Fin si 5. Fin si 3. Fin ciclo 4. Si (POS 1 > INI) entonces 1. Quicksort(INI, POS 1) 5. Fin si 6. Si FIN > POS + 1 entonces 1. Quicksort POS + 1, FIN 7. Fin si Tiempo de ejecución, en promedio: O NlogN Tiempo de ejecución, en el peor caso: O N 2 15

También conocido como método del montículo Trabaja con árboles y considera dos operaciones: Construir un montículo Eliminar la raíz del montículo en forma repetida Un montículo debe cumplir la siguiente regla: Para todo nodo del árbol se debe cumplir que su valor sea mayor o igual que el valor de cualquiera de sus hijos 16

Para representar un montículo en un arreglo lineal se debe tener en cuenta para todo nodo k lo siguiente: El nodo k se almacena en la posición k correspondiente del arreglo El hijo izquierdo del nodo k se almacena en la posición 2 k El hijo derecho del nodo k se almacena en la posición 2 k + 1 5 3 4 A= 1 2 3 4 5 5 3 4 2 1 2 1 17

Se inserta el elemento en la primera posición disponible Se verifica si su valor es mayor que el de su padre, si se cumple esta condición entonces se efectúa el intercambio, si no se deja en la posición donde quedó. (esto se hace de forma recursiva desde las hojas hacia la raíz) Ejemplo: Insertar el 7 y el 6 5 3 4 7 3 5 7 3 6 2 1 7 2 1 4 6 2 1 4 5 18

inserta_monticulo(a, N) 1. Repetir con i desde 2 hasta N 1. Hacer k i y ban 1 2. Mientras (k > 1) y (ban == 1) repetir 1. Hacer ban 0 2. Si A k > A k/2 entonces 1. swap A k, A k/2 2. k = k/2 3. ban 1 3. Fin si 3. Fin ciclo 2. Fin ciclo 19

Se reemplaza la raíz con el elemento que ocupa la última posición del montículo Se verifica si el valor de la raíz es menor que el valor más grande de sus hijos, si se cumple la condición, entonces se efectúa el intercambio, si no, se deja en la posición donde quedó. (esto se hace de forma recursiva desde la raíz hacia las hojas) Ejemplo: Eliminar el 5 5 1 4 3 4 3 4 3 1 2 1 2 2 20

elimina_monticulo A, N 1. Repetir con i desde N hasta 2 1. Hacer AUX A i, A[i] A 1, IZQ 2, DER 3, k 1 y ban 1 2. Mientras (IZQ < i) y (ban == 1) repetir 1. Hacer MAYOR A[IZQ] y AP IZQ 2. Si MAYOR < A DER y DER i entonces 1. Hacer MAYOR A[DER] y AP DER 3. Fin si 4. Si AUX < MAYOR entonces 1. Hacer A[k] A[AP] y k AP 5. Si no 1. Hacer ban 0 6. Fin si 7. Hacer IZQ k 2 y DER IZQ + 1 3. Fin ciclo 4. Hacer A[k] AUX 2. Fin ciclo 21

heapsort(a, N) 1. inserta_monticulo(a, N) 2. elimina_monticulo A, N Para analizar el tiempo de ejecución es importante tomar en cuenta tanto la parte de creación del montículo así como su eliminación En ambas partes el tiempo de ejecución del algoritmo es: O NlogN heapsort garantiza que en el peor caso, su tiempo de ejecución es O NlogN a diferencia de quicksort 22

23

Asume que cada uno de los N elementos a ordenar es un entero en el rango 0 to k, para algún entero k Cuando k = O N, la ejecución del método es del orden O(N) Para cada elemento x se determina el número de elementos menores a x. Usando esta información, es posible posicionar al elemento x directamente en el arreglo 24

counting_sort A, B, k, N 1. Sea C[0,.., k] un nuevo arreglo 2. Para i = 0 hasta k hacer 1. C i = 0 3. Fin ciclo 4. Para j = 1 hasta N hacer 1. C A j = C A j + 1 5. Fin ciclo 6. Para i = 1 hasta k hacer 1. C i = C i + C i 1 7. Fin ciclo 8. Para j = N hasta 1 hacer 1. B C A j = A j 2. C A j = C A j 1 9. Fin ciclo O k O N O k O N Si k = O(N) entonces el orden del tiempo de ejecución del algoritmo será: O N 25

Se utilizó en las máquinas tabuladoras que se encargaban de ordenar las tarjetas perforadas Herman Hollerith (1887) Censo de los EU 26

Idea: Ordenar los números en 10 casillas (0 al 9), comenzando por el digito menos significativo (de derecha a izquierda) Luego, se unen todas las pilas de números considerando que los números de la casilla 0 deben quedar antes que los de la casilla 1 y así sucesivamente hasta la casilla 9 Entonces se vuelve a repetir el procedimiento, pero ahora considerando el segundo dígito menos significativo Algoritmo: radix_sort A, d 1. Para i = 1 hasta d 1. Ordenar A considerando el digito i 2. Fin ciclo Puede ser: O N 27

Suponer que se quiere ordenar N datos y además se sabe que siguen una distribución uniforme en el intervalo [0,.. k] La idea es dividir el intervalo en N pedazos (buckets) y hacer corresponder cada número a estos pedazos, por ejemplo a un número j le corresponde el pedazo Nj k Se puede implementar usando un arreglo, suponiendo que cada pedazo es una posición del arreglo y que cuando hay algún valor que va a dar a la misma posición, se puede utilizar una lista enlazada 28

bucket_sort(a, N, k) 1. Sea B 0,.., N un nuevo arreglo 2. Para i = 0 hasta N 1. Hacer B i una lista vacía 3. Fin ciclo 4. Para i = 1 hasta N 1. Insertar A i en la lista B 5. Fin ciclo 6. Para i = 0 hasta N NA i 1. Ordenar la lista B[i] con Inserción directa 7. Fin ciclo 8. Concatenar las listas B 0, B 1,, B N en orden k Ya que los datos siguen una distribución uniforme, entonces las listas son pequeñas y se puede esperar que el método sea: O N 29