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))?
答案 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 。