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

このタイプの反復は、ロビン・フッドのハッシュに関する最初の論文で推奨されており、ルックアップを行う際の検索ステップで使用されていました。この論文では、これを「平均中心の検索」と呼んでいます。これは、範囲の (予想される) 中間にジャンプし、平均の周囲の両方向で外側に検索するという考え方であるためです。

これがこのテクニックの「正式な」名前なのか、それとも多くの名前で呼ばれているのかはわかりませんが、何かを指すのはいいことです.

于 2015-08-27T21:04:26.077 に答える