Sorting 外部搜索算法
如果我有一个非常大的排序列表存储在外部存储器中。假设这个列表不能被带到内存中,那么用伪代码在这个列表中查找密钥的好的搜索算法是什么呢?时间复杂度是多少?设计此算法时应考虑哪些主要因素?假设您的外部存储只是一个文件中存储的常量记录的普通数组,并且您的编程语言允许,您可以使用通常的方法 在C++中你说:Sorting 外部搜索算法,sorting,sortedlist,external-sorting,Sorting,Sortedlist,External Sorting,如果我有一个非常大的排序列表存储在外部存储器中。假设这个列表不能被带到内存中,那么用伪代码在这个列表中查找密钥的好的搜索算法是什么呢?时间复杂度是多少?设计此算法时应考虑哪些主要因素?假设您的外部存储只是一个文件中存储的常量记录的普通数组,并且您的编程语言允许,您可以使用通常的方法 在C++中你说: 该文件使用void*指针指向文件的开始和结束 mmap-ed文件 将指针强制转换为记录类型 然后使用搜索记录,这是标准的二进制搜索实现之一 请注意,内存映射文件并不意味着将整个文件加载到内部内存中,
这是在排序文件中搜索的标准实践,没有理由重新设计它(据我所知)。外部内存中二进制搜索算法的复杂性取决于外部存储模型、缓冲/分页策略等,但对于硬盘驱动器,您仍然可以假定它是在通常的O(logn)中。我建议您搜索数据结构教程和库。假设您的外部存储只是一个文件中存储的固定大小记录的普通数组,并且您的编程语言允许,您可以使用通常的方法 在C++中你说:
这是在排序文件中搜索的标准实践,没有理由重新设计它(据我所知)。外部内存中二进制搜索算法的复杂性取决于外部存储模型、缓冲/分页策略等,但对于硬盘驱动器,您仍然可以假定它是在通常的O(logn)中。我建议您搜索和数据结构教程和库。您可以创建特定于键的索引文件,然后创建一些特定于域的语言……让我们称之为SQL以结构化形式查询数据。然后你可以花时间写越来越多的额外内容。但是等等,这已经完成了。它被称为数据库。在许多数据库中,都涉及一个特定于密钥的文件,但每k个记录只有一个密钥,其中k可能类似于64(可能更少或更多),这将在64个记录中进行查找,然后按顺序读取,只需一次初始随机访问。在大型机和内存有限的年代,使用了嵌套索引,例如索引到记录的索引。您可以创建特定于键的索引文件,然后创建一些特定于域的语言…让我们称之为SQL以结构化形式查询数据。然后你可以花时间写越来越多的额外内容。但是等等,这已经完成了。它被称为数据库。在许多数据库中,都涉及一个特定于密钥的文件,但每k个记录只有一个密钥,其中k可能类似于64(可能更少或更多),这将在64个记录中进行查找,然后按顺序读取,只需一次初始随机访问。在大型机和内存有限的年代,使用了嵌套索引,例如索引到记录的索引。