Está en la página 1de 36

Clase 7

Más algoritmos muy fáciles


Notación 𝜃
0 ≤ 𝑐1 𝑔 𝑛 ≤ 𝑓 𝑛 ≤ 𝑐2 𝑔(𝑛)

𝑎𝑛2 + 𝑏𝑛 + 𝑐; Θ(𝑛2 )
Si 𝑐1 = 𝑎/4; 𝑐2 = 7𝑎/4 y 2 × max(|𝑏|/𝑎, 𝑐 /𝑎)

0 ≤ 𝑐1 𝑛2 ≤ 𝑎𝑛2 + 𝑏𝑛 + 𝑐 ≤ 𝑐2 𝑛2
Notaciones
Notación Definición Implica
El caso promedio de
𝑓 𝑛 = Θ(𝑛) 0 ≤ 𝑐1 𝑔 𝑛 ≤ 𝑓 𝑛 ≤ 𝑐2 𝑔(𝑛)
tiempo de ejecución
El peor caso de
𝑓 𝑛 = O(𝑛) 0 ≤ 𝑓 𝑛 ≤ 𝑐2 𝑔(𝑛)
ejecución para un 𝑛0
El mejor caso de
𝑓 𝑛 = Ω(𝑛) 0 ≤ 𝑐1 𝑔 𝑛 ≤ 𝑓 𝑛 tiempo de ejecución
para un 𝑛0
El peor caso de
𝑓 𝑛 = o(𝑛) 0 ≤ 𝑓 𝑛 < 𝑐2 𝑔(𝑛) ejecución para un 𝑛0
con baja precisión
El mejor caso de
𝑓 𝑛 = 𝜔(𝑛) 0 ≤ 𝑐1 𝑔 𝑛 < 𝑓 𝑛 ejecución para un 𝑛0
con baja precisión
Heapsort
Usando Binary Heaps
¿Cómo se define un Heap binario?
Max-Heapify
𝑂(lg 𝑛)
Ejemplo
¿Qué sucede si?
 Se llama la función Max-Heapify(A,i)
cuando el elemento A[i] es mayor que
sus hijos

 Se llama la función Max-Heapify(A,i)


cuando para 𝑖 > 𝐴. ℎ𝑒𝑎𝑝. 𝑠𝑖𝑧𝑒/2
Contrucción Bottom(s)-up
(Cheers Mate ;))

Realizar el pseudo código para la


creación de un heap binario a partir de
un arreglo.

 Escribir el loop invariant y demostrarlo


Resultado
𝑂(𝑛 ln 𝑛)

 𝑖 es la raíz de un heap binario


Ejemplo
Ahora si, Heap-Sort
𝑂(𝑛 ln 𝑛)

 El subarreglo 𝐴[1, . . , 𝑖] es un Max-Heap, que


contiene los 𝑖 menores elementos de 𝐴[1, … , 𝑛] y
𝐴[𝑖 + 1, … , 𝑛] contiene los mayores elementos de
𝐴[1, … , 𝑛]
Quick sort
 Tiene 𝑂 𝑛2

 Pero Θ(𝑛 ln 𝑛)

 Sort in place

 Utiliza la metodología divide and


conquer
Divide and Conquer
 Divide: realiza la división de los arreglo en
dos 𝐴[𝑝, . . , 𝑞] y 𝐴[𝑞 + 1, … , 𝑟], q está dada
por el procedimiento de partición

 Conquer: llamadas recursivas a QuickSort

 Combine: No se requiere trabajo adicional


para combinar.
Algoritmo

 Loop invariants anyone?


Partition
Ejemplo
Loop invariants
Para cualquier índice k

 Si 𝑝 ≤ 𝑘 ≤ 𝑖, entonces 𝐴 𝑘 ≤ 𝑥
 Si 𝑖 + 1 ≤ 𝑘 ≤ 𝑗 − 1, entonces 𝐴 𝑘 >
𝑥
 Si 𝑘 = 𝑟, entonces 𝐴 𝑘 = 𝑥
Duda?

 ¿Qué sucede si todos los elementos


son iguales?
Random Quick-Sort
 Life is a b+?%h, sigh…
Counting Sort
 Ordenamiento comparativo con mejor
desempeño de Θ(𝑛 ln 𝑛)

 Ordenamiento no comparativo con


desempeño Ω(𝑛)

 Restricciones.
◦ Número naturales 𝑛 < 𝑘
Pseudo código
Radix sort
 Ordenamiento de un dígito del
identificador. Θ(𝑑(𝑛 + 𝑘))
Caveats
 Si k no es muy grande, mejor se usa
conunting sort.

 2 Opciones LSD y MSD


Recursive Radix sort
170, 045, 075, 090, 002, 024, 802, 066

 0’s:
◦ 045, 075, 090, 002, 024, 066
 100’s:
◦ 170
 800’s:
◦ 802
Siguiente paso?
045, 075, 090, 002, 024, 066

 0’s: 002
 20’s: 024
 40’s: 045
 60’s: 066
 70’s: 075
 90’s 090
Ejemplo-Ejercicio
 Ilustre el funcionamiento para ordenar
por LSD radix sort

COW, DOG, SEA, RUG, ROW, MOB,


BOX, TAB, BAR, EAR, TAR, DIG, BIG,
TEA, NOW, FOX.
Bucket sort
 Elementos uniformes e
independientes entre 0,1

 Se divide el intervalo en “Buckets” del


mismo tamaño.

 Listas enlazadas 

 Θ(𝑛)
Pseudo-…. Y’all know what
Ejemplito
Min-Max
 Desarrolle un algoritmo para buscar el
mínimo de una cadena en Θ(𝑛)

 Y el de máximo
Min-Max
 Que tal los dos simultáneamente

 Y en Θ(3𝑛/2)?
◦ 3 comparaciones cada 2 datos.
Búsqueda de un dato
 Randomized-Partition?- Divide and
conquer
 Θ(𝑛) si los elementos son distintos
Dudas?
 ¿Qué sucede si el elemento no está?

 ¿Que sucede si el arreglo tiene


tamaño 0?
Otro de selección
 Tiempo lineal para el peor caso

 Divide and conquer, parecido al


anterior,

 Selección del pivote de forma


específica
Selección del pivote
 Dividir los elementos en 𝑛/5 grupos

 Encontrar la mediana de cada grupo por


insertion-sorting.

 Elegir la mediana de las medianas.

 Particionar el arreglo en la mediana de


medianas.

 Función recuersiva
Ejemplo

También podría gustarte