- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
“算法被定义为有限的操作序列,执行这些操作将完成特定任务”,并带有此定义。我们可以说任何语法和语义上正确的 C 程序也是一种算法吗?
我的答案是正确的,但是我的教授说答案是错误的,我的同事也是如此。他们使用的反例是
while(1) {
}
和
printf("%s","blahblah");
无限循环在语义上是不正确的,而 printf() 完成了一项任务,因此它是一种算法。因为您可以使用循环和 putchar() 而不是 printf();
那么你们认为谁是对的呢?
最佳答案
你告诉你的教授,如果他连正确的术语都不知道,他最好停止 split 头发(所以从这一点来看,他的问题没有意义,但无论如何......)。
“算法”在概念上不同于程序。所以答案
Is any semantically correct and syntactically correct C program an algorithm?
是不,因为程序与算法不同——程序是……程序。 算法 是解决语言不可知 问题的特定表现形式(即可以用非常通用的方式来表达)。程序是算法的依赖于语言的具体实现(在 C 中,由于“as-if”规则和编译器优化,实际上不需要与算法相同,它是只需要模拟它)。
再多一条评论:
the infinite loop isn't semantically correct
嗯,确实如此。当然,不能简单地解决停机问题,但这并不意味着无限循环“语义上不正确”。当一个程序做的事情与您预期的不同时,它在语义上是不正确的。除非您希望您的程序在您编写 while (1) { }
时执行其他操作而不是挂起,否则没有问题。
无限循环的概念是否被视为算法是另一个问题。通常,永不终止的指令序列不被视为算法,您的教授可能就是这么说的。根据Wikipedia :
More precisely, an algorithm is an effective method expressed as a finite list of well-defined instructions for calculating a function.
(强调我的)
关于c - 任何语义正确和句法正确的 C 程序都是算法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995721/
在对 Comparable 和 Comparator 进行一些研究后,我遇到了一些看起来很有用的有趣语法(但我不明白)。 示例: public static Comparator TypeCompar
我现在已经在一些库中看到了这种语法,我想知道它有什么好处。 (注意我很清楚闭包和代码在做什么,我只关心语法差异) !function(){ // do stuff }(); 作为更常见的替代品 (
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这个问题已经有答案了: Why isn't my JavaScript working in JSFiddle? (7 个回答) Uncaught reference error: Function
我现在在一些库上看到了这种语法,我想知道它的好处是什么。 (请注意,我很清楚闭包以及代码在做什么,我只关心语法差异) !function(){ // do stuff }(); 作为更常见的替代方
如何让下面的代码工作?我找不到适合我的语法。 #Create the table if table_exists?(tablename) puts "table found" else ActiveR
我需要做这样的事情: $('#online-order').wcForms({id: '#online-order', to: 'contact', colors['red']: '#00F' });
我有三个哈希: a = {key:"value"} b = {"key"=>"value"} c = {:key=>"value"} 这些结果: a.has_key?("key") # => fals
language suggestion指出在链接的文件中详细说明了这些优点。我快速浏览了一下,但看不到它的明确说明。 优点是每个语句都并行执行,所以我可能会得到速度提升? 或者是否有某种逻辑它迎合,使
我正在 here 读取一个 js 文件,在此 js 文件的最顶部,您可以找到以下几行: var gsAgent=navigator.userAgent.toLowerCase(), gsAppVer=
很抱歉问这样一个新手问题,但我一直在尝试理解这个 SQL 查询并添加一个东西,但我无法做到这一点。 这里是查询: select p.id, p.nick, p.creation_date fr
我创建了一个表“table2”并在运行我的代码时收到警告(表已存在)。我只想在表不存在时创建表。一些研究MySQL syntax website在 MySQL 中出现以下内容:如果不存在则创建表 我的
我是一名优秀的程序员,十分优秀!