外部搜索算法

时间:2016-05-06 03:12:26

标签: sorting sortedlist external-sorting

如果我有一个非常大的排序列表存储在外部存储器中。假设这个列表不能被带入内部存储器,那么在伪代码中查找此列表中的密钥的好搜索算法是什么?什么是时间复杂度?,在设计此算法时应考虑哪些主要因素?

1 个答案:

答案 0 :(得分:0)

假设您的外部存储只是一个存储在文件中的常量大小记录的简单数组,并且您的编程语言允许memory map the file,您可以使用通常的binary search algorithm

说,在C ++中你

  1. mmap该文件采用void *指向开头和结尾的指针 mmap-ed文件,
  2. 将指针投射到您的记录类型
  3. 然后使用std::lower_bound()搜索记录,这是标准二进制搜索实现之一。
  4. 请注意,内存映射文件并不意味着将整个文件加载到内部存储器中,而是系统会自动将必要的页面从文件加载到已加载页面的缓存中,并使用智能策略将缓存页面的大小保持在可用状态记忆界限。

    这是搜索已排序文件的标准做法,没有理由重新设计它(据我所知)。外部存储器中二进制搜索算法的复杂性取决于外部存储模型,缓冲/分页策略等,但对于您的硬盘驱动器,您仍然可以假设它在通常的O(log N)中。我建议您搜索out-of-core algorithms和数据结构教程和库。