Pourquoi tas de tri a une complexité de O(1)?
Je comprends que, à la fois rapide tri et la fusion de tri besoin O(n)
espace auxiliaire temporaire par les sous-ensembles qui sont construits, et en place rapide de tri nécessite O(log n)
espace auxiliaire pour la pile récursive des cadres. Mais pour des tas de tri, il me semble qu'il a aussi un pire des cas de O(n)
auxiliaire de l'espace pour construire le temporaire tas, même si les nœuds sont juste des pointeurs vers les éléments réels.
Je suis tombé sur ce explication :
Seulement O(1) de l'espace supplémentaire est nécessaire parce que le segment est construit à l'intérieur du tableau à trier.
Mais je pense que cela signifie que le tableau d'origine forcément déjà eu à être mis en œuvre comme une sorte d'arbre? Si le tableau d'origine est juste un vecteur, il semble de mémoire pour un tas pourrait encore être affecté.
- ce n'est pas la fonction de tri rapide si elle n'est pas en place. Et vous pouvez fusionner en place.
- C'est une sorte de possible de faire un tri rapide constante avec les auxiliaires de l'espace, mais il est assez étrange que de nombreux programmeurs question si c'est encore un quicksort.
Vous devez vous connecter pour publier un commentaire.
Données dans un tableau peut être réaménagé en un tas, en place. L'algorithme pour ce est en fait étonnamment simple., mais je ne vais pas entrer dans les ici.
Pour un tas de tri permet d'organiser les données, de sorte qu'il forme un tas en place, avec le plus petit élément à l'arrière (
std::make_heap
). Ensuite, vous échangez le dernier élément du tableau (le plus petit élément dans le tas), avec le premier élément du tableau (un largish nombre), et ensuite mélanger que les grandes élément vers le bas le tas jusqu'à ce qu'il est dans une nouvelle position correcte et le segment est encore un nouveau min tas, avec le plus petit élément restant dans le dernier élément du tableau. (std::pop_heap
)Donc pas de données doit être stocké n'importe où ailleurs, sauf peut-être pendant le swap étape.
Pour la visualisation, voici que les originaux des tas montré dans un formulaire standard
La cool truc c'est que depuis le tas est un arbre binaire complet, vous pouvez simplement utiliser un simple tableau, et pour le point i, sa mère serait l'élément
i/2
.