【发布时间】:2011-07-10 17:17:17
【问题描述】:
我在磁盘中有大量数据记录,这些数据记录根据一些键按排序顺序排列。 一次将数据读入一个块(数千条记录)。 我必须搜索并显示与键匹配的所有记录。 我在想一些基于二分搜索的算法,但我这里有一些限制。
- 只能在一个块内从块的开头按顺序查找记录。
- 同一个key的记录可以跨多个block(如图-8跨)。在二进制搜索中,如果我正在加载中间块并且如果第一条记录匹配,那么我必须 扫描匹配块之前的块。
谁能帮我设计一个可以在 C++ 中工作的有效策略。使用线性搜索方法是否有效。
+---+
| 1 | Block1
| 3 |
| 3 |
| 4 |
+---+
| 4 | Block2
| 6 |
| 7 |
| 8 |
+---+
| 8 | Block3
| 8 |
| 8 |
| 8 |
+---+
| 8 | Block4
| 14|
| 15|
| 16|
+---+
【问题讨论】:
-
你有(或者你可以预先计算)任何类型的索引结构,你可以保存在内存中吗?例如每个块的起始值。
-
我的第一印象是二分查找可能是最好的。如果第一条记录匹配,则无论如何您都将检查前一个块,无论搜索方法如何(或者,等效地,您将匹配最后一条记录并必须检查下一个块)......我很想看看然而,其他人想出什么。
-
@Autopulated 我可以预先计算一个索引。
标签: c++ algorithm search binary-search