两个数组的所有可能产品中的第k个最大元素

时间:2017-07-16 08:38:22

标签: arrays algorithm

给定两个大小为A BN的数组K如何找到X = {i x j | i ∈ A and j ∈ B}集中的O(N^2 log(n))个最大元素?

我通过形成集合X,对其进行排序,然后在最后的K位置找到元素来提出minifyEnabled解决方案。是否有更好的解决方案,其复杂性较低?

2 个答案:

答案 0 :(得分:2)

给定候选编号,您可以使用A和B的排序表示中的两个指针来检查时间O(N)。它在集合中具有哪个等级{i x j | i∈A和j∈B}。因此,一种可能的解决方案是对ixj的值使用二进制搜索,运行时为O(N *(log N + log U))其中U是绘制A和B的Universe的大小。

答案 1 :(得分:1)

这里有一个悬而未决的成果 - https://en.wikipedia.org/wiki/Quickselect (注意最后一节 - 它也可能有最坏的情况表现O(n))

您只需使用所有产品创建数组,然后使用上述算法选择第k个元素。总计它将是O(n ^ 2)。

但我怀疑这里应该有更好的东西......