代码之家  ›  专栏  ›  技术社区  ›  Dervin Thunk

在算法书中选择编程语言?[关闭]

  •  7
  • Dervin Thunk  · 技术社区  · 15 年前

    以下是我上一个关于算法书籍持久特性的问题,请参阅 here 现在,我想问一下社区,你会用什么语言来写这样一本参考书的例子。

    我可能不会使用mmix!!)写这本书的例子,但同时,我认为伪代码比实际语言中的例子更不有趣。

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

    回答 我知道这是一个很难回答的问题,会有几个不同的答案。请注意,答案涵盖了汇编/mmix(!!)到python和伪代码。投票和争论迫使我选择URI的合理答案,但有一个警告:我的伪代码将尽可能接近C(当然,不涉及特定于平台的问题),并且我可能会在旁注中讨论更好的实现(我们都知道,从数学上证明算法的有效性远离实施IT的问题)。

    这本书是关于一个特定领域的算法,而不是一般算法的数学(在一般算法方面,人们已经做了很多聪明的事情,而且会比我做的更好)。因此,我认为能为这本书增加价值的一件事就是算法的储存库,我肯定会把它放在一个配套的网站上(如果我有时间的话,可能会用两种语言)。

    谢谢你的回答。有时我觉得我应该把所有回答的人都当作合著者。:)

    9 回复  |  直到 15 年前
        1
  •  13
  •   Uri    15 年前

    一本关于算法的好书应该用psueod代码a-la-clr编写…

    根据我的经验,大多数涉及语言特定例子的书籍最终看起来更像本科教材,而不是严肃的参考书或学习书籍。此外,大多数语言在处理集合(尤其是C++和Java,甚至泛型)时都相当笨拙。在所有的细节之间,太多的东西是丢失的。你也会立即消除很多潜在的听众。

    语言专著的唯一优势是,如果你写的是一本教科书,出版商可以附上一张CD,并增加50美元的MSRP。

    我更容易从(可读的)伪代码中理解算法。如果我不知道如何用我自己的语言来实现它,我无论如何都会遇到麻烦。

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

    您还可以为本书维护一个单独的网站(不管怎样,这是个好主意),在那里您可以使用不同的语言进行实际的实现。不需要用长的打印输出来杀死树木。

        2
  •  10
  •   Brett    15 年前

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

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

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

    2)您可以将该代码导出为已发布的格式以插入您的书中, 确保任何跟踪您代码的人 实际可执行代码。

    3)您不必为psuedo代码辩护。

    语言的选择很主观,但我认为几乎所有现代语言 可以使用,但我推荐一个在快速理解方面开销最小的方法。最完美的是,读者可以得到一个编译器/解释器。 如果你想使用C,那么也许你应该检查一下D。一个改进的C。

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

    顺便说一句:我现在不使用Ruby,因为我目前使用的是smalltalk&rebol,但我不会使用 书中的任何一种语言。你的书会直接送到剩余的箱子里!

        3
  •  2
  •   blank    15 年前

    我会避免任何抽象任何特定算法的核心“力学”的东西

        4
  •  2
  •   Rob Lachlan    15 年前

    在Knuth用汇编语言呈现算法的过程中,有一个巨大的好处。当我们用更高级的语言编写算法时,它迫使读者仔细考虑硅中到底发生了什么。特别是对于系统程序员来说,这种理解是无法用任何其他方式获得的。

    Knuth的新MMIX是理想的:将其视为汇编级伪代码。

    我理想的教科书应该有用伪代码和MMIX编写的算法,这样我们就可以看到算法的复杂形式。伪代码应该优先于“真正的语言”,因为它回避了“你应该使用这种语言而不是那种语言”的无意义的战斗。在这个阶段,伪代码不需要防御——现存最好的算法教科书要么使用伪代码,要么在Knuth的例子中使用一种汇编伪代码。

        5
  •  2
  •   Leah    15 年前

    这个选择并不能取悦所有人。

    罗伯特·塞奇威克写了他的 "Algorithms in..." books in multiple languages . 我有一个C版本的课程,并购买了C++版本时,我开始工作与C++在工作。

    你不能逃避语言特性(甚至是伪语言特性)。

    为了尽量取悦更多的人,你可以选择两种语言,一种是功能语言,另一种不是。这有助于说明算法选择的动机。

        6
  •  1
  •   Adam Davis    15 年前

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

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

    这些通常用具有所需特性的语言表示。Java,C,Erlang,艾达等等——大多数优秀的程序员会用一点点解释来理解正在发生的事情。

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

    -亚当

        7
  •  1
  •   Ed Swangren    15 年前

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

        8
  •  0
  •   Svante    15 年前

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

    haskell非常简洁,但是我认为使用状态的算法,它会妨碍您的工作,而且您将更专注于语言而不是算法。

    我不会使用C或它的后裔(C++,C语言,Java……),因为当你的算法在本质上更“实用”时,它们会阻碍你的前进。同样地,您将更专注于语言而不是算法。如果没有高阶函数的话,我会觉得很不舒服。

    所以,基本上,我会使用一种你熟悉的多范式语言,并且你有信心不用深入语言细节就能表达算法。

    我个人的选择是类似于普通的Lisp,但也许python或scala也是可行的。

        9
  •  0
  •   Jason Baker    15 年前

    巨蟒是个不错的选择。它是非常可读的,即使你以前没有在它编程。另外,它比其他一些常见的语言选择要少得多。