O(N)+ O(M)和O(N + M)之间有什么区别。有没有?

时间:2014-08-16 06:47:37

标签: big-o time-complexity asymptotic-complexity

我正在为面试练习解决问题,而我似乎无法找出以下问题的时间和空间复杂性的答案:

  

给定两个已排序的链接列表,按排序顺序将它们合并到第三个列表中。我们假设我们使用降序排序。

我遇到的答案之一,显然不是最有效的答案,是以下递归解决方案:

Node mergeLists(Node head1, Node head2) {
    if (head1 == null) {
        return head2;
    } else if (head2 == null) {
        return head1;
    }

    Node newHead = null;
    if(head1.data < head2.data) {
        newHead = head1;
        newHead.next = mergeLists(head1.next, head2);
    } else {
        newHead = head2;
        newHead.next = mergeLists(head1, head2.next);
    }

    return newHead;
}

现在,当我分析这个功能的复杂性时,我遇到了一个问题。我不确定它是O(M + N)还是O(M) + O(N)。我只是无法得到一个直观的答案。对我来说,这个函数的运行时和空间复杂度是O(N) + O(M)O(max(N,M))似乎是合乎逻辑的,因为较大的值会驱动渐近曲线(或递归调用和堆栈帧创建)。

总结一下:

在大写符号中, O(N+M)O(N) + O(M)之间有什么区别?有没有?如果它们不同,我会很感激,如果有人可以提供两者的简单例子。

1 个答案:

答案 0 :(得分:8)

O(N) + O(M)表示某些cN + dMcd限定的函数。

O(N + M)表示e(N + M)为某些e限定的函数。

它们是等价的,因为:

某些cN + dM <= (c + d)(N + M)c

d

某些e(N + M) <= eN + eM

e