这问题是最后一根稻草,我很长时间都在想,
为什么人们会把“算法”和“数据结构”当作可以彼此分离的东西呢?
我看到了很多证据表明他们在程序员的头脑中是分开的。
在我看来,“数据结构”是一种算法,因为“数据结构”的概念是关于操作进出结构的数据的算法。但这种观点似乎并不是主流观点。我错过了什么?
编辑:不幸的是,我没有很好地表达这个问题。在人们编写的程序中,数据结构和算法的分离是很自然的,因为前者是数据,后者是函数(在像STL这样的半功能框架中,它是整个事情的核心)。
但以上各点,以及问题本身,指的是人们思考的方式,以及他们在头脑中安排知识的方式。这甚至不必与代码编写相关。
这里有一些链接,当“算法”和“数据结构”是相同的时候,人们会将它们分开:
发布于 2010-03-14 10:52:31
算法和数据结构紧密结合在一起。算法依赖于数据结构,如果你改变它们中的任何一个,复杂度就会发生很大的变化。他们是不一样的,但肯定是同一枚硬币的两面。选择一个好的数据结构本身就是一条通向更好算法的途径。
例如,优先级队列可以使用二进制堆和二项式堆来实现,二进制堆允许在恒定时间内以最高优先级的元素进行窥视,而二项式堆则需要O(log )时间来窥视。
因此,特定的算法对特定的数据结构(在特定的上下文中)最有效,因此Algorithms和Data structure携手并进!
发布于 2010-03-14 10:46:13
人们称他们为不同的实体,因为他们是。假设我想从一组数据中找到一个元素。如果我把数据放入数组中,数组就是数据结构。一旦它在数组中,我可以使用多个不同的算法来找到我感兴趣的元素。我可以对数组进行排序(使用多种排序),然后使用二进制搜索,只需线性地检查每个元素,等等。选择数组作为数据结构(而不是链接列表)并不是选择算法。
也就是说,重要的是要理解其中一个,理解另一个。如果您不太了解算法,那么不同数据结构的优缺点就不明显了,反之亦然。因此,同时教他们是有意义的。然而,它们是不同的实体。
编辑思考一下:如果您查看大多数算法的伪代码,则没有指定数据结构。您可能有一个需要迭代等元素的“列表”,但该列表的确切实现对算法的正确性并不重要。
发布于 2010-03-14 10:40:39
我想说的是,这是因为函数式编程将操作与操作本身分开。目标和行动当然是不同的,即使它们是紧密交织在一起的。
是面向对象的编程将数据和操作放在一个组件中。也许,如果OO来得早一点,就会有一个纪律。
https://stackoverflow.com/questions/2441845
复制相似问题