开关功能复杂度

时间:2018-11-27 17:07:55

标签: javascript performance

假设我们有一个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?复杂性还会增加吗?如果是这样-多少次?

1 个答案:

答案 0 :(得分:0)

无论输入数量如何,时间复杂度均为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);
      }
    }
}