假设我在区间[0,1]中有N个点并且我已经将这个单位区间划分为n个子区间,比如[0,x1),[x1,x2),...,[xn- 2,xn-1),[xn-1,1]然后我需要确定这N个点中的每一个属于哪个子区间。完成这项工作的最佳算法是什么?这些子间隔不均匀分布,但它们是已知的。 N是O(1百万),n是O(1 k)。
答案 0 :(得分:1)
假设每个区间的下限,即0,x1,x2,x3 ....按顺序,保留数组中区间的第一个值(即下限),然后使用二进制搜索来定位更大的索引或者小于n所属的数字。
答案 1 :(得分:1)
IF点未排序,请按坐标对其进行排序。
对包含间隔列表的点列表进行合并(如MergeSort中的合并算法)。
复杂性为O(NlogN + N + n)
(如果两个列表都已排序,则为O(N + n)
与@Mukul Varshney方法复杂度O(Nlogn)
比较并为您的案例选择最佳变体