Algorithm 求和(n)θ(n^2)如何根据它的公式,但θ(n)ij,我们只是把它看作一个for循环?
我们的教授和各种材料说总和(n)=(n)(n+1)/2,因此是θ(n^2)。但直觉上,我们只需要一个循环就可以找到前n项的和!所以,它一定是θ(n)。我想知道我在这里遗漏了什么 此代码的运行时间是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
Θ(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)实际上是θ(n),不是吗?!因为,这个公式只是给出了最终的结果,在这里并不重要。@AnoopDixith计算求和(n)
的时间取决于它是如何完成的,并且可以在Θ(1)
中使用闭合公式完成。数学函数求和
本身就是Θ(n²)
,因为它的输出与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