javascript中使用的优先级队列在哪里?

时间:2016-01-30 20:12:40

标签: javascript node.js algorithm sorting

我有最大优先级队列的实现:

"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

中选择了这个算法

0 个答案:

没有答案