Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 外部搜索算法_Sorting_Sortedlist_External Sorting - Fatal编程技术网

Sorting 外部搜索算法

Sorting 外部搜索算法,sorting,sortedlist,external-sorting,Sorting,Sortedlist,External Sorting,如果我有一个非常大的排序列表存储在外部存储器中。假设这个列表不能被带到内存中,那么用伪代码在这个列表中查找密钥的好的搜索算法是什么呢?时间复杂度是多少?设计此算法时应考虑哪些主要因素?假设您的外部存储只是一个文件中存储的常量记录的普通数组,并且您的编程语言允许,您可以使用通常的方法 在C++中你说: 该文件使用void*指针指向文件的开始和结束 mmap-ed文件 将指针强制转换为记录类型 然后使用搜索记录,这是标准的二进制搜索实现之一 请注意,内存映射文件并不意味着将整个文件加载到内部内存中,

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

假设您的外部存储只是一个文件中存储的常量记录的普通数组,并且您的编程语言允许,您可以使用通常的方法

在C++中你说:

  • 该文件使用void*指针指向文件的开始和结束 mmap-ed文件
  • 将指针强制转换为记录类型
  • 然后使用搜索记录,这是标准的二进制搜索实现之一
  • 请注意,内存映射文件并不意味着将整个文件加载到内部内存中,相反,系统将自动将必要的页面从文件加载到加载页面的缓存中,并使用智能策略将缓存页面的大小保持在可用内存边界内


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

    假设您的外部存储只是一个文件中存储的固定大小记录的普通数组,并且您的编程语言允许,您可以使用通常的方法

    在C++中你说:

  • 该文件使用void*指针指向文件的开始和结束 mmap-ed文件
  • 将指针强制转换为记录类型
  • 然后使用搜索记录,这是标准的二进制搜索实现之一
  • 请注意,内存映射文件并不意味着将整个文件加载到内部内存中,相反,系统将自动将必要的页面从文件加载到加载页面的缓存中,并使用智能策略将缓存页面的大小保持在可用内存边界内


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

    您可以创建特定于键的索引文件,然后创建一些特定于域的语言……让我们称之为SQL以结构化形式查询数据。然后你可以花时间写越来越多的额外内容。但是等等,这已经完成了。它被称为数据库。在许多数据库中,都涉及一个特定于密钥的文件,但每k个记录只有一个密钥,其中k可能类似于64(可能更少或更多),这将在64个记录中进行查找,然后按顺序读取,只需一次初始随机访问。在大型机和内存有限的年代,使用了嵌套索引,例如索引到记录的索引。您可以创建特定于键的索引文件,然后创建一些特定于域的语言…让我们称之为SQL以结构化形式查询数据。然后你可以花时间写越来越多的额外内容。但是等等,这已经完成了。它被称为数据库。在许多数据库中,都涉及一个特定于密钥的文件,但每k个记录只有一个密钥,其中k可能类似于64(可能更少或更多),这将在64个记录中进行查找,然后按顺序读取,只需一次初始随机访问。在大型机和内存有限的年代,使用了嵌套索引,例如索引到记录的索引。