用于学习数据结构和算法的编程语言的选择
你会推荐哪种编程语言 来学习 数据结构和算法 ?
考虑以下几点:
我问,因为有一些书是编程语言不可知的(从数学的角度来看,并使用伪代码)。 如果我从其中之一中学习,我想选择一种编程语言来编写和运行算法。
然后,还有其他一些书介绍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(Eclipse,Netbeans和IntelliJ Community Edition for Java,Visual Studio Express for C#,Visual Studio社区版),使编写和运行代码变得简单易行。 如果您不使用比数组和自己编写的任何对象都更复杂的本机数据结构,您将学习基本上与C / C ++中相同的内容,但无需实际管理内存。
让我解释一下:如果添加了足够的元素,则需要调整可扩展哈希表的大小。 在任何实现中,这意味着要进行诸如将支持数据结构(通常是数组)的大小加倍并复制现有元素的操作。 在所有命令式语言中,实现基本相同,但在C / C ++中,当您不分配或正确释放某些内容时,必须处理分段错误。
Python或Ruby(哪个并不重要)将成为我的下一个选择(并且非常接近另外两个),因为动态类型一开始可能会有问题。
我会推荐Java
主要是因为:
编辑:向下选民请解释。
在我看来,C将是学习数据结构和算法的最佳语言,因为它会迫使你编写自己的数据结构和算法。 它会迫使你理解指针,动态内存分配以及流行数据结构背后的实现,如链接列表,哈希表等等。其中许多是你可以在更高级语言(Java,C#等)中理所当然的东西。 )。
链接地址: http://www.djcxy.com/p/26951.html上一篇: Choice of programming language for learning data structures and algorithms