首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解中介算法的复杂性?

如何理解中介算法的复杂性?
EN

Stack Overflow用户
提问于 2018-09-23 19:53:59
回答 2查看 695关注 0票数 2

我遵循这里描述的中间中值算法部分的https://brilliant.org/wiki/median-finding-algorithm/复杂性,它描述了3n/10最佳情况和7n/10更坏的情况,我不知道它是如何得到3n/10和7n/10部分的?虽然它提到“对于每一个元素,有两个元素比它小(因为这些元素是五个元素列表中的中间元素-两个元素更小,两个元素更大)”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-24 01:29:56

在将列表划分为5的n/5组并找到中间值p的中位数之后,您需要确定最坏的情况,即您仍然需要寻找真正的中位数的元素数量。

考虑列表中必须有多少元素小于p (或等于,在更简单的不同元素列表中,这些元素仅为p)。

一半的n/5组的中值小于p。在这些组中,有3个元素--中位数和两个较小的值--必须小于p。我们不知道较大的元素是否大于p,也不知道中间值大于p的组中是否有小于p的元素。

因此,在最坏的情况下,我们确定1/2 * n/5组-- n/10组--每个组都有3个元素,它们肯定比p小。这是3n/10元素。在最坏的情况下,所有其他元素都比p大,这使得7n/10元素大于p可以递归地执行该算法。

票数 1
EN

Stack Overflow用户

发布于 2018-09-24 07:48:19

该算法成功的关键在于,每一步都会丢弃一定比例的元素。

2k+1的中间值两边都有k元素。然后,(2k+1)(2l+1)元素的中间值的中值在两边都肯定有(k+1)(l+1)-1元素(每个中间值都不小于k+1元素,还有l+1中间元素,它们都不小于中间元素的中值)。

其分数为((k+1)(l+1)-1)/(2k+1)(2l+1)。在k=2的例子中,我们有(3(l+1)-1)/5(2l+1) ~ 3l/10

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

https://stackoverflow.com/questions/52469726

复制
相关文章

相似问题

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