ヒープの実装とは? わかりやすく解説

ヒープの実装

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/01/03 14:40 UTC 版)

二分ヒープ」の記事における「ヒープの実装」の解説

古典的な二分木データ構造使って二分ヒープ木を構築することは完全に可能である。ただ、要素追加する時に次に追加する要素ぶら下げるべき要素探すのに手間がかかる、という問題がある。素直に実装した二分木では、根元に向かうリンクが存在しないためである。これは「スレッド木」と呼ばれているデータ構造により困難を緩和できるスレッド木とは、末端要素において、子要素への参照として null 等を格納するかわりに通りがけ順(二分木#行きがけ順、通りがけ順、帰りがけ順探索参照)における先行要素後続要素への参照格納し探索容易にした二分木データ構造である。 しかし、より普及しているやり方は、配列に写す方法である。以下のように、ほとんど完全な二分木要素番号付けてみる。まず、根元要素に 1 という番号付ける。以下幅優先順番番号振ってゆく(図を参照)。 すると、番号次のような規則があることがわかる。ある要素振られ番号を n とすると、 左の子は 2n 右の子は 2n + 1 親は floor(n / 2) (※多く処理系で、整数除算として単に n / 2 で実装できる) 兄弟(ないし同世代) n + 1, n - 1 この規則性により、ほとんど完全な二分木は、ポインタ用のメモリを必要とせず、(可変長の)配列に、たいへん効率よく詰め込むことができ、また要素を辿ることもできる。これは暗黙データ構造一つ単純な例である。 このやり方は、ヒープソートで特に役に立つ入力配列を、ヒープ格納するために再利用し、in-placeソート実現できるからである。 0 からの番号付けだと、式が少し複雑になるので、1 からの番号付け一般に使われるC言語など、配列が 0 始まり場合には、配列の 0 番目を、「ルートルートと言われるような手法のための番兵データ置いたり、そのヒープ木の現在の要素数の格納などに流用することがある二分ヒープ木のマージは、等しサイズヒープ2個の場合、Θ(n)だけかかる。マージ処理がよく使われる処理であるならば、二項ヒープのような違うヒープ実装推奨する

※この「ヒープの実装」の解説は、「二分ヒープ」の解説の一部です。
「ヒープの実装」を含む「二分ヒープ」の記事については、「二分ヒープ」の概要を参照ください。

ウィキペディア小見出し辞書の「ヒープの実装」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ヒープの実装」の関連用語

ヒープの実装のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ヒープの実装のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの二分ヒープ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS