两个排序数组联合中的第k个最小元素

时间:2013-10-04 14:51:24

标签: arrays algorithm sorting time-complexity

I could not understand the third algorithm here, which is the best O(lg m + lg n). 他们在代码中说如果Ai< Bj => Ai< B(J-1)。那个怎么样 ? ]

考虑到问题O(lg m + l g n)会更快还是O(k.log(min(m,n))?

1 个答案:

答案 0 :(得分:3)

保持不变i+j=k-1让我们了解一些可能的情况。如果我们找到了正确的 i j ,则表示其中一个是第k个元素。它尊重以下条件之一:

  • 如果Bj-1 < Ai < Bj,那么Ai必须是第k个最小的
  • 或者如果 Ai-1 < Bj < Ai,那么Bj必须是第k个最小的。

如果没有,我们就有A[i]<B[j]但不是A[i]>B[j-1] =&gt;您询问如何可能的情况。 因此A[i] < B[j] => A[i] < B[j-1]导致第一个条件没有发生。

问题的第二部分

  

O(lg m + 1 g n)> O(k.log(min(m,n))

这是我的意见,我会告诉你原因。如果 m n 中的一个比另一个(假设n <&lt; m)大得多,我们必须将log m + log n与{{{ 1}}。

要实现平等,我们需要k * log(n)。但由于k是一个常数并且可以是一个小数,我们认为n <&lt;&lt; m,这将导致log m=(k-1)log n

但是,两种复杂性之间的差异可以证明很小,取决于 n m