首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二进制搜索与顺序搜索/盈亏平衡点

二进制搜索与顺序搜索/盈亏平衡点
EN

Stack Overflow用户
提问于 2014-01-30 22:09:08
回答 2查看 1.2K关注 0票数 1

我真的很纠结于这个家庭作业问题。我的教授在解释任何事情方面做得很糟糕。帮助?

排序列表与使用二进制搜索与仅对未排序的列表使用顺序搜索之间存在权衡。选择取决于搜索列表的次数。假设序列搜索在最坏的情况下需要n个比较,排序需要n*log n比较,二进制搜索在最坏的情况下需要log n比较(正如我们已经讨论过的,其中log是log基2 )。给定一个由1024个元素组成的未排序列表(即log 1024 = 10),需要多少搜索才有价值?假设我们考虑序列搜索的平均情况需要n/2比较。现在,s的盈亏平衡点是什么? 提示:为每个方法搜索s所需的比较数编写一个表达式;然后将它们设为相等并为s求解。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-30 22:17:31

您正在比较执行初始排序(成本:n*log(n))和后续二进制搜索(成本:log(n))所需的时间。因此,如果您想搜索s时间,您将为每个(二进制)搜索支付一个初始的n*log(n)来排序列表和log(n)。这就是说:

代码语言:javascript
复制
c1 = (n*log(n)) + (s*log(n)) = (n+s)*log(n)

相反,如果执行线性搜索,则不存在“初始成本”,但每次搜索都将花费n,因此对于s搜索:

代码语言:javascript
复制
c2 = s*n

显然,对于足够小的snc2更小,因为没有这样的初始成本,但它的增长速度比c1快。在一定程度上,c1c2会交叉。也就是说,c1 = c2

代码语言:javascript
复制
                                                                     n * log(n)
s * n = (n + s) * log(n) --> s * (n - log(n)) = n * log(n) --> s = ------------
                                                                     n - log(n)

好吧,你现在必须讨论上面的方程式。这个阴谋应该告诉你一切:

票数 2
EN

Stack Overflow用户

发布于 2014-01-30 22:18:00

提示:对n排序然后执行k个二进制搜索的工作由

N log n+k log n

执行k个顺序搜索所需的工作是

恩克

如果n= 1,000,那么第二个量比第一个量小多少?

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21468459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档