Data structures 一种高效的电话簿数据结构
我用AVL树实现了一个电话簿。但许多人说Trie最适合实现电话簿。我是否应该将我的项目更改为Trie,或者是否有其他充分的理由表明,在电话簿的情况下,AVL tree比Trie更有效。Trie是一种索引结构,在键长度不同时特别有用 AVL(Adelson Velskii and Landis)树是一种具有平衡条件的二叉搜索树 在实际使用中,当Data structures 一种高效的电话簿数据结构,data-structures,trie,avl-tree,Data Structures,Trie,Avl Tree,我用AVL树实现了一个电话簿。但许多人说Trie最适合实现电话簿。我是否应该将我的项目更改为Trie,或者是否有其他充分的理由表明,在电话簿的情况下,AVL tree比Trie更有效。Trie是一种索引结构,在键长度不同时特别有用 AVL(Adelson Velskii and Landis)树是一种具有平衡条件的二叉搜索树 在实际使用中,当N较大但L(长度)不是很大且单词不是那么随机时,首选Trie,如存储英语词典。 但是当L非常大且“单词”是随机的时,喜欢存储随机生成的长字符 密码、长哈希值
N
较大但L
(长度)不是很大且单词不是那么随机时,首选Trie,如存储英语词典。
但是当L
非常大且“单词”是随机的时,喜欢存储随机生成的长字符
密码、长哈希值等,最好选择AVL树
有关更多信息,请查看这是对这两种树结构之间差异的分析。选择适当的数据结构是为了优化特定任务以满足您最重要的功能 电话簿需要极快的搜索速度,所以链表将是一个糟糕的选择,因为它的大O在搜索时间上的顺序是N AVL树的平均搜索时间为(logn),但这意味着您有某种层次顺序来对树进行排序
我个人的建议是一个bucket散列(链表的散列表)。虽然有点复杂,但您可以使用他们的名字作为哈希函数的键,并且具有相同键的人可以存储在链接列表中(n搜索时间)。虽然这个大的O仍然是N,但是当你考虑经常被忽略的常数因素时,它的平均情况下运行时间会大大减少。< / P>你试图优化哪些操作?什么对你重要?电话簿中有多少条目?(我假设这只是一个玩具项目或任务,但细节将影响您应该选择的数据结构。)