不同数据结构的实际用途

Practical uses of different data structures

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

数据结构-示例/用于

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

数组-…

二叉树-…

如果有这样的资源,请告诉我。

谢谢!

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


在类似的问题中找到了列表,以前在StackOverflow上找到过:

Hash Table - used for fast data lookup - symbol table for compilers,
database indexing, caches,Unique data representation.

Trie - dictionary, such as one found on a mobile telephone for
autocompletion and spell-checking.

Suffix tree - fast full text searches used in most word processors.

Stack - undo
edo operation in word processors, Expression evaluation
and syntax parsing, many virtual machines like JVM are stack oriented.

Queues - Transport and operations research where various entities are
stored and held to be processed later ie the queue performs the
function of a buffer.

Priority queues - process scheduling in the kernel

Trees - Parsers, Filesystem

Radix tree - IP routing table

BSP tree - 3D computer graphics

Graphs - Connections/relations in social networking sites, Routing
,networks of communication, data organization etc.

Heap - Dynamic memory allocation in lisp

这是RV Pradeep最初发布的答案。

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

仅列出某些数据结构的应用程序

不以应用程序为中心,通过良好的总结和相关


我和你在同一条船上。我需要学习技术面谈,但是记住一个清单并不是很有帮助。如果你还有3-4个小时的空余时间,想做一次更深的潜水,我建议你去看看。

霉菌属我看过Coursera和其他资源,比如博客和教科书,但我发现它们要么不够全面,要么在另一个极端,太密集了先决条件的计算机科学术语。

视频里的那个家伙有一大堆关于数据结构的讲座。别介意那些愚蠢的画,或者轻微的口音。您不仅需要了解要选择的数据结构,还需要了解人们在考虑数据结构时需要考虑的其他一些要点:

  • 常见数据结构的优缺点
  • 为什么每个数据结构都存在
  • 它在记忆中是如何工作的
  • 具体问题/练习并决定使用哪种结构以获得最大效率
  • 清晰的大0解释

如果你感兴趣的话,我也会在Github上贴便条。


根据我的理解,数据结构是指存储在任何电子系统内存中的任何数据,这些数据可以被有效地管理。很多时候,它是一个内存游戏或数据访问速度更快。在内存方面,根据最终产品公司的成本对数据管理进行权衡。高效管理告诉我们如何根据最终产品的主要需求访问数据。这是一个非常高层次的解释,但数据结构是一个庞大的主题。大多数面试官都会深入研究数据结构,这些数据结构是他们在面试中能够负担得起的,这取决于他们所拥有的时间,这些时间是链接列表和相关主题。

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

  • 基本数据结构是所有数据结构的基本构建块,它们有一个连续的内存:布尔型、char、int、float、double、string。
  • 复合数据结构是由多个基本数据类型组成的数据结构。类、结构、联合、数组/记录。
  • 抽象数据类型是复合数据类型,可以有效地访问它们,这称为算法。根据数据的访问方式,数据结构分为线性和非线性数据类型。链表、堆栈、队列等是线性数据类型。堆、二叉树和哈希表等是非线性数据类型。

我希望这能帮你潜入水中。


斯基纳的优秀著作《算法设计手册》包含了大量的算法和数据结构。

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

如果你能找到最好的数据结构来解决你的问题,那么这本书就可以放在你的办公桌上。这对面试准备也很有帮助。

另一个伟大的资源是NIST数据结构和算法字典。


很少有数据结构的实际应用

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

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

最小堆-聚类算法


各种数据结构的任何排序都至少部分地与问题上下文相关。这将有助于学习如何分析算法的时空性能。通常使用"大O符号",例如二进制搜索是在O(log n)时间,这意味着搜索元素的时间是元素数量的日志(以2为底,隐式)。直观地说,由于每一步都将剩下的一半数据丢弃为不相关数据,因此将元素数量加倍将使时间增加1步。(二进制搜索可以很好地扩展。)空间性能关系到更大数据集的内存量如何增长。另外,请注意,big-o表示法忽略常量因子——对于较小的数据集,o(n^2)算法可能仍然比o(n*logn)算法更快,后者具有更高的常量因子。复杂的算法在启动时通常有更多的工作要做。

除了时间和空间之外,其他特征还包括数据结构是否排序(树和Skiplist排序,哈希表不排序)、持久性(二进制树可以重用旧版本中的指针,而哈希表被修改到位)等。

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

有很多关于分析算法/数据结构性能的文章是人们推荐的,但真正让我觉得有意义的是学习OCAML。处理复杂的数据结构是ML的强项,当您可以避免指针和内存管理时,它们的行为就更加清晰了,就像在C中一样。(尽管学习OCAML只是为了理解数据结构,但几乎可以肯定是很长的路要走)。:)