スタディノート|ヒープとHashHeap

 

ヒープ

ヒープ(英語:ヒープ)はコンピューターサイエンスにおける特別な種類のデータ構造の総称ですヒープは通常、ツリーとして表示できるオブジェクトの配列です。ではキュー時間のいくつかの短い期間での実際の状況は、タスクが終了するのに長い時間を待つか、またはいくつかのない短いが、ジョブの重要性を、同じになるので、キュースケジューラを繰り返し、最初の仕事と実行を抽出します優先する必要があります。ヒープは、このような問題を解決するために設計されたデータ構造です。

論理的定義

n要素のシーケンス{k1、k2 ... ki ... kn}は、
(ki <= k2i、ki <= k2i + 1)または(ki> = k2iの関係が満たされる場合に限り、ヒープと呼ばれます。、ki> = k2i + 1)、(i = 1,2,3,4 ... n / 2)

名前が示すように、ヒープの実装は、しばしばPriorityQueueを使用します。

スタックの構成により達成されるバイナリヒープ(バイナリヒープ)、実際のバイナリがないため定義されたアプリケーション、その普遍性の、データ構造の実装を参照して、1。このデータ構造には、次のプロパティがあります。

  • ノードはすべての子孫よりも小さい(または大きい)であり、最小の要素(または最大の要素)はヒープのルートにありますヒープ順序)。
  • パイルは常に完全な木です。つまり、最下層を除いて、他の層のノードは要素で埋められ、最下層は可能な限り左から右へと埋められます。

最大のルートノードを持つヒープは最大ヒープまたは大きなルートヒープと呼ばれ、最小のルートノードを持つヒープ最小のヒープまたは小さなルートヒープと呼ばれます一般的なヒープには、バイナリフォークフィボナッチヒープがあります

HashHeap

JavaのPriorityQueueには、指定された要素を削除できる関数removeがあります。この時点での時間の複雑さはO(n)です。これは、削除する前に配列を走査して要素を見つける必要があるためです。

ただし、この操作が頻繁に呼び出される場合は、この関数を改善できます。つまり、ハッシュテーブルを使用して各要素の配列のインデックスを格納します。これにより、要素を削除するときに、配列を走査して要素を見つける必要がなくなります。ポジションは直接削除することができ、時間の複雑さはO(logn)です。

アプリケーションを参照してください

http://www.lintcode.com/en/problem/building-outline/

19件の元の記事を公開 賞賛4 170,000回+

おすすめ

転載: blog.csdn.net/u011250186/article/details/105523230