【问题标题】:What kind of iteration is this?这是什么迭代?
【发布时间】:2013-06-19 17:23:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • f(x) = n + xsin(x)?
  • 我从来没有想过,有些人(读作:你)竟然能破解出这样的方程式,这让我很惊讶!这就是所谓的泰勒级数吗?
  • xsinx + C 只是看起来像这样的整个正弦函数类的一般形式。泰勒展开式完全不同。
  • 大声笑,你可以看到我的数学技能现在如何......

标签: javascript iterator


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多