如果这个问题听起来很模糊,我道歉。我目前正在使用Javascript来创建A *寻路算法。我有一个对象列表,每个对象都有一个属性 f ,我想使用minheap数据结构对列表进行排序。
我不明白的是如何修改基于排序的内容。我提到的对象有多个属性,例如 h 和 g 。有没有我不知道的记号?我使用npm下载了heap package。
到目前为止我所拥有的是:
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
}
我试图替换的代码(出于性能原因)是:
var winner = 0;
for (var i = 0; i < openSet.length; i++) {
if (openSet[i].f < openSet[winner].f) {
winner = i;
}
}
我很感激任何指导。谢谢。
答案 0 :(得分:1)
看一下文档,它说如果没有比较函数通过构造函数传递,那么使用的数据结构是min-heap
。如果要传入函数,则将根据该函数构建堆。
来自https://www.npmjs.com/package/heap
构造函数接收比较函数作为可选参数。如果省略,则将堆构建为最小堆,这意味着将首先弹出最小的元素。
和
如果提供了比较功能,则将根据比较函数的返回值构建堆。
看起来像这样的比较功能&#34;与JavaScript .sort()
非常相似。使用JavaScript .sort()
,您传入一个比较两个值的函数,并根据条件返回-1,1或0.这些返回值确定元素A的索引是否将转到用元素B向上或向下移动,反之亦然。
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
另外,查看您的if(!heap.empty)
需要if(!heap.empty())
的文档。
修改强>
以下是堆文档中的示例排序/比较函数。它只是组织从最小到最大的数字。
function cmp(a, b) {
return a - b;
}