我有许多带有排序数据的数组。我需要在这个数组中执行二进制搜索。如果此数组中的键范围不相交,则可以按范围对数组进行排序,然后像使用单个数组一样执行二进制搜索。但就我而言,这个数组中的键范围可以重叠。在这种情况下,只能执行过滤以排除某些数组,然后对另一部分进行排序。在我的情况下,大多数数组不重叠,所以过滤,大多数时候,只会返回一个数组,但坏数据仍然有可能破坏性能。
在这种情况下是否可以使用更好的算法?可以稍微修改数组,添加一些元数据或链接到其他数组。
更新 此阵列是由磁盘存储支持的数据页。我为此使用内存映射文件。我可以非常快速地对页面内的数据进行排序,因为此过程不涉及复制。但是要合并两个页面,我需要在页面之间复制大量数据。我有非常大量的数据,TB!但是每页只有8Mb,所以可以快速搜索。不时添加到存储中的新页面。Pages 包含时间序列数据,因此它已经部分排序,并且新数组在大多数情况下不会与旧数据重叠。