Javascript 使用概率最小化加速条件评估

Javascript 使用概率最小化加速条件评估,javascript,algorithm,performance,probability,Javascript,Algorithm,Performance,Probability,考虑一个场景,当整数在[1,大_数]范围内时; 如果数字可被3整除,则打印foo; 如果数字可被5整除,则打印条; 可被3和5整除,打印foobar 一种方法是 // READABILITY IS GOOD const func1 = length => { for (let i = 0; i <= length; i++) { let output = i; if (i % 3 === 0) output = 'foo'; i

考虑一个场景,当整数在[1,大_数]范围内时; 如果数字可被3整除,则打印
foo
; 如果数字可被5整除,则打印
; 可被3和5整除,打印
foobar

一种方法是

// READABILITY IS GOOD
const func1 = length => {
    for (let i = 0; i <= length; i++) {
        let output = i;
        if (i % 3 === 0) output = 'foo';
        if (i % 5 === 0) output = 'bar';
        if (i % 3 === 0 && i % 5 === 0) output = 'foobar';
        console.log(output);
    }
};
//可读性很好
常量func1=长度=>{
for(设i=0;i{

对于(让i=0;i不要做这两种安排中的任何一种:您必须以某种形式测试这两种情况。相反,使用输出的渐进构建:

noise == ""
if (i % 3 === 0) noise += "foo"
if (i % 5 === 0) noise += "bar"
if (noise == "") noise = i
console.log(noise)

简单、易读且速度相当快。

我投票将此问题作为离题题结束,因为此问题属于Stack Exchange网络中的另一个站点。您的目标是什么样的加速?尝试优化运行在微秒级的代码以获得纳秒级的加速是没有用的。第二个版本应该是效率更高不是因为它首先测试更可能的条件,而是因为它只计算和比较每个余数一次。第一个版本对每个余数进行两次模运算和比较。不管怎样,两个条件都必须测试,所以测试它们的顺序应该无关紧要。无论如何,我认为这个问题不属于Code审查,因为代码审查是针对一般的、开放式的代码反馈——你的问题特别集中在某个特定的重构是否是一种效率改进,是否可以用概率论来证明。我认为如果你尝试测量效率,而不是自己,它将适合于堆栈溢出只是想让我们告诉你它是否更有效。@kaya,谢谢。好吧,我应该发布我的发现。我并没有先写最可能的案例。但是,我只是在检查这样的思维过程是否存在,或者是否值得牺牲可读性。目标是大型CFD模拟,在集群上运行几天。
noise == ""
if (i % 3 === 0) noise += "foo"
if (i % 5 === 0) noise += "bar"
if (noise == "") noise = i
console.log(noise)