Connaissez-vous une bibliothèque populaire (Apache, Google, etc, collections) qui a une implémentation fiable Java pour un tas min-max, c'est-à-dire un tas qui permet de jeter un œil à son minimum et son maximum) valeur dans O(1)
et pour supprimer un élément dans O(log n)
?
De la goyave: MinMaxPriorityQueue
.
Au lieu d'un tas max-min, pourriez-vous utiliser deux instances d'un Java.util.PriorityQueue contenant les mêmes éléments? La première instance passerait un comparateur qui met le maximum à la tête, et la deuxième instance utiliserait un comparateur qui met le minimum à la tête.
L'inconvénient est que l'ajout, la suppression, etc. devraient être effectués sur les deux structures, mais cela devrait répondre à vos besoins.
Java dispose de bons outils pour implémenter des tas min et max. Ma suggestion utilise la structure de données de file d'attente prioritaire afin d'implémenter ces tas. Pour implémenter le tas max avec file d'attente prioritaire, essayez ceci:
import Java.util.PriorityQueue;
public class MaxHeapWithPriorityQueue {
public static void main(String args[]) {
// create priority queue
PriorityQueue<Integer> prq = new PriorityQueue<>((x,y) -> y-x);
// insert values in the queue
prq.add(6);
prq.add(9);
prq.add(5);
prq.add(64);
prq.add(6);
//print values
while (!prq.isEmpty()) {
System.out.print(prq.poll()+" ");
}
}
}
Pour implémenter le segment min avec une file d'attente prioritaire, essayez ceci:
import Java.util.PriorityQueue;
public class MinHeapWithPriorityQueue {
public static void main(String args[]) {
// create priority queue
PriorityQueue< Integer > prq = new PriorityQueue <> ();
// insert values in the queue
prq.add(6);
prq.add(9);
prq.add(5);
prq.add(64);
prq.add(6);
//print values
while (!prq.isEmpty()) {
System.out.print(prq.poll()+" ");
}
}
}
Pour plus d'informations, s'il vous plaît visitez:
Que diriez-vous com.aliasi.util.MinMaxHeap ? Cela fait partie de LingPipe ; malheureusement, le licence peut être un problème.
Voir ce document connexe .
Cependant, n'implémente pas de diminuer la clé ou d'augmenter la clé.
La classe Java.util.TreeSet .