Programación III, Guía 12 1 Facultad : Ingeniería Escuela : Computación Asignatura: Programación III Tema: HEAPS. Objetivo Aprender los conceptos, manejo, usos y aplicación de heaps a fin de utilizarlos para el desarrollo de aplicaciones Introducción Un heap o montículo es una árbol binario completo, y además parcialmente ordenado. Ya hemos visto el concepto de árbol completo. Un árbol completo. Un árbol parcialmente ordenado es aquél que tiene todas y cada una de sus ramas, consideradas como listas, totalmente ordenadas, ya sea de forma creciente o decreciente. En relación al heap, se exige una ordenación decreciente, lo que puede dar lugar a una definición más natural de heap: un heap es un árbol binario completa, tal que el valor de su raíz es mayor o igual que las raices de sus hijos, siendo también heaps ambos hijos. La siguiente figura ilustra un ejemplo de heap, así como casos de árboles que no lo son: por no ser parcialmente ordenados, o por no ser completos.
Programación III, Guía 12 2 Al igual que para el árbol binario de búsqueda, las operaciones básicas son las mismas que para el árbol binario simple, y al igual que en áquel, el generador árbol-binario está oculto al usario. Un montículo es un árbol binario completo tal que puede: Estar vacio. El valor de la prioridad en la raiz es mayor, (menor) o igual que la prioridad de cualquiera de sus hijos. Ambos subárboles son montículos heap. Propiedades del heap: Debe cumplir dos propiedades: un árbol binario completamente lleno, con la posible excepción del nivel más bajo, el cual se rellena de izquierda a derecha. Estos árboles se denominan árboles binarios completos. Todo nodo debe ser mayor que todos sus descendientes. Por lo tanto, el maximo estará en la raíz y su búsqueda y eliminación se podrá realizar rápidamente. Características: Todos los heaps son árboles binarios. No son necesariamente ABBs. El árbol esta completamente balanceado excepto el último nivel, que debe estar lleno de izquierda a derecha. Para un elemento del heap en la posición k, sus hijos deberán estar en las posiciones 2k y 2k+1 del heap. Un HEAP puede representarse en un arreglo. Toda lista ordenada es un heap. Materiales y equipo Guía de Laboratorio Nº 12. Computadora con programa: o Visual Studio 2012. C# Dispositivo de Almacenamiento (USB).
Programación III, Guía 12 3 Procedimiento 1. Para evitar inconvenientes utilizando unsafe ir a Propiedades del Proyecto (menú principal Project) y verá una ventana como esta: 2. Chequear la opción Allow unsafe code 3. Digitar el siguiente programa using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace HeapSort class App public const long IM = 139968; public const long IA = 3877; public const long IC = 29573; public static long last = 42; public static double gen_random(double max) return( max * (last = (last * IA + IC) % IM) / IM ); public static int count =0; [STAThread] static void Main(string[] args)
Programación III, Guía 12 4 int dato; Console.Writeline("Ingrese cantidad de elementos"); dato= int.parse(console.readline()); count = dato; double[] ary = new double[count+1]; unsafe for(int i=0;i<=count;++i) ary[i]=gen_random(100); heapsort(ary); Console.WriteLine(ary[count]); Console.ReadLine(); public static void heapsort(double[] ra) unsafe int l, j, ir, i; double rra; l = (count >> 1) + 1; ir = count; for (;;) if (l > 1) rra = ra[--l]; else rra = ra[ir]; ra[ir] = ra[1]; if (--ir == 1) ra[1] = rra; return; i = l; j = l << 1; while (j <= ir) if (j < ir && ra[j] < ra[j+1]) ++j; if (rra < ra[j]) ra[i] = ra[j]; j += (i = j); else j = ir + 1;
Programación III, Guía 12 5 ra[i] = rra; Análisis de resultados Qué acciones realiza el programa Modificar de manera que se introduzcan datos manualmente Investigación complementaria. Cree un menú y modifique el programa de manera que pueda ingresar, eliminar datos. Referencias. http://www.brpreiss.com/books/opus6/html/page505.html
Programación III, Guía 12 6 Hoja de cotejo: 12 Guía 9: Heaps. Alumno: Máquina No: Docente: GL: Fecha: EVALUACION % 1-4 5-7 8-10 Nota CONOCIMIENTO 40 APLICACIÓN DEL CONOCIMIENTO 40 ACTITUD 20 TOTAL 100%