ESTRUCTURAS DE DATOS Y ALGORITMOS Escuela Técnica Superior de Informática Aplicada Curso 2004-2005 Práctica 7. Implementación de Cola de Prioridad con un Montı́culo Binario Duración: 1 sesión 1. Objetivo de la práctica El objetivo de esta práctica es que el alumno desarrolle la Implementación de la interfaz Java ColaPrioridad propuesta en el Tema 4 utilizando la Representación Jerárquica Montı́culo Binario o Heap. Dicha Implementación, además de complementar el estudio teórico del Montı́culo realizado en el Tema 7, se utilizará para definir el tipo dinámico de la Cola de Prioridad de Eventos que tiene el Simulador del Banco de Modems desarrollado en la Práctica 5. 2. Descripción del problema a resolver Cara a su posterior utilización en la clase Simulador del proyecto bancoDeModems, se desea diseñar la clase Java MonticuloBinario como Implementación de la interfaz ColaPrioridad que figura a continuación: package modelos; public interface ColaPrioridad { void insertar (Object x); /* sii !esVacia() */ Object buscarMin (); /* sii !esVacia() */ Object eliminarMin (); boolean esVacia (); } Se recuerda al alumno que esta interfaz figura ya en el paquete modelosdel proyecto estructurasDeDatosde libJava. 3. Actividades en el laboratorio Los pasos que se recomienda seguir para realizar esta práctica son: 1. ubicar en el paquete jerarquicos del proyecto estructurasDeDatos de libJava el fichero MonticuloBinario.java que figura en el directorio /labos/asignaturas/EI/eda/practica7; 2. completar el código de la clase que contiene MonticuloBinario.java, y que se muestra a continuación, para que ésta implemente efectivamente ColaPrioridad; 1 package jerarquicos; /*# completar import*/ public class MonticuloBinario /*# completar aquı́*/ { protected Object elArray[]; protected int tallaActual ; protected static final int CAPACIDAD_POR_DEFECTO = 11 ; public MonticuloBinario(Object infNeg) { elArray = new Object[CAPACIDAD_POR_DEFECTO + 1]; tallaActual = 0; elArray[0] = infNeg; } public void insertar(Object x) { if ( tallaActual == elArray.length-1 ) duplicarMonticulo(); int hueco = ++tallaActual; while ( ((Comparable)x).compareTo(elArray[hueco/2]) < 0 ){ elArray[hueco] = elArray[hueco/2]; hueco = hueco/2; } elArray[hueco] = x; } private void duplicarMonticulo() { Object [] elArrayAnt = elArray; elArray = new Object[tallaActual*2 + 1]; for ( int i = 0; i < elArrayAnt.length; i++ ) elArray[i] = elArrayAnt[i]; } private void hundir(int hueco) { Object aux = elArray[hueco]; int hijo = hueco*2; boolean esHeap = false; while ( hijo <= tallaActual && !esHeap){ if ( hijo != tallaActual && ((Comparable)elArray[hijo+1]).compareTo(elArray[hijo]) < 0 ) hijo++; if ( ((Comparable)elArray[hijo]).compareTo(aux) < 0 ){ elArray[hueco] = elArray[hijo]; hueco = hijo; hijo = hueco*2; } else esHeap = true; } elArray[hueco] = aux; } public String toString(){ String res = "*"; for ( int i = 1; i <= tallaActual; i++ ) res += elArray[i] + "*"; return res; } /*# completar a partir de aquı́ */ } 3. tras compilar la clase, se deberá de comprobar su funcionamiento en algún caso sencillo: por ejemplo, trabajar con un Montı́culo de objetos de la clase Double; para ello, se creará desde el entorno BleuJ un objeto MonticuloBinario especificando como argumento del constructor, new Double(-500), es decir, se trabajará con enteros mayores que -500; seguidamente se invocará el método insertar para introducir el dato 5 en este Montı́culo (new Double(5) como argumento); una llamada al método buscarMin permitirá comprobar que nos devuelve Double de valor 5. 4. finalmente se utilizará la clase MonticuloBinario como Implementación de la Cola de Prioridad de la clase Simulador del proyecto bancoDeModems, realizando las oportunas modificaciones que ello conlleve. 4. Ampliación Diseñese un experimento para comprobar experimentalmente que el coste de las operaciones de una Cola de Prioridad representada como un Montı́culo se ajusta a los estudiados en el Tema 7. Para ello se propone contar los compareTo que se realizan en promedio al insertar y borrar (eliminarMin) los Datos de Colecciones de diferentes tallas y caracterı́sticas. 2
© Copyright 2024