mirror of
https://github.com/krahets/hello-algo.git
synced 2026-11-02 03:05:24 +08:00
* Retranslate the complete Japanese online edition from Chinese * Fit Japanese homepage labels and localize heading permalinks * Point Japanese contribution instructions to the Japanese preview * Replace locale conditionals with multilingual UI tables
2.0 KiB
2.0 KiB
まとめ
要点の振り返り
- ヒープは完全二分木であり、満たす条件によって最大ヒープと最小ヒープに分けられます。最大(最小)ヒープでは、ヒープの先頭要素が最大(最小)です。
- 優先度付きキューは、取り出しに優先度を持つキューと定義され、通常はヒープで実装されます。
- ヒープの主な操作とその時間計算量は、要素の挿入が $O(\log n)$、先頭要素の取り出しが $O(\log n)$、先頭要素へのアクセスが
O(1)などです。 - 完全二分木は配列で表現するのに非常に適しているため、通常は配列にヒープを格納します。
- ヒープ化はヒープの性質を維持するための操作であり、挿入と取り出しの両方で用います。
n個の要素を入力してヒープを構築する時間計算量はO(n)まで改善でき、非常に効率がよいです。- Top-k は古典的なアルゴリズムの問題であり、ヒープを用いると時間計算量
O(n \log k)で効率よく解けます。
Q & A
Q:データ構造の「ヒープ」とメモリ管理の「ヒープ」は同じ概念ですか?
両者は同じ概念ではなく、たまたまどちらも「ヒープ」と呼ばれているだけです。コンピュータシステムのメモリにおけるヒープは動的メモリ割り当ての一部であり、プログラムは実行時にここへデータを格納できます。プログラムは必要な量のヒープメモリを要求し、オブジェクトや配列などの複雑な構造を格納します。データが不要になったら、メモリリークを防ぐためにそのメモリを解放する必要があります。スタックメモリに比べ、ヒープメモリの管理と使用にはより注意が必要であり、不適切な使い方はメモリリークや不正なポインタなどの問題につながります。