Implementeer een PriorityQueue met behulp van een BinarySearchTree: Java

stemmen
4

Ik moet het creëren van een prioritaire rij uitgevoerd door een binaire zoekboom (BST) voor mijn algoritmen II klasse. Maar ik weet niet precies hoe je een binary search boom als een prioriteit wachtrij zou gebruiken. Kan iemand verduidelijken wat het is dat de opdracht me vraagt ​​te doen?

Als referentie hier zijn de werkwijzen de PriorityQueue moet uitvoeren:

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

Dank u bij voorbaat voor enig advies !!

De vraag is gesteld op 21/05/2011 om 22:50
bron van user
In andere talen...                            


3 antwoorden

stemmen
0

Een binaire zoekboom wordt gebruikt om items in gesorteerde volgorde efficiënt te handhaven. Als de sort-order wordt op basis van prioriteit, dan is uw binaire boom wordt een prioriteit wachtrij. Je pop uit de hoogste prioriteit item en plaats nieuwe items op basis van hun prioriteit.

Bewerkt om toe te voegen:

Het kan helpen om de alternatieven te overwegen - als u een gelinkte lijst als je wachtrij gebruikt, hoe zou u weten waar een nieuw item in te voegen, anders dan door te lopen helemaal naar beneden in de lijst, die is O (N) met een worst case van N. Met behulp van een binaire boom lost dat probleem op.

antwoordde op 21/05/2011 om 22:57
bron van user

stemmen
4

Een Binary Search Boom wordt altijd besteld en zal altijd in het oog als er nieuwe artikelen zijn geplaatst.

Het grote voordeel van binaire zoekboom boven andere gegevensstructuren is dat het betrokken verwerkingscentrum algoritmen en zoekalgoritmen zoals in orde traversal zeer efficiënt kunnen zijn.

En dat is uw Priority Queue. In een mogelijke uitvoering, zullen de punten met de minste prioriteit het hoogste aantal en items met de hoogste prioriteit te krijgen zal het laagste nummer. Als deze items in de BST zijn geplaatst en je het leest inorder, dan heb je de volgorde waarin de wachtrij moeten worden verwerkt.

Om de wachtrij te verwerken, je "pop" uit het eerste element in de boom en de rest zal automatisch worden besteld door de BST.

Het enige wat je moet zorgen over de juiste plaatsing van de nieuwe elementen in de boom en wat er gebeurt als de eerste wordt verwijderd.

Uw methoden zou worden toegewezen aan de boom operaties, addvoegt een nieuw item op de juiste plaats en indien nodig de boom te wijzigen, sizebijvoorbeeld je terug de grootte van de boom, inorderzal de boom doorkruisen.

Hoop dat het een beetje duidelijker gemaakt.

antwoordde op 21/05/2011 om 22:58
bron van user

stemmen
0

toevoegen peek verwijderen zijn standaard methoden voor een BST

voor zoeken kunt u de grootte van elk knooppunt dat het huidige aantal elementen in de subboom waar het knooppunt is de wortel van zal cache (ofwel node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

Vervolgens zoeken wordt

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
    }
}
antwoordde op 21/05/2011 om 23:08
bron van user

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