Algorithm 查找包含总体A中的最大元素和总体B中的零元素的标量间隔
给定两个大的标量(浮点)值集A和B,您将使用什么算法来查找(标量)范围[x0,x1],其中包含来自B的零个元素和来自A的最大元素数Algorithm 查找包含总体A中的最大元素和总体B中的零元素的标量间隔,algorithm,data-structures,heap,intervals,Algorithm,Data Structures,Heap,Intervals,给定两个大的标量(浮点)值集A和B,您将使用什么算法来查找(标量)范围[x0,x1],其中包含来自B的零个元素和来自A的最大元素数 排序复杂性(O(n log n))不可避免吗?创建一个包含所有值的列表,其中每个值都标记有两个计数:一个与集合a相关的计数,另一个与集合B相关的计数。当值来自集合a时,最初这些计数为1和0,当值来自集合B时为0和1。因此,此列表中的条目可以是元组(value、countA、countB)。此操作是O(n) 对这些元组进行排序。O(非登录) 将具有重复值的元组合并到一
排序复杂性(O(n log n))不可避免吗?创建一个包含所有值的列表,其中每个值都标记有两个计数:一个与集合a相关的计数,另一个与集合B相关的计数。当值来自集合a时,最初这些计数为1和0,当值来自集合B时为0和1。因此,此列表中的条目可以是元组(value、countA、countB)。此操作是O(n) 对这些元组进行排序。O(非登录) 将具有重复值的元组合并到一个元组中,并在相应计数器中累积值,以便元组告诉我们值在集合A中出现了多少次,在集合B中出现了多少次。O(n) 按排序顺序遍历此列表,并保持一系列相邻元组中countA的最大计数和,其中countB始终为0,以及该范围的最小值和最大值。O(n) 排序是时间复杂度的决定因素:O(nlogn)。在O中对A和B进行排序(| A | log | A |+| B | log |)。然后应用以下算法,其复杂性为O(|A |+|B |):
i=j=k=0
最佳间隔=(0,1)
而i
在第一次检查时,它可能看起来是二次的,但请注意,我们从不减少
j
和k
——它实际上只是一个带有三个指针的线性扫描。您能否添加一个示例,以及任何现有的代码/方法?
i = j = k = 0
best_interval = (0, 1)
while i < len(B) - 1:
lo = B[i]
hi = B[i+1]
j = k # We can skip ahead from last iteration.
while j < len(A) and A[j] <= lo:
j += 1
k = j # We can skip ahead from the above loop.
while k < len(A) and A[k] < hi:
k += 1
if k - j > best_interval[1] - best_interval[0]:
best_interval = (j, k)
i += 1
x0 = A[best_interval[0]]
x1 = A[best_interval[1]-1]