我再次提出基本问题:(
如果我有下一个伪代码:
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)来缩短时间吗?
答案 0 :(得分:4)
是的,你是对的。
这是因为numberOfElementsInA + numberOfElementsInB <= 2 * numberOfElementsInA
,而definition of big O notation来自O(numberOfElementsInA)
(c=2
,N
}
编辑:确切地说,每个循环都是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