我有点意识到要平均分配运行时间。假设我们有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)? bound(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,...直至。请帮忙。
更新:
我发现求和几何序列的公式为1-(1/2 ^ n)
T(n) = (1-1/(2^n))/n * (n(n+1)/2)
= (n+1)/2 - (n+1)/(2^(n+1))
现在,我的问题是什么是大哦,大欧米茄,大Theta,小哦和小欧米茄? 算法是否可能没有下限?
答案 0 :(得分:4)
您的示例如下:
可以使用简单的技巧将其转换为。首先,将基数重写为参数:
竖线表示“以[此值]评估”。回顾x^i
的派生形式:
方括号内的术语现在是一个几何级数;回顾标准结果:
请注意,随着j
的增加,该值收敛为常数。
答案 1 :(得分:2)
最初,我想将其视为一个连续函数,并建议进行演算以计算概率曲线的积分曲线,然后将积分函数乘以x(直到该检查的关键协作数)。然后取最小值和最大值之差...但这不是必需的,因为您不能要求索引之间的索引。
因此,您将使用整数近似。采用概率函数并确定每个索引值的概率。计算这些概率的总和,再乘以发生的关键协作次数。
1 * p(0)+ 2 * p(1)+ 3 * p(2)=您的答案。