搜索中的重要数据结构

时间:2009-12-30 14:58:26

标签: .net search data-structures f#

我有兴趣自学不同的数据结构,我目前对此知之甚少。我的计划是实现一些关键结构,以便了解它们的工作原理。我正在寻找有关重要数据结构的建议。

我主要关注与搜索应用程序相关的数据结构(例如Google / Lucene)以及延迟计算和预计算之间的一般权衡。我也对分布式数据结构感兴趣 - 数据结构可以扩展到数百/数千台服务器 - 以及概率数据结构 - 数据结构有助于找到一个近似的答案,但不需要总是正确的。

维基百科有一个list of data structures。我目前正在考虑:

  • 哈希表
  • B + - 树
  • R-树
  • KD-树
  • 基树
  • 布隆过滤器

有更好的选择吗?

最后,在像F#这样的语言中实现这些结构是否存在任何(主要)问题?

4 个答案:

答案 0 :(得分:5)

非常雄心勃勃。我只是因为它的范围而投了你的问题。

麻省理工学院有一个on-line algorithms and data structures coursecompanion book是经典之作。我不确定它是否解决了分布式和概率性功能,但它们将为您提供基础知识的良好基础。

我会将红黑树,哈希表,patricia trie和跳过列表添加到您的议程中。

祝你好运。

答案 1 :(得分:4)

如果您要使用函数式语言解决此类问题,您应该查看Chris Okasaki的 Purely Functional Data Structures 。基本教训是:您熟悉命令式编程的数据结构可能不是函数式编程的最佳选择。我希望有很多类似的材料可以用Google搜索。

答案 2 :(得分:3)

对于搜索,算法比数据结构更重要。搜索大型搜索空间时,您通常需要使用复杂的方法来修剪搜索空间。

您可以查看经典搜索算法,例如alpha-beta,A *,AO *。

然后看看迭代加深搜索的内容。

在搜索算法中,堆栈和链表(实际上是堆栈的形式)和树之类的东西比哈希表,B树等更重要。当然,你无疑会在那里有哈希表,但是它不是算法的核心。

这是一些更重要的搜索算法:

  1. B *搜索
  2. 回溯
  3. beam search
  4. 最佳优先搜索
  5. 双向搜索
  6. 爬山搜索
  7. 模拟退火
  8. IDA *
  9. 迭代深化深度优先搜索
  10. mini-max search
  11. 最近邻搜索
  12. 传播激活
  13. 状态空间搜索(不是一种技术,只是一种概念化问题的方法)。
  14. 就搜索的具体数据结构而言,你真的不需要任何数据结构。基本上,您只需要常规的数据结构工具包 - 树,哈希,列表。

答案 3 :(得分:2)

由于您对DS知之甚少,我认为您应该从列表(单链接和双链接列表)开始。

然后你可以研究各种树数据结构。

此外,由于您对与搜索相关的DS感兴趣,我认为您应该学习B树+树和哈希表。

The Algorithm Design Manual是一本了解算法的好书。