所有编程语言的数据结构和算法是否相同?

时间:2014-10-03 15:15:55

标签: algorithm data-structures

如果一个人在一种编程语言中学习数据结构和算法,是否需要学习其他语言的数据结构和算法? 因为我即将开始一本书 JavaScript中的数据结构和算法,因为我也想学习Web 它会帮助我学习其他语言吗?

3 个答案:

答案 0 :(得分:3)

数据结构和算法是独立于语言的概念。因此,一旦用你最喜欢的语言掌握它们,就可以相对容易地切换到另一种语言。

现在,如果您询问不同语言所具有的内置方法和api,它们确实有所不同,但您不应该在数据结构和算法书中学习特定的API。

答案 1 :(得分:3)

是......而且没有。

虽然算法和数据结构背后的概念(如空间和时间复杂性或可变性)与语言无关,但某些语言可能根本不允许您实现其中的某些模式。

一个很好的例子是递归算法。在像haskell这样的语言中,递归是迭代元素集合的最佳方式。在其他语言(如C)中,您应该避免在未绑定的集合上使用递归算法,因为您可以轻松地达到堆栈的dept限制。您还可以轻松地想象一种基于堆栈的语言,其中递归算法将完全无法实现。你可以在这种语言之上实现一个堆栈,但它绝对比以不同方式实现算法要慢。

另一个例子是面向对象的数据结构。像haskell这样的语言不允许你改变价值观。这种语言中的所有元素都是不可变的,必须复制才能更改。这类似于在javascript中处理数字的方式,您无法更改值2,但您可以取值2,将其加1,然后将其存储到新位置。像C这样的其他语言没有(或处理能力很差)面向对象的编程。这将打破您将在面向javascript的书中学习的大多数数据结构模式。

最后,这一切都归结为性能。你不会像编写JavaScript或F#代码那样编写C代码。他们都有他们的怪癖,因此需要不同的实现,即使这些算法和结构背后的想法将保持不变。您总是可以在不支持它的语言上模拟模式,比如C中的OOP,但是以不同的方式解决问题总是感觉更自然。

话虽如此,只要你保持同一种语言,你就可以重复使用该书的80%以上。那里有很多OOP语言。 Javascript可能是它们中最具异国情调的,它能够处理所有对象,如字典和它的奇怪概念"这个"所以很多模式都不适用于那些其他语言。

答案 2 :(得分:1)

作为概念的数据结构和算法在不同语言中是相同的,但实现方式却有很大差异。

只需看看像C这样的命令式语言和Haskell等函数式语言中quicksort的实现。这个特殊的算法是函数式语言的典型代表,因为它可以在大约两行中实现(人们特别喜欢强调它的)。

有一个更好的观点。根据语言的不同,许多数据结构和算法根本不需要明确实施,除了作为学习它们的学术练习之外。例如,在Python中,您不需要实现关联容器,而在C ++中则需要。

如果它有所帮助,可以考虑在不同的编程语言中使用DS和算法来叙述多种人类语言的故事。情节元素保持不变,但表达的容易程度或缺乏表达元素的差异很大程度上取决于用来叙述它的语言。