【问题标题】:Average number of comparisons searching a list of size n?搜索大小为 n 的列表的平均比较次数?
【发布时间】:2017-07-31 06:53:15
【问题描述】:

所以这是我的一个算法课程的作业问题。我很难掌握整个复杂性/运行时间的东西,所以任何答案和解释都将不胜感激!

考虑一个随机生成的大小为 n 的列表。
(a) 如果列表以随机顺序存储,如果 αn 次搜索成功,我们将对 M 次搜索序列进行的预期(平均)比较次数是多少,即,我们正在搜索一个在列表。
(b) 如果项目按顺序存储,预期的平均搜索次数是多少(所以 我们可以使用更有效的搜索策略,例如二分搜索)。

我觉得第一个问题的答案似乎是 n/2 之类的,但不确定如何计算 α 部分。

【问题讨论】:

  • 永远不要写任何说这是作业的问题。这里的人会认为你是在寻求帮助而没有尝试。顺便说一句,我没有看到你的任何方法。

标签: algorithm search comparison


【解决方案1】:

如果这些数字是随机放置在列表中的,并且所有 M 次搜索都导致您找到该项目,那么每次搜索的预期比较次数将为 n/2。

这样想。您要查找的项目有 50% 的机会出现在列表的前半部分,并且有 50% 的机会出现在列表的后半部分。如果它在列表的后半部分,那么它有 50% 的机会出现在该子列表的前半部分,并且有 50% 的机会出现在该 50% 的后半部分。如果项目位于列表的前半部分,则同样的事情。

如果您进行 n 次唯一搜索(列表中的每个项目一次),则比较总数将为 1 + 2 + 3 + 4 ... + n。这适用于n*(n+1)/2 比较。将其除以 n,得到(n+1)/2

如果您进行 M 次随机搜索,那么平均而言您会得到非常相似的结果。进行少于 n/2 次比较的搜索次数将大致平衡进行多于 n/2 次比较的搜索次数。

现在,如果某些搜索不成功,它们会进行 n 次比较。所以平均值变得更像:

(successful*n/2 + unsuccessful*n)/M

【讨论】:

  • 啊,好吧,我想不出如何考虑成功和不成功的概念,但是现在看到你的数学完全有道理,谢谢
  • 我确定这是问题设置者所期望的答案,但是您如何假设正在搜索的项目的位置同样可能位于数组中的任何索引处?充其量这个问题措辞不佳,并且缺少一些假设(例如,所有数组项都是唯一的,并且“随机顺序”意味着每个排列都是同样可能的,并且在排列数组之前选择了搜索)。
  • @PaulHankin:是的,这个问题措辞不当,缺乏细节。根据我过去遇到的类似问题,我对数据的性质做了一堆假设。
猜你喜欢
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2014-06-21
  • 1970-01-01
相关资源
最近更新 更多