首页
/ Heap.js 技术文档

Heap.js 技术文档

2024-12-28 09:41:52作者:魏献源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>
热门项目推荐
相关项目推荐

项目优选

收起
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
383
36
Python-100-DaysPython-100-Days
Python - 100天从新手到大师
Python
611
115
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
205
58
Ffit-framework
FIT: 企业级AI开发框架,提供多语言函数引擎(FIT)、流式编排引擎(WaterFlow)及Java生态的LangChain替代方案(FEL)。原生/Spring双模运行,支持插件热插拔与智能聚散部署,无缝统一大模型与业务系统。
Java
113
13
RuoYi-Cloud-Vue3RuoYi-Cloud-Vue3
🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
45
29
cjoycjoy
a fast,lightweight and joy web framework
Cangjie
11
2
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
286
79
hertzhertz
Go 微服务 HTTP 框架,具有高易用性、高性能、高扩展性等特点。
Go
7
1
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
60
48
open-eBackupopen-eBackup
open-eBackup是一款开源备份软件,采用集群高扩展架构,通过应用备份通用框架、并行备份等技术,为主流数据库、虚拟化、文件系统、大数据等应用提供E2E的数据备份、恢复等能力,帮助用户实现关键数据高效保护。
HTML
90
65