簡體   English   中英

了解樹型數據結構的運行時

[英]Understanding the run time for a tree type data structure

我有一個數據結構,它是一棵樹,每個父級可以有無限多個孩子,樹的最大深度是4。每個級別是一個不同的類。

我的朋友寫了一個遍歷的算法,它由for循環組成,偽代碼如下:

root = tree.root();
for (int i = 0; i < root.children_size(); i++)
    child1 = root.child(i);
    for(int j = 0; j < child1.children_size(); j++)
        child2 = child1.child(j);
        for(int k = 0; k < child2.children_size(); k++)
            child3 = child2.child(k);

他聲稱因為有3個for循環,所以該算法的運行時間為O(n3)。 當我問他什么是n時,他說的是for循環的數量,這沒有意義,因為n必須是樹中的結構。 我聲稱n是樹中整個節點的數量,該算法的運行時間為O(n),因為運行時間將為O(root.children_size + child1.children_size + child2.children_size)。

我對運行時間的假設是正確的O(n),還是我的朋友O(n ^ 3)?

是的,你是對的 。 您實際上是在使用深度優先搜索 ,該深度訪問僅精確訪問每個節點一次(即dfs的最壞情況),因此復雜度為O(N)。就您的朋友而言,我無法理解他用n表示什么,因為深度(這是for循環的數量)在這里是固定的。

你是對的。 訪問每個節點一次將使其變為O(N),其中N是總數。 樹中的節點數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM