Ordenación, Clasificación

Slides:



Advertisements
Presentaciones similares
Posición Relativa de dos rectas
Advertisements

Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Complejidad Computacional
2 Estructuras lineales.. Qué es una estructura? La estructura es una manera de conectar los valores y de manera automática conectarlos de manera que tengan.
IBD Clase 7.
LICENCIATURA EN SISTEMAS COMPUTACIONALES EN ADMINISTRACION
Complejidad de Algoritmos
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
ALGORITMOS DE ORDENAMIENTO
Paricial IV Ing. Esmeralda Elizabeth Rodríguez Rodríguez
Método para resolver colisiones
Estructuras de Datos (ARRAYS)
ORDENACION POR EL METODO DE LA SACUDIDA (SHAKER SORT)
Ordenamiento Radix Equipo 3 Arenas Sapien Jorge Iván
Curso de Programación 1 Plan 97
Bloque 2: Divide y Vencerás
MANEJO DE ARRAYS EN C.
MÉTODOS DE CLASIFICACION
PROGRAMACION DE ESTRUCTURAS DE DATOS
PROGRAMACION DE ESTRUCTURAS DE DATOS IV. MÉTODOS DE ORDENAMIENTO.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Algoritmos de Búsqueda
3. INTRODUCCIÓN A LA PROGRAMACIÓN
METODO DE ORDENAMIENTO POR SELECCIÓN.
Tecnología de la Programación Javier Nieves Acedo Standar Template Library (STL)
Herramientas para el acceso directo a memoria en C++
Vectores en java.
2 Acciones y funciones 2.1 Concepto
Introducción a los Conceptos de Bases de Datos Docente: Ing. Marleny Soria Medina.
Algoritmos de ordenación
“Fórmulas” de la Eficiencia Energética e impacto económico y social
PROGRAMACION II.  Es un conjunto de datos no necesariamente del mismo tipo, los cuales se podrán manipular o realizar cualquier operación sobre cada.
Unidad II Aplicaciones con Arreglos en Java y C++

Algoritmos.
Manejo de Vectores y Matirces
Objetivo: Facilitar la búsqueda de los elementos del conjunto ordenado
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Inteligencia artificial

Estructuras de Datos Arreglos.
Búsqueda. Búsqueda Secuencial Es el método de búsqueda más sencillo En un arreglo o lista ligada consiste en ir visitando cada uno de sus elementos y.
COMPUTACION 2009 Clase 6 Clase 7.
Clase 10: Estructuras de datos y arreglos.
Métodos de búsqueda Unidad 6.
Estructura de Datos II Equipo 4 Equipo 7 Acosta Montiel Miguel A.
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.
Sistemas de numeración
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
PROGRAMACIÓN PROCEDIMENTAL
Ing. En sistemas computacionales Estructuras de datos Tema: método de ordenamiento burbuja.
Aplicación de estructuras de datos
Ordenación y Búsqueda.
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
EXPRESIONES Y SENTENCIAS
Arreglos Programación I MC Beatriz Beltrán Martínez.
1. Desarrollo de Programas iterativos usando invariante
Parte I. Estructuras de Datos.
Análisis de Algoritmos
Fundamentos de Programación
Ordenamiento en lenguaje c
MIA - Grupo 5 Unidad 2.
ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández

LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO FACULTAD DE INGENIERÍA COORDINACIÓN DE MATERIAS PROPEDÉUTICAS INGENIERÍA EN SISTEMAS ENERGÉTICOS SUSTENTABLES.
1 Ordenación, Clasificación Introducción Algoritmos Complejidad.
Transcripción de la presentación:

Ordenación, Clasificación Introducción Algoritmos Complejidad

Introducción Ordenación o clasificación es el proceso de reordenar un conjunto de objetos en un orden específico. El propósito de la ordenación es facilitar la búsqueda de elementos en el conjunto ordenado. Existen muchos algoritmos de ordenación, siendo la diferencia entre ellos las ventajas de unos sobre otros en la eficiencia en tiempo de ejecución.

Introducción Los métodos de ordenación se pueden clasificar en dos categorías: ordenación de ficheros y ordenación de arrays. También suele llamarse ordenamiento externo e interno, debido a que los ficheros se guardan en la memoria externa (lenta) mientras que los arrays se almacenan en la memoria rápida del ordenador (interna). En esta sección sólo se aborda el ordenamiento interno.

Introducción El problema del ordenamiento puede establecerse mediante la siguiente ación: Dados los elementos: Ordenar consiste en permutar esos elementos en un orden: tal que dada una función de ordenamiento f:

Introducción Normalmente, la función de ordenamiento no es evaluada de acuerdo a una regla de computación determinada, pero se guarda como un componente explícito (campo) de cada item (elemento). El valor de ese campo se llama la llave del item. Un método de ordenamiento es estable si el orden relativo de elementos con igual llave permanece inalterado por el proceso de ordenamiento. Se entiende que los métodos de ordenamiento buscan un uso eficiente de la memoria por lo que las permutaciones de elementos se hará in situ, es decir, usando el mismo contenedor original.

Introducción En lo que sigue se considera que la estructura lineal (array, lista, vector o secuencia) a ordenar se representa por un array de objetos (números enteros): int a[ ] = new int[MAX]; siendo MAX el número máximo de elementos del array. El orden de los elementos después de la ordenación se considera ascendente.

Algoritmo burbuja Es un método caracterizado por la comparación e intercambio de pares de elementos hasta que todos los elementos estén ordenados. En cada iteración se coloca el elemento más pequeño (orden ascendente) en su lugar correcto, cambiándose además la posición de los demás elementos del array.

Algoritmo burbuja

Algoritmo burbuja

Algoritmo burbuja

Algoritmo burbuja

Algoritmo burbuja

Algoritmo burbuja for(i=n;i>0;i--) for(j=0;j<i-1;j++) if (a[j] > a[j+1]) { t=a[j]; a[j] = a[j+1]; a[j+1]=t; ninterc++; }

Algoritmo sacudida (shakesort) Es una mejora del algoritmo de burbuja en el que se registra la ocurrencia de un intercambio y el índice del último intercambio y se alterna la dirección de las pasadas consecutivas. Con ello una burbuja liviana en el lado “pesado” y una pesada en el lado “liviano” quedarán en orden en una pasada simple.

Algoritmo sacudida (shakesort) l=k+1; for(j=l; j<=r; j++) if (a[j-1]>a[j]) { t=a[j-1]; a[j-1] = a[j]; a[j]=t; k=j; ninterc++; } r=k-1; while (l<r); l=1; r=n-1; k=n-1; do { for(j=r; j>=l; j--) if (a[j-1]>a[j]) t=a[j-1]; a[j-1] = a[j]; a[j]=t; k=j; ninterc++; }

Algoritmo inserción Este método es usado por los jugadores de cartas. Los elementos están divididos conceptualmente en una secuencia destino y una secuencia fuente . En cada paso, comenzando con i=2 e incrementando i en uno, el elemento i-ésimo de la secuencia fuente se toma y se transfiere a la secuencia destino insertándolo en el lugar adecuado. En otras palabras, en el i-ésimo paso insertamos el i-ésimo elemento a[i] en su lugar correcto entre a[1], a[2],…., a[i-1], que fueron colocados en orden previamente.

Algoritmo inserción

Algoritmo inserción

Algoritmo inserción

Algoritmo inserción

Algoritmo inserción

Algoritmo inserción

Algoritmo inserción

Algoritmo inserción

Algoritmo inserción for(i=1;i<n;i++) { j=i-1; t=a[i]; while (j>=0 && t<a[j]) a[j+1] = a[j]; j=j-1; } a[j+1]=t;

Algoritmo selección En éste método, en el i-ésimo paso seleccionamos el elemento con la llave de menor valor, entre a[i],…, a[n] y lo intercambiamos con a[i]. Como resultado, después de i pasadas, el i-ésimo elemento menor ocupará a[1],…, a[i] en el lugar ordenado.

Algoritmo selección

Algoritmo selección

Algoritmo selección

Algoritmo selección

Algoritmo selección

Algoritmo selección

Algoritmo selección

Algoritmo selección

Algoritmo selección for(i=0;i<n-1;i++) { k=i; t=a[i]; for (j=i+1; j<n; j++) if (a[j] < t) t= a[j]; k=j; } a[k]= a[i]; a[i]= t;

Algoritmo rápido (Quicksort) La ordenación rápida se basa en el hecho que los intercambios deben ser realizados preferentemente sobre distancias grandes. El algoritmo a seguir es el mismo que se aplica cuando se quiere ordenar un gran montón de exámenes: Seleccionar un valor de división (L por ejemplo) y dividir el montón en dos pilas, A-L y M-Z. Después se toma la primera pila y se subdivide en dos, A-F y G-L por ejemplo. A su vez la pila A-F puede subdividirse en A-C y D-F. Este proceso continúa hasta que las pilas sean suficientemente pequeñas para ordenarlas fácilmente. El mismo proceso se aplica a la otra pila.

Algoritmo rápido (Quicksort) En este caso se toma un elemento x del array (el del medio por ejemplo), se busca en el array desde la izquierda hasta que >x, lo mismo se hace desde la derecha hasta encontrar <x. Después se intercambia esos elementos y se continúa ese proceso hasta que los índices se encuentren en la mitad del array. Se aplica el mismo proceso para la porción izquierda del array entre el extremo izquierdo y el índice derecho y para la porción derecha entre el extremo derecho y el último índice izquierdo.

Algoritmo rápido (Quicksort) Descripción del algoritmo: 1) Dividir : Si la secuencia S tiene 2 o más elementos, seleccionar un elemento x de S como pivote. Cualquier elemento arbitrario, como el último, puede servir. Elimiar los elementos de S dividiéndolos en 3 secuencias: L, contiene los elementos de S menores que x E, contiene los elementos de S iguales a x G, contiene los elementos de S mayores que x 2) Recursión: De forma recursiva ordenar L y G 3) Vencer: Finalmente, colocar nuevamente los elementos en S en orden, primero insertar los elementos de L, después E, y los elementos de G.

Idea de Quick Sort 1) Selección: tomar un elemento 2) Dividir: reordenar los elementos tal que x va a su posición final E 3) Recursión y Vencer: ordenar recursivamente

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

Arbol Quicksort

... Arbol Quicksort (final)

Quicksort In-Place Paso Dividir: l recorre la secuencia desde la izquierda, y r desde la derecha Se realiza un intercambio cuando l está en un elemento mayor que el pivote y r está en uno menor al pivote.

In Place Quick Sort (contd.) Un intercambio con el pivote completa el paso dividir cuando r < l

Algoritmo rápido (Quicksort) for (i=izq+1;i<=der;i++) if (a[i] < a[izq]) { tmp= a[++ult]; a[ult]= a[i]; a[i]=tmp; } tmp= a[izq]; a[izq]= a[ult]; a[ult]=tmp; qsort(izq,ult-1,a); qsort(ult+1,der,a); void qsort(int izq, int der, int a[]) { int i, ult, m, tmp; if (izq >= der) return; tmp= a[izq]; m= (izq+der)/2; a[izq]= a[m]; a[m]=tmp; ult=izq;

Ordenación directa por base (radix sort) A diferencia de otros métodos, radix sort considera la estructura de las llaves. Se asume que las llaves están representadas en un sistema de numeración M (M=radix), e.g., si M=2, las llaves están representadas en binario. Toma ventaja de la posición de cada dígito individual en la clave. Hay dos versiones de la ordenación radix: MSD (most significant digit), LSD (least significant digit). La ordenación se realiza comparando los bits en cada posición.

Ejemplo Radix sort Conjunto a ordenar: { 33, 60, 5, 15, 25, 12, 45, 70, 35, 7} frente cola cola_digitos[0] 60 70 cola_digitos[1] cola_digitos[2] 12 cola_digitos[3] 33 cola_digitos[4] cola_digitos[5] 5 15 25 45 35 cola_digitos[6] cola_digitos[7] 7 cola_digitos[8] cola_digitos[9]

Ejemplo Radix sort Conjunto a ordenar: { 33, 60, 5, 15, 25, 12, 45, 70, 35, 7} frente cola cola_digitos[0] 05 07 cola_digitos[1] 12 cola_digitos[2] 25 cola_digitos[3] 33 35 cola_digitos[4] cola_digitos[5] 45 cola_digitos[6] 60 cola_digitos[7] 70 cola_digitos[8] cola_digitos[9]

Radix sort directo Se examinan los bits de derecha a izquierda for k=0 to b-1 ordenar el array de forma estable tomando solo el bit k

Radix sort en enteros La ordenación resultante es estable:

Análisis de Tiempo de Ejecución Los algoritmos de burbuja, inserción, selección corren en O(n2). El algoritmo quicksort, montones corren en O(nlogn) El algoritmo radix sort es O(n)