Big o O(N)和#x2B;O(M)和O(N&x2B;M)。有吗?

Big o O(N)和#x2B;O(M)和O(N&x2B;M)。有吗?,big-o,time-complexity,asymptotic-complexity,Big O,Time Complexity,Asymptotic Complexity,我正在为面试练习解决问题,但我似乎无法找到以下问题的时间和空间复杂性的答案: 给定两个已排序的链表,按排序顺序将它们合并到第三个列表中。假设我们使用的是降序 我遇到的一个答案(显然不是最有效的答案)是以下递归解决方案: Node mergeLists(Node head1, Node head2) { if (head1 == null) { return head2; } else if (head2 == null) { return head

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

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

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

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;
}
节点合并列表(节点头1、节点头2){
if(head1==null){
返回头2;
}else if(head2==null){
返回头1;
}
节点newHead=null;
if(head1.data
现在,当我分析这个函数的复杂性时,我遇到了一个问题。我不确定是
O(M+N)
还是
O(M)+O(N)
。我无法得到一个直观的答案。在我看来,这个函数的运行时和空间复杂性是
O(N)+O(M)
O(max(N,M))
,因为较大的值将驱动渐近曲线(或递归调用和堆栈帧创建)

总而言之:

在大Oh表示法中,O(N+M)
O(N)+O(M)
之间有什么区别?如果它们不同,如果有人能提供两者的简单示例,我将不胜感激。

O(N)+O(M)
对于某些
c
d
而言,是指受
cN+dM
约束的函数

O(N+M)
对于某些
e
,表示受
e(N+M)
约束的函数

它们是等效的,因为:


cN+dM您在哪里看到“O(n)+O(m)”?我们正在检查每个列表的所有节点,无论m和n是什么?显然,我不能100%确定这两个答案中的哪一个是答案,因为我在这里问了一个问题:)从技术上来说,正如我上面所说,我认为答案是O(max(N,M)),因为较大的值将是渐近界。