Implementere en PriorityQueue bruker en BinarySearchTree: Java

stemmer
4

Jeg trenger å skape et prioritert kø implementert av et binært søketre (BST) for min algoritmer II klasse. Men jeg er ikke sikker på nøyaktig hvordan du ville bruke et binært søketre som en prioritet kø. Kan noen forklare hva det er som oppgaven ber meg om å gjøre?

Som en referanse, her er metodene de PriorityQueue må implementere:

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

Takk på forhånd for alle råd !!

Publisert på 21/05/2011 klokken 21:50
kilden bruker
På andre språk...                            


3 svar

stemmer
0

En binært søketre brukes til å effektivt opprettholde elementer i sortert rekkefølge. Hvis sort-rekkefølge er basert på prioritet, så din binære treet blir prioritert kø. Du pop av høyeste prioritet element, og sette inn nye elementer i henhold til deres prioritet.

Redigert for å legge til:

Det kan hjelpe å vurdere alternativer - hvis du brukte en lenket liste som køen, hvordan ville du vet hvor du skal sette inn et nytt element, annet enn ved å gå hele veien ned på listen, som er O (N) med en worst case av N. Ved hjelp av et binært tre løser det problemet.

Svarte 21/05/2011 kl. 21:57
kilden bruker

stemmer
4

En binært søketre er alltid bestilt og vil alltid være i orden hvis nye elementer er satt inn.

Den store fordelen med binær søking trær liknet med andre datastrukturer er at de tilhørende sorterings algoritmer og søkealgoritmer, slik som i for traversering kan være meget effektiv.

Og det er din prioritet kø. I en eventuell implementering, vil elementer med minst prioritet får flest og elementer med høyest prioritet vil få det laveste antallet. Hvis disse elementene er satt inn i BST, og du leser det inorder, da har du rekkefølgen køen skal behandles.

For å behandle køen, du "pop" av det første elementet i treet og resten vil bli bestilt automatisk av BST.

Det eneste du trenger å ta vare på er riktig innsetting av nye elementer inn i treet og hva som skjer hvis den første er fjernet.

Dine metoder vil bli kartlagt til de tre operasjoner, addsetter inn et nytt element på riktig sted og endre treet hvis det er nødvendig, sizefor eksempel gir tilbake størrelsen på treet, inordervil gå gjennom treet.

Håper det gjorde det litt klarere.

Svarte 21/05/2011 kl. 21:58
kilden bruker

stemmer
0

legge titt fjern er standardmetoder for en BST

for søk kan man cache størrelsen på hver node som vil være det nåværende antall elementer i undertreet som noden er en rot til (eller med andre ord node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

så søk blir

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
    }
}
Svarte 21/05/2011 kl. 22:08
kilden bruker

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