Punerea în aplicare a unui BinarySearchTree folosind coadă prioritară: Java

voturi
4

Am nevoie pentru a „crea o coadă de prioritate pusă în aplicare de un arbore binar de căutare (BST)“ pentru clasa mea algoritmi II. Cu toate acestea, nu sunt sigur exact cum v-ar folosi un arbore binar de căutare ca o coadă de prioritate. Ar putea cineva să clarifice ceea ce este că asignarea îmi cere să fac?

Ca referință, aici sunt metodele pe care trebuie să pună în aplicare coadă prioritară:

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

Vă mulțumim anticipat pentru orice sfat !!

Întrebat 21/05/2011 la 22:50
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
0

Un arbore binar de căutare este utilizat pentru a menține în mod eficient articole în ordine sortată. În cazul în care sortare-comanda se bazează pe o prioritate, atunci arborele binar devine o coadă de prioritate. Ai pop de pe cel mai mare element de prioritate, și introduceți elemente noi în funcție de prioritatea lor.

Editat pentru a adăuga:

Aceasta poate ajuta să ia în considerare alternativele - în cazul în care ați folosit-o listă legată ca coadă, cum știi unde să inserați un nou element, altele decât cele de mers pe jos tot drumul în jos lista, care este O (N) cu cel mai rău caz de N. Folosind un arbore binar rezolvă această problemă.

Publicat 21/05/2011 la 22:57
sursa de către utilizator

voturi
4

Un binar de căutare copac este întotdeauna ordonat și va rămâne întotdeauna în ordine , dacă se introduc elemente noi.

Avantajul major al arborilor de căutare binare alte structuri de date este faptul că algoritmii de sortare și legate de algoritmii de căutare, cum ar fi parcurgeri în ordine poate fi foarte eficient.

Și asta e Coadă prioritate. Într - o eventuală punere în aplicare, elementele cu prioritate puțin vor primi cel mai mare număr și elemente cu cea mai mare prioritate va primi cel mai mic număr. În cazul în care aceste elemente sunt introduse în BST și ai citit -o inorder, atunci aveți ordinea în care ar trebui să fie prelucrate coada.

Pentru a procesa coada, te „pop“ de pe primul element din arbore, iar restul vor fi comandate automat de ESF.

Singurul lucru pe care trebuie să aibă grijă este introducerea corectă a unor noi elemente în copac și ceea ce se întâmplă în cazul în care primul este eliminat.

Metodele tale ar fi mapate la operațiunile de copac, addintroduce un element nou în locul corect și să modifice copac , dacă este necesar, sizede exemplu , dă înapoi dimensiunea de copac, inorderva traversa copac.

Sper că a făcut un pic mai clar.

Publicat 21/05/2011 la 22:58
sursa de către utilizator

voturi
0

add remove Peek sunt metode standard pentru o BST

pentru căutare vă puteți cache dimensiunea în fiecare nod care va fi numărul actual de elemente din subarborele pentru care nodul este rădăcina (sau cu alte cuvinte node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

atunci căutarea devine

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
    }
}
Publicat 21/05/2011 la 23:08
sursa de către utilizator

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