【问题标题】:Average Case Analysis of Sequential Search with Geometric Probability Distribution具有几何概率分布的顺序搜索的平均案例分析
【发布时间】: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


【解决方案1】:

您的示例是以下总和:

可以使用一个简单的技巧将其转换为几何级数。首先,将base重写为参数:

竖线表示“在 [此值] 处评估”。回忆x^i的导数:

括号内的项现在是一个几何级数;回忆标准结果:

观察到随着j 的增加,它收敛到一个常数。

【讨论】:

    【解决方案2】:

    最初我想把它当作一个连续函数,并建议用微积分来计算概率曲线的积分曲线,将积分函数乘以 x(该检查的关键比较数)。然后取最小值和最大值的差......但这不是必需的,因为你不能要求索引之间的索引。

    所以您将使用整数近似值。取概率函数,确定每个指标值的概率。计算这些概率的总和,每个概率乘以发生的关键比较次数。

    1*p(0)+2*p(1)+3*p(2)= 你的答案。

    【讨论】:

    • 感谢您的回答。我已经更新了我的帖子以澄清事情。请阅读:)
    猜你喜欢
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多