algorithm - 选择用于学习数据结构和算法的编程语言

标签 algorithm data-structures language-agnostic

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

5年前关闭。




Improve this question




哪种编程语言你会推荐学习关于 数据结构和算法在?

考虑到以下几点:

  • 个人经历
  • 语言特性(指针、OO 等)
  • 适合学习 DS & A 概念

  • 我问是因为那里有一些与编程语言无关的书(从数学的角度编写,并使用伪代码)。如果我从其中一个中学习,我想选择一种编程语言来编码和运行算法。

    然后,还有其他书籍介绍了 DS & A 概念以及用特定编程语言编写的示例——我也想编写这些算法的代码——因此,在某种程度上,该语言也选择了这本书。

    无论哪种方式,我都必须选择一种语言,而且我更愿意始终坚持使用一种语言。撇开个人语言偏好不谈,哪一个最适合这个目的?

    最佳答案

    这个问题的答案取决于你想学什么。

    Python 和 Ruby

    通常建议使用 Python 和 Ruby 等高级语言,因为它们是高级语言并且语法可读性强。然而,这些语言都有对通用数据结构的抽象。没有什么能阻止您将自己的版本作为学习练习来实现,但您可能会发现您正在其他高级数据结构之上构建高级数据结构,这不一定有用。

    此外,Ruby 和 Python 是动态类型语言。这可能很好,但也可能让初学者感到困惑,并且(最初)捕获错误可能更难,因为它们通常要到运行时才会显现出来。

    C

    C是另一个极端。如果您想学习真正的低级细节(例如如何管理内存),这很好,但内存管理突然成为一个重要的考虑因素,例如正确使用 malloc()/free()。这可能会让人分心。此外,C 不是面向对象的。这不是一件坏事,但值得一提。

    C++

    已经提到了 C++。正如我在评论中所说,我认为这是一个糟糕的选择。即使在简单的使用中,C++ 也非常复杂,并且有大量可笑的“陷阱”。此外,C++ 没有通用的基类。这很重要,因为像哈希表这样的数据结构依赖于一个通用的基类。您可以为名义基类实现一个版本,但它的用处不大。

    java

    还提到了 Java。许多人喜欢讨厌 Java,而且该语言确实非常冗长并且缺乏一些更现代的语言特性(例如闭包),但这些都不重要。 Java 是静态类型的并且具有垃圾收集功能。这意味着 Java 编译器将捕获许多动态类型语言不会捕获的错误(直到运行时),并且没有处理段错误(这并不是说您不能在 Java 中泄漏内存;显然您可以)。我认为Java是一个不错的选择。

    C#

    C# 语言就像是更现代的 Java 版本。与 Java 一样,它是一种在虚拟机上运行的托管(垃圾收集)中间编译语言。除了 C/C++ 之外,这里列出的所有其他语言也可以在虚拟机上运行,​​但 Python、Ruby 等是直接解释的,而不是编译为字节码。

    C# 基本上与 Java 具有相同的优点和缺点。

    haskell (等)

    最后,你有函数式语言:Haskell、OCaml、Scheme/Lisp、Clojure、F# 等。这些语言以非常不同的方式思考所有问题,在某些时候值得学习,但归结为你想学习的内容:函数式编程还是数据结构?我会坚持一次学习一件事,而不是混淆这个问题。如果您确实在某个时候学习了一门函数式语言(我会推荐),Haskell 是一个安全且不错的选择。

    我的建议

    选择 Java 或 C#。两者都有免费的优秀 IDE(Java 的 Eclipse、Netbeans 和 IntelliJ 社区版、C# 的 Visual Studio Express、Visual Studio 社区版),使编写和运行代码变得轻而易举。如果您不使用比数组和您自己编写的任何对象更复杂的 native 数据结构,您将学到与 C/C++ 中基本相同的东西,但不必实际管理内存。

    让我解释一下:如果添加了足够的元素,则需要调整可扩展哈希表的大小。在任何实现中,这意味着将支持数据结构(通常是数组)的大小加倍并复制现有元素。所有命令式语言的实现基本相同,但在 C/C++ 中,当您没有正确分配或取消分配某些内容时,您必须处理段错误。

    Python 或 Ruby(哪个并不重要)将是我的下一个选择(并且非常接近其他两个),因为动态类型一开始可能会出现问题。

    关于algorithm - 选择用于学习数据结构和算法的编程语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2657504/

    相关文章:

    c# - 深度优先搜索图无法正常工作

    algorithm - 给定两个直角棱柱的角点,找到重叠直角棱柱的角点

    algorithm - 有没有一种有效的算法可以做到这一点?

    algorithm - 多项式乘法的朴素分而治之方法

    language-agnostic - URL 中特定保留字符背后的基本原理是什么?

    algorithm - 什么是找到图形质心的有效算法?

    algorithm - 如何从任意点集合中取出飞机?

    c# - 盲目地将 bytearray 转换为结构?

    c - 如何节省数组中未使用的空间?

    c# - 在内存中保存大型可编辑文档的最佳方法