簡體   English   中英

理解這個問題的時間和空間復雜度

[英]Understanding the time and space complexity of this problem

我有以下代碼。 有人告訴我,它的時間復雜度是 O(n)。 但我很難理解如何。 對我來說,它似乎是 O(n) + O(n) + O(n) = O(3n),空間復雜度也是 O(3n),因為 3 個向量填充到 n 的大小。 我的理解正確嗎?

void productofself(std::vector<int> v)
{
    int multipliedProduct = 0;
    std::vector<int> left;
    std::vector<int> right(v.size());
    std::vector<int> result;
    for (int i = 0; i < v.size(); i++)
    {
        if (i == 0) 
        { 
            multipliedProduct = 1; 
        }
        else 
        {
            multipliedProduct *= v[i - 1];
        }
        left.push_back(multipliedProduct);
    }
   
    for (int i = v.size() - 1; i >= 0; i--)
    {
        if (i == v.size() - 1) 
        {
            multipliedProduct = 1;
        }
        else
        {
            multipliedProduct *= v[i + 1];
        }

        right[i]=multipliedProduct;
    }


    for (int i = 0; i < v.size(); i++)
    {
        result.push_back(left[i] * right[i]);
    }

}

我認為你錯過了漸近符號的重點。 該代碼O(3n) 但它也是 O(n) 而后者才是最重要的。

O(3n)O(n)根據定義是等價的。

我們說f(x)O( g(x) )如果存在兩個常數mk使得f(x) < m * g(x)對於所有x大於k 基本上f(x)O(g(x))如果對於足夠大的xf(x)總是小於一個常數因子乘以g(x)

因此,您可以在該定義中看到常量因子: m 洗滌時會出現像 3 這樣的比例因子。 存在一個m使得3 * n < m * n ,即任何大於 3 的數。所以函數f(n) = 3*nO(n)

暫無
暫無

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

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