【发布时间】:2018-08-11 16:50:03
【问题描述】:
我有点意识到平均运行时间是均匀分布的。比如说我们有 6 个数组元素。
| 1/6 | 1/6 | 1/6 | 1/6 | 1/6 | 1/6 |
上面是一个数组,搜索元素的均匀概率分布在数组的每个下标中。
因此,获得均匀分布的平均运行时间将类似于以下解决方案:
T(n) = (1/6)*1 + (1/6)*2 + (1/6)*3 + (1/6)*4 + (1/6)*5 + (1/6)*6
= (1/6) * ( 1 + 2 + 3 + 4 + 5 + 6 )
= 3.5
或者当用 n 表示时:
T(n) = (1/n) * ((n(n+1))/2)
= (n+1) / 2
= ϴ(n)
但是几何概率分布下顺序搜索中键比较的平均案例数呢?
例子:
Prob(target X is in the jth position) = 1/(2^(j+1))
where j = 0, 1, 2,3,4,5,6,...
| 1/(2^(0+1)) | 1/(2^(1+1)) | 1/(2^(2+1)) | 1/(2^(3+1)) | 1/(2^(4+1)) | 1/(2^(5+1)) |
然后
T(j) = ((1/2)* 1) + ((1/4)* 2) + ((1/8)* 3) + ((1/16)* 4) + ((1/32)* 5) + ((1/64)* 6)
= .5 + .25(2) + .125(3) + .0625(4) + .03125(5) + .015625(6)
= .5 + .5 + .375 + .25 + .15625 + .09375
= 1.875
我不知道用j个词怎么表达:
T(j) = ?
上界 O(j) 是多少?下限Ω(j)?紧束缚 ϴ(j)?
任何帮助或想法,将不胜感激。
更新:
我认为获取运行时间的公式如下:
T(j) = ((sum of geometric series) or (sum of geometric series / n)?)* (n((n+1))/2)
当系列中的每个元素具有值 1/(2^(j+1)) 时,我只需要几何系列之和的公式,其中 j = 0, 1, 2, ...最多n.请帮忙。
更新:
我发现求和 og 几何级数的公式是 1- (1/2^n)
T(n) = (1-1/(2^n))/n * (n(n+1)/2)
= (n+1)/2 - (n+1)/(2^(n+1))
现在,我的问题是什么是 Big Oh、Big Omega、Big Theta、little oh 和 little omega? 算法是否可能没有下界?
【问题讨论】:
-
你想让 T(j) 计算什么?
-
我的意思是如果 j 只是索引数量的另一个变量,那么只需使用与上一个示例相同的方法。
-
对于您的具体示例,如果您在 6 处截断,则您不是有效的概率分布,因为它总和为 63/64 而不是 1。您需要按 64/63 对答案进行加权。一般来说,Sum( x * p(x) ) 是离散分布的 X 期望值的定义。
-
@SteamyThePunk 这行不通,因为 p(x) 不是恒定的,因此不能将它们提取为公因数。
-
您能否解释一下您是如何获得结果的
(n+1)/2 - (n+1)/(2^(n+1))?对我来说似乎很可疑,尤其是你刚刚乘以n(n+1)/2的方式。
标签: algorithm runtime time-complexity analysis asymptotic-complexity