Pour le moment, j'essaye d'écrire une file d'attente prioritaire en Python en utilisant la bibliothèque intégrée heapq. Cependant, je suis bloqué en essayant de comprendre ce que Python fait avec le tie-break, je veux avoir une condition spécifique où je peux dicter ce qui se passe avec le tie-break au lieu de la bibliothèque heapq qui semble presque arracher quelque chose la file d'attente au hasard. Quelqu'un connaît-il un moyen de réécrire la condition de départage ou serait-il plus facile de construire la file d'attente prioritaire à partir de zéro?Python et le tas intégré
Répondre
heapq
utilise les comparaisons intrinsèques sur les éléments de la file d'attente (__le__
et amis). La manière générale de contourner cette limite est la bonne vieille méthode connue sous le nom de «décorer/décorer» - c'est ce que nous faisions auparavant dans le tri, avant que le paramètre key=
ne soit introduit ici. Pour le dire simplement, vous mettez en file d'attente et dequeue, non seulement les éléments qui vous intéressent ("charge utile"), mais plutôt les éléments "décorés" en tuples qui commencent par les "clés" dont vous avez besoin. Ainsi, par exemple, il serait normal de mettre en file d'attente un tuple comme (foo.x, time.time(), foo)
si vous voulez prioriser par l'attribut x
avec des liens cassés par le temps d'insertion dans la file d'attente - bien sûr lorsque vous vous désemparer de "décorer", en prenant le [-1]
l'item du tuple que vous obtenez en dé-queuing. Alors, mettez les "clés secondaires" dont vous avez besoin pour être considérées comme "tie-break" dans le tuple "décoré" que vous mettez en file d'attente, APRÈS celles dont vous voulez rompre les "liens".
- 1. min tas en python
- 2. Étendre le Strin intégré de Python
- 3. Rewritepath et le mode intégré IIS
- 4. Collections .NET et le tas d'objets volumineux (LOH)
- 5. Précharge javascript et lecteur intégré
- 6. sql intégré dans le C
- 7. Question générale: Java a le tas et la pile locale. Pouvez-vous accéder à n'importe quel objet du tas?
- 8. sérialiser et synchroniser les données sur le périphérique intégré
- 9. VS2005: Limiter la taille du tas
- 10. constantPoolClass dans Java tas?
- 11. Contrôler un intégré dans le lecteur flash de site Web avec Python?
- 12. Comment la pile, le tas et le cadre correspondent-ils conceptuellement aux constructions C#?
- 13. que signifie "POR" dans le développement intégré?
- 14. Protéger le mot de passe intégré
- 15. Création d'un réseau d'objets sur la pile et tas
- 16. Comment empêcher la création d'un objet sur le tas?
- 17. Comment enregistrer le tas (vidage vers un fichier) dans Eclipse?
- 18. Le lecteur de musique intégré ne fonctionne pas dans l'opéra et le navigateur mozilla
- 19. Libérer de la mémoire sur le tas. Devrais-je et comment?
- 20. Création de tableaux sur le tas et adressage avec des pointeurs
- 21. Je pensais que le tas géré a augmenté dynamiquement?
- 22. Java tas d'espace dans netbeans .. mais j'ai déjà augmenté la taille du tas!
- 23. Débogage intégré Lua
- 24. Hyperlien sur SVG intégré
- 25. web intégré application mobile
- 26. Debug tas/STL débogage équivalent pour GCC?
- 27. UINavigationController intégré dans tabBarController
- 28. Comment éviter la fragmentation de tas?
- 29. Contrôle intégré Imeem et les lecteurs Youtube avec Javascript
- 30. Un tas d'exceptions consignées dans Microsoft.VisualBasic.dll
Lorsque vous avez regardé le code, qu'avez-vous trouvé? Dans quelle classe était-ce? Quelle méthode? Avez-vous essayé de le sous-classer pour remplacer la méthode avec quelque chose de plus à votre goût? –