Java mise en œuvre de Min-Max Tas?
Savez-vous populaire de la bibliothèque (Apache, Google, etc, collections) qui est fiable et Java mise en œuvre pour un min-max tas, qui est un segment qui permet de jeter un regard à son minimum et le maximum de valeur dans O(1)
et de supprimer un élément dans O(log n)
?
Vous devez vous connecter pour publier un commentaire.
De Goyave:
MinMaxPriorityQueue
.Deque
mise en œuvreDeque#removeFirstOccurrence()
etremoveLastOccurence()
en raison de la nature instable de min-max tasDeque
spécifie que lorsqu'il est utilisé comme une file d'attente FIFO résultats du comportement.MinMaxPriorityQueue
pourrait techniquement de mettre en œuvre les méthodes, mais il ne pouvait pas satisfaire le contrat.MinMaxPriorityQueue
code source, j'ai réalisé qu'il n'implémente pas un "vrai" min-max tas (dont très peu de gens le savent), mais plutôt simplement, il met en œuvre un double clos file d'attente de priorité à l'aide de deux tas, un min-tas et un max-heap, qui sont mis ensemble.Au lieu d'un max-min tas, pourriez-vous utiliser deux instances d'un java.util.PriorityQueue contenant les mêmes éléments? La première instance est passé un comparateur qui met le maximum à la tête, et le deuxième exemple serait d'utiliser un comparateur qui met le minimum à la tête.
L'inconvénient est que, d'ajouter, supprimer, etc devraient être effectuées sur les deux structures, mais il devrait répondre à vos exigences.
remove()
, ce qui enlève de la tête de la file d'attente, estO(log(n))
, alors queremove(Object o)
, estO(n)
. Référence: docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.htmlJava a de bons outils afin de mettre en œuvre min et max des tas. Ma suggestion est d'utiliser la file d'attente de priorité structure de données afin de mettre en œuvre ces tas. Pour la mise en œuvre de max tas avec file d'attente de priorité essayez ceci:
Pour la mise en œuvre de la min tas avec file d'attente de priorité, essayez ceci:
Pour plus d'informations, veuillez visiter:
https://github.com/m-vahidalizadeh/foundations/blob/master/src/data_structures/MaxHeapWithPriorityQueue.java
https://github.com/m-vahidalizadeh/foundations/blob/master/src/data_structures/MinHeapWithPriorityQueue.java
(x,y) -> y-x
(x, y) -> x < y ? -1 : x == y ? 0 : 1
Comment sur com.aliasi.util.MinMaxHeap? Cela fait partie de LingPipe; malheureusement, la licence peut-être un problème.
Voir ce document lié.
Ne pas mettre en œuvre decreaseKey ou increaseKey, si.
La java.util.TreeSet classe.
[key, stamp]
paire, donc la comparaison est effectuée sur la touche, puis sur le timbre. Cependant,TreeSet
n'est pas un remplacement de max-min tas deque.