【发布时间】:2014-09-09 00:42:08
【问题描述】:
所以多年来,在使用算法之后,我遇到了一个关于算法渐近行为的问题。
在数学中,可以将 Big-W(hatever) 定义为“根据输入大小‘n’测量的 f(n) 的渐近行为”。我想到的 Big-O 的定义是(释义):
In order for f(n) to be O(g(n)) we need to find a constant that multiplied by g(n) the expression 'f(n) < c*g(n)' from an initial input (i.e. n0) and forever.
正如我们所见,一切都是根据“n”(输入)来衡量的。
我的问题是,如果算法的输入大小是一个矩阵(本身已经平方),这是否意味着如果我使用两个嵌套的“for”循环来遍历它,算法仍然表现得像 O( n) 算法?
示例:
1 1 1 1 0 1
2 2 0 2 1 0
3 3 1 3 2 1
0 4 2 4 3 2
1 5 3 5 4 0
2 6 0 6 5 1
for(var row=0; row<matrix.rows; row++){
...
for(var col=0; col<matrix.columns; col++){
...
}
}
我的逻辑告诉我这是一个 O(n^2) 但数学非常具体,行为是根据输入大小来衡量的。所以如果这是O(n ^ 2)就可以了。但让我感到困惑的是,如果我们从不同的角度看待问题,对我来说一切都会变得一团糟:如果我只遍历行,现在看起来算法的输入是 cols*rows (矩阵)和因为我只是遍历行,所以可以说它的行为类似于 O(log(n))。
有人能解释一下这样的事情是如何工作的吗?是 O(n) 还是 O(n^2)?不同维度(即立方体等)是否相同?
附:希望我的解释正确。
【问题讨论】:
标签: algorithm big-o asymptotic-complexity