我目前有一个简单的数据库程序,它从文本文件中读取键并将它们存储在双向链表中(如果需要,则稍后读取值)。目前,我在列表上进行顺序搜索,但这显然很慢。我希望还有另一种方法可以做。我正在阅读有关二叉树(特别是红黑树)但我不太了解它们,并且希望我可以从stackoverflow hivemind中找到一些东西:)我想我的问题是,最快的方法是什么在双向链表中进行搜索?
编辑:忘了说列表已排序。不知道这是否会改变任何事情。另外,我只读取键的原因是最大值长度是1024 * 32字节,我觉得它太大了。请注意,这是针对分配的,因此“典型使用方案”不适用。教授们很可能会对这件事情进行压力测试,而且我不想把那块大块的东西用来制作。
答案 0 :(得分:4)
你可以使用一种叫做“skip list”的东西。
这是一组有序列表。每个列表都会跳过更多列表项。这使您可以进行二进制搜索。但是,维护列表更加困难。
答案 1 :(得分:3)
在未排序的双向链表中进行搜索的最快方法是一次一个元素。
如果您尝试更快地进行搜索,请不要使用链接列表。例如,您使用二叉树的想法肯定会更快,但正如Matthew Flaschen在评论中所说,它与您现在使用的实现完全不同。
答案 2 :(得分:0)
鉴于您的双向链表已排序,并且您有要搜索的项目列表,我建议查看构建自平衡二叉搜索树的问题。树构造可能需要一些时间,但如果您有一长串要搜索的项目,它将被摊销。