实际使用不同的数据结构
关于数据结构有很多讨论,但是我找不到一个简单的数据结构列表和它们的实际应用。 我正在努力学习面试,我想这会帮助我和其他许多人。 我正在寻找这样的东西:
数据结构 – 示例/用于
哈希表 – 快速数据查找…然后给出一个例子
arrays – …
二叉树 – …
如果有这样的资源,请让我知道。
谢谢!
编辑:我的意思是维基百科是好的,但在大多数页面,他们并没有列出实际用途。 我正在寻找更多的东西。
find类似问题的列表,以前在StackOverflow上:
散列表 – 用于快速数据查找 – 编译器的符号表,数据库索引,caching,唯一数据表示。
Trie – 字典,例如在移动电话上发现的字典,用于自动完成和拼写检查。
后缀树 – 快速全文search在大多数文字处理器中使用。
在字处理程序中,撤销\重做操作,Expression评估和语法分析,许多像JVM这样的虚拟机都是面向堆栈的。
队列 – 运输和运营研究,其中各种实体被存储和保存待处理,即队列执行缓冲区的function。
优先级队列 – 内核中的进程调度
树 – parsing器,文件系统
基数树 – IP路由表
BSP树 – 3D计算机graphics
图表 – 社交网站中的连接/关系,路由,通信networking,数据组织等
堆 – Lisp中的dynamic内存分配
这是RV Pradeep最初发布的答案
其他一些不太有用的链接:
仅列出一些数据结构的应用程序
没有应用的重点,通过良好的总结和相关
我和你在同一条船上。 我需要学习技术面试,但背诵清单并不是很有帮助。 如果您有3-4个小时的空余时间,并且想要进行更深入的潜水,我build议您退房
mycodeschool
我查看了Coursera和其他资源,例如博客和教科书,但是我发现它们不够全面,或者在另一端,它们过于密集,并且没有必要的计算机科学术语。
video中的老兄有一堆关于数据结构的讲座。 不要介意愚蠢的图画,或者微微的口音。 您不仅需要了解要select的数据结构,还需要了解人们在考虑数据结构时要考虑的其他几点:
- 通用数据结构的优缺点
- 为什么每个数据结构都存在
- 它是如何在内存中工作的
- 具体问题/练习,并决定使用哪种结构以获得最大效率
- 清醒的大0的解释
如果你有兴趣的话,我还会在github上发布笔记。
由Skienna出色的书“ algorithmdevise手册”包含一个巨大的algorithm和数据结构库。
对于大量的问题,对数据结构和algorithm进行了描述,比较和讨论了实际的使用情况。 作者还提供了实施和原始研究论文的参考。
如果您为您的问题寻找最佳数据结构来解决问题,那么这本书就很棒了。 面试准备也很有帮助。
另一个很好的资源是NIST数据结构和algorithm字典 。
根据我的理解,数据结构是驻留在任何可以有效pipe理的电子系统的内存中的数据。 很多时候,这是一个内存游戏或更快的数据访问。 在内存方面,基于对最终产品公司的成本进行数据pipe理的权衡。 有效pipe理告诉我们如何根据最终产品的主要要求访问数据。 这是一个非常高层次的解释,但数据结构是一个很大的课题。 大多数采访者都会根据自己的时间,在链接列表和相关主题中深入讨论访谈中讨论的数据结构。
现在,这些数据types可以根据逻辑构造和访问的方式分为原始的,抽象的,复合的。
- 原始数据结构是所有数据结构的基本构build块,它们具有连续的内存:boolean,char,int,float,double,string。
- 复合数据结构是由多个基本数据types组成的数据结构.class,structure,union,array / record。
- 抽象数据types是复合数据types,可以有效地访问它们,这被称为algorithm。 根据访问数据的方式,数据结构分为线性和非线性数据types。 链表,堆栈,队列等是线性数据types。 堆,二叉树和散列表等是非线性数据types。
我希望这可以帮助你潜入。
各种数据结构的sorting将至less部分与问题上下文相关联。 这将有助于学习如何分析algorithm的时间和空间性能。 通常,使用“大O符号”,例如二进制search在O(log n)时间内,这意味着search元素的时间是元素数量的日志(隐含地在基数2中)。 直观地说,由于每一步都将剩下的一半数据丢弃为无关紧要,所以将元素数量加倍会使时间增加1个步骤。 (二进制search缩放比较好。)空间性能涉及更大的数据集的内存量如何增长。 此外,请注意,大O符号忽略了常数因子 – 对于较小的数据集,O(n ^ 2)algorithm可能仍然比具有较高常数因子的O(n * log n)algorithm更快。 复杂的algorithm通常在启动时需要做更多的工作。
除了时间和空间之外,其他特性还包括数据结构是否被sorting(树和跳过列表sorting,哈希表不存在),持久性(二进制树可以重用旧版本的指针,而哈希表被修改)等等。
虽然您需要了解几种数据结构的行为以便能够比较它们,但要找出它们在性能上存在差异的一种方法,则需要仔细研究一些。 我build议比较单链表,二叉查找树和跳过列表 ,所有这些都比较简单,但具有很不相同的特性。 想想find一个值需要多less工作,添加一个新值,按顺序查找所有值。
人们推荐的关于分析algorithm/数据结构性能的文章有很多,但真正让他们理解的是OCaml。 处理复杂的数据结构是ML的强项,当你可以像C中一样避免指针和内存pipe理时,它们的行为会更加清晰。(了解OCaml只是为了理解数据结构几乎肯定是漫长的。)
我认为只研究数据结构的特征是比较明智的。
根据面试官提供给你的情景,挑选合适的人选。
我对那些声称软件工程和编程没有创造力的人说谎。
更less的数据结构的实际应用
红黑树(频繁插入/删除时使用,less量search时使用) – 使用红黑树的K均值聚类,数据库,简单的数据库,在词典内search词,在网上search
AVL树(更多search和更less的插入/删除) – 数据分析和数据挖掘以及涉及更多search的应用程序
最小堆聚类algorithm
我希望这个网站能够成为学习数据结构和algorithm实际应用的好地方。
解决scheme的algorithm问题