基数树(Patricia Trie)是手机通讯录的有效数据结构吗?
Is a radix tree (Patricia Trie) an efficient data structre for a mobile-phone address book
我一直在考虑在C++中实现地址簿。由于它是为移动应用程序开发的,因此地址簿应使用尽可能少的内存,并且用户仍然应该能够快速按名称搜索或排序联系人(我知道的悖论)。
在我做了一些研究之后,我发现大多数人都认为Trie将是满足我需求的最佳数据结构。更准确地说是一棵基数树(帕特里夏·特里)。使用此数据结构也非常适合实现自动完成。
是否有其他可行的解决方案,或者如果我开始使用这个想法进行编码是否可以?
当心尝试小集合。虽然它们确实提供了良好的渐近行为,但它们在时间和空间中的隐藏常数可能太大了。
特别是,尝试往往缓存性能较差,这应该是小型集合的主要关注点。
假设您的数据相对较小[<10,000个条目],则std::vector
可以提供良好的缓存性能,这可能比大小因素的影响更大。因此,即使它的搜索时间也逐渐高于trie或std::set,实际上 - 由于良好的缓存行为,它可能比两者都好。
如果您还可以使用二叉搜索来保持vector
排序 - 则可以从对数搜索时间和良好的缓存行为中受益。
(*)此答案假设将在其上部署应用程序的硬件具有 CPU 缓存。
try是
最好的,因为它们提供快速搜索,插入和删除。
相关文章:
- 使用蓝牙组件将数据从Android手机传输到串行设备时出现问题
- 如果我的手机是 ARMv8,为什么 Android Studio 会C++编译为 ARMv7?
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 智能手机代码厨师问题逻辑混乱
- WPD API检测设备是否是手机
- 任何人都有任何想法编写与C 旧手机中的消息作曲家以相同方式工作的程序
- OpenCV - 来自手机摄像头的 FPS 不正确
- 检测手机或摄像头的插入
- OPENCV中最佳立体声通讯算法
- 如何让手机从Qt Android振动
- 如何将鼠标/光标添加到非触摸手机的QML应用程序中
- MPI:获取给定通讯器中所有处理器的等级
- 10 手机:"The specified module could not be found. (Exception from HRESULT: 0x8007007E)" :空
- 用C++开发Windows手机应用程序
- C++通讯簿数组和文本文件
- 使用树莓派的PN532可以向具有NFC的安卓手机发送NDEF消息吗
- 是否有任何C++库可以通过蓝牙获取Android手机的加速数据
- Android NDK 库不会仅在三星 Galaxy 4.0.2 手机的运行时加载
- 从 c++ 通过 activex 读取 Outlook 通讯簿会随机返回未知错误
- 基数树(Patricia Trie)是手机通讯录的有效数据结构吗?