Algorithm 查找包含总体A中的最大元素和总体B中的零元素的标量间隔

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(非登录) 将具有重复值的元组合并到一

给定两个大的标量(浮点)值集A和B,您将使用什么算法来查找(标量)范围[x0,x1],其中包含来自B的零个元素和来自A的最大元素数


排序复杂性(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]