首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆是怎么知道该怎么分类的?

堆是怎么知道该怎么分类的?
EN

Stack Overflow用户
提问于 2017-11-21 03:41:47
回答 1查看 275关注 0票数 0

如果这个问题听起来含糊不清,我很抱歉。我目前正在使用Javascript创建一个A*路径查找算法。我有一个对象列表,每个对象都有一个属性f,我想使用min堆数据结构对列表进行排序。

我不明白的是如何修改排序的基础。我提到的对象具有多个属性,例如hg。有没有我不知道的符号?我使用npm下载了堆包

到目前为止,我得到的是:

代码语言:javascript
复制
var Heap = require('heap');
var heap = new Heap();
.
.
.
heap.push(start) // start is an object, specifically a Cell inside a grid

if(!heap.empty){
  // where I am having trouble
}

我试图替换的代码(出于性能原因)是:

代码语言:javascript
复制
var winner = 0;
for (var i = 0; i < openSet.length; i++) {
    if (openSet[i].f < openSet[winner].f) {
        winner = i;
    }
}

如有任何指导,我将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-21 04:32:02

看一下文档,它说,如果没有通过构造函数传递比较函数,那么所使用的数据结构是min-heap。如果要传递一个函数,堆将根据该函数构建。

来自https://www.npmjs.com/package/heap

构造函数接收比较函数作为可选参数。如果省略,堆将作为最小堆构建,这意味着将首先弹出最小的元素。

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

这个“比较函数”似乎与JavaScript .sort()非常相似。使用JavaScript .sort(),您将传入一个比较两个值的函数,并根据条件返回a-1、1或0。这些返回值决定元素A的索引是向上还是向下移动,反之亦然。

来源:对象/数组/排序

此外,查看文档时,您的if(!heap.empty)需要是if(!heap.empty())

编辑:

下面是堆文档中的一个示例排序/比较函数。它所做的就是把数字从最小到最大。

代码语言:javascript
复制
function cmp(a, b) {
    return a - b;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47404800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档