web-dev-qa-db-ja.com

ソートされた配列は最小ヒープですか?最大ヒープの最小値はいくつですか?

私は最小ヒープと最大ヒープを研究しましたが、いくつか質問があります。

  1. ソートされた配列は最小ヒープですか?
  2. 最大ヒープの最小値はいくつですか?
16
user355002

配列ベースのヒープ実装を使用する場合、最低から最高にソートされた配列は最小ヒープです。親ノードが子ノード(ゼロベースの配列を使用する場合は2i +1および2i + 2)よりも大きいヒーププロパティは、子を​​持つすべてのノードに適用されます。

最大ヒープの最小値はリーフノードの1つにありますが、どちらかはわかりません。最小ノードは、定義上、子ノードを持つことができないため、リーフである必要があります。ただし、ヒーププロパティは、リーフノードが互いにどのように比較されるかを指定せず、親とのみ比較します。

28
tvanfosson

ソートされた配列は最小ヒープですか?

はい、一般的な配列格納ヒープ規則を使用している場合は可能です。

最大ヒープの最小値はどこにありますか?

葉の1つ。これは正確には未定義です。

7
Ben S

2 * i +1および2 * i + 2(iは0から始まる)と比較して、インデックスiの配列としてバイナリヒープを実装できます。最小ヒープでa [i] <a [2 * i +1]およびa [i] <a [2 * i + 2]

そう

1。ソートされた配列は最小ヒープです。

2。特定のインデックスはありません。それがただの葉であることを私たちが知っているすべて

これを読むことをお勧めします http://en.wikipedia.org/wiki/Binary_heap

1
user467871
  • ソートされた配列は最小ヒープですか?

昇順で並べられている場合-はい、一般的に言えば、最小ヒープです。より正確には-バイナリヒープの配列実装次のルールがあります。

  • インデックスiを持つノードの子は、インデックス2i + 1および2i + 2
  • インデックスiを持つノードの親は、インデックスfloor((i --1)/ 2)にあります。

同時に、逆には機能しません。配列ベースのバイナリヒープは、並べ替えられたリストを格納しません。

  • 最大ヒープの最小値はどこにありますか?

これは定義されておらず、キーを最小ヒープに格納するときにすばやく回答したい質問ではありません。 O(1)時間内にヒープの最小値と最大値の両方をピークできるようにしたい場合は、Javaで MinMaxPriorityQueue のようなクラスを使用できます。

0
Vladimir

配列は、昇順または降順で並べ替えることができます。 「ソートされた配列は最小ヒープです」というステートメントは部分的に正しいです。このステートメントの正しいバージョンは「昇順でソートされた配列は最小ヒープとして扱うことができます」であり、その補足ステートメントは「降順でソートされた配列は最大ヒープとして扱うことができます」です。

「昇順でソートされた配列は、最小ヒープとして扱うことができます」

ただし、「すべての最小ヒープが昇順でソートされた配列の形式をとることができるわけではない」ことに注意してください。

そして、最大ヒープの最小値については、これが葉に存在することだけがわかっており、O(n)で検索できます。

0
brainLoop

ソートされた配列は最小ヒープですか?

ソートされた配列はmin-heapまたはmax-heapのいずれかですが、その逆は当てはまりません。
min-heapまたはmax-heapは、必ずしもソートされた配列であるとは限りません。

最大ヒープの最小値はいくつですか?

max-heap(または優先キュー)は、定義上、コレクションから最大値をO(1)時間で提供します。誰かがmax-heapから最小値を取得する必要がある場合は、ヒープ自体を使用します。この問題の最初の場所は正しくありません。スタックがFIFOアクセスを提供することを期待するか、キューがLIFOアクセスを提供することを期待するようなものです。

ただし、jfyi、最小値は、ヒープによって形成されたツリーの葉の1つになります。それはどのサブツリーにもあり得ます。したがって、それを見つけるのにO(1)時間以上かかる別のアルゴリズムが必要です。

補足として:
n個の要素を持つヒープには、[1から(n + 1)/ 2]の葉がある場合があります。
ヒープによって形成される木の高さがhの場合、ヒープには最大2 ^(h-1)の葉があります

0
Nitin

最大ヒープの最小値はどこにありますか?

回答:最大ヒープは、インデックスが1からnまでの単純な配列を使用して表すことができます。最初の要素は最大ヒープのルートです。ヒーププロパティ:インデックスiのノードは、2iに子を残し、2i + 1に右の子を持っています(2iと2i + 1がヒープサイズ、つまり配列の長さよりも小さい場合)。

最大ヒープのリーフノードは、インデックスi +1からnまで見つかります。ここでi = n/2; nは配列の長さです。そして、リーフノードの1つに最小値があります。
したがって、a [i +1]からa [n]の値から最大ヒープの最小値を見つけることができます。最小値を見つけるための時間計算量はorder-of(n-i)です。

0