【发布时间】:2013-10-01 13:42:19
【问题描述】:
我有许多带有排序数据的数组。我需要在这个数组中执行二进制搜索。如果此数组中的键范围不相交,则可以按范围对数组进行排序,然后像使用单个数组一样执行二进制搜索。但就我而言,这个数组中的键范围可以重叠。在这种情况下,只能执行过滤以排除某些数组,然后对另一部分进行排序。 在我的情况下,大多数数组不会重叠,因此过滤在大多数情况下只会返回一个数组,但不良数据仍有可能破坏性能。
在这种情况下是否可以使用更好的算法?可以稍微修改数组,添加一些元数据或指向其他数组的链接。
更新 该数组是由磁盘存储支持的数据页。我为此使用内存映射文件。我可以非常快速地对页面内的数据进行排序,因为此过程不涉及复制。但是要合并两个页面,我需要在页面之间复制大量数据。 我有非常大量的数据,TB!但是每页只有8Mb,所以可以快速搜索。不时添加到存储中的新页面。页面包含时间序列数据,因此它已经部分排序,新数组大部分时间不会与旧数据重叠。
【问题讨论】:
-
您忘记添加问题了。如果您添加一个,我们可以尝试回答。
-
谢谢,我真的愿意 :)
-
我可能遗漏了一些东西,但你为什么不能单独对每个数组运行二进制搜索?
-
您希望我们改进您的过滤算法(选择要搜索的 [重叠?] 数组)还是整体结构?在后一种情况下,请说明您需要许多小数组来做什么。
-
我可以,但是对于每个数组我都知道键范围,我不需要全部搜索。