开关功能复杂性



假设我们有一个switch函数,例如

switch (obj) {
case 'Oranges':
const { a, b } = obj;
return a + b;
break;
case 'Apples':
const { c, d } = obj;
return c + d;
break;
case 'Bananas':
const { e, f } = obj;
return e + f;
break;
default:
return obj;
}

问题:该函数的时间复杂度是多少?

问题2:如果我们将这里的病例数提高到例如100,会怎么样?复杂性也会增加吗?如果是——多少次?

时间复杂度为O(n(,与输入数量无关。如果你开始在你的案例中放入for循环,那么这可能会改变它

下面是一个O(n^2(的例子,这意味着输入量将使时间复杂度呈指数级增加。在这种情况下,它是基于字符串长度的,在一个3个字母的单词上产生12个循环。

switch(foo){
case 'bar':
for (let i = 0; i < foo.length; i++){
for (let j = 0; j < foo.length; j++){
console.log(i, j);
}
}
}

这并不一定意味着嵌套for循环会自动使其为O(n^2(。下面的例子实际上是O(1(,因为输入对它所花费的时间没有影响。这将始终是210个循环,不管:

switch(foo){
case 'bar':
for (let i = 0; i < 10; i++){
for (let j = 0; j < 20; j++){
console.log(i, j);
}
}
}

最新更新