Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso 2021-2022
Hadriel Fernando Quintero Ceballos
Contenido
• Tema 1 - Métodos de almacenamiento y búsqueda mediante
cálculo de dirección basado en clave (hashing).
• Tema 2 - Backtracking: Algoritmos de vuelta atrás.
• Tema 3 - Algoritmos de clasificación y ordenación.
• Tema 4 - Algoritmos de búsqueda.
Algoritmos de clasificación y
ordenación
Algoritmia
Esquemas simples de clasificación
• El problema de la clasificación consiste en ordenar los elementos de
un vector dado de acuerdo con un determinado criterio (por ejemplo,
de menor a mayor).
• Se supondrá que el vector que se quiere ordenar es de la forma:
Esquemas simples de clasificación
• En este caso, también, será posible aplicar los algoritmos sobre
vectores de tipos de datos diferentes que los números naturales.
• En cualquier caso es necesario que existan funciones de comparación
(“menor que”) entre los elementos del vector, según el criterio por el
cual este se quiere ordenar.
• Para simplificar las explicaciones de este tema, sin embargo, los
algoritmos se explicarán sobre vectores de naturales.
Esquemas simples de clasificación
• La necesidad de ordenar los elementos de una colección es un tipo de
problema que aparece con mucha frecuencia, y como consecuencia
existen una gran cantidad de algoritmos de clasificación.
• Estos se basan en diferentes estructuras de datos (como el vector, por
ejemplo), imponen diferentes tipos de requerimientos sobre los datos
a ordenar, y tienen diferentes complejidades computacionales, tanto
a nivel de memoria como a nivel del tiempo de ejecución.
Esquemas simples de clasificación
• En general los algoritmos más eficientes (complejidad más baja) son
los más complejos y menos intuitivos.
• Aquí se estudiarán en total cinco de estos algoritmos, todos ellos muy
conocidos.
• Los tres primeros (Burbuja, Inserción, y Selección) son bastante
sencillos, aunque no son muy eficientes.
• Los otros dos (Merge Sort y Quicksort) son tan eficientes como se
puede esperar de un algoritmo genérico para que resuelva el
problema de la clasificación.
Algoritmo de la Burbuja: Bubble Sort
• El algoritmo de ordenación de la burbuja es posiblemente el
algoritmo más conocido y también quizás uno de los más fáciles de
recordar.
• Su nombre tan característico pretende recordar, intuitivamente, su
funcionamiento.
• Supongamos que tenemos una lista de números naturales, situados
en vertical y que los números más pequeños ‘pesan menos’ y por
tanto ‘suben a la superficie’, hasta la primera posición de la lista, tal y
como lo haría una burbuja de aire dentro del agua.
• Es fácil de entender, pues, que este algoritmo recibe este nombre
implementa esta idea.
Algoritmo de la Burbuja: Bubble Sort
Algoritmo de la Burbuja: Bubble Sort
• El bucle interno (líneas 7-11) empieza siempre desde el final del
vector y hace ‘subir’ aquellos valores que tienen, ‘sobre él’, un
elemento mayor.
• Tras la primera iteración del bucle externo, el elemento menor (‘más
ligero’) deberá subir hasta la primera posición del vector.
• Después de la segunda iteración los dos elementos menores se
encontrarán en las dos primeras posiciones, y así sucesivamente
hasta que todo el vector está ordenado.
Algoritmo de la Burbuja: Bubble Sort
• Nótese la presencia de una acción auxiliar, llamada aquí
Intercambiar() (líneas 16-22).
• Su función es únicamente la de intercambiar los valores de dos
posiciones del vector.
Algoritmo de Inserción: Insertion Sort
• El algoritmo de Inserción está inspirado en un principio diferente que
el de la Burbuja.
• En este caso el objetivo es conseguir que, en cada iteración i del
algoritmo, todos los elementos desde 1 hasta i estén ordenados.
• Así pues, el algoritmo ordena primero las dos primeras posiciones del
vector. Luego se toma el elemento en la tercera posición y se sitúa en
la posición apropiada de forma que los tres primeros elementos
queden ordenados.
• Este proceso se repite, tomando cada vez un elemento más del
vector, hasta que al final todo el vector está ordenado.
Algoritmo de Inserción: Insertion Sort
Algoritmo de Inserción: Insertion Sort
• Cabe observar cómo en este algoritmo también es necesario
intercambiar repetidamente los valores de dos posiciones del vector.
• Por este motivo se reutiliza la acción Intercambiar() que se ha
definido en el Algoritmo de la burbuja.
Algoritmo de Selección: Selection Sort
• El principio del algoritmo de selección consiste en buscar, para cada
iteración i, cuál es el i-ésimo número más pequeño.
• Cuando lo ha encontrado la intercambia con el elemento que, en
aquel momento, está en la posición i del vector que se está
ordenando, tal y como se muestra en la siguiente imagen.
Algoritmo de Selección: Selection Sort
Algoritmo de Selección: Selection Sort
• Se puede observar como, una vez más, se ha podido reutilizar la
acción Intercambiar() en este algoritmo.
• Esto simplifica su implementación y facilita su comprensión.
Algoritmo de Selección: Selection Sort
• Consideremos cuántas veces se llama a la función Intercambiar().
• Este parámetro es significativo en el caso de los algoritmos de
clasificación que para ordenar los elementos puede ser necesario
realizar muchos intercambios.
• Además, los elementos a intercambiar no tienen porque ser
sencillamente números naturales, sino que, en general, podrían ser
estructuras de datos que ocupan bastante memoria.
Algoritmo de Selección: Selection Sort
• Así pues, intercambiar dos elementos de este tipo puede tener un
coste importante, lo que justifica el estudio del número de veces que
se llama a Intercambiar() en cada algoritmo.
Clasificación por intercalación: Merge Sort
• Los algoritmos anteriores de clasificación representan algoritmos
relativamente sencillos, fáciles de recordar y de implementar.
• Su eficiencia, sin embargo, no es tan buena como cabría esperar.
Clasificación por intercalación: Merge Sort
• El algoritmo Merge Sort consiste en dividir el vector que se quiere
ordenar en dos partes iguales, y después ordenar cada parte
independientemente.
• Una vez se tienen las dos mitades del vector ordenadas, se combinan
los resultados para obtener el vector inicial ordenado.
• Nótese que para ordenar cada mitad del vector este algoritmo utiliza,
también, el propio algoritmo Merge Sort, es decir, que se trata de un
algoritmo claramente recursivo.
• La base de recursividad, o caso trivial, se da cuando el vector a
ordenar está formado por un único elemento.
Clasificación por intercalación: Merge Sort
• En este caso, consideremos que el vector ya está ordenado.
• El Algoritmo implementa estas ideas.
• Este algoritmo utiliza la función Combina() que debe tomar dos
vectores ordenados (ascendentemente, en este caso), aunque no
tiene porque haber ninguna ordenación entre los elementos de cada
vector.
• El resultado debe ser los elementos de ambos vectores ordenados
(ascendentemente, en este caso).
Clasificación por intercalación: Merge Sort
Clasificación rápida: QuickSort
• Por último, estudiaremos el algoritmo quicksort, que es uno de los
algoritmos genéricos más conocidos y más rápidos que se conocen
para resolver el problema de la clasificación.
• Veremos que en el caso promedio tiene complejidad como el
MergeSort, aunque, de hecho, se comporta mejor que este.
• El precio a pagar por esta eficiencia es, como suele ser habitual, que
el algoritmo es bastante más complejo que los anteriores.
Clasificación rápida: QuickSort
Clasificación rápida: QuickSort
• La idea básica del QuickSort consiste también en dividir el vector de
entrada que hay que ordenar en dos partes, y después ordenar cada
una de las partes.
• La diferencia con respecto a MergeSort sin embargo, consiste en
cómo se hace esta división del vector inicial.
• El algoritmo QuickSort se puede resumir en los siguientes pasos:
1. Elegir un Elemento pivotal.
2. Particionar el vector en dos partes, de forma que una contiene los
elementos que son menores que el elemento pivotal, y el otro contiene los
que son más grandes.
3. Una vez particionado el vector, se ordena cada partición recursivamente
usando el propio algoritmo quicksort.
Complejidades de los algoritmos de clasificación