Implementar un PriorityQueue utilizando un BinarySearchTree: Java

votos
4

Necesito a crear una cola de prioridad implementada por un árbol de búsqueda binaria (BST) para mi clase de algoritmos II. Sin embargo, no estoy seguro exactamente cómo utilizaría un árbol de búsqueda binaria como una cola de prioridad. Podría alguien aclarar qué es lo que la asignación me está pidiendo que haga?

Como referencia, aquí están los métodos de la PriorityQueue debe poner en práctica:

add – adds a new item to the queue
peek – returns the head of the queue
remove – removes the head of the queue and returns it
search – returns the position of an element in the queue, or -1 if it is not found.
size – returns the total number of elements in the queue
inorder – returns an in-order, comma-separated string of every element in the queue
preorder – returns an pre-order, comma-separated string of every element in the queue
height – returns the height of the underlying BST

Gracias de antemano por cualquier consejo !!

Publicado el 21/05/2011 a las 22:50
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
0

Un árbol de búsqueda binaria se utiliza para mantener de manera eficiente los elementos de forma ordenada. Si el criterio de ordenación se basa en la prioridad, entonces su árbol binario se convierte en una cola de prioridad. Que el pop fuera el elemento de mayor prioridad, e insertar nuevos elementos de acuerdo a su prioridad.

Editado para añadir:

Se puede ayudar a considerar las alternativas - si se ha utilizado una lista enlazada como la cola, ¿cómo saber dónde insertar un nuevo elemento, que al caminar todo el camino hasta la lista, que es O (N) con un peor de los casos de N. el uso de un árbol binario resuelve ese problema.

Respondida el 21/05/2011 a las 22:57
fuente por usuario

votos
4

Una búsqueda binaria árbol siempre está ordenado y siempre estar en orden si se introducen nuevos elementos.

La principal ventaja de árboles binarios de búsqueda más de otras estructuras de datos es que los algoritmos de ordenación relacionados y algoritmos de búsqueda como el recorrido en orden pueden ser muy eficientes.

Y ese es su cola de prioridad. En una posible implementación, elementos con menor prioridad obtendrán el mayor número y elementos, con la más alta prioridad será conseguir el número más bajo. Si estos elementos se insertan en el BST y que lo lea inorder, entonces usted tiene el orden en el que la cola se debe procesar.

Para procesar la cola, que "pop" fuera el primer elemento en el árbol y el resto se le ordenará automáticamente por el BST.

La única cosa que tienes que tener cuidado acerca es la correcta inserción de nuevos elementos en el árbol y lo que sucede si se elimina la primera.

Sus métodos se pueden asignar a las operaciones de los árboles, addintroduce un nuevo elemento en el lugar correcto y modifican el árbol si es necesario, sizepor ejemplo, devuelve el tamaño del árbol, inorderva a recorrer el árbol.

Espero que lo hacía un poco más claro.

Respondida el 21/05/2011 a las 22:58
fuente por usuario

votos
0

Agregar Quitar vistazo son los métodos estándar para un BST

para la búsqueda puede almacenar en caché el tamaño en cada nodo que será el número actual de elementos en el subárbol de los cuales el nodo es la raíz de (o en otras palabras node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

a continuación, se convierte en la búsqueda

int search(E el,Node n){
    if(n==null)return -1;//stop recursion && nullpointer
    int comp = el.compareTo(n.value);
    if(comp==0)return n.left==null?0:node.left.size;
    else if(comp<0){
        return search(el,node.left);
    }else{
        int res = search(el,node.right)
        return res<0?res:res+(n.left==null?0:node.left.size)+1;//pass through -1 unmodified
    }
}
Respondida el 21/05/2011 a las 23:08
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more