Implementare una CodaConPriorita utilizzando un BinarySearchTree: Java

voti
4

Ho bisogno di creare una coda di priorità implementato da un albero binario di ricerca (BST) per la mia classe di algoritmi II. Tuttavia, non sono sicuro esattamente come si usa un albero binario di ricerca come una coda di priorità. Qualcuno potrebbe chiarire che cosa è che l'assegnazione mi chiede di fare?

Come riferimento, qui sono i metodi che la CodaConPriorita deve implementare:

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

Grazie in anticipo per qualsiasi consiglio !!

È pubblicato 21/05/2011 alle 22:50
fonte dall'utente
In altre lingue...                            


3 risposte

voti
0

Un albero binario di ricerca viene utilizzato per mantenere in modo efficiente gli elementi in modo ordinato. Se l'ordinamento ordine si basa sulla priorità, allora il vostro albero binario diventa una coda di priorità. Si pop fuori la voce di massima priorità, e inserire nuovi elementi in base alla loro priorità.

A cura di aggiungere:

Può essere utile prendere in considerazione le alternative - se è stato utilizzato una lista collegata, come la coda, come è possibile sapere dove inserire un nuovo elemento, oltre a piedi fino in fondo alla lista, che è O (N) con un caso peggiore di N. Utilizzando un albero binario risolve questo problema.

Risposto il 21/05/2011 a 22:57
fonte dall'utente

voti
4

Un Binary Search albero è sempre ordinata e sarà sempre rimanere in ordine se si inseriscono nuovi elementi.

Il principale vantaggio di alberi binari di ricerca rispetto ad altre strutture di dati è che i relativi algoritmi di ordinamento e algoritmi di ricerca come attraversamento in ordine può essere molto efficiente.

E questo è la coda di priorità. In una possibile implementazione, oggetti con priorità almeno otterrà il maggior numero di elementi e con la priorità più alta otterrà il numero più basso. Se questi elementi vengono inseriti nel BST e lo si legge inorder, allora si ha l'ordine in cui la coda deve essere elaborato.

Per elaborare la coda, è "pop" off il primo elemento nell'albero e il resto saranno ordinati automaticamente dal BST.

L'unica cosa che si deve prendere cura è di circa il corretto inserimento di nuovi elementi nell'albero e cosa succede se il primo è stato rimosso.

I suoi metodi sarebbero mappati alle operazioni degli alberi, addinserisce un nuovo elemento nel posto giusto e modificare l'albero, se necessario, sizead esempio, restituisce la dimensione della struttura, inorderattraverserà l'albero.

Speranza che ha reso un po 'più chiaro.

Risposto il 21/05/2011 a 22:58
fonte dall'utente

voti
0

aggiungere rimuovere peek sono metodi standard per un BST

per ricerca si possono memorizzare nella cache la dimensione in ciascun nodo che sarà il numero corrente di elementi della sottostruttura di cui il nodo è la radice (o in altre parole node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

poi ricerca diventa

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
    }
}
Risposto il 21/05/2011 a 23:08
fonte dall'utente

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