2017-08-23 2 views
0

Disons que j'ai construit un tas en utilisant heappush pour mettre 10 nombres sur le tas.Utiliser "remove" ou "pop" pour supprimer des éléments de heapq

Maintenant, je veux supprimer certains éléments, le nième élément ou un nombre particulier. Comme le tas est juste une liste, je peux utiliser pop(i) ou remove pour faire cela. Après avoir utilisé pop() et remove(), la liste est-elle encore un tas ou dois-je à nouveau heapify la liste?

+0

Si vous modifiez régulièrement la structure de données sous-jacente, vous pouvez reconsidérer votre approche. J'ai trouvé que la violation du tas signifie généralement que je n'ai pas vraiment besoin d'un tas, ou que je peux accomplir ce dont j'ai besoin sans violer le contrat de tas. –

Répondre

1

Les deux opérations peuvent violer l'invariant heapq, donc oui, vous devriez heapify après chaque opération.