我有最大优先级队列的实现:
"use strict";
// insert - N
// remove maximum - 1
class MaxPQ {
constructor(queue) {
this._pq = [];
this._size = 0;
if (!queue) {
this._size = 0;
} else {
this._size = queue.length;
for (let i = 0; i < this._size; i++) {
this._pq[i + 1] = queue[i];
}
for (let k = Math.floor(this._size / 2); k >= 1; k--) {
this._sink(k);
}
}
}
isEmpty() {
return this._size === 0;
}
get size() {
return this._size;
}
get max() {
return this._pq[1];
}
insert(item) {
this._pq[++this._size] = item;
this._swim(this._size);
}
deleteMax() {
let max = this._pq[1];
this._exch(1, this._size--);
this._sink(1);
this._pq[this._size + 1] = null;
return max;
}
_swim(k) {
while (k > 1 && this._less(Math.floor(k / 2), k)) {
this._exch(k, Math.floor(k / 2));
k = Math.floor(k / 2);
}
}
_sink(k) {
while (2 * k <= this._size) {
let j = 2 * k;
if (j < this._size && this._less(j, j + 1)) {
j++;
}
if (!this._less(k, j)) {
break;
}
this._exch(k, j);
k = j;
}
}
_less(i, j) {
return this._pq[i] < this._pq[j];
}
_exch(i, j) {
let temp = this._pq[i];
this._pq[i] = this._pq[j];
this._pq[j] = temp;
}
}
module.exports = MaxPQ;
工作正常。它从数组中获取/删除最大数量而不进行排序。
但我不明白它在哪里有用。你能告诉我在javascript和Node.js中使用的可能示例
假设,我有一些优先级的东西。从1到10.但是我如何将其链接到项目,我如何识别哪个项目具有此优先级。在java作者中使用一些Key泛型类型。
我从书籍算法,Sedgewick link to source
中选择了这个算法