这是什么样的迭代?

时间:2013-06-19 17:23:03

标签: javascript iterator

如果索引为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];
}

基本上,你传入一个起始索引,它向任何一个方向向外迭代。

这不是一个真正的迭代器,它只是创建了一个索引数组,所以我给它的名字有点用词不当,但你会称之为这种迭代/排序?

我不打算优化此功能,因为它不在关键区域,当然也不是瓶颈,但我有兴趣阅读更多有关它和任何相关算法。

1 个答案:

答案 0 :(得分:1)

Robin Hood hashing的初始论文中推荐了这种类型的迭代,在查找时它用于搜索步骤。本文将其称为&#34;以中心为中心的搜索,&#34;因为这个想法是跳到一个范围的(预期的)中间,然后围绕平均值向两个方向向外搜索。

我不确定这是否是&#34;官方&#34;这种技术的名称或它是否有许多名称,但有一些东西可以指向它。