繁体   English   中英

JavaScript排列功能-为什么不起作用?

[英]JavaScript permutations function - why isn't this working?

我正在尝试用JavaScript编写一个函数,以通过将Python文档中的代码移植到itertools.permutations来生成给定数组的排列数组。 (我知道实际的函数是用C编写的),这就是我所拥有的,它输出具有正确长度的数组-n!/(nr)!, n为数组的长度-但每个元素只是原始数组,未重新排列。 我很困惑我的代码,因为我很困惑:

function permutations(array, r) {
    if (r === undefined) r = array.length;
    if (r > array.length) return;
    var indices = range(array.length);
    var cycles = range(array.length, array.length - r, -1);
    var result = [[]];
    for (var i = 0; i < r; i++) {
        result[0].push(array[i]);
    }
    while (1) {
        var exhausted = true;
        for (var i = r - 1; i >= 0; i--) {
            cycles[i] -= 1;
            if (cycles[i] == 0) {
                indices = indices.slice(0, i).concat(
                    indices.slice(i + 1)
                ).concat([indices[i]]);
                cycles[i] = array.length - i;
            }
            else {
                var j = cycles[i];
                swap(indices, i, indices.length - j);
                var p = [];
                for (var i = 0; i < r; i++) {
                    p.push(array[i]);
                }
                result.push(p);
                exhausted = false;
                break;
            }
        }
        if (exhausted) break;
    }
    return result;
}

python代码具有(靠近底部):

yield tuple(pool[i] for i in indices[:r])

您将其翻译为:

            for (var i = 0; i < r; i++) {
                p.push(array[i]);
            }
            result.push(p);

但是应该是:

            for (var i = 0; i < r; i++) {
                p.push(array[indices[i]]);
            }
            result.push(p);

否则,就永远不会使用indices ,这应该是一个线索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM