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 ordenamiento, Diapositivas de Diseño de Algoritmos

resumen de algoritmos de ordenamiento

Tipo: Diapositivas

2021/2022

Subido el 10/04/2023

daniel-quintero-8
daniel-quintero-8 🇨🇴

1 documento

1 / 21

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
ALGORITMOS DE ORDENAMIENTO
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15

Vista previa parcial del texto

¡Descarga algoritmos de ordenamiento y más Diapositivas en PDF de Diseño de Algoritmos solo en Docsity!

ALGORITMOS DE ORDENAMIENTO

HEAP SORT

 (^) En informática , heapsort es un algoritmo de clasificación basado en comparaciones. Heapsort se puede considerar como un ordenamiento de selección mejorado : como el ordenamiento de selección, heapsort divide su entrada en una región ordenada y una no ordenada, y reduce iterativamente la región no ordenada extrayendo el elemento más grande e insertándolo en la región ordenada. A diferencia del ordenamiento por selección, heapsort no pierde tiempo con un escaneo de tiempo lineal de la región no ordenada; por el contrario, la ordenación del montón mantiene la región sin clasificar en una estructura de datos del montón para encontrar más rápidamente el elemento más grande en cada paso.  (^) Aunque en la práctica es algo más lento en la mayoría de las máquinas que una ordenación rápida bien implementada , tiene la ventaja de un tiempo de ejecución O ( n log n ) en el peor de los casos más favorable. Heapsort es un algoritmo in situ , pero no es un tipo estable

ALGORITMO

 (^) El algoritmo Heapsort implica preparar la lista convirtiéndola primero en un montón máximo. Luego, el algoritmo intercambia repetidamente el primer valor de la lista con el último valor, disminuyendo en uno el rango de valores considerados en la operación de montón y tamizando el nuevo primer valor en su posición en el montón. Esto se repite hasta que el rango de valores considerados tiene un valor de longitud.  (^) Los pasos son:

  1. Llame a la función buildMaxHeap () en la lista. También conocido como heapify (), esto crea un montón a partir de una lista en operaciones O (n).
  2. Cambie el primer elemento de la lista con el elemento final. Disminuya el rango considerado de la lista en uno.
  3. Llame a la función siftDown () en la lista para tamizar el nuevo primer elemento a su índice apropiado en el montón.
  4. Vaya al paso (2) a menos que el rango considerado de la lista sea un elemento.  (^) La operación buildMaxHeap () se ejecuta una vez y su rendimiento es O ( n ). La función siftDown () es O (log n ) y se llama n veces. Por lo tanto, el rendimiento de este algoritmo es O ( n + n log n ) = O ( n log n ).

PSEUDOCÓDIGO

 (^) La siguiente es una forma sencilla de implementar el algoritmo en pseudocódigo. Las matrices son de base cero y swapse utilizan para intercambiar dos elementos de la matriz. El movimiento 'hacia abajo' significa desde la raíz hacia las hojas, o de índices más bajos a más altos. Tenga en cuenta que durante la clasificación, el elemento más grande está en la raíz del montón en a[0], mientras que al final de la clasificación, el elemento más grande está en a[end].  (^) El procedimiento heapsort (a, count) es de entrada: una matriz desordenada a de longitud count (Construya el montón en la matriz a para que el valor más grande esté en la raíz) acumular (a, contar) (El siguiente ciclo mantiene los invariantes de que un [0: end] es un montón y cada elemento más allá del final es mayor que todo lo anterior (por lo que un [end: count] está en orden ordenado)) fin ← cuenta - 1 while end> 0 do (a [0] es la raíz y el valor más grande. El intercambio lo mueve delante de los elementos ordenados). intercambio (a [final], a [0]) (el tamaño del montón se reduce en uno) fin ← fin - 1 (el intercambio arruinó la propiedad del montón, así que restáuralo) siftDown (a, 0, end)

QUICKSORT

 (^) el ordenamiento rápido utiliza divide y vencerás, así que es un algoritmo recursivo. La manera en que el ordenamiento rápido utiliza divide y vencerás es un poco diferente de como lo hace el ordenamiento por mezcla. En el ordenamiento por mezcla, el paso de dividir casi no hace nada, y todo el trabajo real ocurre en el paso de combinar. El ordenamiento rápido es lo contrario: todo el trabajo real ocurre en el paso de dividir. De hecho, el paso de combinar en el ordenamiento rápido no hace absolutamente nada.  (^) El ordenamiento rápido tiene un par de otras diferencias con el ordenamiento por mezcla. El ordenamiento rápido funciona en el lugar y el tiempo de ejecución para el peor caso es tan malo como el del ordenamiento por selección y el de inserción:. Pero el tiempo de ejecución de su caso promedio es tan bueno como el del ordenamiento por mezcla:  (^) Entonces, ¿por qué pensar acerca del ordenamiento rápido cuando el ordenamiento por mezcla es al menos igual de bueno? Esto se debe a que el factor constante oculto en la notación Θ grande para el ordenamiento rápido es bastante bueno. En la práctica, el ordenamiento rápido supera al ordenamiento por mezcla y supera de manera significativa al ordenamiento por selección y por inserción.

1. Vence al ordenar de manera recursiva los subarreglos array[p..q-1] (todos los elementos a la izquierda del pivote, los cuales deben ser menores o iguales que el pivote) y array[q+1..r] (todos los elementos a la derecha del pivote, los cuales deben ser mayores que el pivote). 2. Combina al hacer nada. Una vez que el paso de conquistar ordena de manera recursiva, ya terminamos. ¿Por qué? Todos los elementos a la izquierda del pivote, en array[p..q-1], son menores o iguales que el pivote y están ordenados, y todos los elementos a la derecha del pivote, en array[q+1..r], son mayores que el pivote y están ordenados. ¡Los elementos en array[p..r] tienen que estar ordenados!

  1. Piensa acerca de nuestro ejemplo. Después de ordenar de manera recursiva los subarreglos a la izquierda y a la derecha del pivote, el subarreglo a la izquierda del pivote es [2, 3, 5], y el subarreglo a la derecha del pivote es [7, 9, 10, 11, 12, 14]. Así que el subarreglo tiene [2, 3, 5], seguido de 6, seguido de [7, 9, 10, 11, 12, 14]. El subarreglo está ordenado.

 (^) Los casos base son subarreglos con menos de dos elementos, justo como en el ordenamiento por mezcla. En el ordenamiento por mezcla nunca ves un subarreglo sin elementos, pero si puedes verlos en el ordenamiento rápido si los otros elementos en el subarreglo son todos menores que el pivote o son todos mayores que el pivote.  (^) Volvamos al paso de vencer y recorramos el ordenamiento recursivo de los subarreglos. Después de hacer la primera partición tenemos los subarreglos [5, 2, 3] y [12, 7, 14, 9, 10, 11], con 6 como el pivote.  (^) Para ordenar el subarreglo [5, 2, 3], escogemos a 3 como el pivote. Después de hacer la partición, tenemos [2, 3, 5]. El subarreglo [2], a la izquierda del pivote, es un caso base cuando hacemos recursividad, como lo es el subarreglo [5], a la derecha de pivote.  (^) Para ordenar el subarreglo [12, 7, 14, 9, 10, 11], elegimos 11 como el pivote. Después de hacer la partición, tenemos [7, 9, 10] a la izquierda del pivote y [14, 12] a la derecha. Entonces los subarreglos están ordenados, resultando en [7, 9, 10], seguido por 11, seguido por [12, 14].

 (^) Acomodamos los elementos mas pequeños a la izquierda del pivote y los mas grandes a la derecha y nos queda 2 sub arreglos para ordenar de forma recursiva

 (^) Complejidad lineal: pivote como el ultimo elemento y se recorre desde el inicio hasta el final

 (^) Recuerde que comparamos el primero con el ultimo

 (^) Hacemos un ultimo intercambio el 6 con el 6 y ya los elementos de la izquierda son mas pequeños y los de la derecha son mas grandes

QuickSort(arr, inicio, pivote -1) QuickSort(arr, pivote -1, fin)