Possible en double:
How can I implement decrease-key functionality in Python's heapq?Comment est-ce que je peux heapifier un heapq dans O (lgn)?
Salut,
J'utilise heapq en Python pour mettre en œuvre une file d'attente prioritaire. Les éléments à l'intérieur de la file d'attente obtiennent beaucoup de changements de leurs priorités, et quand cela arrive, j'ai besoin de heapifier le tas. Le problème est que heapq a seulement une fonction heapify qui entasse le tas entier, plutôt que heapify qui commence à partir d'un certain élément dans le tas sachant que le reste est déjà un tas bien ordonné (comme le livre classique CS heapify) .
La différence est significative car chaque appel heapify est O (n) au lieu de O (lgn). Peut-il être fait sans implémenter un tas en utilisant une liste standard?
Merci!
Il semble que ma question est un double de How can I implement decrease-key functionality in Python's heapq?
La réponse, il indique qu'il n'y a pas moyen de contourner réimplémentant une file d'attente en fonction de tas avec bon O (LGN) heapify d'un élément spécifique.
Possible copie de http://stackoverflow.com/questions/1465662/how-can-i-implement-decrease-key-functionality-in-pythons-heapq –
Oui, c'est assez proche (je ne décrémente pas , mais le principe est le même). Je suppose que je vais réimplémenter un tas puis ... –
Ou tout simplement suivre la recommandation d'Alex Martelli à la fin de sa réponse. Voter pour fermer en double. –