基数树(Patricia Trie)是手机通讯录的有效数据结构吗?

Is a radix tree (Patricia Trie) an efficient data structre for a mobile-phone address book

本文关键字:通讯录 手机通讯 有效 数据结构 手机 Patricia Trie      更新时间:2023-10-16

我一直在考虑在C++中实现地址簿。由于它是为移动应用程序开发的,因此地址簿应使用尽可能少的内存,并且用户仍然应该能够快速按名称搜索或排序联系人(我知道的悖论)。

在我做了一些研究之后,我发现大多数人都认为Trie将是满足我需求的最佳数据结构。更准确地说是一棵基数树(帕特里夏·特里)。使用此数据结构也非常适合实现自动完成。

是否有其他可行的解决方案,或者如果我开始使用这个想法进行编码是否可以?

当心尝试小集合。虽然它们确实提供了良好的渐近行为,但它们在时间和空间中的隐藏常数可能太大了。

特别是,尝试往往缓存性能较差,这应该是小型集合的主要关注点

假设您的数据相对较小[<10,000个条目],则std::vector可以提供良好的缓存性能,这可能比大小因素的影响更大。因此,即使它的搜索时间也逐渐高于trie或std::set,实际上 - 由于良好的缓存行为,它可能比两者都好。

如果您还可以使用二叉搜索来保持vector排序 - 则可以从对数搜索时间和良好的缓存行为中受益。

(*)此答案假设将在其上部署应用程序的硬件具有 CPU 缓存。

try是

最好的,因为它们提供快速搜索,插入和删除。