簡體   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