电话簿的高效数据结构

时间:2014-12-21 08:44:00

标签: data-structures trie avl-tree

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

2 个答案:

答案 0 :(得分:0)

trie是一种索引结构,在密钥长度不同时特别有用。

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

在实际使用中,当N很大但L(长度)不是很大而且单词不是随机的时,首选Trie,比如存储英语词典。 但是当L非常大并且'单词'是随机的时,就像存储随机生成的长 密码,长哈希值等,最好选择AVL Tree。

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

答案 1 :(得分:0)

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

即。)电话簿需要非常快速地进行搜索,因此链接列表将是一个糟糕的选项,因为它的Big-O在搜索时间为N的顺序。

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

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