我有兴趣自学不同的数据结构,我目前对此知之甚少。我的计划是实现一些关键结构,以便了解它们的工作原理。我正在寻找有关重要数据结构的建议。
我主要关注与搜索应用程序相关的数据结构(例如Google / Lucene)以及延迟计算和预计算之间的一般权衡。我也对分布式数据结构感兴趣 - 数据结构可以扩展到数百/数千台服务器 - 以及概率数据结构 - 数据结构有助于找到一个近似的答案,但不需要总是正确的。
维基百科有一个list of data structures。我目前正在考虑:
有更好的选择吗?
最后,在像F#这样的语言中实现这些结构是否存在任何(主要)问题?
答案 0 :(得分:5)
非常雄心勃勃。我只是因为它的范围而投了你的问题。
麻省理工学院有一个on-line algorithms and data structures course。 companion book是经典之作。我不确定它是否解决了分布式和概率性功能,但它们将为您提供基础知识的良好基础。
我会将红黑树,哈希表,patricia trie和跳过列表添加到您的议程中。
祝你好运。答案 1 :(得分:4)
如果您要使用函数式语言解决此类问题,您应该查看Chris Okasaki的 Purely Functional Data Structures 。基本教训是:您熟悉命令式编程的数据结构可能不是函数式编程的最佳选择。我希望有很多类似的材料可以用Google搜索。
答案 2 :(得分:3)
对于搜索,算法比数据结构更重要。搜索大型搜索空间时,您通常需要使用复杂的方法来修剪搜索空间。
您可以查看经典搜索算法,例如alpha-beta,A *,AO *。
然后看看迭代加深搜索的内容。
在搜索算法中,堆栈和链表(实际上是堆栈的形式)和树之类的东西比哈希表,B树等更重要。当然,你无疑会在那里有哈希表,但是它不是算法的核心。
这是一些更重要的搜索算法:
就搜索的具体数据结构而言,你真的不需要任何数据结构。基本上,您只需要常规的数据结构工具包 - 树,哈希,列表。
答案 3 :(得分:2)
由于您对DS知之甚少,我认为您应该从列表(单链接和双链接列表)开始。
然后你可以研究各种树数据结构。
此外,由于您对与搜索相关的DS感兴趣,我认为您应该学习B树+树和哈希表。
The Algorithm Design Manual是一本了解算法的好书。