此问题的正确大O符号是什么?

时间:2018-11-03 18:53:48

标签: big-o notation

我和一个朋友就以下问题发生争执:

如果您对两个长度未知的数据集(例如排序数组m和n)进行二进制搜索,并且必须定义整个函数的时间复杂度,那将是什么?如果m> n是O(log(m + n))或O(log(m)),如果n> m是O(log(n))?

3 个答案:

答案 0 :(得分:0)

如果m> n则为O(log(m)),如果n> m则为O(log(n)),因为通常对于n个元素,我们具有O(log(n))。最坏的情况意味着在最坏的情况下,如果这两个元素中的任何一个最大,那么它将到达第n个元素或第m个元素。注意,这是同步的意思,如果是异步的,则为log(m)+ log(n)

答案 1 :(得分:0)

您在两个独立的阵列上运行两个独立搜索,而不是在一个大型阵列上运行一个搜索。 因此,这两个操作的复杂度只是加在一起-O(log(n))+ O(log(m))。如前所述,如果n> m,则m的复杂度可以忽略不计,您将剩下O(log(n)),反之亦然。

答案 2 :(得分:0)

您可以简单地回答:O(log(m * n))= O(log(m)+ log(n))= O(log(m))+ O(log(n))= Math.max (O(log(m)),O(log(n)))。