当给定成功搜索的概率时,如何找到执行基本操作的次数?

时间:2018-03-14 13:02:03

标签: arrays algorithm performance search code-analysis

The Algorithm

在给定成功搜索的概率(p <0 <= p <= 1)的情况下,

This question (1-b)要求在平均情况下由上述算法进行的比较次数。

我所理解的是:在最坏的情况下,算法会进行n + 1次比较。

我不明白下面的解决方案。

The solution

2 个答案:

答案 0 :(得分:0)

涉及概率p时进行的比较次数为

(1-p).f(n) + p.g(n)

其中

  • f(n)是搜索失败时的操作次数,这是最糟糕的案例复杂度1 + n
  • g(n)是搜索成功时的预期操作次数。

假设在阵列的任何索引K处找到搜索到的密钥i的机会相同,则对每个等概率情况的操作数X的期望值为

g(n) = E(X) = 0/n + 1/n + ... + (n-1)/n + n/n = n/2

因此

(1-p).f(n) + p.g(n) = (1-p).n + p.(n-1)/2
                    = 1 + n - p.n/2

p = 0时,我们会找回最严重的案例复杂性np = 1时,预期的复杂性为1 + n/2

答案 1 :(得分:0)

您将平均情况分为两部分:

  1. 密钥位于数组中:在这种情况下,平均比较次数为

      

    (1 + 2 + 3 + ... + n)/ n =(n + 1)/ 2

  2. 密钥不在数组中:在这种情况下,比较次数为

      

    n + 1个

  3. 现在,假设密钥在数组中的概率p,您可以通过

    计算比较次数
      

    p *(如果键在数组中,则为#comparisons)+(1-p)*(如果数组中的键不是,则进行#比较)

    产生

      

    p * [(n + 1)/ 2] +(1-p)*(n + 1)

    简化为

      

    (2-P)(N + 1)/ 2