簡體   English   中英

這個 C++ 代碼的時間復雜度是多少

[英]What is the time complexity of this C++ code

我剛剛開始學習時間復雜度,我如何找到以下代碼的時間復雜度

vector<int> nums = {3,2,4,5,1,6,7,1,8,2,6,9} //say size n;
int j = 0;
for(int i=n-1;i>j;i--)
{
    if(nums[i]>nums[j])
    {
         swap(nums[i],nums[j]); //simple swap function
         reverse(nums.begin()+j+1,nums.end());  //std::reverse function from STL
         return;
     }
}

單獨考慮循環時,時間復雜度為 O(n)。 但是考慮里面的函數和返回呢? 我想知道它如何影響時間復雜度。
任何幫助表示贊賞,謝謝

這是 O(N)。

  • 在理想情況下,當每個值都為num[i] > num[0] ,for 循環將迭代序列,不會發生交換或反轉,您就完成了。 在)。
  • 任何配對導致num[i] > num[0]true 的情況下,您將交換一對(O(1)),迭代剩余的序列並反轉它們(O(N)),並且再次,您完成了艱難的return; .

即,這是 O(N)。

交換函數本質上是 O(1) 作為交換兩個索引的一組操作數。 另一方面,反向函數是 O(n),因為它遍歷整個數組以將其反向,如文檔所示

因此,考慮到您要反轉數組 n 次(假設 j 在 for 循環中可以為 0),如果您沒有 return 語句,我會說您的復雜性達到 O(n^2)。

使用 return 語句,您不會在每次迭代中反轉數組,而只是在退出后反轉一次。 所以 O(n)(for loop) + O(n)(reverse) = O(n)

暫無
暫無

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

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