Facile d'utilisation min de file d'attente de priorité avec la mise à jour de clé en C++

Parfois lors de la programmation, concours, etc., nous avons besoin d'un simple travail de mise en œuvre de min de file d'attente de priorité à la baisse des clés pour mettre en œuvre Dijkstra algorithme etc.. j'ai souvent l'utilisation de set< paire<key_value, ID> >, et un tableau de correspondance d'ID-->key_value) ensemble pour y parvenir.

  • L'ajout d'un élément à l'ensemble prend O(log(N)) de temps. Pour construire une file d'attente prioritaire de N éléments, il nous suffit de les ajouter un par un dans le jeu. Cela prend un temps O(N log(N)) de temps au total.

  • L'élément avec min key_value est tout simplement le premier élément de l'ensemble. Sondage le plus petit élément prend O(1) fois. Retrait il prend O(log(N)) de temps.

  • Pour tester si certaines ID=k est, dans l'ensemble, nous avons tout d'abord chercher son key_value=v_k dans le tableau, puis la recherche de l'élément (v_k, k) dans le jeu. Cela prend O(log(N)) de temps.

  • Pour changer le key_value de certaines ID=k à partir de v_k à v_k', nous avons tout d'abord chercher son key_value=v_k dans le tableau, puis la recherche de l'élément (v_k, k) dans le jeu. Ensuite, nous supprimer cet élément de l'ensemble, puis insérez l'élément (v_k', k) dans le jeu. Nous avons ensuite mettre à jour le tableau, trop. Cela prend O(log(N)) de temps.

Bien que l'approche ci-dessus fonctionne, la plupart des manuels recommandent généralement à l'aide de binaire des tas de mettre en œuvre des files d'attente de priorité, comme le temps de la construction du tas binaire est seulement O(N). J'ai entendu dire qu'il y a un construit-dans la file d'attente de priorité structure de données dans la STL du C++ qui utilise les binaires des tas. Cependant, je ne suis pas sûr de la façon de mettre à jour le key_value pour que la structure de données.

Ce qui est le plus simple et le plus efficace de l'aide de min file d'attente de priorité avec la mise à jour de clé en C++?

InformationsquelleAutor Chong Luo | 2012-02-09