Tas binomial
Dans le de l'informatique, un tas binomial est un tas semblable à un tas binaire mais également soutien de de l'opération de fusionner deux tas rapidement. Ceci est réalisé en employant une structure arborescente spéciale. Il est important car une exécution du type de données abstrait de mergeable du tas (également appelé le tas meldable), qui est une opération de soutien de fusion de la file d'attente à priorité déterminée .
Arbre binomial
Un tas binomial est mis en application comme collection d'arbres binomiaux (rivaliser avec un tas binaire , qui a une forme d'un arbre binaire simple). Un arbre binomial est défini périodiquement :L'arbre binomial du
A de l'ordre 0 est un noeud simple
Un arbre binomial du k d'ordre a un noeud de racine dont les enfants sont des racines des arbres binomiaux du k -1 d'ordres, le k -2,…, 2, 1, 0 (dans cet ordre).
Un arbre binomial du k d'ordre a 2k les noeuds, le k de taille.
En raison de sa structure unique, un arbre binomial du k d'ordre peut être construit de deux arbres de k -1 d'ordre trivialement en attachant l'un d'entre eux en tant qu'enfant extrême gauche de l'autre. Ce dispositif est central à l'opération de la fusion de d'un tas binomial, qui est son avantage principal par rapport à d'autres tas conventionnels.
Structure d'un tas binomial
Un tas binomial est mis en application comme ensemble d'arbres binomiaux qui satisfont les propriétés binomiales de tas de : chaque arbre binomial dans un tas obéit la propriété de Minimum-tas de : la clef d'un noeud est supérieur ou égal à la clef de son parent.
là peut seulement être le un ou arbres binomiaux zéro du pour chaque ordre, y compris l'ordre nul.
La première propriété s'assure que la racine de chaque arbre binomial contient la plus petite clef dans l'arbre, qui s'applique au tas entier.
La deuxième propriété implique qu'un tas binomial avec des éléments du n se compose tout au plus de l'atterrisseur n de de + des arbres 1 binôme. En fait, le nombre et les ordres de ces arbres sont uniquement déterminés par le nombre du n d'éléments : chaque arbre binomial correspond au chiffre un dans la représentation binaire du du n de nombre. Par exemple le numéro 13 est 1101 dans la binaire, , et un tas binomial avec 13 éléments se composera ainsi de trois arbres binomiaux des ordres 3, 2, et 0 (voir la figure ci-dessous).
l'exemple de de
d'un tas binomial contenant 13 éléments avec le tas distinct de keys.
The se compose de trois arbres binomiaux avec
Exécution
Puisqu'aucune opération n'exige à accès sélectif aux noeuds de racine des arbres binomiaux, les racines des arbres binomiaux peuvent être stockées dans une liste chaînée , commandée en augmentant l'ordre de l'arbre.
Fusion
Comme mentionné ci-dessus, l'opération la plus simple et la plus importante est le fusionnement de deux arbres binomiaux du même ordre à moins de deux tas binomiaux. En raison de la structure des arbres binomiaux, ils peuvent être fusionnés trivialement. Car leur noeud de racine est le plus petit élément dans l'arbre, en comparant les deux clefs, le plus petit de elles est la clef minimum, et devient le nouveau noeud de racine. Alors l'autre arbre deviennent un sous-arbre de l'arbre combiné. Cette opération est de base au fusionnement complet de deux tas binomiaux.mergeTree de la fonction (p, q) si <= q.addSubTree (q) d'autre de retour q.addSubTree (p)
L'opération du fusionnant des tas de deux est peut-être la plus intéressante et peut être employée comme sous-routine dans la plupart des autres opérations. Les listes de racines des deux tas sont traversées simultanément, pareillement comme dans l'algorithme de fusion de .
Si seulement un des tas contient un arbre du j d'ordre, cet arbre est déplacé au tas fusionné. Si les deux tas contiennent un arbre du j d'ordre, les deux arbres sont fusionnés à un arbre de j +1 d'ordre de sorte que la propriété de minimum-tas soit satisfaisante. Noter qu'il peut plus tard être nécessaire de fusionner cet arbre avec un autre arbre de présent du j +1 d'ordre dans un des tas. Au cours de l'algorithme, nous devons examiner tout au plus trois arbres de n'importe quel ordre (deux des deux tas que nous fusionnons et un composé de deux plus petits arbres).
Chaque arbre a le n d'atterrisseur d'ordre tout au plus et donc le temps de fonctionnement est le O ( n d'atterrisseur).
fusion de la fonction (p, q) tandis que pas de et q.end () ()) arbre = mergeTree (p.currentTree ()) si pas heap.empty de () arbre = mergeTree (arbre, heap.currentTree ()) heap.addTree (arbre) d'autre heap.addTree (arbre) heap.next ()
Insertion
Le insérant un nouvel élément à un tas peut être fait en créant simplement un nouveau tas contenant seulement cet élément et puis le fusionnant avec le tas original dans le O (temps de notation n).
Minimum de trouvaille
Pour trouver l'élément minimum du du tas, trouver le minimum parmi les racines des arbres binomiaux. Ceci peut encore être fait facilement dans le temps du O ( n d'atterrisseur), car il y a juste des arbres du O ( n d'atterrisseur) et par conséquent s'enracine pour examiner.En employant un indicateur à l'arbre binomial qui contient l'élément minimum, le moment pour cette opération peut être réduit au O (1). L'indicateur doit être mis à jour en effectuant n'importe quelle opération autre que le minimum de trouvaille. Ceci peut être fait dans le O ( n d'atterrisseur) sans soulever le temps de fonctionnement de n'importe quelle opération.
Minimum de suppression
À la suppression de l'élément minimum du tas, premier trouvent cet élément, l'enlèvent de son arbre binomial, et obtiennent une liste de ses sous-arbres. Transformer alors cette liste de sous-arbres en tas binomial séparé en les commandant à nouveau de plus grand à la commande. Fusionner alors ce tas avec le tas original.deleteMin de la fonction (tas) minute = heap.first () pour chaque courant de dans heap.root < minute = courant minimum du puis pour chaque d'arbre de dans min.removeTree (minute) fusion (tas, tmp)
Diminuer la clef
Après le diminuant la clef d'un élément, il peut devenir plus petit que la clef de son parent, violant la propriété de minimum-tas. Si c'est le cas, échanger l'élément avec son parent, et probablement aussi avec son parent, et ainsi de suite, jusqu'à ce que la propriété de minimum-tas ne soit plus violée. Chaque arbre binomial a le n d'atterrisseur de taille tout au plus, ainsi ceci prend du temps du O ( n d'atterrisseur).
Suppression
À la suppression un élément du tas, diminuent sa clef à l'infini moindre (c'est-à-dire, une certaine valeur plus bas que tout élément dans le tas) et puis suppriment le minimum dans le tas.
Exécution
Tout les travail suivant d'opérations dans le temps du O ( n de notation) sur un tas binomial avec des éléments du n :Insertion de
un nouvel élément au tas
Trouver l'élément avec la clef minimum
Supprimer l'élément avec la clef minimum du tas
Diminuer la clef d'un élément donné
Élément donné par suppression du tas
Tas donnés de la fusion deux à un tas
La conclusion de l'élément avec la clef minimum peut également être faite dans le O (1) en employant un indicateur additionnel au minimum.
Variantes
Des variantes des arbres binomiaux sont employées pour construire d'autres structures de données semblables de tas telles que les tas de Fibonacci de et les tas mous
Voir également
Tas de Fibonacci de Tas mou
.
| Random links: | Médaille nationale de la Science | Granit, l'Oklahoma | Banlieue noire adoptive | Lamborghini Miura | L'Ouganda avant 1900 | Montón_binomial |