【问题标题】:Quickly searching a doubly linked list快速搜索双向链表
【发布时间】:2010-10-13 03:57:46
【问题描述】:

我目前有一个简单的数据库程序,它从文本文件中读取键并将它们存储在双向链表中(如果需要,稍后会读取值)。目前,我对列表进行了顺序搜索,但这显然相当慢。我希望有另一种方法可以做。我正在阅读二叉树(特别是红黑树),但我对它们了解不多,并希望我能从 stackoverflow hivemind 中看到一些东西:) 我想我的问题是,最快的方法是什么在双向链表中进行搜索?

编辑:忘了说列表是排序的。不知道这是否会改变什么。另外,我只在keys中读取的原因是最大值长度为1024 * 32字节,我觉得太大了。请注意,这是针对分配的,因此“典型使用场景”不适用。教授们可能会对这件事进行压力测试,我不想分配那么大的块。

【问题讨论】:

  • 二叉树和链表是不同的数据结构(链表是树的退化形式)。所以你必须考虑你是否愿意改变结构。
  • 注意两次读取文本文件的性能开销;在读取密钥时读取和保存值可能会更好。文件是 slow* 并且内存通常很便宜。
  • 一个快速的解决方法是,使用哈希映射来存储列表节点的指针对键:-)

标签: c search linked-list


【解决方案1】:

您可以使用一种叫做“skip list”的东西。

它是一组有序列表。每个列表都会跳过更多的列表项。这使您可以进行某种形式的二分搜索。但是,维护列表更加困难。

【讨论】:

  • 这看起来很有希望。感谢您的链接。
【解决方案2】:

在未排序的双向链表中进行搜索的最快方法是一次一个元素。

如果您想加快搜索速度,请不要使用链表。例如,您使用二叉树的想法肯定会更快,但正如 Matthew Flaschen 在 cmets 中所说,它与您现在使用的实现完全不同。

【讨论】:

    【解决方案3】:

    鉴于您的双向链表已排序,并且您有一个要搜索的项目列表,我建议研究构建自平衡二叉搜索树的问题。树的构建可能需要一些时间,但如果您要搜索的项目列表很长,它将被摊销。

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2012-07-15
      相关资源
      最近更新 更多