我使用AVL树实现了电话簿。但很多人说Trie最适合实施电话簿。我应该将我的项目更改为Trie,还是有任何其他充分理由说明AVL树在电话簿的情况下比Trie更有效。
答案 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,它的平均情况运行时间会大大减少。