Re: [问题] 给定n个排好序的整数阵列 找中位数

楼主: dreamoon (千古悲情人物)   2014-10-15 12:56:06
※ 引述《DJWS (...)》之铭言:
: 依序扫描n个中位数 O(n)
: 比x小(大)的中位数
: 其所对应的阵列,预计删除小(大)的那一半
: 也就是 low = (low + high) / 2 + 1; O(1)
: (或者 high = (low + high) / 2 - 1;)
: 预计更新阵列大小为 size = high - low + 1 O(1)
: 累计欲删除的元素数量 y (小的那些) O(1)
: 如果第k个元素小于等于 y,那么就删除最大的那 1/4,下个回合找第 k 小的元素
: 否则就删除最小的那 1/4,下个回合找第 k = Σsize - y 大的元素
对于这里我有点困惑
若k<=y,删除叫大的那些数是没问题的,因为那些数一定比第k个数还大
但是当k>y时,真的能删除较小的那一部分嘛?
例如说现在有7*7的矩阵
1, 2, 3, 4, 5, 6, 7
8, 9,10,11,12,13,14
15,16,17,18,19,20,21
22,23,24,25,26,27,28
29,30,31,32,33,34,35
36,37,38,39,40,41,42
43,44,45,46,47,48,49
并且我要找的数是第17小的数
但比较小的那部分却只有16个数
于是按照这个算法我们就会把真正的第17小的数给移除了0.0(我没理解错的话...)
作者: DJWS (...)   2014-10-15 13:33:00
对耶 爆炸了

Links booklink

Contact Us: admin [ a t ] ucptt.com