web-dev-qa-db-fra.com

Les arbres de tas max/min peuvent-ils contenir des valeurs en double?

Je me demande si un arbre de tas max ou min est autorisé à avoir des valeurs en double? Je n'ai pas réussi à trouver des informations à ce sujet avec les seules ressources en ligne.

13
Vimzy

Oui, ils peuvent. Vous pouvez en apprendre davantage à ce sujet dans «Introduction aux algorithmes» (de Charles E. Leiserson, Clifford Stein, Thomas H. Cormen et Ronald Rivest). Selon la définition des tas binaires dans Wikipedia:

Tous les nœuds sont [supérieurs ou égaux à] ( max tas ) ou [Inférieurs ou égaux à] ( min tas ) chacun de ses enfants, selon à un prédicat de comparaison défini pour le tas.

17
ucsunil

Oui, ils peuvent avoir des doublons. De wikipedia définition de Heap: 

Soit les clés des nœuds parents sont toujours supérieures ou égales À celles des enfants et la clé la plus haute est dans le nœud racine (ce type de segment de mémoire est appelé max. tas) ou les clés des nœuds parents sont inférieur ou égal à celui des enfants et la clé la plus basse est dans le nœud racine (tas min)

Ainsi, s'ils ont des nœuds enfants identiques, cela signifie qu'ils peuvent être dupliqués.

7
Raul Guiu

Oui, mais je dirais non. Pour des raisons d'efficacité, ils ne doivent pas avoir différents nœuds avec des valeurs en double, sinon ils perdent un peu leur fonction (vous devez rechercher des nœuds enfants, etc.). Cependant, vous pouvez concevoir que chaque nœud contienne une variable qui déclare le nombre de copies de cette valeur dans vos données.

Encore une fois, c'est mon opinion. Si c'est une mauvaise façon de faire, j'aimerais beaucoup que quelqu'un puisse expliquer pourquoi. Je vais peut-être devoir faire quelques tests d'efficacité. Si vous stockez des types de données simples tels que ints, je le verrais moins efficace, mais pour les nœuds d’objet plus grands qui ont des identifiants, c’est Nice, semble-t-il.

1
zgc7009