我有n个数据数组,每个数组都按照相同的标准排序。
在几乎所有情况下,阵列数量都不会超过10,因此数量相对较小。但是,在每个数组中,可以是大量的对象,对于我正在寻找的算法,应该将其视为无限。
我现在想要将这些数组视为一个数组。但是,我确实需要一种方法,尽可能快地检索给定范围内的对象,而不触及范围之前的所有对象和/或范围之后的所有对象。因此,不能迭代所有对象并将它们存储在一个单独的数组中。具有低起始值的提取也比具有高起始值的提取更可能。所以例如获取对象[20,40]比获取对象[1000,1020]更有可能,但它可能会发生。
范围本身将非常小,大约20个对象,或者可以增加,如果与性能相关,只要这不会达到内存限制。所以我猜想还有几百件物品也可以。
示例: 3个数组,每个包含几千个entires。我现在想要获得范围[60,80]中的整体对象,而不接触每个集合中的上部60个对象,也不接触数组中对象80之后的所有对象。
我正在考虑某种组合的,修改过的二进制搜索。我目前的想法如下(注意,这还没有完全考虑过,这只是一个想法):
我的问题是:
提前做任何想法或帮助!
答案 0 :(得分:2)
人们通常称这个问题为“多个排序数组联合中的选择”。 One of the questions in the sidebar是关于两个排序数组的特例,而this question是关于一般情况的。在组合答案中出现了几种基于比较的方法;他们或多或少必须确定每个单独阵列中较低端点的位置。您的二分查找答案是更好的方法之一;由于弗雷德里克森和约翰逊,有一个渐近更快的算法,但它很复杂,对于小排名来说显然不是一个改进。