Wdrożenie kolejka priorytetowa użyciu BinarySearchTree: Java

głosy
4

Muszę „utworzyć kolejkę priorytetową realizowany przez wyszukiwania binarnego drzewa (BST)” dla mojej klasy algorytmów II. Jednak nie jestem pewien dokładnie, w jaki sposób korzystać z wyszukiwarki binarne drzewo w kolejce priorytetowej. Może ktoś wyjaśnić, co to jest, że przypisanie pyta mnie zrobić?

Jako punkt odniesienia, tutaj są METODY kolejka priorytetowa musi wdrożyć:

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

Z góry dziękuję za wszelkie rady !!

Utwórz 21/05/2011 o 22:50
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
0

Wyszukiwania binarne drzewo służy do efektywnego utrzymania pozycji posortowanych. Jeśli porządek sortowania jest oparty na priorytecie, wówczas binarne drzewo staje się kolejka priorytetem. Pop off najwyższą pozycję priorytetową, i wstawić nowe elementy według ich priorytetu.

Edytowany dodać:

Pomocne może okazać się rozważenie alternatyw - jeśli użyto połączonej listy jako kolejki, jak nie wiesz gdzie wstawić nowy element, inny niż pieszo całą drogę w dół listy, która jest O (N) w najgorszym przypadku N. Korzystanie binarne drzewo rozwiązuje ten problem.

Odpowiedział 21/05/2011 o 22:57
źródło użytkownik

głosy
4

Binarne drzewo poszukiwań jest zawsze uporządkowane i zawsze pozostanie w kolejności, jeśli nowe elementy są wstawiane.

Główną zaletą binarne drzewo poszukiwań w stosunku do innych struktur danych jest to, że związane z nimi algorytmów sortowania i algorytmy wyszukiwania, takie jak przechodzenie na zamówienie mogą być bardzo skuteczne.

I to jest kolejka priorytetowa. W możliwej realizacji, elementy z najmniejszym priorytecie otrzyma najwyższą liczbę i przedmioty o najwyższym priorytecie otrzyma najniższą liczbę. Jeśli te elementy są umieszczane w BST i ją przeczytać inorder, a potem masz porządek, w którym kolejka powinna być przetwarzane.

Aby przetworzyć kolejkę, to „pop” off pierwszego elementu w drzewie i reszta będą zamawiane automatycznie przez BST.

Jedyną rzeczą, którą trzeba zadbać o to prawidłowe wstawiania nowych elementów do drzewa i co się dzieje, jeśli pierwsza jest usuwany.

Twoje metody byłyby przypisane do operacji drzew, addwstawia nowy element w odpowiednim miejscu i modyfikowania drzewa, jeśli to konieczne, sizena przykład oddaje wielkość drzewa, inorderbędzie przechodzić przez drzewo.

Nadzieję, że wszystko jest nieco jaśniejsze.

Odpowiedział 21/05/2011 o 22:58
źródło użytkownik

głosy
0

dodać Peek usuń są standardowe metody dla BST

dla wyszukiwania można buforować rozmiar w każdym węźle, która będzie obecna liczba elementów w poddrzewie którego węzeł jest korzeniem (lub innymi słowy node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

następnie staje wyszukiwania

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
    }
}
Odpowiedział 21/05/2011 o 23:08
źródło użytkownik

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