JavaScript で Priority Queue を実装する

JavaScript で Priority Queue を実装する

1. 優先キューの紹介

通常のキューに要素が挿入されると、データはバックエンドに配置され、前の要素がすべて処理されるまで前のデータは処理されないことがわかっています。ただし、優先キューは要素を挿入するときにデータの優先度を考慮し、それを他のデータの優先度と比較します。比較が完了すると、キュー内のこの要素の正しい位置を取得できます。その他の処理方法は、基本的に基本キューと同じです。

優先キューに関して考慮すべき主な問題は次のとおりです。

  • 各要素は単なるデータではなく、データの優先順位も含みます。
  • addメソッドでは、優先度に応じて正しい位置に配置します。

病院(救急科)の待合室など日常生活でも優先待ち行列が利用されている例があります。医師はより重篤な症状の患者を優先するだろう。コンピュータでは、優先度キューを使用して、キュー内のタスクの順序を並べ替えることもできます。たとえば、各スレッドで処理されるタスクの重要度は異なり、優先度のサイズを使用して、キュー内でスレッドが処理される順序を決定できます。

2. 優先キューのカプセル化

優先キューの動作は基本的にキューと同じですが、挿入操作が異なるため、ここでは優先キューの挿入操作を中心に実装します。

たとえば、特定のデータの優先度に応じて要素を挿入する場合、まず優先度キューをカプセル化するクラスを作成し、その中に要素の優先度とデータを保存するコンストラクターを作成し、次に要素を格納する属性を追加します。

コードは次のとおりです。

関数PtiorityQueue(){
            var アイテム = [];
            //要素とその優先度を保存するための新しいコンストラクタをカプセル化します function queueElement(element,priority){
                this.element = 要素;
                this.priority = 優先度;
            }
        }

作成が完了すると、挿入操作が実装されます。

  • キューに要素がない場合は直接挿入する
  • 挿入する要素の優先度がキュー内の要素の優先度よりも低い場合は、ソート後に挿入されます。

具体的な実装コードは次のとおりです。

関数PtiorityQueue(){
   this.items = [];
    //要素とその優先度を保存するための新しいコンストラクタをカプセル化します function QueueElement(element,priority){
        this.element = 要素;
        this.priority = 優先度;
    }
     //1. 挿入メソッドを実装する PtiorityQueue.prototype.enqueue = function(element,priority){
        //1. queueElement オブジェクトを作成する var queueElement = new QueueElement(element,priority);
        //2. キューが空かどうかを判定する if (this.items.length == 0) {
            this.items.push(キュー要素);
        }それ以外{
            var フラグ = false;
            for(var i =0;i<this.items.length;i++){
                キュー要素の優先度が this.items[i].priority より低い場合
                    this.items.splice(i,0,queueElement);
                    フラグ = true;
                    壊す;
                }
            }
            if(!フラグ){
                this.items.push(キュー要素)
            }
        }
     }
}

入力テストデータは次のとおりです。

var pq = 新しい PtiorityQueue();
pq.enqueue('d',30)
pq.enqueue('c',50)
pq.enqueue('a',100)
pq.enqueue('b',60)
pq.enqueue('e',20)
コンソールログ(pq);

印刷結果は次のとおりです。

JavaScript での優先キューの実装に関するこの記事はこれで終わりです。優先キューの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript データ構造の詳細な説明: 優先キューと循環キューの例
  • JavaScript キュー、優先キュー、循環キュー

<<:  DockerコンテナでPythonを実行するディープラーニング環境を構築する方法

>>:  メタタグのビューポートを使用して画面の CSS を定義する

推薦する

鏡像効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスでミラーイメージ効果を実現するための具体的なコードを参考...

CentOS 8.1 で LEMP (Linux+Nginx+MySQL+PHP) 環境を構築する (チュートリアルの詳細)

目次ステップ1: CentOS 8でパッケージを更新するステップ2: CentOS 8にNginx ...

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...

docker view container log コマンドの実装

なぜログを読む必要があるのでしょうか?たとえば、コンテナの起動に失敗したがプロンプトが表示されない場...

mysql5.7.20 での最初のログイン失敗に対する簡単な解決策

まず、 (1)MySQL 5.7にはデフォルトのパスワードがあるデフォルトのパスワードを見つける g...

MySQL 5.5.27 winx64 のインストールと設定方法のグラフィックチュートリアル

1. インストールパッケージMYSQLサービスダウンロードアドレス:MySQL公式サイトからダウンロ...

Dockerイメージの作成とプロジェクト全体のワンクリックパッケージングとデプロイ

一般的な Dockerfile 命令の紹介命令説明するから新しいイメージが構築される基となるイメージ...

MySQL トリガーの使用方法と利点と欠点の紹介

目次序文1. トリガーの概要2. トリガーの作成2.1 トリガー構文の作成2.2 コード例3. トリ...

SQL Server の完全バックアップに関する珍しいエラーと解決策

1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...

MySQL 5.1 のパスワードを変更し、MySQL データベースにリモートでログインする方法

mysql ユーザーを作成し、承認します。形式: 「ユーザー パスワード」で識別されるユーザー@ログ...

ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...

プロジェクトにおけるVue3のロジック抽出とフィールド表示についての簡単な説明

目次論理階層化異なる地域から事業を分離するこれを実行する利点このようなシナリオにどう対処するか最適化...

MySQL の instr を使用したファジー クエリ メソッドの紹介

MySQL の内部関数instrを使用すると、従来の like クエリ メソッドを置き換えることがで...

Vue プロジェクトはファイルダウンロードの進行状況バー機能を実装します

日常業務でファイルをダウンロードする一般的な方法は 2 つあります。 1 つ目は、サーバーのファイル...

WEBAPP開発スキルのまとめ(モバイルWebサイト開発の注意点)

1. レスポンシブな Web を開発するには、ページを画面サイズに適応させる必要があります。前の記...