web-dev-qa-db-ja.com

最大/最小ヒープツリーに重複する値を含めることはできますか?

最大または最小のヒープツリーが重複する値を持つことを許可されているかどうか疑問に思っていますか?私はオンラインリソースだけでこれに関する情報を見つけることに失敗しました。

19
Vimzy

はい、できます。これについては、「アルゴリズムの概要」(Charles E. Leiserson、Clifford Stein、Thomas H. Cormen、Ronald Rivest)を参照してください。ウィキペディアのバイナリヒープの定義によると、

比較によると、すべてのノードは、その子の[以上(max heaps)]または[以下(min heaps)]ですヒープに定義された述語。

20
ucsunil

はい、重複が発生する可能性があります。From wikipedia ヒープの定義:

親ノードのキーは常に子のキー以上であり、最も高いキーはルートノードにあります(この種類のヒープは最大ヒープと呼ばれる)または親ノードのキーが子のキーと等しいであり、最も低いキーがルートノードにある(最小ヒープ) )

つまり、等しい子ノードがある場合、それらは重複している可能性があります。

7
Raul Guiu

はい、しかし私はノーと言うでしょう。効率を上げるために、重複する値を持つ別のノードがあってはなりません。または、目的が少し失われます(子ノードなどを検索する必要があります)。ただし、データ内にその値のコピーの数を宣言する変数を含むように各ノードを設計することもできます。

これも私の意見です。これが悪いやり方だとしたら、誰かがその理由を説明できたら嬉しいです。私はいくつかの効率テストをしなければならないかもしれません。 intのような単純なデータ型を格納している場合、効率が低下することがわかりますが、IDを持つ大きなオブジェクトノードの場合、それはそれでいいようです。

1
zgc7009