【发布时间】:2010-08-10 21:45:42
【问题描述】:
请帮我比较一下两种算法的复杂度。
O(N+1000) + O(M*log(M))O(N*5) + O(2000)
N = 100000 M = 100
看不懂,O(...)怎么办?我可以离开吗?然后就做...
(N+1000) + (M*log(M)) = 101200
(N*5) + 2000 = 502000
对吗?
谢谢
更新
我有任务,我有两个可能的解决方案。第一个解决方案的算法复杂度O(N) + O(M log(M)),见http://code.google.com/p/redis/wiki/ZunionstoreCommand;第二种解决方案由两种算法组成,复杂度为O(N)http://code.google.com/p/redis/wiki/SunionCommand 和O(N*M)http://code.google.com/p/redis/wiki/SinterCommand。我认为我可以用现实世界的值替换 N 和 M 来比较两种解决方案的速度。
【问题讨论】:
-
关于 Big-O 表示法的维基百科文章应该有助于澄清问题:en.wikipedia.org/wiki/Big_O_notation
-
Big-O 对实际数字毫无意义。即,如果你知道 N 和 M 是什么,那么一切都是常数。
-
@Brian:这里 N 和 M 的目的是提供幅度。例如,
O(k*n)的基数排序比快速排序的O(n^2)慢,直到 n 足够大。如果您有 n 大小的实际数字,那么您可以确定应该使用哪个。 -
@indiv 是的,但此时您不再使用 O,您实际上是在查看常量... Big-O 的重点是不要查看数字...
标签: algorithm complexity-theory