繁体   English   中英

Linkedlist实现中的时间复杂度差异(迭代VS递归)?

[英]Time complexity difference in Linkedlist implementation (Iterative VS Recursive)?

在获取Linkedlist中的节点数的这两个实现中,时间复杂度是否会发生变化?

 private int getCountIterative() {

    Node start = head;
    int count = 0;
    while (start != null)
    {
        count++;
        start = start.next;
    }
    return count;
}


private int getCountRecursive(Node node) {
    if (node == null)
        return 0;
    return 1 + getCountRecursive(node.next);
}

不,时间复杂度不会改变。

但是,递归解决方案的性能和总体运行时间通常会更糟,因为Java不执行尾调用优化

TL; DR:它也是同样复杂的

要计算操作的复杂性(如搜索或排序算法 - 或您的示例,计数), 您需要确定主导操作

对于搜索和排序,通常是比较。 你的主导行动是什么? 我们假设它是node.next ,查找下一个节点。

然后,两种方法都有O(n)运算 - 因此它具有相同的复杂性。

请注意,这段时间的复杂性是一种简化。 忽略了一些因素,比如函数调用的开销。 因此,它具有相同的复杂性,但这并不一定能告诉您哪个版本更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM