我的算法

时间:2015-07-29 09:50:02

标签: big-o

我想在计算步骤的情况下比较三种算法,但我不太熟悉O符号。每种算法的计算步骤取决于三个参数(x,y,z):
算法1)number_of_steps = x ^ 2 * y * z - xyz
算法2)number_of_steps = x ^ 2 * y ^ 2 * z - xyz
算法3)number_of_steps = x ^ 2 * y ^ 2 * z ^ 2 - xyz
x,y和z之间没有太大的区别 - 可能其中一个值是另一个值的两倍或三倍,但不是更多。 它如何看待符号?我可以考虑一些解决方案:
O1(n)对比O2(n * y)对比O3(n * y * z)

O1(n ^ 4)与O2(n ^ 5)对比O3(n ^ 6) - 如果x,y和z几乎相等的话 或者只是 O1(x ^ 2 * y * z)与O2(x ^ 2 * y ^ 2 * z)对比O3(x ^ 2 * y ^ 2 * z ^ 2)
哪个是对的?

1 个答案:

答案 0 :(得分:0)

如果max(x,y,z)/ min(x,y,z)<= 3(或小于任何固定数字),那么你的复杂性是

算法1:O(x ^ 4)= O(y ^ 4)= O(z ^ 4)
算法2:O(x ^ 5)= O(y ^ 5)= O(z ^ 5)
算法3:O(x ^ 6)= O(y ^ 6)= O(z ^ 6)

如果您只知道x,y,z至少为2,那么您可以写

算法1:O(x ^ 2 * y * z)
算法2:O(x ^ 2 * y ^ 2 * z)
算法3:O(x ^ 2 * y ^ 2 * z ^ 2)

当然你总是可以像O(x ^ 2 * y * z - xyz)一样完整地写出它们,但更简单的版本在可能的情况下更好。