【发布时间】:2012-02-01 03:31:48
【问题描述】:
我正在分析确定性中位数发现,假设输入被分为 3 个部分而不是 5 个部分,问题是它在哪里分解?
确定性中值查找算法:
SELECT(i, n)
将 n 个元素分成 5 个一组。 死记硬背找到每个 5 元素组的中位数。
递归选择 ⎣n/5⎦ 的中位数 x 将中位数分组为枢轴。
围绕轴 x 进行分区。设 k = rank(x)
4.如果 i = k 则返回 x
否则我 然后递归地选择第 i 个
下部最小元素 否则递归选择第 (i-k) 个
上半部分的最小元素 我对算法进行了分析,我相信第 1 步和第 3 步将花费 O(n),其中只需恒定时间即可找到 5 个元素的中位数,而第 2 步需要 T(n/5).so至少 3/10 的元素≤ p,并且至少 3/10 的数组≥ p,因此,步骤 4 将 T(7n/10) 并且将得到递归。
T(n) ≤ cn + T(n/5) + T(7n/10),
但是当我将元素分成 3 组时,假设 9 个元素,我将它们分成组,这样: {1,2,10} {4,11,14}, {15,20,22} 我得到了中位数 2,11,20 和 p=11。 一般来说,在五人组中,可以说 g = n/5 组,并且至少 ⌈g/2⌉
其中(中位数≤p的组)五个元素中至少三个≤p。所以元素总数≤p至少为3⌈g/2⌉≥3n/10。但是在 3 组中,我们可以得到所有三个元素可能小于 p。在这里我认为算法会崩溃! 我的想法正确吗???
【问题讨论】:
-
所以你有一些算法并参考“步骤1”等。你说的这个算法到底是什么?那些步骤是什么?如果您不显示您正在分析的内容,我们应该如何检查您的分析?您也可以进行拼写检查/...您的问题,使其阅读起来更愉快。
-
抱歉我忘记写算法了!!
-
rank(x) 到底是什么?
-
可以,但你必须使用两次“中位数的中位数”,见stackoverflow.com/a/39288513/1037407
标签: algorithm selection complexity-theory big-o