3

“算法被定义为有限的操作序列,执行时将完成特定任务”与此定义。我们可以说任何语法和语义正确的 C 程序也是一种算法吗?

我的答案是对的,但是我的教授说答案是错的,我的搭档也是。他们使用的反例是

while(1) {

}

printf("%s","blahblah");

无限循环在语义上不正确,而 printf() 完成了一项任务,因此它是一种算法。因为您可以使用循环和 putchar() 而不是 printf();

那么大家觉得谁是对的呢?

4

1 回答 1

5

你告诉你的教授,如果他甚至不知道正确的术语,他最好停止分裂头发(所以从这一点来看,他的问题没有意义,但无论如何......)。

“算法”在概念上与程序不同。所以答案

任何语义正确和句法正确的 C 程序都是算法吗?

不是因为程序与算法不同——程序是……程序。算法是与语言无关的问题解决方案的一种具体表现形式(即,它可以用非常通用的方式表达)。程序是算法的依赖于语言的具体实现(在 C 中,由于“as-if”规则和编译器优化,实际上不需要与算法相同,只需要模拟它)。

还有一条评论:

无限循环在语义上不正确

嗯,是的。当然,不能简单地解决停机问题,但这并不意味着无限循环“在语义上是不正确的”。当一个程序做的事情超出你的预期时,它在语义上是不正确的。除非您希望您的程序在编写时执行除挂起之外while (1) { }的其他操作,否则没有问题。

无限循环的概念是否被认为是一种算法是另一个问题。通常,永不终止的指令序列被视为算法,这可能就是您的教授所说的。根据维基百科

更准确地说,算法是一种有效的方法,表示为用于计算函数的定义明确的指令的有限列表

(强调我的)

于 2013-02-21T06:30:51.387 回答