电梯引发的思考(电梯停靠与中位数)

话说有这样一部电梯:在一楼的时候乘客随机的进到电梯里,然后根据乘客所要去的楼层选择在某一层停下来,且只在这一层停下来,之后就直接回到1楼,现在问电梯应该在哪一层停下来,使得所有乘客所走的楼层总数最少?当然现实中是否有这样的电梯不是这里要关心的问题,其实这只是用实际的例子在描述一个数学问题:

min |x-x1|+|x-x2|+...+|x-xn|

       其中x1,x2 ,...,xn已知;也就是乘客所选的楼层,这里需要注意的是x1,x2 ,...,xn中可能有重复,这里不妨理解为电梯有计数功能,且每进来一个乘客都会按一下自己要去的楼层。不过比起解释这里更关心数学问题本身。

       关于这个可能有的人第一反应就是当x=mid(x1,x2 ,...,xn) [也就是中位数]时就是最有解,确实他是它的最优解,那么好奇的人会问:为什么是他的最优解,以及怎样在计算机上求解呢?这就是这里要解决的问题:

       首先,为了清晰这里不妨假设x1,x2 ,...,xn是有序的,且1<x1<=x2 <=,...,<=xn,并且我们将x1,x2 ,...,xn看作是数轴上的点,那么先来看当x=x1时,此时所有的楼层除了等于x1都要比x高,那么这些楼层可以看作是在x右边的点,假设此时所有人需要走的楼层之和为S1,处于x1的点数为m,大于它的为t,此处有m+t=n;那么下一步,x=x1+1时,左边的m个点需要想向下走一层,而右边的点可以少走一层,此时所有人需要走的楼层之和S2=S1+m-t,当m<t时所有人需要走的楼层之和减小时电梯应该向上走一层,否则不应该向上走!

       归纳上面的过程我们有:当x停在某一层的的时候,此时乘客所需移动的楼层为S0,假设楼层小于等于x的乘客数为m,而大于x的乘客数为t,且有m+t=n,那么电梯再上升一层将使得总共所需移动的楼层数为S1=S0+m-t,那么那么电梯是否应该继续上升一层就由m<t是否成立来决定了,m<t则上升一层,否则不动!

那么一开始显然有m<t电梯不断上升之后会有m>=t,那么电梯就应该在首次出现m>=t,时停下来(注意等号不一定会成立,例如奇数情形),用数学语言抽象出来就是,当x处在“中间位置”的时候就可以了,这正是中位数的定义,到此这个问题也基本解决了!

      至于算法,象形写过快速排序的人都知道要写一个partition()函数来划分数据,这里找中位数只需要反复调用它就好了!,当然找中位数这个算法有它的改进版本,这里就不多说了(注意这里没有比必要将数据进行排序!)

      不过这里关于中位数还想说两句(我本科是学统计的,所以还望见谅):我们经常用均值来估计参数,因为其理论比较完备且通常效果也比较好,但是当数据出现离群点时,它的用均值估计可能不是一个好的选择,为了衡量估计的稳健性,统计上有一个Breakdown Point(也叫BP点)的东西,其大致定义为对于x1,x2 ,...,xn ;n个样本当我用任意数(可以是无穷大,通常使用的也是无穷大)替换掉其中的m个后,用新的数据来估计使得替换后的估计与没有替换的估计的差的绝对值的上确界变为无穷大时,对满足这样条件的最小的m定义:(m/n)为Breakdown Point;

      对于均值估计,其BP为1/n因为只要有一个数据变为无穷大,估计就变为无穷大了,当n趋于无穷时BP趋于0,也就是说其渐进BP为0;

     对于中位数,很容易看到的时你至少要替换掉一半的样本才能使它为无穷大,也就是所中位数的BP为1/2,这样也时BP的最大值,所以中位数时很稳健的,但是有的时候觉得它太稳健了,会使用其他的估计,这个要根据实际情况来看了,还有就是中位数的理论分析没有均值那么漂亮!这里就不细说了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值