C#の優先度付きキュー(Priority Queue)の基本と実装方法
優先度付きキュー(Priority Queue)とは、各要素が「優先度」の値を持つデータ構造であり、通常のキューを拡張したものです。
通常のキューでは先入れ先出し(FIFO)で要素が処理されますが、優先度付きキューでは、要素を取り出す際に最も優先度の高い項目が最初に削除されます。この特性により、タスクスケジューリングやダイクストラ法などのアルゴリズムで広く活用されています。
優先度付きキューの基本的な定義方法
C#で優先度付きキューを実装するには、IComparable<T>インターフェースを実装したジェネリッククラスとして定義するのが一般的です。これにより、要素同士を比較して優先度を判定できるようになります。
public class MyPriorityQueue<T> where T : IComparable<T> {
}要素の追加と内部データの保持
次に、キューへ要素を追加できるようにしていきます。以下の例では、内部にジェネリックリスト List<T> 型のフィールド info を用意し、そこに要素を格納しています。
コード例
public class MyPriorityQueue<T> where T : IComparable<T> {
private List<T> info;
public MyPriorityQueue() {
this.info = new List<T>();
}
}.NET 6以降なら標準ライブラリが利用可能
なお、.NET 6以降では標準ライブラリとして System.Collections.Generic.PriorityQueue<TElement, TPriority> クラスが提供されています。独自実装を行う必要がない場合は、こちらを利用することで、ヒープ構造に基づいた効率的な優先度付きキューを手軽に扱うことができます。
-
デュアルプライオリティキュー(DEPQ)とは?双対構造法による実装を解説
デュアルプライオリティキュー(DEPQ)の概要デュアルプライオリティキュー(Double Ended Priority Queue:DEPQ、両端優先度キュー)は、最小要素と最大要素の両方に効率的にアクセスできるデータ構造です。本記事では、片側のみの優先度キュー(PQ)から効率的なDEPQデータ構造を構築する一般的な手法について解説します。単一端の優先度キュー(PQ)からDEPQを導出するための一般的な手法が存在します。これらの手法は、remove(bNode)操作(指定されたノードbNodeをPQから削除する操作)を効率的に実装できるPQデータ構造を前提としています。双対構造法(Dual S
-
jQueryのclosest()メソッドの使い方を実例付きで解説
jQueryのclosest()メソッドは、選択された要素から出発してDOMツリーを上方向へ辿り、指定した条件に最初に一致する祖先要素を返すためのトラバース系メソッドです。親・子・兄弟といった関係性を利用して要素を操作したい場合に非常に便利です。 構文 closest()メソッドの基本構文は以下のとおりです。 $(selector).closest(filter) パラメータの説明 filter:どの祖先要素を対象にするかを指定するセレクター式です。要素名、クラス名、IDなどを指定できます。 条件に一致する祖先が見つかった時点で探索を終了し、その要素のみを返します。 一致する祖先が存在しない