La création d'un segment prend O(n) temps, tandis que l'insertion dans un segment (ou file d'attente prioritaire) prend du temps log (n). Prendre n entrées et les insérer dans la file d'attente prioritaire, ce qui serait la complexité temporelle de l'opération. O(n) ou O (n * log (n)).
En outre, le même résultat serait valable en cas de vidage de la totalité du tas (c'est-à-dire n suppressions), non?
Si vous avez un tableau de taille n
et que vous souhaitez créer un tas à partir de tous les éléments à la fois, l'algorithme de Floyd peut le faire avec une complexité O(n). Voir - Construire un tas . Cela correspond aux constructeurs std :: priority_queue qui acceptent un paramètre de conteneur.
Si vous avez une file d'attente prioritaire vide à laquelle vous souhaitez ajouter n
éléments, un par un, alors la complexité est O (n * log (n)).
Donc, si vous avez tous les éléments qui iront dans votre file d'attente avant de le créer, la première méthode sera plus efficace. Vous utilisez la deuxième méthode - ajouter des éléments individuellement - lorsque vous devez gérer une file d'attente: ajouter et supprimer des éléments sur une certaine période.
La suppression des éléments n
de la file d'attente prioritaire est également O (n * log (n)).
La documentation pour std :: priority_queue inclut la complexité d'exécution de toutes les opérations.