【问题标题】:Efficient data structure for phone book电话簿的高效数据结构
【发布时间】:2014-12-21 08:43:59
【问题描述】:

我已经使用 AVL 树实现了电话簿。但是很多人说 Trie 最适合实现电话簿。我应该将我的项目更改为 Trie,还是有其他充分的理由证明 AVL 树在电话簿的情况下比 Trie 更有效。

【问题讨论】:

  • 您要优化哪些操作?什么对你很重要?电话簿中有多少条目? (我假设这只是一个玩具项目或任务,但细节会影响你应该选择哪种数据结构。)

标签: data-structures trie avl-tree


【解决方案1】:

trie 是一种索引结构,当键的长度不同时特别有用。

AVL(Adelson-Velskii and Landis)树是具有平衡条件的二叉搜索树。

在实际使用中,当N 很大但L(长度)不是很大并且单词不是那么随机时,首选Trie,例如存储英文字典。 但是当L非常大并且“单词”是随机的时,喜欢存储随机生成的长 密码、长哈希值等,最好选择AVL Tree。

欲了解更多信息,请查看pdf,这是对这两种树结构之间差异的分析。

【讨论】:

    【解决方案2】:

    选择合适的数据结构是为了优化特定任务以满足您最重要的功能。

    ie.) 电话簿需要非常快速地搜索,因此链表将是一个糟糕的选择,因为它的 Big-O 的搜索时间约为 N。

    AVL 树的平均搜索时间确实为 (log n),但这意味着您有某种层次顺序来对树进行排序。

    我个人的建议是桶哈希(链表的哈希表)。虽然有点复杂,但您可以使用他们的名字作为哈希函数的键,并且可以将具有相同键的人存储在链表中(n 次搜索时间)。尽管其中的大 O 仍然是 N,但当您考虑通常被忽略的常数因素时,它的平均案例运行时间会大大减少。

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多