gpt4 book ai didi

javascript - 生成单词中所有可能的二进制组合 ('true' 'false' ) 性能

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:44 26 4
gpt4 key购买 nike

我正在寻找以下脚本的性能改进。我很确定它可以进行实质性修改,我这样做是因为这是我想到的第一件事,它只是为了演示我正在寻找的东西。

function pad(nn, width, z) {
z = z || '0';
nn = nn + '';
return nn.length >= width ? nn : new Array(width - nn.length + 1).join(z) + nn;
}

var makeIntoBinary = function(ii, length) {
return pad(ii.toString(2), length);
}

var makeIntoTrueFalse = function(binary) {
var str = '';
for (iii = 0; iii < binary.length; iii++) {
if (binary[iii] == '0') {
str += ' false';
} else {
str += ' true';
}
};
console.log(str + ' ' + binary);
}

var runner = function(n) {
var iter = Math.pow(2, n);
for (i = 0; i < iter; i++) {
makeIntoTrueFalse(makeIntoBinary(i, n));
}
}

我正在寻找的是为所有可能的组合生成单词集,这实际上是在执行上述二进制操作。 (runner(2); 会产生 false false, false true, true false, true true ) 我正在寻找让我达到这一点的闪电般快速的算法。

最佳答案

尝试直接操作位,而不进行无关的字符串转换。

function combinations(n) {
var r = [];
for(var i = 0; i < (1 << n); i++) {
var c = [];
for(var j = 0; j < n; j++) {
c.push(i & (1 << j) ? 'true' : 'false');
}
r.push(c.join(' '));
}
return r;
}

r = combinations(prompt('size?'));
document.write(JSON.stringify(r));

仅作记录,这可能更慢,但更好:

Number.prototype.times = function(fn) {
var r = [];
for(var i = 0; i < this; i++)
r.push(fn(i));
return r;
}

function combinations(n) {
return (1 << n).times(function(i) {
return n.times(function(j) {
return Boolean(i & 1 << j);
});
});
}

关于javascript - 生成单词中所有可能的二进制组合 ('true' 'false' ) 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com