我有一个海量的数据文件,我不能把它全部加载到内存中去查看。如何对查找特定值的文件进行排序(它是纬度、经度、高度,并且我正在查找限定特定高度的两个高度值,我将对这两个值进行插值以查找特定的经纬点)?我可以使用"getline()“来读取每一行,但这不会让我查看两个值并将它们与我想要的特定值进行比较(据我所知)。
谢谢。
发布于 2012-02-15 01:06:55
例如,如果您的文件包含1、2、3、...100之类的数字。通过在内存中存储(文件中的数字:文件中的位置/磁盘上的位置) 1:0,10:9,20:19...现在,如果您正在查找数字18,您在这些索引中进行二进制搜索(logn时间),您发现18在10到20之间,所以您读取位置9到19的文件,并将该块放入内存中。现在在该区块中执行另一个二进制搜索: logm time
总运行时间: logn+logm或log(num_index_chunks)+log(avg_size_of_chunk)+chunk_i_load_time
发布于 2012-02-15 03:10:21
您是否正在尝试查找高度与目标值相交的两个连续行/行?在这种情况下,您可以只存储getline()迭代之间的先前高度。然后,在任何一行上,如果当前高度大于目标高度,并且前一行小于目标高度,或者反之亦然,那么您已经越过了目标高度,并输出您需要输出的任何内容(可能会保存上一行,以便您可以插入经度/纬度)。
https://stackoverflow.com/questions/9280776
复制相似问题