簡體   English   中英

這個函數的時間復雜度是多少?

[英]What is the time complexity of this function?

我想問一下我的功能的時間復雜性。 下面是我用C ++編寫的函數。

void List::swap(List& other)
{
     List temp;
     Iterator r = begin();
     Iterator i = other.begin();

     while(!i.equals(other.end()))
     {
         temp.push_back(i.position->data);
         i = other.erase(i);
     }

     while(!r.equals(end()))
     {
         other.push_back(r.position->data);
         r = erase(r);
     }

     r = temp.begin();
     for(r; !r.equals(temp.end()); r.next())
     {
         push_back(r.position->data);
     }
}

功能目的是交換兩個鏈表的元素。 練習要求此功能在O(1)時間內執行。 因為我使用了3個循環,所以我不確定如何計算我的函數的時間復雜度。

您可以將增長順序視為問題復雜性的上限。

第一個while循環是O(other.size())

第二個while循環是O(this.size())

第三個循環是O(other.size())

所以總復雜度是O(2 * other.size()+ this.size()),它更准確地用O表示法描述為O(m + n)或O(n),這取決於兩者的大小列表彼此獨立。

既然你在談論Big Oh表示法,那么復雜性就是最大值(loop1的復雜性,loop2的復雜性,loop3的復雜性)。 由於您使用的是3個循環,因此復雜性絕對不會是O(1)。 提示:由於這些是鏈表,您只需要交換頭指針。

暫無
暫無

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

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