Algorithm 算法书中编程语言的选择?

Algorithm 算法书中编程语言的选择?,algorithm,programming-languages,Algorithm,Programming Languages,继我之前关于算法书的持久属性的问题之后,现在我想问社区,你会用什么语言来编写这样一本参考书的例子 我可能不会使用MMIX(!)来编写本书的示例,但同时,我认为仅仅使用伪代码并没有真正语言中的示例有趣 不过,我也希望这本书能成为研究人员的参考资料。社区的选择是什么?为什么? 答案:我知道这是一个很难回答的问题,会有几个不同的答案。请注意,答案涵盖了从Assembly/MMIX(!!)到Python和伪代码的整个范围。投票和争论迫使我选择Uri的合理答案,但有一点需要注意:我的伪代码将尽可能接近C(

继我之前关于算法书的持久属性的问题之后,现在我想问社区,你会用什么语言来编写这样一本参考书的例子

我可能不会使用MMIX(!)来编写本书的示例,但同时,我认为仅仅使用伪代码并没有真正语言中的示例有趣

不过,我也希望这本书能成为研究人员的参考资料。社区的选择是什么?为什么?

答案:我知道这是一个很难回答的问题,会有几个不同的答案。请注意,答案涵盖了从Assembly/MMIX(!!)到Python和伪代码的整个范围。投票和争论迫使我选择Uri的合理答案,但有一点需要注意:我的伪代码将尽可能接近C(当然,不涉及特定于平台的问题),我可能会在旁注中讨论更好的实现(正如我们所有人所知,从数学上证明算法有效远不是实现算法的问题)

这本书是关于一个特定领域的算法,而不是一般算法的数学(更聪明的人已经做了,而且会比我在一般算法上做得更好)。因此,我认为有一件事会给这本书增加价值的是算法的知识库,我肯定会把它放在一个同伴网站上。(如果我有时间的话,可以用几种语言)


谢谢你的回答。我有时觉得我应该把每个回答的人都列为合著者。:)

我不会使用任何特定的语言。使用一种伪语言,这对大多数做过一点编程的人来说都是很清楚的。通常这些书使用接近C风格的东西,但这不是一个规则。我知道你提到你不想使用伪代码,但这将允许你接触到更多的读者。

不要抽象任何特定算法的核心“机制”

通常使用C风格,因为许多语言使用非常相似的风格,因此大多数程序员不需要解释就可以理解它。此外,示例可以在任何带有C编译器的机器上运行,这几乎是每台机器

然而,更高层次的概念通常需要使用更新的技术和技术——OO、函数式编程等

这些通常用具有所需特性的语言来表达。Java、C#、Erlang、Ada等等——大多数优秀的程序员只需稍加解释就能掌握正在发生的事情

<>但是C几乎是一个普遍的基础——如果你采用C风格的例子,你就不会出错。
-Adam

一本关于算法的好书应该用psueod代码A-la-CLR编写

在我的经验中,大多数进入语言特定的例子的书籍最终看起来更像是本科教科书,而不是严肃的参考书或学习书籍。此外,大多数语言在处理集合时都相当笨拙(特别是C++和java,甚至是泛型)。.在所有的细节中,损失了太多。你也立即消除了很多潜在的观众

针对特定语言的书籍的唯一优势是,如果你在编写教科书,出版商可以附上一张CD,并在MSRP中增加50美元

从(可读的)伪代码中理解算法对我来说更容易。如果我不能用我自己的集合在我的语言中实现它,我就有麻烦了

您可以在每个伪代码中添加关于特定语言实现细节的注释(例如,在Java中使用树集以获得最佳性能等)


你也可以为这本书维护一个单独的网站(无论如何,这是个好主意),在那里你可以用不同的语言进行实际的实现。不需要用长打印输出杀死树。

使用真正的编程语言,而不是伪编程语言。读者非常怀疑 对于psuedo代码,读者喜欢真正的编程语言。psuedo语言的陷阱在于,您可以定义读者无法在其选择的语言中实现的代码概念

真正的编程语言有许多优点:

1) 你可以测试你的代码,希望能证明你的代码是正确的

2) 您可以将该代码导出为已发布的格式,以便插入到您的书中, 确保任何遵循您的代码的人都会看到 在实际的可执行代码

3) 你不必为你的psuedo代码辩护

语言的选择显然是主观的,但我认为几乎所有现代语言 可以使用,但我推荐一个在快速理解方面“开销最少”的。最好是读者可以得到一个编译器/解释器。 如果你想用C,那么也许你应该看看d,一个改进的C

例如,如果您让代码保持“简单”,Ruby就是这类代码, Java不是(需要太多的支持库), 早些时候,帕斯卡将成为候选人

顺便说一句:我现在不使用Ruby,因为我现在使用Smalltalk和REBOL,但我不会使用Ruby
书中的任何一种语言。你的书会直接送到剩余的箱子里

我会使用一些能让你准确表达算法背后思想的东西

Haskell非常简洁,但我认为使用与状态相关的算法,它可能会妨碍您的工作,并且您将更多地使用语言而不是算法

我不会使用C或它的后代(C++,C#,Java…),因为当你的算法在本质上更“实用”时,它们会妨碍你。同样,您将更专注于语言而不是算法。如果我不得不在没有高阶函数的情况下工作,我会感到非常不舒服

所以,基本上,我会使用一种你熟悉的多范式语言,你会感觉到