【发布时间】:2014-03-23 10:17:34
【问题描述】:
我很难理解大 O,我无法完全理解我阅读和观察用于查找函数大 O 的多种方式。似乎每个视频或帖子的处理方式都略有不同。
一些:逐行计算操作。 其他、计数分配、乘法和加法。
我知道这个问题可能会被否决/关闭,但我觉得我真的需要一个专门针对我的问题的答案才能完全理解它。
在这个取自http://i.imgur.com/u0dUTlK.png的伪代码中
function sum(list):
sum = 0;
foreach element in list:
current = element
add current to sum
sum = sum * 1
return sum
endfunction
作者指出时间是1 + n * 2 + 2,因为it sets sum to 0, which takes one operation、it iterates over the list, performing two operations each time和then, it performs two more operations。
我不一定看到作者是怎么得到两个运算的,而不是3个,也就是说……current = element是一个运算,而在我看来add current to sum是两个运算(赋值和加法)。还有,sum = sum * 1 作者说这是一个操作,但我相信它是两个,return sum 另一个操作。因此,时间应该是1 + n * 3 + 3。
如果我不明白为什么这应该是两个操作,或者如果我真的是三个,请告诉我?
另外,从阅读中我注意到大多数人不倾向于将比较作为一种操作。可以省略比较吗?
最后,http://isites.harvard.edu/fs/docs/icb.topic780601.files/time_analysis_matrix_multiplication.pdf 的页面似乎是我找到的最有用的参考资料,但他们以完全不同的方式计算 Big O。他们计算加法、乘法和赋值(再次进行比较),然后将它们加在一起。
代码:
for ( int i = 0; i < n; i++ ) {
for ( int j = 0; j < n; j++ ) {
c[i][j] = 0;
for ( int k = 0; k < n; k++ ) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
上面写着n^3 multiplications...2n^3 + n^2 + n additions...n^3 + 2n^2 + n + 1 assignments...
删除系数和除最大项之外的所有项:
它说
O(n^3) multiplications + O(n^3) additions + O(n^3) assignments = O(n^3) overall time complexity.
添加这些时,技术上是 n^3 + n^3 + n^3 = 3n^3 并删除系数,这给我们留下了 n^3?我之所以问,是因为我看不出n^3 + n^3 + n^3 = n^3 的数学原理。
我发现这样做最有帮助的方法是哈佛的页面如何做到这一点:计算加法、乘法和赋值。我想知道是否有很多方法可以做到这一点,如果这是一种每次都能产生正确答案的方法?这是因为对于第一个伪代码示例,我们得到的方程会有所不同(预先去除系数和除最大值之外的所有项)。
因此,如果我按照哈佛文档中的方式处理第一个伪代码示例,我会得到:
Multiplications: sum * 1... happens 1 time.Additions: add current to sum, happens n times.Assignments: sum = 0... happens 1 time. current = element, happens n times... add current to sum... happens n times.1 multiplication + n additions + 1 + n + n assignments = 2 + 3nRemoving coefficients and all but largest term: O(n).
请注意,我没有在等式中包含 return 语句,也没有包含元素递增时发生 n 次的加法。真的,我不知道我需要保留什么,需要丢弃什么。
有人可以告诉我如何能够做到以上,但正确吗?我应该省略什么,我应该保留什么?找到大 O 的最简单方法是什么?像第一个例子一样,像哈佛的例子一样,还是其他方式?我觉得我可以最好地与哈佛的例子联系起来,但是,我需要知道这样做时的规则是什么。
谢谢。
【问题讨论】:
-
您能否接受答案或提供反馈,以便完成此问题?谢谢。