我目前仍在学校,在学习在C ++中实现数据结构的课程。在闲暇时间,我喜欢用“高级”语言编程(主要是Ruby和一些c#)。
因此,由于这些高级语言会为您管理内存,您会使用数据结构进行什么?我可以理解需要队列和堆栈,但是您是否需要在Ruby中使用二叉树?或2-3-4树?为什么?
谢谢。 (xiè xiè)
我目前仍在学校,在学习在C ++中实现数据结构的课程。在闲暇时间,我喜欢用“高级”语言编程(主要是Ruby和一些c#)。
因此,由于这些高级语言会为您管理内存,您会使用数据结构进行什么?我可以理解需要队列和堆栈,但是您是否需要在Ruby中使用二叉树?或2-3-4树?为什么?
谢谢。 (xiè xiè)
So since these higher level languages manage the memory for you, what would you use data structures for?
使用数据结构的主要原因并不是垃圾收集,而是以某种高效的方式存储数据。因此,最重要的是数据的组织方式。这正是语言无法自动为您计算的内容。
当然,高级语言会带有几个预装的数据结构(并且当提供它们时,您应该100%使用这些预装的数据结构,而不是制作自己的数据结构),但是并非所有可能需要的数据结构都被提供。
数据结构以某种方式组织内存的存储,以便运行在其上的算法可以实现高效的结果。
对于大多数任务,您不需要实现自己的数据结构。但这完全取决于您正在编写的内容。
I can understand the need for queues and stacks but would you ever need to use a binary tree in Ruby?
有很多用二叉树的例子,但不是在日常项目中很常见的,比如你可能需要实现哈夫曼编码。
“其他数据结构可以用于具有Trie的空间节省和快速查找,或者您可能需要使用B树存储大量数据以进行快速查找。几种数据结构具有特定用途,并针对不同事物进行了优化。无论语言是否现代化,是否具有垃圾回收,都不会改变这一点。”
然而,趋势是定制实现的数据结构编码更少,考虑更少。类似的论点也发生在常见算法中。在更现代的语言(如LINQ)中,您只需指定排序即可。您实际上并不会说如何排序。
在我使用Python(与Ruby表面上相似)的经验中,我从未不得不实现二叉树或哈希映射或类似的任何东西。但原因与管理内存几乎无关。标准库中有最有用结构的实现,如字典(哈希映射)和列表;为了速度和效率,它们(至少部分)是用解释器编写的较低级别语言实现的,它们几乎肯定会优于您可能想到的任何自定义实现。
一言以蔽之,是的。
尽管GC可以简化您的工作,但仍有许多情况下,能够适当地组织数据将让您编写更有效(或更高效)的程序。
如果希望能够在排序的集合中高效地查找某些内容,您可以使用二叉树,就像在其他任何语言中一样。在任何语言中,数据结构的选择都非常重要。在高级语言中,这一点并不会变得不重要,除非高级语言提供了大型库,其中包含深思熟虑的智能设计,可为您处理此问题,这种情况下,您不必自己设计数据结构,但您必须知道要使用哪种内置数据结构。
Java集合框架非常广泛且出色,但如果您使用错误(不适当)的集合对象,您的程序性能将受到影响。
此外,有些数据结构比其他结构更节省空间。是的,内存很便宜,现代 GC D语言会为您管理内存,但如果您正在处理大量数据集,则数据结构将很重要,如果您可以使某些东西更节省内存。
你使用它们,但你不一定需要实现它们;它们已经为你实现好了。
例如,词典内部通常可以通过哈希映射和二叉树的组合来实现。列表可以通过链表实现等等。
如果您要存储巨量数据(比如数百万行文本),您可能需要实现数据结构。我自己还没有遇到需要这样做的情况,但想到可能需要它的项目。(例如,高效地打开和编辑巨大的文本文件等)。
我以专业的方式使用Ruby编程,并发现深入了解数据结构非常有帮助,尽管我从未在学校以外的任何特定性能特征下实现过树(尽管我不得不实现过类似树形结构的东西)。
当你在微观环境下使用数组时,可能会觉得与所需数据结构无关,因为编程语言已经向你提供了这些结构。但是当你需要在多台机器之间进行扩展或在不同服务之间协调时,这些数据结构就会在“企业”中再次出现。了解编写这些结构时可用的选项是一种有用的工具。
你使用这些数据结构解决的问题和其他语言中完全相同。不同之处只在于现代语言及其标准库通常已经针对它们拥有非常高效的实现。然而,你仍然需要了解它们才能使用。"更高级"并不意味着真正的魔法。