|
|
1
7
为了分析依赖于收敛的算法,似乎我们必须证明一些关于收敛速度的东西。 收敛通常有一个终止条件,用于检查我们的误差度量是否低于某个阈值:
通常,我们试图定义算法的收敛方式,通常是通过确定它是某个函数。 例如,我们可以证明算法的误差度量是迭代次数的函数,因此误差=1/2^i,其中i是迭代次数。 这可以根据迭代次数重新编写,如:迭代次数=log(1/E),其中E是所需的错误值。 因此,如果我们有一个在收敛循环的每次迭代上执行一些线性操作的算法(如上例所示),我们可以推测我们的时间复杂度为O(N*log(1/E))。我们函数的增长率取决于我们愿意容忍的错误量,以及输入大小。 所以,如果我们能够确定关于收敛行为的一些性质,比如它是误差的函数,或者输入的大小,那么我们可以进行渐近分析。 以PageRank为例,它是一种称为 power iteration 在其计算中使用,这是一种近似矩阵主特征向量的算法。收敛速度似乎可能是前两个特征值的函数(如链接所示)。 |
|
|
2
3
渐近符号不依赖于收敛。 根据 CLRS 本书(算法导论第三版第3章第43页):
您提到您的代码(或想法)具有不定式循环并继续满足条件,您将其命名为满足条件
汇聚
但在这个意义上,收敛与渐近符号无关,如
另一件事是真的,也许有时一个结果有更多的运行时间,但另一个结果有更少的运行时间。这与渐近分析无关。它是
最好的情况,最坏的情况
. 我们可以通过
|
|
|
3
1
从数学的角度来看,主要问题是
Rate of convergence
使用的方法。我不太熟悉数值方法,不能流利地谈论高于1维的问题(你可能更感兴趣的矩阵和张量)。但ley的另一个例子是
Equation Solving
比二等分,已在上面估计为
考虑
Newton method
假设我们试图找到一个精度为e=10e-8的所有浮点数的根。我们有平方作为收敛速度,所以我们有大约2*log(float\u range/e)循环迭代,这意味着与二分法算法的复杂性相同
希望这个例子对你有意义。 |
|
|
Matthew · 发现程序的时间复杂性 2 年前 |
|
|
TreasureGhost · 以下函数的时间复杂度是多少 2 年前 |
|
|
user129393192 · 这个问题的最优算法是什么? 2 年前 |
|
|
3366784 · 使用序列初始化字符串的时间复杂度是多少? 2 年前 |
|
|
data-oil · 在字符串列表中搜索的高效快捷方法 8 年前 |