Algorithm 求和(n)θ(n^2)如何根据它的公式,但θ(n)ij,我们只是把它看作一个for循环?

Algorithm 求和(n)θ(n^2)如何根据它的公式,但θ(n)ij,我们只是把它看作一个for循环?,algorithm,time-complexity,big-theta,Algorithm,Time Complexity,Big Theta,我们的教授和各种材料说总和(n)=(n)(n+1)/2,因此是θ(n^2)。但直觉上,我们只需要一个循环就可以找到前n项的和!所以,它一定是θ(n)。我想知道我在这里遗漏了什么 此代码的运行时间是Θ(1)(假设加法/减法和乘法是常数时间操作): 您所描述的以下伪代码的运行时间实际上是Θ(n): 下面是另一种计算它的方法,它的运行时间为Θ(n²): 所有这三个代码块计算自然数的和,从1到n 这个Θ(n²)循环可能就是要求您分析的类型。每当您有表单的循环时: for i from 1 up to n

我们的教授和各种材料说总和(n)=(n)(n+1)/2,因此是θ(n^2)。但直觉上,我们只需要一个循环就可以找到前n项的和!所以,它一定是θ(n)。我想知道我在这里遗漏了什么

此代码的运行时间是
Θ(1)
(假设加法/减法和乘法是常数时间操作):

您所描述的以下伪代码的运行时间实际上是
Θ(n)

下面是另一种计算它的方法,它的运行时间为
Θ(n²)

所有这三个代码块计算自然数的和,从
1
n

这个
Θ(n²)
循环可能就是要求您分析的类型。每当您有表单的循环时:

for i from 1 up to n:
    for j from i up to n:
        // Some statements that run in constant time

您的运行时间复杂度为
Θ(n²)
,因为这些语句执行的次数正好是
summation(n)

此代码的运行时间是
Θ(1)
(假设加法/减法和乘法是常数时间操作):

您所描述的以下伪代码的运行时间实际上是
Θ(n)

下面是另一种计算它的方法,它的运行时间为
Θ(n²)

所有这三个代码块计算自然数的和,从
1
n

这个
Θ(n²)
循环可能就是要求您分析的类型。每当您有表单的循环时:

for i from 1 up to n:
    for j from i up to n:
        // Some statements that run in constant time

运行时复杂性为
Θ(n²)
,因为这些语句执行的次数正好是
求和(n)

求和(n)为n(n+1)/2表示从1到n的数字之和。这是一个数学公式,可以不用O(1)时间的循环来计算。如果你迭代一个数组来求和所有值,这是一个O(n)算法。

求和(n)为n(n+1)/2表示从1到n的数字之和。这是一个数学公式,可以不用O(1)时间的循环来计算。如果你迭代一个数组来求和所有值,这是一个O(n)算法。

我认为问题在于你错误地假设求和公式具有时间复杂度θ(n^2)

公式中有一个n^2,但它不需要与n^2成比例的计算次数或时间量

正如您所说,在一个循环中,将所有内容加起来等于θ(n),因为您必须在循环中迭代n次


然而,计算方程n(n+1)/2的结果只会是θ(1),因为无论n有多大,它都是一次计算。

我认为问题在于,您错误地假设求和公式具有时间复杂性θ(n^2)

公式中有一个n^2,但它不需要与n^2成比例的计算次数或时间量

正如您所说,在一个循环中,将所有内容加起来等于θ(n),因为您必须在循环中迭代n次


然而,计算方程n(n+1)/2的结果只会是θ(1),因为无论n有多大,它都是一次计算。

所有这些答案都误解了这个问题,就像原始问题一样:重点不是测量求和整数的算法的运行时复杂性,这是关于如何对算法的复杂性进行推理,该算法在
1..n
中的
i
的每个过程中都需要
i
步骤。考虑插入排序:在每个步骤<代码> i <代码>中插入原始列表中的一个成员,输出列表是“代码> i>代码>元素长,因此需要使用<代码> i>代码>步骤(平均值)来执行插入。插入排序的复杂性是什么?它是所有这些步骤的总和,或者是
1..n中
i
i
的总和。这个和是
n(n+1)/2
,其中有一个
n^2
,因此插入排序是O(n^2)。

所有这些答案都误解了这个问题,就像最初的问题一样:重点不是测量求和整数的算法的运行时复杂性,这是关于如何对算法的复杂性进行推理,该算法在
1..n
中的
i
的每个过程中都需要
i
步骤。考虑插入排序:在每个步骤<代码> i <代码>中插入原始列表中的一个成员,输出列表是“代码> i>代码>元素长,因此需要使用<代码> i>代码>步骤(平均值)来执行插入。插入排序的复杂性是什么?它是所有这些步骤的总和,或者是
1..n中
i
i
的总和。这个和是
n(n+1)/2
,其中有一个
n^2
,因此插入排序是O(n^2)。

好的,我想我理解这里的要点。所以,求和(n)实际上是θ(n),不是吗?!因为,这个公式只是给出了最终的结果,在这里并不重要。@AnoopDixith计算
求和(n)
的时间取决于它是如何完成的,并且可以在
Θ(1)
中使用闭合公式完成。数学函数
求和
本身就是
Θ(n²)
,因为它的输出与
成比例增长。好吧,我想我理解这里的要点。所以,求和(n)实际上是θ(n),不是吗?!因为,这个公式只是给出了最终的结果,在这里并不重要。@AnoopDixith计算
求和(n)
的时间取决于它是如何完成的,并且可以在
Θ(1)
中使用闭合公式完成。数学函数
求和
本身就是
Θ(n²)
,因为它的输出与
成比例增长。
result = 0
for i from 1 up to n:
    for j from i up to n:
        result = result + 1 // This statement executes exactly n*(n + 1)/2 times
for i from 1 up to n:
    for j from i up to n:
        // Some statements that run in constant time