循环迭代相关集合的时间复杂度

时间:2012-10-22 23:18:23

标签: algorithm big-o time-complexity

我再次提出基本问题:(

如果我有下一个伪代码:

iterate over set (A)
    //some *O(1)* operations

iterate over set (B)
    //another *O(1)* operations

据我所知,时间将是 O(numberOfElementsInA + numberOfElementsInB)

但是,如果我知道 B A 的子集, numberOfElementsInA 总是大于或等于 numberOfElementsInB ,我可以通过只写 O(numberOfElementsInA)来缩短时间吗?

1 个答案:

答案 0 :(得分:4)

是的,你是对的。

这是因为numberOfElementsInA + numberOfElementsInB <= 2 * numberOfElementsInA,而definition of big O notation来自O(numberOfElementsInA)c=2N}


编辑:确切地说,每个循环都是O(numberOfElementsInSet_i) - 因此每个循环都有常量c_i, N_i,每个T(loop_i) <= numberOfElementsInSet_i * c_i numberOfElementsInSet_i > N_i }。
因此:

for each numberOfElementsInSet_1 > max{N1,N2}:
T(loop_1) + T(loop_2) <= numberOfElementsInSet_1 * c_1 + numberOfElementsInSet_2 * c_2
<= numberOfElementsInSet_1 * c_1 + numberOfElementsInSet_1 * c_2 //set1 is bigger
<= 2 * numberOfElementsInSet_1 * max{c_1,c_2}

现在我们有一个正式的证明,即O(numberOfElementsInSet_1)N = max{N1,N2}c = max{c_1,c_2} * 2

的循环也在一起