如果索引为5
,数组大小为10
,则会返回此数组:[5, 4, 6, 3, 7, 2, 8, 1, 9, 0]
代码:
function middleOutIterator(index, arraySize) {
var distances = [];
for (var i = 0; i < arraySize; i++) {
distances[i] = [ i, Math.abs(index - i) ];
}
distances.sort(sort);
for (var i = 0; i < distances.length; i++) {
distances[i] = distances[i][0];
}
return distances;
}
function sort(a, b) {
return a[1] > b[1];
}
基本上,你传入一个起始索引,它向任何一个方向向外迭代。
这不是一个真正的迭代器,它只是创建了一个索引数组,所以我给它的名字有点用词不当,但你会称之为这种迭代/排序?
我不打算优化此功能,因为它不在关键区域,当然也不是瓶颈,但我有兴趣阅读更多有关它和任何相关算法。
答案 0 :(得分:1)
在Robin Hood hashing的初始论文中推荐了这种类型的迭代,在查找时它用于搜索步骤。本文将其称为&#34;以中心为中心的搜索,&#34;因为这个想法是跳到一个范围的(预期的)中间,然后围绕平均值向两个方向向外搜索。
我不确定这是否是&#34;官方&#34;这种技术的名称或它是否有许多名称,但有一些东西可以指向它。