コンピュータサイエンスにおいて、ヒープは、ヒープ特性を満たすツリーベースのデータ構造です。最大ヒープでは、任意のノードC に対して、P が C の親ノードである場合、 P のキー(値) は C のキー以上になります。最小ヒープでは、P のキーは C のキー以下になります。[ 1 ]ヒープの「最上位」にあるノード (親ノードを持たないノード) は、ルートノードと呼ばれます。
与えられた要素配列からバイナリ(またはd進)ヒープを構築するには、古典的なFloyd アルゴリズムを使用して線形時間で実行できます。最悪の場合の比較回数は 2 N − 2 s 2 ( N ) − e 2 ( N ) に等しくなります (バイナリ ヒープの場合)。ここで、s 2 ( N ) はNのバイナリ表現のすべての桁の合計であり、e 2 ( N ) はNの素因数分解における 2 の指数です。[ 7 ]これは、元々空のヒープへの連続挿入シーケンスよりも高速です。連続挿入シーケンスは対数線形です。[ a ]
以下に、さまざまなヒープ データ構造の時間計算量[ 8 ]を示します。略語am.は、与えられた計算量が償却済みであることを示し、そうでない場合は最悪の場合の計算量です。「 O ( f )」および「Θ ( f )」の意味については、ビッグ O 記法を参照してください。操作名は、最大ヒープを前提としています。
↑各挿入には既存のヒープサイズに対してO(log( k )) かかるため、。 以来これらの挿入のうち定数倍(半分)は最大値から定数倍の範囲内にあるため、漸近的に仮定すると正式には時間はこれはスターリングの近似式からも容易にわかる。
↑ make-heapは、 n 個の未ソート要素のシーケンスからヒープを構築する操作です。meldがO (log n ) 時間で実行される場合(どちらの複雑さも償却可能) は、 Θ ( n ) 時間で実行できます。 [ 9 ] [ 10 ]別のアルゴリズムは、バイナリ ヒープに対してΘ ( n )を達成します。 [ 11 ]
D プログラミング言語の標準ライブラリには、D の範囲に基づいて実装されたstd.container.BinaryHeapが含まれています。インスタンスは、任意のランダムアクセス範囲から構築できます。BinaryHeapは入力範囲インターフェースを公開しており、D の組み込みforeachステートメントによる反復処理や、 std.algorithmパッケージの範囲ベースの API との統合が可能です。
1 2 Tarjan, Robert (1983). "3.3. 左ヒープ".データ構造とネットワークアルゴリズム. pp. 38–42 . doi : 10.1137/1.9781611970265 . ISBN978-0-89871-187-5。
↑ Hayward, Ryan; McDiarmid, Colin (1991). "Average Case Analysis of Heap Building by Repeated Insertion" (PDF) . J. Algorithms . 12 : 126– 153. CiteSeerX 10.1.1.353.7888 . doi : 10.1016/0196-6774(91)90027-v . 2016-02-05 のオリジナル(PDF)からアーカイブ済み。2016-01-28に取得。
↑ Pettie, Seth (2005). Towards a Final Analysis of Pairing Heaps (PDF) . FOCS '05 Proceedings of the 46th Annual IEEE Symposium on Foundations of Computer Science. pp. 174–183 . CiteSeerX 10.1.1.549.471 . doi : 10.1109/SFCS.2005.75 . ISBN0-7695-2468-0。
↑ハウプラー、ベルンハルト。セン、シッダールタ。タージャン、ロバート E. (2011 年 11 月)。「ランクペアリングヒープ」(PDF)。サイアム J. コンピューティング。40 (6): 1463 ~ 1485 年。土井: 10.1137/100785351。
↑ Brodal, Gerth Stølting ; Lagogiannis, George; Tarjan, Robert E. (2012). Strict Fibonacci heaps (PDF) . Proceedings of the 44th symposium on Theory of Computing - STOC '12. pp. 1177– 1184. CiteSeerX 10.1.1.233.1740 . doi : 10.1145/2213977.2214082 . ISBN978-1-4503-1245-5。
↑ Brodal, Gerth S. (1996)、「最悪ケースにおける効率的な優先度キュー」(PDF)、第7回ACM-SIAM離散アルゴリズムシンポジウム議事録、pp. 52–58
↑ Frederickson, Greg N. (1993), "An Optimal Algorithm for Selection in a Min-Heap", Information and Computation (PDF) , vol. 104, Academic Press, pp. 197–214 , doi : 10.1006/inco.1993.1030 , 2012年12月3日にオリジナル(PDF)からアーカイブ済み、 2010年10月31日取得