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

Algorithm 所有编程语言的数据结构和算法是否相同?,algorithm,data-structures,Algorithm,Data Structures,如果一个人用一种编程语言学习数据结构和算法,他是否需要学习另一种语言的数据结构和算法? 因为我即将开始一本书JavaScript中的数据结构和算法,因为我也想学习Web 它对其他语言也有帮助吗?数据结构和算法是独立于语言的概念。因此,一旦你用你最喜欢的语言掌握了它们,就相对容易切换到另一种语言 现在,如果您想了解不同语言的内置方法和API,它们确实有所不同,但无论如何,您不应该在数据结构和算法手册中学习特定的API。是的。。。没有 虽然算法和数据结构背后的概念(如空间和时间复杂性或可变性)与语言

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

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

现在,如果您想了解不同语言的内置方法和API,它们确实有所不同,但无论如何,您不应该在数据结构和算法手册中学习特定的API。

是的。。。没有

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

递归算法就是一个很好的例子。在haskell等一些语言中,递归性是迭代元素集合的最佳方式。在C等其他语言中,应该避免对未绑定集合使用递归算法,因为这样很容易达到堆栈的dept限制。您还可以很容易地想象一种甚至不基于堆栈的语言,在这种语言中,递归算法完全不可能实现。您可以在这样一种语言的基础上实现一个堆栈,但它肯定比以不同的方式实现算法要慢

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

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


也就是说,只要你使用同一种语言,你就可以重用80%以上的那本书。有很多面向对象的语言。Javascript可能是其中最奇特的一种,它能够像对待字典一样对待所有对象,而且它的“this”概念很奇怪,因此其中的许多模式不会应用于其他语言。

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

只需看看quicksort在命令式语言(如C)和函数式语言(如Haskell)中的实现。这个特殊的算法是函数式语言的典范,因为它可以用两行代码实现(人们特别喜欢强调这一点)

还有一个更好的观点。根据语言的不同,许多数据结构和算法根本不需要显式实现,只是作为学习它们的学术练习。例如,在Python中,您不需要实现关联容器,而C++中需要。
如果有帮助,可以考虑在不同的编程语言中使用DS和algo,就像用多种人类语言讲述一个故事一样。情节元素保持不变,但表达的容易程度或缺乏程度因叙述语言而异。

然而,这个问题有点过于宽泛,一个很好的答案是,不同语言的实现细节不同,但核心结构和算法本身是相同的。我可以想到一个区别:一些编程语言,通常称为“函数式编程语言”(Haskell就是一个例子),禁止对现有变量进行更新(写入)。这意味着它们只有一部分数据结构可供其他(“命令式”)语言使用。也就是说,可以以不同的效率模拟这些数据结构,然后用它们实现相同的算法集。这在其他语言中会有所帮助,但在所有语言中(我可以认为VHDL、Labview、Fortran是例外,但肯定还有其他语言)尝试在Prolog中构建后缀树可能会。。。。有趣的…相关的: