web-dev-qa-db-fra.com

Java pour Min-Max Heap?

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)?

35
Yuval Adam

De la goyave: MinMaxPriorityQueue .

32
Louis Wasserman

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.

25
Il-Bhima

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:

17
Vahid

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é.

2
NamshubWriter

La classe Java.util.TreeSet .

0
Nat