2

给定一个索引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];
}

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

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

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

4

1 回答 1

1

这种类型的迭代在关于Robin Hood hashing的初始论文中被推荐,它在进行查找时的搜索步骤中使用。该论文将其称为“以均值为中心的搜索”,因为其想法是跳到范围的(预期)中间并围绕均值在两个方向上向外搜索。

我不确定这是否是这种技术的“官方”名称,或者它是否有很多名称,但很高兴有一些东西可以指出。

于 2015-08-27T21:04:26.077 回答