【问题标题】:average case running time of linear search algorithm线性搜索算法的平均案例运行时间
【发布时间】:2011-07-04 18:36:25
【问题描述】:

我正在尝试推导确定性线性搜索算法的平均案例运行时间。该算法按照 A[1]、A[2]、A[3]...A[n] 的顺序搜索未排序数组 A 中的元素 x。它在找到元素 x 时停止或继续直到到达数组的末尾。我在wikipedia 上进行了搜索,给出的答案是 (n+1)/(k+1) 其中 k 是 x 出现在数组中的次数。我以另一种方式接近,得到了不同的答案。谁能给我正确的证明,并告诉我我的方法有什么问题?

E(T)= 1*P(1) + 2*P(2) + 3*P(3) ....+ n*P(n) where P(i) is the probability that 
                   the algorithm runs for 'i' time (i.e. compares 'i' elements).
P(i)= (n-i)C(k-1) * (n-k)! / n! 
Here, (n-i)C(k-1) is (n-i) Choose (k-1). As the algorithm has reached the ith 
step, the rest of k-1 x's must be in the last n-i elements. Hence (n-i)C(k-i).
(n-k)! is the total number of ways of arranging the rest non x numbers, and n! 
is the total number of ways of arranging the n elements in the array.

我没有得到 (n+1)/(k+1) 的简化。

【问题讨论】:

  • 也许我是个白痴,但如果数组大小为 N,那么平均案例时间不是 N/2 吗?没关系...不应该在我的 iPhone 上发表评论...误读了 q
  • @kevin 没有重复的情况。但是,当您有重复项时,即使您发现第二次出现(以计算平均复杂度),您也会在搜索中获得第一名。
  • @Kevin 实际上没有多重副本的平均情况是 (n+1)/2。可以这样得到:1*(1/n)+ 2*(1/n)+3*(1/n)...+n*(1/n)。

标签: algorithm performance search combinatorics linear-search


【解决方案1】:

您忘记考虑xk 副本的排列。 P(i)的正确定义是

P(i) = (n-i)C(k-1) * k! * (n-k)! / n! = (n-i)C(k-1) / nCk.
                     ^^

我会把事情交给 Mathematica:

In[1]:= FullSimplify[Sum[i Binomial[n-i, k-1]/Binomial[n, k], {i, 1, n}], 0 <= k <= n]

        1 + n
Out[1]= -----
        1 + k

在下面详细说明我的评论:假设所有元素都是不同的,让 X 是匹配的集合,让 Y 是不匹配的集合。根据假设,|X| = k 和 |Y| = n-k。预期的读取次数等于元素 e 被读取的概率之和。

给定一组元素 S,S 中的每个元素都以 1/|S| 的概率出现在所有其他元素之前。

当且仅当 X 中的元素 x 出现在 X 的所有其他元素之前,即概率 1/k 时,才读取 X 中的元素 x。 X 中元素的总贡献为 |X| (1/k) = 1。

当且仅当它位于 X 的每个元素之前,即概率 1/(k+1) 时,才读取 Y 中的元素 y。 Y中元素的总贡献是|Y| (1/(k+1)) = (n-k)/(k+1)。

我们有 1 + (n-k)/(k+1) = (n+1)/(k+1)。

【讨论】:

  • 注意:得出这个值的更简单的方法是观察恰好检查了 1 个 x,并且检查了 nk 个非 x 中的每一个,如果它出现在所有 x 之前,即概率 1/(k+1)。我们有 1 + (n-k)/(k+1) = (n+1)/(k+1)。
  • @user635541 谢谢你的结果。我确实想过置换x。但随后它们会产生相同数组的多个副本。因此,我决定反对他们。您能否澄清使用 k 的理由! ?另外,你能详细说明一下评论吗?我不明白。对不起。
  • 问题是 n!因子也产生k!相同数组的副本(假设非 x 是不同的)。
  • @Brahadeesh 那么 i 之前的元素呢,我们不应该也置换它们吗?
  • 我无法解决这个二项式求和,你能建议任何方法来简化这个吗?
【解决方案2】:

这是一个使用 Cormen 术语的解决方案: 让S 成为其他n-k 元素的集合。
让指标随机变量Xi=1,如果我们遇到i'th 元素 在我们的执行过程中设置S
Pr{Xi=1}=1/(k+1),因此E[Xi]=1/(k+1)
如果我们在执行过程中遇到我们正在搜索的任何k 元素,则让指标随机变量Y=1
Pr{Y=1}=1 和因此E[Y]=1
让随机变量X=Y+X1+X2+...X(n-k) 是我们得到的元素的总和 在我们执行的过程中遇到。
E[X]=E[Y+X1+X2+...X(n-k)]=E[Y]+E[X1]+E[X2]+...E[X(n-k)]=1+(n-k)/(k+1)=(n+1)/(k+1).

【讨论】:

  • 我个人觉得对 Y 的解释有点混乱。如果它对其他人有帮助,另一种思考方式是让 X =(访问的不匹配的元素数)和 Y =(访问的匹配的元素数)。然后,我们正在寻找 Z = (访问的元素数) = X + Y 但 Y=1 概率为 1 所以 E[X] = E[X] + E[Y] = E[X] + 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 2011-02-12
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多