Provádět prioritní fronta pomocí BinarySearchTree: Java

hlasů
4

Musím „vytvořit frontu prováděna priorita pomocí binárního vyhledávacího stromu (CEST)“ pro mou třídu algoritmů II. Nicméně, nejsem si jistý, jak přesně byste použili binární vyhledávací strom jako prioritní fronty. Mohl by někdo objasnit, co to je, že se přiřazení požádal mě, abych udělal?

Jako odkaz, tady jsou metodám, kterými se prioritní fronta musí implementovat:

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

Předem děkuji za každou radu !!

Položena 21/05/2011 v 22:50
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

Binární vyhledávací strom se používá k účinnému udržování položky v seřazeném pořadí. Je-li sort-order na základě priorit, pak se vaše binární strom se stane prioritou fronty. Pop off nejvyšší prioritu položku a vložit nové položky podle jejich priority.

Změněné přidat:

To může pomoci, aby zvážila alternativy - pokud jste použili propojeného seznamu jako frontě, jak byste vědět, kam vložit novou položku, jinak než pěšky celou cestu dolů v seznamu, který je O (N) s nejhorším případě N. Použití binárního stromu řeší tento problém.

Odpovězeno 21/05/2011 v 22:57
zdroj uživatelem

hlasů
4

Binární vyhledávací strom je vždy objednal a zůstane vždy v pořadí, pokud se vkládají nové položky.

Hlavní výhodou binárních vyhledávacích stromů nad jinými datovými strukturami je, že související třídění algoritmy a vyhledávací algoritmy, jako jsou in-pořadí průchod může být velmi efektivní.

A to je vaše priorita fronty. V možném realizaci položky s nejmenší prioritou získají nejvyšší počet a položky s nejvyšší prioritou budou mít nejnižší číslo. Jsou-li tyto položky vložit do BST a to čteš inorder, pak máte pořadí, ve kterém by měl být fronta zpracovávány.

Chcete-li zpracovat fronty, jste „pop“ off první prvek ve stromu a zbytek bude nařízeno automaticky BST.

Jediná věc, kterou budete muset starat o tom, je správné vložení nových prvků do stromu a co se stane, je-li první, kdo odstraní.

Vaše metody by byly mapovány do provozu dřevin, addvloží novou položku na správném místě a v případě potřeby upravit stromu, sizenapříklad vrací velikost stromu, inorderbude procházet strom.

Doufat, že dělal to trochu jasnější.

Odpovězeno 21/05/2011 v 22:58
zdroj uživatelem

hlasů
0

přidat nakukovat-- odstranit jsou standardní metody pro BST

Pro vyhledávání můžete do mezipaměti velikost v každém uzlu, který bude aktuální počet prvků v podstromu, jehož uzel je kořenem (nebo jinými slovy node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

pak hledání se stává

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
    }
}
Odpovězeno 21/05/2011 v 23:08
zdroj uživatelem

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