ALGORITMO Y ESTRUCTURA DE DATOS II UNIDAD 3 ORDENAMIENTO Y BUSQUEDA MARCOS RODRIGUEZ /4/2019ALGORITMO Y ESTRUCTURA DE DATOS II 1 Prof. Edwin Lopez
ALGORITMO Y ESTRUCTURA DE DATOS II UNIDAD 3 ORDENAMIENTO Y BUSQUEDA 3.5 Mezcla directa (Intercalación) 3.6 Mezcla natural (Intercalación) 3.7 Busqueda secuencial 3.8 Busqueda binaria 3.9 Busqueda hash 8/4/2019 ALGORITMO Y ESTRUCTURA DE DATOS II 2 MARCOS RODRIGUEZ
Ordenación externa Mezcla directa (Intercalación) Mezcla natural (Intercalación) Metodos de busqueda Busqueda secuencial Busqueda bicotómica (binaria) Busqueda hash 8/4/ UNIDAD 3 ORDENAMIENTO Y BUSQUEDA ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
La idea central de este algoritmo consiste en realizar de forma sucesiva una partición y una fusión que produce secuencias ordenadas de longitud cada vez mayor. En la primera pasada la partición es de longitud 1 y la fusión produce secuencias ordenadas de longitud 2. En la segunda pasada la partición es de longitud 2 y la fusión produce secuencias ordenadas de longitud 4. Este proceso se repite hasta que la longitud de la partición sea menor o igual al número de elementos del archivo original. Ejemplo. Considere el archivo F con los elementos 324, 230, 942, 700, 714, 139, 6, 915, 890 y 717, y los archivos auxiliares F1 y F2. El proceso de ordenamiento según la descripción del algoritmo anterior seria: 8/4/ Mezcla directa (Intercalación) ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
F: 324, 230, 942, 700, 714, 139, 6, 915, 890, 717 T. Partición: 1 Partición: Se construye tomando un número para cada una de las particiones F1: 324, 942, 714, 6, 890 F2: 230, 700, 139, 915, 717 Fusión: Se fusionan las dos particiones comparando el menor de la partición va primero F: 230, 324, 700, 942, 139, 714, 6, 915, 717, 890 T. Partición: 2 Partición: Se construye tomando dos números para cada una de las particiones F1: 230, 324, 139, 714, 717, 890 F2: 700, 942, 6, 915 8/4/ Mezcla directa (Intercalación) ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
Partición: //parte repetida F1: 230, 324, 139, 714, 717, 890 F2: 700, 942, 6, 915 Fusión: F: 230, 324, 700, 942, 6, 139, 714, 915, 717, 890 T. Partición: 4 Partición: F1: 230, 324, 700, 942, 717, 890 F2: 6, 139, 714, 915 8/4/ Mezcla directa (Intercalación) ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
Fusión: F: 6, 139, 230, 324, 700, 714, 915, 942, 717, 890 T. Partición: 8 Partición: F1: 6, 139, 230, 324, 700, 714, 915, 942 F2: 717, 890 Fusión F: 6, 139, 230, 324, 700, 714, 717, 890, 915, 942 8/4/ Mezcla directa (Intercalación) ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
La idea central de este algoritmo consiste en realizar particiones tomando secuencias ordenadas de máxima longitud en lugar de secuencias ordenadas de tamaño fijo previamente determinadas, como la intercalación directa. Posteriormente se realiza la fusión de esas secuencias ordenadas, alternándolas entre los dos archivos auxiliares. Repitiendo este proceso, se logra que el archivo quede completamente ordenado. Para aplicar este algoritmo, se necesitarán cuatro archivos. El archivo original y tres archivos auxiliares. De estos cuatro archivos, dos serán considerados de entrada y dos de salida, alternativamente en cada paso del algoritmo. El proceso termina cuando al finalizar un paso, el segundo archivo de salida quede vacío y el primero queda completamente ordenado. Ejemplo. Considere el archivo F con los elementos 324, 230, 942, 700, 714, 139, 6, 915, 890 y 717, y los archivos auxiliares F1, F2 y F3. El proceso de ordenamiento según el algoritmo anterior seria: 8/4/ Mezcla natural (Intercalación) ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
F: 324, 230, 942, 700, 714, 139, 6, 915, 890, 717 Partición inicial F1: 324, 700, 714, 6, 915, 717 F2: 230, 942, 139, 890 Fusión-Partición F: 230, 324, 700, 714, 942 F3: 6, 139, 890, 915, 717 8/4/ Mezcla natural (Intercalación) ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
Fusión-Partición F1: 6, 139, 230, 324, 700, 714, 890, 915, 942 F2: 717 Fusión-Partición F: 6, 139, 230, 324, 700, 714, 717, 890, 915, 942 F3: (sin elementos) 8/4/ Mezcla natural (Intercalación) ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
Consiste en buscar el elemento comparándolo secuencialmente (de ahí su nombre) con cada elemento del arreglo hasta encontrarlo, o hasta que se llegue al final. 8/4/ Busqueda secuencial ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
Se utiliza cuando el vector en el que queremos determinar la existencia de un elemento está previamente ordenado. Este algoritmo reduce el tiempo de búsqueda considerablemente, ya que disminuye exponencialmente el número de iteraciones necesarias. Está altamente recomendado para buscar en arrays de gran tamaño. Por ejemplo, en uno conteniendo elementos, realiza como máximo 26 comparaciones (en el peor de los casos). 8/4/ Busqueda binaria ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
8/4/ ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
8/4/ Busqueda binaria ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
Existe un método que puede aumentar la velocidad de búsqueda donde los datos no necesitan estar ordenados y esencialmente es independiente del número n. Este método se conoce como transformación de claves o hashing. El hashing consiste en convertir el elemento almacenado (numérico o alfanumérico) en una dirección (índice) dentro del array. Funciones Hash más usadas: 1. Hash de División: Dado un diccionario D, se fija un número m >= |D| (m mayor o igual al tamaño del diccionario) y que sea primo no cercano a potencia de 2 o de 10. Siendo k la clave a buscar y h(k) la función hash, se tiene h(k)=k%m (Resto de la división k/m). 8/4/ Busqueda hash ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ
2. Hash de Multiplicación Si por alguna razón, se necesita una tabla hash con tantos elementos o punteros como una potencia de 2 o de 10, será mejor usar una función hash de multiplicación, independiente del tamaño de la tabla. Se escoge un tamaño de tabla m >= |D| (m mayor o igual al tamaño del diccionario) y un cierto número irracional φ (normalmente se usa 1+5^(1/2)/2 o 1-5^(1/2)/2). De este modo se define h(k)= Suelo(m*Parte fraccionaria(k*φ)) 8/4/ Busqueda hash ALGORITMO Y ESTRUCTURA DE DATOS IIMARCOS RODRIGUEZ