Ordenamiento y Búsqueda

Documentos relacionados
Unidad 4. Arreglos y Cadenas

Métodos de ordenamiento y búsqueda en vectores

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.

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

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

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

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

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

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

CAPITULO II ORDENAMIENTO Y BUSQUEDA. Ivan Medrano Valencia

PROGRAMACIÓN ESTRUCTURADA

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

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

Métodos de ordenamiento:

Métodos de ordenamiento:

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

Guía práctica de estudio 4 Algoritmos de búsqueda parte 1

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

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

Curso de Programación 1

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

Ordenamiento (Sorting)

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

Tema 6. Ordenación, búsqueda e intercalación interna

Análisis de algoritmos

Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas

Tema: Métodos de Ordenamiento. Parte 1.

Porque usar Arreglos?

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

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

Algoritmos de Ordenación

Decrementa y vencerás II

Estructuras de Datos y Algoritmos

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

Algoritmos y Programación Clase 8

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

Esquema de Dividir y Vencer

Decrementa y vencerás

Tema 6. Estructuras de Datos Estáticas

Tema 3. Análisis de costes

Universidad Nacional de Misiones. Informática

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

Tipos de Datos Abstractos

Algoritmos de Ordenamiento

Lenguaje de Diseño: Estructuración de Datos

Tema 1. Ordenación, búsqueda e intercalación interna

Unidad 5. Arreglos: Vectores y Matrices. Prof. Eliana Guzmán U.

Recursividad. 1.1 Concepto de Recursividad. Objetivos. Metodología de la Programación II Entender el concepto de recursividad.

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 1.

Algoritmos de Ordenamiento II

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

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

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

Programa de teoría. Algoritmos y Estructuras de Datos II. 2. Divide y vencerás. 1. Análisis de algoritmos

TEMA 1 La eficiencia de los algoritmos

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

Tema 2. Divide y vencerás.

<tipo> Tipo de dato de los elementos del vector

Lenguaje de Diseño. Primera Parte. Segundo Cuatrimestre 2017

Algoritmos de ordenación básicos

Lenguaje de Diseño. Primera Parte. Resolución de Problemas y Algoritmos. Primer Cuatrimestre Ing. En Informática e Ing.

5. ESTRUCTURAS DE REPETICIÓN

Notación Asintótica 2

Pruebas de Validez (Correctness) de Algorithmos.

Complejidad computacional (Análisis de Algoritmos)

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

Tema: Métodos de Ordenamiento. Parte 3.

TEMA 1. Recursividad. Recursividad CONTENIDO DEL TEMA

DISEÑO DE UN ANIMADOR DE ALGORITMOS DE BÚSQUEDA Y ORDENACIÓN ( ID2012/055 )

Transcripción:

Ordenamiento y Búsqueda Facultad de Ciencias de la Computación Juan Carlos Conde R. Object-Oriented Programming I

Contenido 1 Introducción 2 Intercambio directo 3 Inserción directa 4 Selección directa 5 Métodos Avanzados 6 Métodos de Búsqueda 1 / 34

Contenido 1 Introducción 2 Intercambio directo 3 Inserción directa 4 Selección directa 5 Métodos Avanzados 6 Métodos de Búsqueda 2 / 34

Concepto de Clasicación I La clasicación se dene como el proceso de reacomodar un conjunto de objetos en un orden especíco. Su nalidad es facilitar la búsqueda posterior de los miembros pertenecientes al conjunto clasicado. En todo lugar donde se guarden objetos, que luego es necesario recuperar, se lleva a cabo un procesos de clasicación. Por ejemplo: en una biblioteca, en los diccionarios, en las bodegas, etc. 3 / 34

Concepto de Clasicación II Debido a la dependencia entre el algoritmo a utilizar y la estructura de los datos por procesar, los métodos de clasicación se dividen en: 1. Clasicación interna (de arreglos). Se produce en la memoria de la computadora. 2. Clasicación externa (de archivos). Es necesaria cuando el número de objetos es demasiado grande que no cabe en la memoria principal. 4 / 34

Clasicación Interna I Existen muchos métodos de clasicación interna; algunos directos y otros más renados. En general: los algoritmos más simples requieren más movimientos de elementos y comparaciones, los algoritmos renados son más complejos en su implementación. 5 / 34

Clasicación Interna II Vamos a suponer que los objetos a clasicar son registros que contienen uno o más campos. Uno de los campos, llamado clave, es de un tipo para el cual está denida la relación de ordenamiento lineal. La clave puede ser entera, real y de tipo carácter o cualquier otro tipo para la cual la relación "menos o igual que" o "menor que" este denida. 6 / 34

Clasicación Interna III El problema de la clasicación consisten en ordenar una secuencia de registros de tal forma que los valores de sus claves formen una secuencia creciente. Esto es, dados los registros: r 1, r 2,..., r n, con valores de clave k 1, k 2,..., k n, respectivamente, debe resultar la misma secuencia de registros en orden: r i1, r i2,..., r in, tal que k i1 k i2... k in. 7 / 34

Clasicación Interna IV Los métodos de clasicación interna pueden dividirse en tres categorías principales según el método en el que se basan: 1. Clasicación por intercambio 2. Clasicación por inserción 3. Clasicación por selección 8 / 34

Contenido 1 Introducción 2 Intercambio directo 3 Inserción directa 4 Selección directa 5 Métodos Avanzados 6 Métodos de Búsqueda 9 / 34

Método de la Burbuja I Uno de los métodos de clasicación más simples que puede haber es el llamado "clasicación de burbuja" (bubblesort). la idea básica de este algoritmo es imaginar que los elementos son como burbujas en un tanque de agua con pesos correspondientes a sus claves, cada pase sobre el arreglo produce el ascenso de una burbuja hasta su nivel adecuado de peso. 10 / 34

Método de la Burbuja II Vamos a suponer que tenemos un arreglo de registros A, el número de registros a ordenar es n, y que el campo clave contiene la clave del registro. El algoritmo de burbuja en su versión más sencilla se presenta a continuación: Procedimiento burbuja( A[], n ) Inicio Para i 1 hasta n-1 hacer Para j n hasta i+1 hacer Si A[j].clave < A[j-1].clave entonces Intercambiar( A[j], A[j-1] ) Fin_si Fin_para Fin_para Fin_burbuja 11 / 34

Método de la Burbuja III El algoritmo Intercambiar se presenta a continuación: Procedimiento Intercambiar( x, y ) Inicio tmp x x y y tmp Fin Si aplicamos el algoritmo a un arreglo de enteros como el siguiente, los recorridos que se obtienen son: Arreglo A = { 6, 9, 12, 67, 3, 0, 2 } con n = 7. Obsérvese que en este caso no es necesario declarar un arreglo de registros. 12 / 34

Método de la Burbuja IV RECORRIDO RESULTADO i=1 0, 6, 9, 12, 67, 3, 2 i=2 0, 2, 6, 9, 12, 67, 3 i=3 0, 2, 3, 6, 9, 12, 67 i=4 0, 2, 3, 6, 9, 12, 67 i=5 0, 2, 3, 6, 9, 12, 67 i=6 0, 2, 3, 6, 9, 12, 67 Este algoritmo admite mejoras. En el ejemplo anterior se puede observar que en las últimas 3 iteraciones ya no hay intercambios, tomando en cuenta esto, el algoritmo se puede mejorar. 13 / 34

Método de Vibración El algoritmo por vibración es una variante del algoritmo burbuja pero mejorado. Este algoritmo consiste en "recordar" cuál fue el último intercambio realizado y en qué momento. Procedimiento shakesort( A[], n ) Inicio l 2 r n k n Repetir Para j r hasta l hacer Si A[j-1] > A[j] entonces Intercambiar( A[j-1], A[j] ) k j Fin_si Fin_para l k+1 Para j l hasta r hacer Si A[j-1] > A[j] entonces Intercambiar( A[j-1], A[j] ) k j Fin_si Fin_para r k-1 Hasta l > r Fin_shakesort 14 / 34

Contenido 1 Introducción 2 Intercambio directo 3 Inserción directa 4 Selección directa 5 Métodos Avanzados 6 Métodos de Búsqueda 15 / 34

Método de Inserción Directa I Este método consiste en reubicar en el lugar correcto cada uno de los N elementos a ordenar, es decir, en el i-ésimo recorrido se "inserta" el i-ésimo elemento A[i] en el lugar correcto, entre A[1], A[2],..., A[N], los cuales fueron ordenados previamente. Existen dos condiciones distintas que podrían dar terminado el proceso de clasi- cación: 1. Se encuentra un elemento A[j] que tiene una clave menor que la de A[i] 2. El extremo izquierdo de la secuencia destino es alcanzado 16 / 34

Método de Inserción Directa II Para facilitar el proceso de mover A[i], es útil usar la técnica del centinela, en A[1], cuya clave es igual a la de A[i]. El algoritmo se muestra a continuación: Procedimiento inserciondirecta( A[], n ) Inicio Para i 2 hasta n hacer aux A[i] j i Mientras j > 1 y aux < A[j-1] hacer Intercambiar( A[j], A[j-1] ) j j-1 Fin_mientras A[j] aux Fin_para Fin_inserciondirecta 17 / 34

Método de Inserción Directa III Nótese que la secuencia destino A[2]... A[i-1], donde se debe insertar el elemento, ya está ordenada así que este algoritmo puede ser mejorado determinando el punto de inserción. La elección es una búsqueda binaria* que prueba la secuencia destino en la mitad y continúa buscando hasta encontrar el punto de inserción. Este algoritmo de inserción modicado recibe el nombre de Inserción Binaria y se presenta a continuación: 18 / 34

Método de Inserción Binaria I Procedimiento insercionbinaria( A[], n ) Inicio Para i 2 hasta n hacer x A[i] l 1 r i Mientras l < r hacer m ( (l+r) / 2 ) Si A[m] <= x entonces l l+1 Sino r m Fin_si Fin_mientras Para j i hasta r+1 (decremento en 1) hacer A[j] A[j-1] Fin_para A[r] x Fin_para Fin_insercionbinaria 19 / 34

Método de Inserción Binaria II En el algoritmo anterior se observa que a veces, en lugar de mejorar el algoritmo, este se deteriora puesto que hay que realizar más pasos por la inserción de un elemento. Esto implica ½mayor tiempo! Directa. que el utilizado por la clasicación de Inserción 20 / 34

Contenido 1 Introducción 2 Intercambio directo 3 Inserción directa 4 Selección directa 5 Métodos Avanzados 6 Métodos de Búsqueda 21 / 34

Método de Selección Directa I Este método se basa en los siguientes principios: 1. Seleccionar el elemento que tenga la clave menor 2. Intercambiarlo con el primer elemento A[1] 3. Repetir después estas operaciones con los n 1 elementos restantes, luego con n 2 elementos hasta que no quede más que un elemento (el más grande) 22 / 34

Método de Selección Directa II Procedimiento selecciondirecta( A[], n ) Inicio Para i 1 hasta n-1 hacer aux A[i] k i Para j i+1 hasta n hacer if A[j] < aux entonces k j aux A[k] Fin_si Fin_para A[k] A[i] A[i] aux Fin_para Fin_selecciondirecta 23 / 34

Contenido 1 Introducción 2 Intercambio directo 3 Inserción directa 4 Selección directa 5 Métodos Avanzados 6 Métodos de Búsqueda 24 / 34

Inserción por decremento decreciente Un renamiento de la inserción directa fue propuesto por D.L. Shell en 1959. Procedimiento shellsort( A[], n ) Inicio inc n Hacer inc inc/2 Para k 1 hasta inc Para i inc+k hasta n (incremento i i+inc) j i Mientras j-inc>0 y A[j]<A[j-inc] Intercambiar( A[j], A[j-inc] ) j j-inc Fin_mientras Fin_para Fin_para Hasta inc<=1 Fin_shellsort 25 / 34

Método por Partición I A este método también se le conoce como clasicación rápida o Quicksort y su inventor fue C.A.R. Hoare. Este método se basa en el hecho de que los intercambios han de efectuarse en distancias largas para que logren su máxima eciencia. El procedimiento se activa a sí mismo recursivamente. 26 / 34

Método por Partición II Procedimiento quicksort(a[], L, R) Inicio i L j R pivote A[(L+J) / 2] Repetir Mientras A[i] < pivote hacer i i+1 Fin_mientras Mientras pivote < A[j] hacer j j-1 Fin_mientras Si i <= j entonces Intercambiar(A[i], A[j]) i i+1 j j-1 Fin_si Hasta i > j Si L < j entonces quicksort(a, L, j) Fin_si Si i < R entonces quicksort(a, i, R) Fin_si Fin_quicksort 27 / 34

Contenido 1 Introducción 2 Intercambio directo 3 Inserción directa 4 Selección directa 5 Métodos Avanzados 6 Métodos de Búsqueda 28 / 34

Concepto de Búsqueda La tarea de búsqueda es una de las más frecuentes en programación. Comúnmente cada elemento de la colección es un registro con un campo que actúa como una "clave"; la tarea consiste en hallar un elemento cuya clave sea igual al argumento de búsqueda. Para los siguientes algoritmos vamos a suponer que la colección de los datos en donde vamos a buscar es ja y de tamaño n. 29 / 34

Búsqueda Lineal I Cuando los elementos no llevan un orden o no hay información sobre ellos se utiliza la búsqueda lineal, es decir, comparar uno a uno los elementos hasta encontrar el deseado. Existen dos condiciones que ponen n a la búsqueda: 1. Se encuentra el elemento 2. Se ha rastreado toda la colección y no se encuentra el elemento 30 / 34

Búsqueda Lineal II Procedimiento búsquedalineal(a[], n, elemento) Inicio i 1 Mientras (i <= n) y (A[i] <> elemento) hacer i i+1 Fin_mientras Fin_busquedalineal Si i al nal es n entonces el elemento no fue encontrado, pero sino entonces quiere decir que el elemento esta en la posición i-ésima del arreglo. 31 / 34

Búsqueda Binaria I Para utilizar este algoritmo es necesario que la colección este ordenada, así se puede acelerar el proceso de búsqueda. La idea clave consiste en: Inspeccionar un elemento elegido al azar, por ejemplo A[m] y compararlo con el elemento de búsqueda x, Si es igual a x, la búsqueda termina, Si es menor que x, inferimos que todos los elementos con índices menores que o iguales a m pueden ser eliminados, y nuestra búsqueda ahora se centra en los demás elementos. Esto se repite mientras el índice inicial sea menor o igual que el nal (L y R) y el elemento no sea encontrado. 32 / 34

Búsqueda Binaria II Generalmente el elemento no se elige al azar, sino que se toma el elemento que se encuentra a la mitad del arreglo. Procedimiento busquedabinaria(a[], n, x) Inicio L 1 R n found false Mientras L<R y not (found) hacer m [(L+R) / 2] Si A[m]=x entonces found true Sino Si A[m] < x entonces L m+1 Sino R m Fin_si Fin_si Fin_mientras Fin_busquedabinaria 33 / 34

Un hombre con ideas es fuerte, un hombre con ideales es invensible Juan Carlos Conde R. juanc.conde@cs.buap.mx 34 / 34