计算算法的复杂性(无限算法)

时间:2014-11-02 10:24:43

标签: algorithm complexity-theory

考虑这段Java代码:

import java.util.Scanner;

class BreakWhileLoop {
  public static void main(String[] args) {
    int n;

    Scanner input = new Scanner(System.in);

    while (true) {
      System.out.println("Input an integer");
      n = input.nextInt();

      if (n == 0) {
        break;
      }
      System.out.println("You entered " + n);
    }
  } 
}

让我们来看看这个特例:the user will always enter any integer except 0

1.我可以将此代码视为算法吗?

2.如果是,如何计算其复杂性?

谢谢

4 个答案:

答案 0 :(得分:6)

为了避免琐碎的答案,让我们通过删除except 0条件来放松问题陈述。

然后是的,这是一个算法,我们可以称之为0 acceptor

假设用户输入需要恒定时间,时间复杂度为O(N),其中N是非零序列的长度。

答案 1 :(得分:2)

  

“算法是有限的明确指令序列   计算终止于a的函数(或执行过程)   明确的结束状态。“

取自:https://softwareengineering.stackexchange.com/questions/69083/what-is-an-algorithm

如果用户始终保持输入值,那么这不是算法。

答案 2 :(得分:2)

它将永远运行。时间复杂度用于指定算法运行时间的上限,具体取决于输入。由于无论输入是什么,您的代码都将永远运行,因此讨论其时间复杂性毫无意义。

答案 3 :(得分:0)

  

交互是比基于规则的计算机问题解决算法更强大的范例,推翻了所有计算都可以表达为算法的流行观点。

您可以在this renowned article by Wegner中跟踪详细信息和证据,这是"为什么互动比算法更强大?"