Big o 什么';s总和i的复杂性=0->;n(n_i*i))

Big o 什么';s总和i的复杂性=0->;n(n_i*i)),big-o,Big O,这是一个我失败的测试,因为我认为这个复杂度应该是O(n),但似乎我错了,它是O(n^2)。为什么不是O(n) 序言,复杂性理论不是很好,但我想尝试一下 我认为令人困惑的是,这不是一个时间复杂性问题,而是功能复杂性问题 因此,对于简单的部分,i只上升到n,即1,2,3…n,那么对于ai,所有条目都必须大于0,这意味着a可能类似于2,5,1。。。n次。如果把它们相乘,n*n=O(n2) 最好的情况是,如果aa是1,1,1,这将复杂性降低到O(n),但平均情况是n,所以你可以得到平方。序言,复杂性理论

这是一个我失败的测试,因为我认为这个复杂度应该是O(n),但似乎我错了,它是O(n^2)。为什么不是O(n)


序言,复杂性理论不是很好,但我想尝试一下

我认为令人困惑的是,这不是一个时间复杂性问题,而是功能复杂性问题

因此,对于简单的部分,
i
只上升到n,即1,2,3…n,那么对于ai,所有条目都必须大于0,这意味着
a
可能类似于2,5,1。。。n次。如果把它们相乘,n*n=O(n2)


最好的情况是,如果a
a
是1,1,1,这将复杂性降低到O(n),但平均情况是n,所以你可以得到平方。

序言,复杂性理论不是很好,但我想尝试一下

我认为令人困惑的是,这不是一个时间复杂性问题,而是功能复杂性问题

因此,对于简单的部分,
i
只上升到n,即1,2,3…n,那么对于ai,所有条目都必须大于0,这意味着
a
可能类似于2,5,1。。。n次。如果把它们相乘,n*n=O(n2)


最好的情况是如果a
a
是1,1,1,这将复杂性降低到O(n),但是平均情况是n,所以你得到平方。

除非提到a[i]是O(n),它肯定是O(n)

除非提到a[i]是O(n),它肯定是O(n)

这里是实现O(n*n)的另一个尝试如果则应返回sum

int sum = 0;
for(int i = 0; i<=n; i++){
   for(int j = 0; j<=n; j++){
        if(i == j){
            sum += A[i] * j;
        }
    }
return sum;
int和=0;

对于(inti=0;i这里,如果sum应返回另一个实现O(n*n)的尝试

int sum = 0;
for(int i = 0; i<=n; i++){
   for(int j = 0; j<=n; j++){
        if(i == j){
            sum += A[i] * j;
        }
    }
return sum;
int和=0;

对于(int i=0;i首先,请注意,问题并不是问函数计算
f(n)
的时间复杂度是多少,而是问函数
f(n)
本身的复杂度。您可以考虑
f(n)
作为其他算法的时间复杂度,如果您更愿意谈论时间复杂度。
这确实是
O(n^2)
,当序列
a_i
由一个常数限定且每个
a_i
至少为1时。

通过假设,对于所有
i
a_i首先,请注意,问题不是问函数计算
f(n)
的时间复杂度是多少,而是问函数
f(n)
本身的复杂度
作为其他算法的时间复杂度,如果您更愿意谈论时间复杂度。
这确实是
O(n^2)
,当序列
a_i
由一个常数限定且每个
a_i
至少为1时。


根据假设,对于所有
i
a_我欢迎使用堆栈溢出!这个问题从何而来?除了这里提供的内容之外,我们还知道关于a_i的任何信息吗?问题不是复杂性,而是大O限制。回答问题说明
min(a_i)*sum(1,2,…,n)
这个问题来自我的考试。所有的问题都是独立的,所以我们不知道关于a_的其他任何事情。问题是,当我看到这个问题时,我想到的第一件事是n个元素的a_I数组,所以我想这可能是一个for循环,对于n范围内的I,它只做a[I]*I。为什么不正确?复杂性只是O(n)因为它只做了n次,对吗?欢迎来到堆栈溢出!这个问题是从哪里来的?除了这里提供的内容之外,我们还知道关于a_i的任何东西吗?问题不是复杂性而是大O限制。回答问题注释
min(a_i)*sum(1,2,…,n)
这个问题来自我的考试。所有的问题都是独立的,所以我们不知道关于a_的其他任何事情。问题是,当我看到这个问题时,我想到的第一件事是n个元素的a_I数组,所以我想这可能是一个for循环,对于n范围内的I,它只做a[I]*I。为什么不正确?复杂性只是O(n)因为它只做了n次,对吗?这是我最初的想法,但你不能把总和限制在O(n^2)除非你知道单个项是什么。例如,如果a_n=n^1000表示每个n怎么办?@templatetypedef你误解了大o表示法和函数。a_i是常数,问题是f的大小如何随着n趋于无穷大而变化。注意
min(a_i)*sum(1,2,…,n)
答案是a_i=每个指数i的对数n。在这种情况下,总和将是θ(n logn)。换句话说,如果序列的项是用n定义的,那么总和的渐近增长将产生不同的值。这是我最初的想法,但你不能将总和限制在O(n^2)除非你知道单个项是什么。例如,如果a_n=n^1000表示每个n怎么办?@templatetypedef你误解了大o表示法和函数。a_i是常数,问题是f的大小如何随着n趋于无穷大而变化。注意
min(a_i)*sum(1,2,…,n)
对于每个索引i,答案都会超过a_i=logn。在这种情况下,总和将是θ(n logn)换句话说,如果序列的项是用n来定义的,那么和的渐近增长将得到不同的值。我不确定这是否正确。我想问题是关于f(n)给出的和的值,而不是计算f(n)所需的时间我不确定这是否正确。我想问题是问f(n)给出的和的值,而不是计算f(n)所需的时间。这是有意义的。我知道,O(n)是最有可能的,但这应该给出O(n*n)。我知道,O(n)是最有可能的,但是,这应该给出O(n*n)。
1 + 2 + ... + n >= n / 2 + (n / 2 + 1) + ... + n >= (n / 2) * (n / 2) = n^2/4