Mettre en œuvre un PriorityQueue en utilisant un BinarySearchTree: Java

voix
4

J'ai besoin de « créer une file d'attente prioritaire mis en œuvre par un arbre de recherche binaire (BST) » pour ma classe algorithmes II. Cependant, je ne sais pas exactement comment vous utiliser un arbre de recherche binaire comme une file d'attente prioritaire. Quelqu'un pourrait-il clarifier ce qu'il est que la mission me demande de faire?

À titre de référence, voici les méthodes du PriorityQueue doit mettre en œuvre:

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

Nous vous remercions à l'avance pour tout conseil !!

Créé 21/05/2011 à 22:50
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
0

Un arbre binaire de recherche est utilisé pour maintenir efficacement les éléments dans l' ordre. Si le tri ordre est basé sur la priorité, votre arbre binaire devient une file d' attente prioritaire. Vous allez en retirer le plus haut point prioritaire, et d' insérer de nouveaux éléments en fonction de leur priorité.

Sous la direction d'ajouter:

Il peut être utile de considérer les alternatives - si vous avez utilisé une liste chaînée comme la file d'attente, comment voulez-vous savoir où insérer un nouvel élément, autre que par la marche tout en bas de la liste, qui est O (N) avec le pire des cas de N. en utilisant un arbre binaire permet de résoudre ce problème.

Créé 21/05/2011 à 22:57
source utilisateur

voix
4

Un binaire arbre de recherche est toujours commandé et restera toujours dans l' ordre si de nouveaux éléments sont insérés.

L'avantage majeur des arbres binaires de recherche par rapport aux autres structures de données est que les algorithmes de tri associés et des algorithmes de recherche tels que dans l'ordre traversal peuvent être très efficaces.

Et c'est votre file d' attente prioritaire. Dans une mise en œuvre possible, les éléments avec une priorité moins auront le plus grand nombre et d' articles avec la plus haute priorité sera d' obtenir le nombre le plus bas. Si ces éléments sont insérés dans le BST et vous avez bien lu inorder, vous avez l'ordre dans lequel la file d' attente doit être traitée.

Pour traiter la file d'attente, vous « pop » off le premier élément de l'arbre et le reste sera commandé automatiquement par le BST.

La seule chose que vous devez prendre soin de est l'insertion correcte de nouveaux éléments dans l'arbre et ce qui se passe si le premier est retiré.

Vos méthodes seraient mises en correspondance avec les opérations d'arbres, addinsère un nouvel élément au bon endroit et de modifier l'arbre si nécessaire, sizepar exemple la taille redonne de l'arbre, inordertraversera l'arbre.

Espoir qui a fait un peu plus clair.

Créé 21/05/2011 à 22:58
source utilisateur

voix
0

ajouter supprimer PEEK sont des méthodes standard pour un BST

pour la recherche que vous pouvez mettre en cache la taille de chaque nœud qui sera le nombre actuel d'éléments dans le sous - arbre dont le nœud est la racine (ou en d' autres termes node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

puis la recherche devient

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
    }
}
Créé 21/05/2011 à 23:08
source utilisateur

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