プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

デュアルプライオリティキュー(DEPQ)とは?双対構造法による実装を解説

デュアルプライオリティキュー(DEPQ)の概要

デュアルプライオリティキュー(Double Ended Priority Queue:DEPQ、両端優先度キュー)は、最小要素と最大要素の両方に効率的にアクセスできるデータ構造です。本記事では、片側のみの優先度キュー(PQ)から効率的なDEPQデータ構造を構築する一般的な手法について解説します。

単一端の優先度キュー(PQ)からDEPQを導出するための一般的な手法が存在します。これらの手法は、remove(bNode)操作(指定されたノードbNodeをPQから削除する操作)を効率的に実装できるPQデータ構造を前提としています。

双対構造法(Dual Structure Method)

最もシンプルな手法が「双対構造法」です。この方法では、DEPQの全要素について、最小ヒープ(min PQ)と最大ヒープ(max PQ)の2つのヒープを同時に管理します。さらに、同じ要素に対応する最小ヒープ側のノードと最大ヒープ側のノードの間に「対応ポインタ(correspondence pointers)」を設定します。

図Dは、要素 7, 8, 3, 6, 5 からなる双対ヒープ構造を示したものです。対応ポインタは赤い矢印で表現されています。

デュアルプライオリティキュー(DEPQ)とは?双対構造法による実装を解説

図D:双対ヒープ

各要素の格納場所について

図では各要素が最小ヒープと最大ヒープの両方に格納されているように見えますが、実際には各要素をどちらか一方のヒープにのみ格納すれば十分です。この工夫により、メモリ使用量を抑えることができます。

DEPQの基本操作

isEmpty および size 操作

isEmpty(空判定)とsize(要素数の取得)は、DEPQ内の要素数を追跡する変数 size を保持しておくことで、簡単かつ高速に実装できます。

最小・最大要素の参照

最小要素は必ず最小ヒープの根(ルート)に位置し、最大要素は最大ヒープの根に位置します。そのため、どちらの要素も定数時間で参照可能です。

挿入操作

要素Bを挿入する際は、まずBを最小ヒープと最大ヒープの両方に挿入します。その後、最小ヒープ内のBの位置と最大ヒープ内のBの位置の間に対応ポインタを設定します。

削除操作

最小要素を削除する場合は、最小ヒープに対してremoveMinを実行するとともに、最大ヒープに対してremove(bNode)を実行します。ここでbNodeは、削除された要素に対応する最大ヒープ側のノードを指します。最大要素の削除も、これと対称的な手順で行うことができます。

  1. CSSのoutlineプロパティとは?要素の外側に線を引く方法を実例付きで解説

    Webデザインをしていると、ページ上の要素の周りにアウトライン(輪郭線)を表示したい場面があります。例えば、目立たせたいボックスをデザインする場合、色付きのアウトラインを追加することで、ユーザーの注意をその要素へ引きつけることができます。 そこで役立つのが、CSSのoutlineプロパティです。outlineプロパティを使えば、要素の境界線(border)の外側に線を追加し、Webページ上で要素を目立たせられます。 この記事では、具体的なコード例を交えながら、アウトラインの基本と、outlineプロパティを使ってWeb要素の外側に線を描く方法を解説します。読み終える頃には、outlineプロパ

  2. HTMLの引用タグの使い方を解説!q要素とblockquote要素の違いとは

    HTMLには、他の情報源から引用した文章を適切に表現するための専用タグが用意されています。代表的なものが、短い引用を定義する<q>タグと、別ソースから引用したセクション全体を定義する<blockquote>タグです。両者の大きな違いは要素の種類にあります。<q>タグはインライン要素として機能し、文章中に自然な形で引用文を埋め込めます。一方、<blockquote>タグはブロックレベル要素で、独立した引用ブロックとして表示されます。多くのブラウザでは、<q>タグで囲んだテキストには二重引用符( )が自動的に付与され、<blockq