首页
/ Heap.js 技术文档

Heap.js 技术文档

2024-12-28 21:02:06作者:魏献源Searcher

1. 安装指南

Heap.js 是一个使用 CoffeeScript/JavaScript 实现的二叉堆。它可以从 Python 的 heapq 模块移植而来。Heap.js 可以在浏览器或 Node.js 中使用。

浏览器使用:

你可以从这里下载脚本,并将其包含在你的网页中。

<script type="text/javascript" src="./heap.js"></script>

Node.js 使用:

通过 npm 安装:

npm install heap

然后引用它:

var Heap = require('heap');

2. 项目使用说明

Heap.js 暴露了一个名为 Heap 的类。

构造函数:Heap([cmp])

构造函数接收一个比较函数作为可选参数。如果省略,堆会构建为最小堆,即堆顶的元素是最小的。

如果提供了比较函数,堆将根据比较函数的返回值构建。

  • 如果 cmp(a, b) < 0,则元素 a 会在 b 前面
  • 如果 cmp(a, b) > 0,则元素 b 会在 a 前面

因此,比较函数的形式如下:

function cmp(a, b) {
  if (a 在 b 前面) {
    return -1;
  } 
  if (b 在 a 前面) {
    return 1;
  }
  return 0;
}

比较数字,只需:

function cmp(a, b) {
  return a - b;
}

实例方法

  • push(item) (别名:insert):将元素添加到堆。
  • pop():弹出并返回堆中的最小元素。
  • peek() (别名:top / front):返回堆中的最小元素。
  • replace(item):弹出当前最小的值并添加新的元素。这比先弹出再添加更高效,在固定大小的堆中使用更合适。注意返回的值可能比元素本身大!
  • pushpop(item):快速版本的一个推送后接一个弹出。
  • heapify():重建堆。当内部数据的优先级被修改时,此方法可能很有用。
  • updateItem(item):更新给定元素在堆中的位置。每次元素被修改时,都应该调用此函数。
  • empty():确定堆是否为空。
  • size():获取堆中存储的元素数量。
  • toArray():返回堆的数组表示形式(注意:数组是堆内部节点的浅拷贝)。
  • clone() (别名:copy):返回堆的一个克隆(注意:内部数据是原始数据的一个浅拷贝)。

静态方法

注意:所有静态方法都旨在应用于数组。

  • push(array, item, [cmp]):将元素添加到数组,并保持堆的不变性。
  • pop(array, [cmp]):弹出数组中的最小元素,并保持堆的不变性。
  • replace(array, item, [cmp]):弹出当前最小的值并添加新的元素。这比先弹出再添加更高效,在固定大小的堆中使用更合适。注意返回的值可能比元素本身大!
  • pushpop(array, item, [cmp]):快速版本的一个推送后接一个弹出。
  • heapify(array, [cmp]):建立堆。
  • updateItem(array, item, [cmp]):更新给定元素在堆中的位置。每次元素被修改时,都应该调用此函数。
  • nlargest(array, n, [cmp]):查找数据集中的 n 个最大元素。
  • nsmallest(array, n, [cmp]):查找数据集中的 n 个最小元素。

3. 项目API使用文档

Heap.js 的 API 使用非常直观,以下是几个示例:

推送和弹出

var heap = new Heap();
heap.push(3);
heap.push(1);
heap.push(2);
heap.pop(); // 返回 1

自定义比较函数

var heap = new Heap(function(a, b) {
    return a.foo - b.foo;
});
heap.push({foo: 3});
heap.push({foo: 1});
heap.push({foo: 2});
heap.pop(); // 返回 {foo: 1}

查找数组中的最大/最小元素

var array = [1, 3, 4, 2, 5];
Heap.nlargest(array, 3);  // 返回 [5, 4, 3]
Heap.nsmallest(array, 3); // 返回 [1, 2, 3]

4. 项目安装方式

Heap.js 可以通过 npm 安装到 Node.js 中:

npm install heap

或者在浏览器中直接引用下载的脚本:

<script type="text/javascript" src="./heap.js"></script>
登录后查看全文
热门项目推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
160
2.03 K
kernelkernel
deepin linux kernel
C
22
6
pytorchpytorch
Ascend Extension for PyTorch
Python
45
78
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
533
60
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
947
556
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
198
279
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
996
396
communitycommunity
本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息
381
17
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
146
191
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Python
75
71