编写代码仍然被认为是算法表示?

时间:2008-11-04 23:12:22

标签: algorithm theory pseudocode

我刚刚在测试中丢失了50%的答案,因为我在我的期中编写代码而不是算法,让我从A到C碰撞。编写代码仍然被认为是算法表示吗?

Wikipedia: Algorithm Representation(因为编程风格几乎是基于共识的)

编辑:好的,让我清楚几点:

  1. 测试要求伪代码,我们从未真正在课堂上“定义”;我们刚刚为我们的算法写了英文。

  2. 这是一个Java类,并用Java方法和注释写出了整个解决方案。所有这些都是手写的,写出来的时间比伪代码要长。我认为会更清楚。

  3. 我通常不会对这类事情提出异议,但这是A和C之间的区别,而且我的考试也有奖学金。

  4. 最后,我发表这篇文章有两个原因:

    4.1我希望展示现代编程社区对伪代码和算法表示的看法。

    4.2我想知道“现实世界”中可以接受的东西;我已经编程了一段时间,但我希望能够尽快为开源项目做贡献,而且我不想踩到任何人的脚趾。 (虽然我很确定这个话题几乎没有机会进入现实世界。)

  5. 再次感谢您的帮助/建议。

8 个答案:

答案 0 :(得分:5)

您可能想举个例子。如果您的代码过多地关注不属于算法的语言细节,那么可以理解,可以说您的算法混合了非算法,导致结果不正确。

我感觉到理由,整个学习的目的是让你明白这个概念,而不是弯腰并勾选所有正确的方框。

计算机可以被教导通过大学,但计算机不能被教导实际思考并应用知识。

吃饭和反刍的心态是我从未毕业的原因。


关于您最近的评论,实现伪代码的重要性尚未定义。它中通常有重复使用的术语,但它不是严格的语言,而不是英语(否则它将一种编程语言,可以逐字解析和执行)

伪代码的重要性是为了充实系统的逻辑部分而不必过分担心超出“它有意义”的语法

通常,这可以使伪代码更容易理解简洁

Pseudocode也不依赖读者理解语言中的“魔术语法”来处理它,他们需要理解的是所使用的术语。

例如,如果你要给普通人一个perl算法,那么大多数人都会死于恐怖,因为他们看不到线路噪音的碎片。

while:

sub foo { 
   my @args = @_ ; 
   my( $a, $b )=(@args[0],@args[1]); 
   for( @{ $a } ){
       $b .= $_ ; 
       s/id//g; 
   }
   return [$b,$a];
}

可能会让那些精通perl的人产生一些连贯的感觉,对于普通的代码阅读者来说,他们所得到的只是“你刚才说的是什么”的回应。记录它也没有多大帮助。

| there is a subroute foo which can take a list of strings, and a default string, 
\-  which then iterates all items in  that list, 
| \-  and for each item in that list 
|     1. appends the contents of that item to the end of the default string
|     2. removes all instances of the string "id" in that item
| 
 \ and returns a list, which contains 
    1. the concatentated default string 
    2. the modified input list 

突然间,它变得不那么模糊,更多的人可以理解它。

因此,编写算法的一半练习是“不仅要证明你理解它,还必须证明你可以向不了解问题的其他人解释你的推理”,是你需要的重要能力。如果你无法沟通你所做的事情,没有人可以使用它。

还有一个令人讨厌的代码问题,在算法中不存在,那就是代码可能看起来正确,但可能不会做你想的它确实如此,并且如果它做得不对,并且你没有意识到,那些阅读代码逆向工程的人会将它弄糟并复制一个破碎的算法。不好。人类形式的算法更好地翻译'这就是我想要它做的'

答案 1 :(得分:3)

在这种情况下,你必须顺从教授。

答案 2 :(得分:2)

您需要提供更多信息。您被要求提供算法,但提供了代码。你有没有评论代码?多少? (我想看看问题和你的答案,但也许这就是要求太多了。)

所以我会根据自己的经验回答。如果我要求一个算法,那么我想用一些正确的英语来解释如何解决问题和/或满足问题的要求。图表也很好(有时更好)。段落,点形式,无论如何 - 它只需要清晰,简洁和正确。

如果您向我提供上述代码,则为满分。但是,如果您提供的代码纯粹是“语言”而且相当神秘,那么标记将会丢失 - 或多或少取决于代码实际上有多么神秘。即使使用代码,我也希望看到一个图表,只是为了表明对概念的完整理解。

在教授编程时,我面临的最困难的事情之一就是让学生写更多,而不是更少。有时我不得不提醒他们,作业(或考试)不是“最混淆的代码竞赛”中的一个条目。 ; - )

干杯,

-R

答案 3 :(得分:2)

作为高级算法课程的评分者,如果只是编码解决方案,我总是取消分数。

有些事情根本无法用英语在代码中表达为雄辩。伪代码试图摆脱严格的编译器语法并允许一些表达性。这是向可理解性方向迈出的一步,但并不总是足够。

特别是在算法类中,提供正确性证明(无论是通过归纳,矛盾等)始终是重要的,以及算法的空间和时间复杂性的大O符号。

答案 4 :(得分:0)

我所知道的是,在你有算法之前,你不应该编写任何代码。

答案 5 :(得分:0)

使用代码而不是伪代码的问题在于,从理论上讲,可以假设它是代码,而不是伪代码。无论如何,老师会根据您的回答评定您的答案,而不是为了您的知识 - 您最好以老师喜欢的方式回答您的要求。是的,我们都知道,你知道的更好。但是,你知道,尝试推理别人的方式从来都不是一件坏事。至少在我的国家,老师有权自由地评估你,所以......和他相处!

答案 6 :(得分:0)

与你的教授交谈并问他为什么你的问题出错了。问他一个正确答案是什么,以及两者之间的根本区别。

你写的算法不正确吗?

答案 7 :(得分:0)

代码是一种编写的算法,以便机器可以执行它。该定义中没有任何内容表明它不是为了人类而理解的。用Java编写是否模糊了你的算法?这将决定我是否同意你的老师。