不同数据结构的实际用途

时间:2009-10-08 16:46:23

标签: data-structures

有很多关于数据结构的讨论,但我找不到简单的数据结构列表及其实际用途。我正在努力学习面试,我认为这会帮助我和其他许多人一起。我正在寻找这样的东西:

数据结构 - 示例/用于

哈希表 - 快速数据查找...然后给出一个例子

数组 - ...

二叉树 - ......

如果某个地方有这样的资源,请告诉我。

谢谢!

编辑:我的意思是维基百科很好,但是在大多数页面上它们并没有列出实际用途。我正在寻找更多的东西。

9 个答案:

答案 0 :(得分:88)

以前在StackOverflow上找到类似问题的列表:

  

哈希表 - 用于快速数据查找 - 编译器的符号表,   数据库索引,缓存,唯一数据表示。

     

Trie - 字典,例如在移动电话上找到的字典   自动完成和拼写检查。

     

后缀树 - 大多数文字处理程序中使用的快速全文搜索。

     

堆栈 - 在字处理器中执行undo \ redo操作,表达式评估   和语法解析,许多虚拟机如JVM都是面向堆栈的。

     

队列 - 各种实体所在的运输和运营研究   存储并保持以便稍后处理,即队列执行   缓冲区的功能。

     

优先级队列 - 内核中的进程调度

     

Trees - Parsers,Filesystem

     

基数树 - IP路由表

     

BSP树 - 3D计算机图形

     

图表 - 社交网站中的连接/关系,路由   ,通信网络,数据组织等。

     

堆 - 在lisp中的动态内存分配

这是RV Pradeep

最初发布的答案

其他一些不太有用的链接:

Applications are only listed for some data structures

Not application focused, by good summary and relevant

答案 1 :(得分:13)

我和你在同一条船上。我需要学习技术面试,但记住一份清单并不是很有帮助。如果您有3-4个小时的空余时间,并希望进行更深入的潜水,我建议您查看

mycodeschool
我查看了Coursera和其他资源,如博客和教科书, 但我发现它们要么不够全面,要么在光谱的另一端,太过密集,不具备先决条件的计算机科学术语。

视频中的家伙有很多关于数据结构的讲座。不要介意愚蠢的图画,或者根本没有轻微的重点。您不仅需要了解要选择哪种数据结构,还需要了解人们在考虑数据结构时需要考虑的其他一些要点:

  • 常见数据结构的优缺点
  • 为什么每个数据结构都存在
  • 它在内存中的实际工作方式
  • 具体问题/练习,并决定使用哪种结构以实现最高效率
  • 清醒大0解释

I also posted notes on github if you are interested.

答案 2 :(得分:7)

根据我的理解,数据结构是驻留在任何可以有效管理的电子系统的存储器中的任何数据。很多时候,它是一种记忆游戏或更快的数据访问。就内存而言,基于该最终产品公司的成本管理数据需要进行权衡。有效管理告诉我们如何根据最终产品的主要要求访问数据的最佳方式。这是一个非常高级的解释,但数据结构是一个广泛的主题。大多数访谈者都会深入研究他们能够在访谈中讨论的数据结构,具体取决于他们的时间,链接列表和相关主题。

现在,这些数据类型可以根据它们逻辑构造和访问的方式分为原始,抽象,复合。

  • 原始数据结构是所有数据结构的基本构建块,它们具有连续的内存:boolean,char,int,float,double,string。
  • 复合数据结构是由多个原始数据类型组成的数据结构.class,structure,union,array / record。
  • 抽象数据类型是复合数据类型,可以有效地访问它们,这被称为算法。根据访问数据的方式,数据结构分为线性和非线性数据类型。链接列表,堆栈,队列等是线性数据类型。堆,二进制树和哈希表等是非线性数据类型。

我希望这可以帮助你潜入。

答案 3 :(得分:6)

Skienna的优秀书籍“Algorithm Design Manual"包含一个庞大的算法和数据结构库。

对于大量问题,描述,比较数据结构和算法,并讨论实际用法。作者还提供了实施和原始研究论文的参考。

如果您搜索最佳数据结构以解决问题,那么本书很适合放在您的桌面上。这对面试准备也很有帮助。

另一个很棒的资源是NIST Dictionary of Data structures and algorithms

答案 4 :(得分:3)

各种数据结构的任何排名都至少部分地与问题上下文相关联。这将有助于学习如何分析算法的时间和空间性能。通常,使用“大O符号”,例如,二进制搜索在O(log n)时间内,这意味着搜索元素的时间是元素数​​量的日志(在基数2中,隐式地)。直觉上,由于每一步都将剩余数据的一半丢弃为不相关,因此将元素数量加倍会使时间增加1步。 (二进制搜索相当好。)空间性能涉及大数据集的内存量增长情况。另请注意,big-O表示法忽略了常数因子 - 对于较小的数据集,O(n ^ 2)算法可能仍然比具有更高常数因子的O(n * log n)算法更快。复杂的算法在启动时通常需要做更多的工作。

除了时间和空间之外,其他特征还包括数据结构是否已排序(树和跳过列表是否排序,散列表是否排序),持久性(二进制树可以重用旧版本的指针,而哈希表是在适当位置修改的),等

虽然您需要了解几种数据结构的行为以便能够比较它们,但是要了解其性能差异的一种方法是仔细研究一些数据结构。我建议比较单链表,二叉搜索树和skip lists,所有这些都相对简单,但具有非常不同的特征。想想找一个值,添加一个新值,按顺序查找所有值等需要多少工作。

人们推荐的分析算法/数据结构性能的文章很多,但真正让他们理解的是学习OCaml。处理复杂的数据结构是ML的强项,当你可以像C一样避免指针和内存管理时,它们的行为更加清晰。(学习OCaml只是为了理解数据结构几乎肯定是很长的路要走。))< / p>

答案 5 :(得分:3)

数据结构的实际应用

红黑树(频繁插入/删除时使用) 很少搜索) - K-mean使用红黑树进行聚类,数据库,简单的数据库,搜索词典中的单词,在网上搜索

AVL Trees(更多搜索和更少的插入/删除) - 数据分析和数据挖掘以及涉及更多搜索的应用程序

Min Heap - 聚类算法

答案 6 :(得分:0)

我希望这个网站能够成为学习数据结构和算法实际用途的好地方。

Algorithum problem with solution

答案 7 :(得分:-1)

以下是您可以了解数据结构和算法的实际使用情况的网站列表 Hacker Earth

Hacker Rank

code chef

答案 8 :(得分:-2)

我认为研究数据结构的特征更为明智。

根据面试官给你的情景,选择合适的情景。

我向声称软件工程和编程不具创意的人说谎。