Comment supprimer un tas de structure de données?

Je comprends comment faire pour supprimer le nœud racine à partir d'un tas max, mais est la procédure de suppression d'un nœud à partir du milieu de retirer et remplacer la racine à plusieurs reprises jusqu'à ce que le nœud est supprimé?

  1. Est O(log n) la complexité optimale pour cette procédure?

  2. Cela affecte le big O complexité car les autres nœuds doivent être supprimés afin de supprimer un nœud spécifique?

  • pourquoi voulez-vous supprimer un nœud au milieu d'un tas max?
  • Une très réelle utilité d'une telle chose est un tas de représentation d'une file d'attente de priorité des tâches planifiées, et que quelqu'un annule l'un des emplois.
  • J'ai récemment mis en œuvre l'APL* algorithme de pathfinding, un remodelage de l'algorithme basé sur Un*. Il exige la capacité de se retirer du milieu de la priorité de la file d'attente.
  • En général, vous voulez poser une nouvelle question, plutôt que d'ajouter de nouvelles questions à l'un de quatre ans, l'ancien poste. Mais pour répondre à tes questions: 1) Dans un norme tas binaire, O(log n) est la meilleure complexité. 2) Suppression, à partir du milieu du tas ne sera jamais plus cher que la suppression du nœud racine, et que l'opération est déjà prouvé à O(log n). O(log n) est le pire des cas, la complexité de la suppression d'un nœud n'importe où dans le tas. Notez, cependant, que ce que j'ai indiqué dans ma réponse originale à cette question reste toujours vrai: il prend O(n) pour trouver le nœud à supprimer.
  • mathcs.emory.edu/~cheung/Cours/171/Programme/9-BinTree/...
InformationsquelleAutor tesfa koli | 2012-01-02