我试图找出下一个等式的上下边界(运行时抱怨):
0< c< 1,()=()+((1 - ))+ 1
我所知道的是,如果c <0.5 - >重要的等式的部分是正确的,并且如果c> 0.5 - >重要的部分是剩下的。 我该怎么办?
答案 0 :(得分:0)
假设 -
0 < c <0.5 , () = ((1 − )) + 1
0.5 <= c <1 , () = () + 1
您可以按如下方式找到上限和下限 -
下限 -
我们必须选择c
的值,以便获得T(cn)
或T((1-c)n)
的最小值。
当c接近0.5时,c=0.5
或T(cn)
的值可以简单地检查为T((1-c)n)
。
因此,
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
aproach 1
来选择cn
略低(例如-c = 0.9999999999),0
的值接近(1-c)n
。
在这种情况下,上限将是无穷大,因为函数将继续计算T(x)
x
接近n
的位置。
2) cn
或(1-c)n
取得底价 -
如果您不知道底价是多少,则删除十进制部分的十进制数的截断值或编码术语 typecast float
integer
。
现在,cn
或(1-c)n
的最大值n-1
,c
不能等于zero
或one
。< / p>
因此,
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值,那么在编码术语中类型转换 float
到integer
并添加1
它。
现在,c
1
和0
分别接近cn
和(1-c)n
,其结果值为n
。
因此,
T(n) = T(n) + 1
其无限性具有无限性。