假设-
0 < c <0.5 , ?(?) = ?((1 − ?)?) + 1
0.5 <= c <1 , ?(?) = ?(??) + 1
你可以找到上下界如下-
对于下界-
我们必须选择c 的值,这样我们才能得到T(cn) 或T((1-c)n) 的最小值。
可以简单地检查为c=0.5,因为T(cn) 或T((1-c)n) 的值随着c 接近0.5 而减小。
因此,
T(n) = T(n/2) + 1
//which implies
T(n) = T(n/(2^k)) + k
现在,让n = 2^x
或者,x = log(n) 给我们
T(n) = T(1) +log(n) //lower bound
对于上限 -
根据允许的值,可以有两个答案-
1)cn 或 (1-c)n 在其函数中可以有十进制值-
现在可以选择c 的值,使cn 或(1-c)n 接近n 通过使用c 接近1 但略低(例如,c = 0.9999999999)@987654340 @ 和价值接近 0 为 (1-c)n。
在这种情况下,上限将是无穷大,因为函数将继续计算T(x),其中x 接近n。
2)cn或(1-c)n取底价 -
如果你不知道什么是底值,它是十进制数的截断值,其中小数部分被删除或 编码术语 你 typecast float 到 @987654349 @。
现在,cn 或 (1-c)n 的最大值可以为 n-1,因为 c 不能等于 zero 或 one。
因此,
T(n) = T(n-1) + 1
T(n-1) = T(n-2) + 1
等等。
给出,
T(n) = T(0) + n
因此具有 O(n) 的时间复杂度。
3)cn或(1-c)n取ceil值-
如果你不知道什么是 ceil 值,那么在编码术语中你 typecast float 到 integer 并添加 1 到它。
现在,对于c 在cn 和(1-c)n 中分别接近1 和0,它们的ceil 值是n。
因此,
T(n) = T(n) + 1
它的复杂性是无限的。