第9章中位数和顺序统计量
其实《算法导论》第三版第9章,已经讲了不少有关中位数和顺序统计量的知识。
尤其是9.3的那个线性时间内确定中位数(其实可以拓展到任意一个n分位数)的算法,简直不要太屌。
额。我自认为我没可能讲的比《算法导论》还要好,而且,又不便直接复制粘贴。所以那部分东西我就不讲了,这篇博文就以中位数的拓展为主。
电梯调度
记得《编程之美》有一个电梯调度问题,大意就是每天,一堆人从1楼做电梯,然后每层楼都停,感觉很烦,如果能够在一个合适的地方停一下,然后,没到的人几个人向上走,停过了人向下走。。。然后对于一堆人的电梯在一层就已经确定的目标楼层数据,应该选择在哪一层停才能使,向上走的人走的总层数和向下走的人的总层数最小?
比如 有三个人 他们目标楼层分别是(3,5,9),那么如果你在第3层停,结果到第5层和第9层的就需要向上走,3-3 + 5-3 + 9-3 = 8层。代价是8层,
如果是在第5层停,那么向下走的话,结果是第3层的那个要向下走 5-3 + 5-5 + 9-5 = 6层。 代价6层,结果比原来的8层代价少,所以停在第5层更好。
分析:其实这道题目是算法导论9.3-9的特例。这个东西其实想一想就知道是中位数。。。我们求个中位数就妥了。。。注意比如(3,9,9)这些数据的中位数是9,不是3,也不是 (9 +3)/2 = 6,而是9。这是统计学的基本知识点,注意。(2,4,6,9)的中位数,我们考虑成(4+6)/2 = 5.
由于本题的东西是电梯,楼层有限,所以可以考虑用计数排序,特别简单,直接找中位数就可以了。
脑洞大开,一档
为何是中位数?
这么一问,这个东西就蛋疼了。