【发布时间】:2012-03-18 08:16:59
【问题描述】:
我想通过以下示例了解“中位数的中位数”算法:
我们有 45 个不同的数字,分为 9 组,每组 5 个元素。
48 43 38 33 28 23 18 13 8
49 44 39 34 29 24 19 14 9
50 45 40 35 30 25 20 15 10
51 46 41 36 31 26 21 16 53
52 47 42 37 32 27 22 17 54
- 第一步是对每个组进行排序(在这种情况下,它们已经排序)
-
递归的第二步,找到中位数的“真实”中位数(
50 45 40 35 30 25 20 15 10),即该集合将分为 2 组:50 25 45 20 40 15 35 10 30对这两组进行排序
30 10 35 15 40 20 45 25 50
中位数是 40 和 15(如果数字是偶数,我们取左中位数)
所以返回值是 15 但是中位数的“真实”中位数(50 45 40 35 30 25 20 15 10)是 30,而且有 5 个元素少于 15,远小于 wikipedia 中提到的 45 个元素的 30%
所以T(n) <= T(n/5) + T(7n/10) + O(n) 失败了。
顺便说一下,在维基百科的例子中,我得到的递归结果是 36。但是,真正的中位数是 47。
所以,我认为在某些情况下,这种递归可能不会返回真正的中位数。我想了解我的错误在哪里。
【问题讨论】:
-
@kaoD:网站社区政策,“承认问题是家庭作业。”见:meta.stackexchange.com/a/10812
-
@kaoD:发布家庭作业问题本质上没有什么问题,但它会影响大多数成员回答问题的方式。所以应该这样说,以及已经取得了哪些进展。答案通常是试图引导,而不是解决。
-
@Orbling 有关系吗?无论这个问题背后的原因是什么,smnvhn(以及其他人)都将能够从一个好的答案中学习。我认为这个问题本身已经表明 smnvhn 已经对此进行了一些思考。因此,如果这确实是一项家庭作业,发布者将通过任何发布的评论或答案了解更多信息。
-
@Orbling 不,这不是家庭作业,我只是在阅读 Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest 和 Clifford Stein 所著的“算法简介”这本书来回答这个问题.
-
@smnvhn:因为它看起来像一本书的问题,它也是一本有趣的书,你可以理解我为什么认为这是家庭作业。询问是标准做法,只是为了在这种情况下清楚 - 没有冒犯的意思,谢谢你的澄清。 :-)
标签: algorithm selection median-of-medians