Facultad de Ciencias Exactas, Ingenierı́a y Agrimensura Escuela de Ciencias Exactas y Naturales Departamento de Ciencias de la Computación Estructuras de Datos Práctica 1 Heaps 1. Elimine la recursión de la función max-heapify vista en clase. 2. Muestre que el peor caso de la función max-heapify es Ω(lg n) 3. Argumente la correctitud del algoritmo heapsort usando el siguiente invariante: Al principio de cada iteración del ciclo for, el subarreglo A[1..i] es un max-heap que contiene los i menores elementos de A[1..n], y el subarreglo A[i + 1..n] contiene los n − i mayores elementos de A[1..n], ordenados. Puede asumir que la función max-heapify es correcta. 4. Un Young Tableau es una tabla de tamaño m × n tal que: Cada fila está ordenada en forma ascendente de izquierda a derecha Cada columna está ordenada en forma ascendente de arriba hacia abajo Algunas entradas de la tabla pueden tener el valor ∞, lo que significa que no hay un elemento en esa posición. Por consiguiente, un Young Tableau puede utilizarse para almacenar r ≤ nm elementos. (a) Dibuje un Young Tableau que contenga los elementos {9, 16, 3, 2, 4, 8, 5, 14, 12} (b) Muestre que un Young Tableau Y es vacı́o si Y [1, 1] = ∞. Muestre que un Y está lleno (contiene nm elementos) si Y [m, n] < ∞ (c) Construya un algoritmo que, dado un Young Tableau no vacı́o, elimine y devuelva el elemento mı́nimo. Su algoritmo debe correr en tiempo O(m + n). Sugerencia: Piense en max-heapify. (d) Muestre cómo insertar un elemento en un m × n-Young Tableau que no se encuentra lleno en tiempo O(n + m) (e) Sin utilizar otro método de ordenación, muestre cómo puede utilizarse un n×n-Young Tableau para ordenar un arreglo de n2 números en tiempo O(n3 ). 5. Dado el tipo data Tree = Leaf | Node (Tree Int) Int (Tree Int) 1. Implemente una función short que calcule la longitud del camino más corto de la raı́z a una hoja en un árbol. 2. Implemente una función isBalanced que determine si un árbol es balanceado. Diremos que un árbol de altura h es balanceado si cualquier camino desde la raı́z a una hoja tiene longitud h o h − 1. 3. Escriba un procedimiento isHeap que determine si un árbol binario es o no un max–heap. En este caso no es importante si las hojas en el último nivel están agrupadas a la izquierda del árbol o no. Práctica 1 Heaps Página 1