中位数与n分位数
来源:互联网 发布:小众旅游 知乎 编辑:程序博客网 时间:2024/05/03 20:21
第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.
由于本题的东西是电梯,楼层有限,所以可以考虑用计数排序,特别简单,直接找中位数就可以了。
脑洞大开,一档
为何是中位数?
这么一问,这个东西就蛋疼了。
这个东西我们假设最好是停在min层,然后min层对应的代价是price_m,如果至少应该满足以下的两个性质。
1.如果我们停在min + 1层,那么总代价应该大于等于price_m,。
2.向下一层 总代价应该也是大于等于price_m。
假设,在第min层时,有a个人他们的楼层数小于 min, 有b个人他们的楼层数等于min, 有c个人他们的楼层数大于min
那么结果就是 向上走一层的代价就是 price_m + (a+b)*1 - c*1 >=price_m ---------->a+b >= c --------> c <= (a+b+c) / 2
同理向下走一层代价就是 price_m + (c+b)*1 - a*1 >= price_m ----> b+c >= a -----------> a <= (a+b+c)/2
所以,中位数所在的地方,满足这个性质。
对于(2,4,6,9)这类数据,中位数是5,在4,6之间都是可以的。而且在[4,6]之间移动时,向上移动满足a+b == c, 向下移动满足 b+c == a成立。
所以中位数的5和其他解的值一样,都是最优解。
如果类似于 (2,4,4,8)这种数据,中位数是4,向上移动和向下移动都会有问题,所以中位数是本例子的唯一最优解。
我们可以看出,无论什么情况,中位数,总能给出最优的解答。所以本题可以用中位数来做。
脑洞大开,二档
脑洞大开,三挡
脑洞大开,四挡
- 中位数与n分位数
- MDX示例:求解中位数、四分位数(median、quartile)
- 随机变量的分布与分位数概念
- 分位数
- 【数据挖掘】:分位数-分位数图
- 分位数(quantiles)、Z-score 与 F-score
- N位数乘以1位数
- n位数乘1位数
- 关于k分位数
- 关于分位数
- 四分位数
- k分位数
- python计算分位数
- (p124)k分位数
- spss四分位数
- hive计算分位数
- 分位数概念
- 分位数(quantile)
- 支持向量机SVM整理
- 函数模板——函数重载-多组数求和
- OJ刷题之1!到n!的和
- android刮刮卡的实现
- IOS动画核心 之 KeyFrameAnimation简介
- 中位数与n分位数
- 跟踪误差分析中的实际位置计算
- 操作样式表
- Android studio中自定义属性访问不了的解决办法
- 【BZOJ1058】【ZJOI2007】报表统计 stl模板
- 妙用hosts文件
- XmlPullParse解析XML
- DatePickerDialog和TimePickerDialog添加确认和取消按钮,优化显示
- RTP传输JPEG图片到VLC实时播放(代码)