给定固定均值与最小值,求解90百分位数的最大可能值
嘿,这个问题的关键其实在于我们可以自由选择列表的长度(题目没限定列表大小对吧?),这样就能找到让90th百分位数最大的最优情况~
先明确问题:
Problem:
如果一个列表的最小值是-10,均值为55.2,那么这个列表的90th百分位数的最大可能值是多少?
再看你的思路:
My Approach So Far:
我理解90th百分位数是指有90%的数据小于等于它的值,比如在20个元素的列表里,第19个元素就是90th百分位数。
要最大化90th百分位数,我需要让前90%的元素尽可能小(也就是都取最小值-10),然后调整剩下的10%的元素。
但问题在于我不知道列表的大小,所以不知道该怎么着手。
你的思路方向完全正确!要最大化90th百分位数,核心就是把尽可能多的元素压到最小值-10,把总和的“余量”全部留给剩下的元素——而要让这个余量能集中支撑起最大的90th百分位数,我们应该选择列表长度为10的倍数(比如10、20、100...),这样刚好能让90%的元素是-10,剩下10%的元素都等于我们要找的90th百分位数(因为排序后,这部分的第一个元素就是90th百分位数,让它们都相等就能让这个值达到最大)。
咱们用数学公式推导一下:
设90th百分位数为x,列表长度为n(n是10的倍数,比如n=10k,k为正整数),那么:
- 前9k个元素都是-10,总和为
9k*(-10) - 后k个元素都是
x,总和为k*x - 整个列表的总和等于
n*55.2 = 10k*55.2
列等式:
9k*(-10) + k*x = 10k*55.2
两边都除以k(k≠0),得到:
-90 + x = 552
解得:x = 552 + 90 = 642
举个例子验证:比如取n=10,前9个元素全是-10,第10个元素是642,总和是9*(-10)+642 = 552,均值552/10=55.2,完全符合题目要求。这时候90th百分位数就是642(这里我们采用“90th百分位数是满足至少90%数据小于等于它的最小值”的定义,642完美满足,而且是能达到的最大值——如果列表长度不是10的倍数,剩下的元素数量会比10%多,分摊下来x就会更小,不可能超过642)。
所以最终结论是:这个列表的90th百分位数的最大可能值是642。
备注:内容来源于stack exchange,提问作者Hacker31

