范围变化时的复杂性是多少?

What's the Complexity when range varies?

如果你有这样的算法,复杂度是多少:

int get(const std::vector<unsigned int>& v, int N)
{
    int a = 0;
    for(int i = 0; i < N; ++i)
        for(int j = 0; j < v.size(); ++j)
            for(int k = 0; k < v[j]; ++k)
                a += k * v[j];
    return a;
}

除了缺少有用性之外,如果一个因素的变化如此之大,您认为复杂性是什么?我的意思是,当 V = v.size() 时肯定是 O(N * V * ?),但那又如何呢?

复杂度为

O(N * V * std::numeric_limits<unsigned int>::max()) = O(N * V)

因为std::numeric_limits<unsigned int>::max()是一个常数。

取决于V[j] if v[j]=1, 则复杂度为O(N*V) if V[j]=N 则复杂度为O(N2 , V).

O(Nv.size() max(v)) ---> [O(N*v.size()*int.Max)]. 请注意您的代码可能是错误的,因为您没有收到任何异常 [try v[0] = int.Max]

此算法的复杂度未知。它类似于以下内容:

void foo(int arg) {
   int i = random() - arg;
   for (j = 0; j<i; ++j) 
        do_stuff();

无法评估此 foo() 的复杂性。