通常,一些答案提到给定的解决方案是线性,或者另一个解决方案是二次。
如何区分/识别什么是什么?
对于像我这样仍然不知道的人,有人可以解释这个,这是最简单的方法吗?
答案 0 :(得分:50)
当一个方法花费的时间随着所涉及的元素数量线性增加时,该方法是线性的。例如,打印数组元素的for循环大致是线性的:
for x in range(10):
print x
因为如果我们打印范围(100)而不是范围(10),则运行它所需的时间是10倍。您将经常看到写为O(N),这意味着运行算法的时间或计算工作量与N成正比。
现在,假设我们要打印两个for循环的元素:
for x in range(10):
for y in range(10):
print x, y
对于每个x,我循环y次10次。出于这个原因,整个过程经历了10x10 = 100次打印(您只需运行代码即可看到它们)。如果不使用10,我使用100,现在该方法将执行100x100 = 10000。换句话说,该方法为O(N * N)或O(N²),因为每次增加元素数量时,计算工作量或时间将增加为点数的平方。
答案 1 :(得分:28)
它们必须指运行时复杂性,也称为Big O表示法。这是一个非常大的主题要解决。我将从维基百科上的文章开始:https://en.wikipedia.org/wiki/Big_O_notation
当我研究这个主题时,我学到的一件事就是用不同大小的数据集来绘制算法的运行时间。在绘制结果图表时,您会注意到线条或曲线可以分为几个增长顺序中的一个。
了解如何对算法的运行时复杂性进行分类将为您提供一个框架,以便您了解算法在时间或内存方面的扩展方式。它将使您能够相互松散地比较和分类算法。
我不是专家,但这帮助我开始了兔子洞。
以下是一些典型的增长订单:
如果维基百科文章难以接受,我强烈建议您在iTunes大学上观看有关该主题的一些讲座,并研究算法分析,大O符号,数据结构甚至操作计数等主题。
祝你好运!答案 2 :(得分:1)
您通常会根据输入大小n
(如果输入是数组或列表)来争论算法。对问题的线性解决方案是执行时间与n
一致的线性算法,因此x*n + y
,其中x
和y
是实数。 n
出现的最高指数为1:n = n^1
。
使用二次解,n
出现在一个术语中,其中2为最高指数,例如x*n^2 + y*n + z
。
对于任意n
,线性解决方案的执行时间比二次方案慢得多。
对于mor信息,请查看Big O Notation。
答案 3 :(得分:1)
您没有指定,但正如您提到解决方案,您可能会询问二次和线性收敛。为此,如果您有一个迭代的算法并生成一个收敛值的近似序列,那么当您可以显示
时,您就会得到二次收敛 x(n) <= c * x(n-1)^2
表示某些正常数c
。也就是说,迭代n+1
中的解决方案中的错误小于迭代n
处的错误的平方。有关更一般的收敛速度定义http://en.wikipedia.org/wiki/Rate_of_convergence