Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Algoritmos de estructura de datos, Guías, Proyectos, Investigaciones de Estructuras de Datos y Algoritmos

algoritmos de ordenamiento y búsqueda

Tipo: Guías, Proyectos, Investigaciones

2019/2020

Subido el 01/12/2020

leolaija
leolaija 🇲🇽

1 documento

1 / 21

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Instituto Tecnológico Nacional de México
Campus Culiacán
“Estructura de datos”
Proyecto de investigación unidad 5 y 6
Nombre:
Leonardo Antonio Laija Salomón
Maestra:
Elizabeth Ceceña Niebla
Semestre:
Ago-Dic 2020
Horario:
09:00-10:00
Fecha de entrega:
29 de noviembre de 2020
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Vista previa parcial del texto

¡Descarga Algoritmos de estructura de datos y más Guías, Proyectos, Investigaciones en PDF de Estructuras de Datos y Algoritmos solo en Docsity!

Instituto Tecnológico Nacional de México

Campus Culiacán

“Estructura de datos”

Proyecto de investigación unidad 5 y 6

Nombre:  Leonardo Antonio Laija Salomón Maestra:  Elizabeth Ceceña Niebla Semestre: Ago-Dic 2020 Horario: 09:00-10: Fecha de entrega: 29 de noviembre de 2020

Algoritmos seleccionados

5. Métodos de ordenamiento 5.1. Algoritmos de ordenamiento internos. 5.1.1. Burbuja. 5.1.2. Quicksort. 5.1.3. ShellSort. 5.1.4. Radix. 5.2. Algoritmos de ordenamiento externos. 5.2.1. Intercalación. 5.2.2. Mezcla Directa. 5.2.3. Mezcla Natural 6. 6. Métodos de búsqueda 6.1. Búsqueda secuencial. 6.2. Búsqueda binaria. 6.3. Búsqueda por funciones de HASH

Algoritmos de ordenamiento interno

=1694 Operaciones = O(1) Prueba de escritorio Para mi prueba de escritorio adjunté un método nuevo a la clase burbuja llamado mostrar y lo agregué al final de cada ciclo for interno para obtener los datos precisos: Con el cual obtuve los siguientes resultados:

Método Quicksort

Código y definición

El método de ordenación Quicksort fue desarrollado por Hoare en el año 1960. Es el algoritmo de ordenación más rápido. Se basa en la técnica divide y vencerás, que consiste en ir subdividiendo el array en arrays más pequeños, y ordenar éstos. Para hacer esta división, se toma un valor del array como pivote, y se mueven todos los elementos menores que este pivote a su izquierda, y los mayores a su derecha. Después de elegir el pivote se realizan dos búsquedas:  Una de izquierda a derecha, buscando un elemento mayor que el pivote  Otra de derecha a izquierda, buscando un elemento menor que el pivote. Cuando se han encontrado los dos elementos anteriores, se intercambian, y se sigue realizando la búsqueda hasta que las dos búsquedas se encuentran. La implementación del método de ordenación Quicksort es claramente recursiva. Ventajas:  Requiere de pocos recursos en comparación a otros métodos de ordenamiento.  En la mayoría de los casos, se requiere aproximadamente N log N operaciones.  Ciclo interno es extremadamente corto.  No se requiere de espacio adicional durante ejecución (in-place processing).

Con el cual obtuve los siguientes resultados:

Método Shellsort

Código y definición

Es una mejora del método de inserción directa, utilizado cuando el array tiene un gran número de elementos. Cualquier algoritmo de ordenación que intercambia elementos adyacentes (como los algoritmos burbuja, selección o inserción) tiene un tiempo promedio de ejecución de orden cuadrático (n2). El método Shell mejora este tiempo comparando cada elemento con el que está a un cierto número de posiciones llamado salto, en lugar de compararlo con el el que está justo a su lado. Este salto es constante, y su valor inicial es N/2 (siendo N el número de elementos, y siendo división entera). Ventajas:  Es un algoritmo muy simple teniendo un tiempo de ejecución aceptable.  Es uno de los algoritmos más rápidos.  No requiere memoria adicional  Fácil implementación. Desventajas:  Su complejidad es difícil de calcular y depende mucho de la secuencia de incrementos que utilice.  Shell Sort es un algoritmo no estable porque se puede perder el orden relativo inicial con facilidad.  Es menos eficiente que los métodos Merge, Heap y Quick Sort.  Realiza numerosas comparaciones e intercambios.

Este método se basa en la clasificación de los datos que queremos ordenar por medio de una clave, esta clave debe ser una característica de cada dato que pueda ser descompuesta en elementos mas pequeños y que permita clasificar los elementos ordenándolos poco a poco. Ventajas:  Radix Sort es estable, preservando la orden de elementos iguales.

 Radix Sort funciona en un tiempo lineal, en comparación de varios otros métodos de ordenamiento.  El tiempo de ordenar cada elemento es constante, ya que no se hacen comparaciones entre elementos.  Radix Sort es particularmente eficiente cuando se tratan con grandes grupos de números cortos. Desventajas:  Radix Sort no funciona tan bien cuando los números son muy largos, ya que el total de tiempo es proporcional a la longitud del número más grande y al número de elementos a ordenar. Eficiencia Análisis de eficiencia

  • el lazo externo se realiza k veces
  • el primer lazo (meter los elementos en cajas) se realiza n veces
  • los lazos anidados para volcar las cajas en el array se realizan en el peor caso b+n-1 veces (O(n) cuando b<<n)
  • luego su eficiencia es O(k·n) Prueba de escritorio

Algoritmos de ordenamiento externo

Intercalación

Código y definición

Lo que hace el algoritmo es unir ambos arreglos en uno solo y ordenarlos intercalando:

Mezcla Directa

Código y definición

El ordenamiento por mezcla es un algoritmo recursivo que divide continuamente una lista por la mitad. Si la lista está vacía o tiene un solo ítem, se ordena por definición (el caso base). Si la lista tiene más de un ítem, dividimos la lista e invocamos recursivamente un ordenamiento por mezcla para ambas mitades. Ventajas:  Método de ordenamiento estable mientras la función de mezcla sea implementada correctamente.

Este método, conocido también como mezcla equilibrada es una optimización del método de mezcla directa. La idea central de este método consiste en realizar las particiones tomando secuencias ordenadas de máxima longitud en lugar de secuencias de tamaño fijo previamente determinadas. Luego realiza la fusión de las secuencias ordenadas, alternativamente sobre 2 archivos aplicando acciones de forma repetida para que el archivo original se ordene. Ventajas:  Mejora la complejidad de la mezcla directa para vectores inicialmente ordenados.  Se comporta como mezcla directa al aprovechar la fusión de tramos Desventajas:  Es mucha mas lenta que la mezcla directa Eficiencia Tiene una eficiencia de O(n²) en general lo que la hace muy lenta Prueba de escritorio

Para esta prueba mas sencilla se utilizó el mismo arreglo que todas las demás, pero esta vez se mezcló de forma natural por lo que tomo solo 2 iteraciones ya que el arreglo está algo ordenado.

Métodos de búsqueda

Comparación general

Algoritmo Ventajas Desventajas Eficiencia Sencillez Burbuja -Es fácil de -Muchas O(1) Es realmente

implementar -Eficaz lecturas -Mucha memoria muy sencillo de crear y usar Quicksort -Es muy rápido -Pocos recursos -A veces se hace O(n²) -No sirve para dinámicos O(n log n) Es algo mas complejo que el de burbuja, pero realmente rápido Shellsort -Fácil implementación -No requiere más memoria -Es menos rápido -Es más difícil calcular su complejidad O(n2/3) Es algo complicado de entender el funcionamiento, pero el código es fácil de hacer Radix -Tiempo de ordenamiento constante -Es estable -No sirve con números muy grandes -Es algo complejo de entender O(k*n) Es bastante complicado de entender, es un método que utiliza el valor de integer y es complicado de crear el Código Intercalación -Es rápido -Sencillo de implementar -No ordena las sub-listas -Se tiene que apoyar en otro método interno O(1) Es muy fácil de entender, pero es algo inútil que se apoye en el método de burbuja Mezcla directa -Estable -Efectivo -Recursivo O(1) Es algo complicado de entender, pero es bastante efectivo Mezcla natural -Aprovecha fusión de tramos -Es muy lento O(n²) Este se es una mejora del directo y es mas lento Búsqueda Secuencial -Es muy sencilla de implementar -Es el único que puede buscar en listas no ordenadas -Consume mucha memoria -Para buscar mas valores iguales se tiene que buscar en todo el arreglo O(n) Este método es el mas sencillo y compacto, funciona con cualquier arreglo, pero es algo lento y cuanto más