上面这个现象呢,是男生上厕所时的一种微妙状态。两个男生往往会由于尴尬而不愿意站在相邻的坑位上厕所。我将其命名为男厕所的泡利不相容定律。
一、男厕尴尬定律简介
先给大家科普一下男厕所的构造,小便区是一排立式坑位。好的厕所有隔板,阻挡隔壁视线,营造私密空间,但更多的情况是这样的。
所以男生通常会离其他人尽可能远。
这也合理,社会学研究表明,人的社交距离分四级:亲密、熟人、礼貌、一般。亲密距离是0-45cm,情侣之间才会离这么近。
两个男生萍水相逢,却在亲密距离内做亲密之事,难免有些哈兹卡西。
如果不说点什么,尿声无法掩盖;如果旁边人盯着你,你会很不自在;如果互相攀比尿液动力学,又有一点变态。有同感的话请在评论里打尴尬。
但这时你会发现一个问题!男生的尴尬心态导致了男厕所坑位利用率显著降低!
考察一个4坑位厕所,第1个人进来占据1号坑,第2个人占据最远的4号坑,第3个人进来就无坑可占了,因为两边都有人。
考察7坑位厕所,第1个人进来占据1号坑,第2个人占据7号坑,第3个人占据4号坑,第4个人进来又没法上了!7个坑位只能容纳3个人!
同理易得,13个坑位的厕所其实只能容纳5个人!男生的一点面子竟然造成了社会资源极大的浪费!
顺带一说,后来在SCP基金会官网上我竟然看到了类似的记录,据说是一种超自然现象,目前仍无法进行完全收容。
因此不一定是广大男同胞面子薄,可能是你受到了超自然的影响。
想到这里我不禁陷入沉思。一个厕所的坑位数量和它能容纳的男生人数满足什么关系呢?最优秀的厕所应该设置多少个坑位,才能避免客人尴尬呢?
作为SNP大一统理论创始人,今天我就来和大家计算一下,男厕尴尬定理。
二、简单计算
基本模型如下:
试求该厕所可同时容纳的男生数量m与n的关系,记为m=f(n)。下面我们来给出一些合理的假设。
男厕第一定律,又称就近定律:第1个男生为了图方便,总是进入1号坑位。
男厕第二定律,又称尴尬定律:与女生不同,男生从不结伴,总是独立进入厕所,后来的男生总会选择离左右男生尽可能远的坑位。
男厕第三定律,又称泡利不相容定律:男生永远不挨着上厕所。
下面计算f(n)。做对的同学请在评论里打简单。我来提供一个求解思路。
如果n是奇数,第1个人进入1号坑,第2个人进入n号坑,第3个人进入正中间的(n+1)/2号坑。这时左边这(n+1)/2个坑能容纳多少人呢?
不知道,但总之就是f((n+1)/2)个人。右边这(n+1)/2个坑能容纳多少人呢?也是f((n+1)/2)个人。现在我们虽然求不出f(n),但我们知道了,
减1是因为要扣掉中间这个重复的人
如果n是偶数,则第1个人进入1号坑,第2个人进入n号坑,第3个人进入正中间的n/2号坑。这时左边这n/2个坑能容纳多少人呢?
不知道,但总之是f(n/2)个人。右边这(n/2+1)个坑能容纳多少人呢?f(n/2+1)个人。所以这时
到此为止,我们虽然不会正面求f(n),但我们得到了这样上面这组公式。
然后简单编个程就可以计算了,画出男厕所坑位函数图像长这样。
结果非常amazing啊!随着厕所坑位数量增长,能同时容纳的男生数量阶梯式上升,坑位利用率振荡式下降,最后在1/2和1/3上下反复横跳。
厕所坑位函数有一个独特的性质:当坑位从2^k+1增加到1.5*2^k+1时,能容纳的男生数量是不变的!都等于2^(k-1)+1。
比如9、10、11、12、13个坑位的厕所,都只能容纳5个人。
这告诉我们,不要盲目修太多坑位,有时候你修了也白修,男生根本就不进去。
稍加计算就会发现,一个拥有1亿个坑位的宇宙级宏伟厕所至多同时容纳33554433个男生,剩下66445567个坑位都会因为尴尬而被浪费掉!浪费率高达66%!
从利用率曲线来看,对于日常的厕所而言,修3、5、9、17个坑位会比较科学,利用率是最高的。修4、 7、13个坑位是最坑的。
如果我的观众里有厕所设计师的话,希望这个结论能引起你的重视。
三、进阶:男厕里的伟大思想
刚才我们解决的虽然只是厕所里一个微不足道的问题,但你仔细思考就会发现这个男厕所中,竟然蕴含着一种伟大的思想!
要求n个坑位能容纳多少人,如果你排列组合分类讨论,是很头疼的。
但我们把这个问题转化为了n/2个坑位的厕所能容纳多少人的问题,然后又能转化为n/4的问题,一直分下去,最后一定能转化为3个坑位以内的简单问题。这个一眼就能看出答案了。再一通合并,就能推出n个坑位的情况。
这种做法,就是我们小学二年级就学过的分而治之算法。
它的字面意思很朴素,但揭示了一种哲学思想:
把一个复杂的大问题分解为几个相似的小问题,不断分解,直到它变成一个个足够小的容易解决的问题,就能治住它们,再合并解决开始的复杂问题。本质上就是个套娃思想。
举个通俗的例子,大老板要写论文,把论文前一半给1号小老板写,后一半给2号小老板写,自己合并润色。
每个小老板又把他的部分交给两个博士生写,自己合并。分而治之,十分合理。结果有个博士生PS了数据,小老板没发现,就把大老板坑了。
分而治之在数学和算法中有广泛的应用,典型的像排序。我们大家学的第一个排序算法都是冒泡排序。依次比较相邻元素,如果顺序不对就交换。这种算法非常慢,时间复杂度是O(n2)。
但用分而治之就可以提出什么排序啊?哎对!归并排序和快速排序。
比如你家套娃洒了一地,我们用快速排序。首先任选一个娃,将其他娃与之比较,比它大的扔它右边,比它小的扔左边。
现在这个娃已经找到了它最终的位置,整堆套娃被分成了左右两个部分。在这两部分中分别再取一个娃,比它大的放右边,小的放左边。
不断套娃式重复,套娃的排序就快速完成了。快排和归并的时间复杂度都是O(nlogn)。所以要想治住套娃,还是得用套娃。
这个视频就直观地演示了三种排序算法的原理和效率。
为什么分而治之会比直接刚之更加优秀呢?
这是因为,大规模问题的复杂度往往要远远高于小规模问题。
因此把大问题拆成容易的小问题,再递归地解决它们是划算的。分治在大整数乘法、矩阵乘法、求特征值、快速傅里叶变换当中都有应用。
比如两个8位数相乘,直接乘就要做64次个位数乘法。但我们可以分而治之,用小学二年级就学过的Karatsuba算法,把8位数分成高位和低位两部分,一通变换猛如虎,就只要做6次加法和3次4位数乘法,相当于只有48次个位数乘法。
对电脑而言,加法比乘法好算,对人好像也是吼……把4位数乘法再次分治,乘法次数大大减少,计算效率显著提升。
理论上讲,2个1024位整数相乘,本来要做105万次乘法,但分而治之后就只要6万次,按现在的神童标准,口算都能算出来了。
这就是分而治之算法的威力。如今计算机的突飞猛进,既来自算力的提升,也来自算法的进步。一个巧妙的变换,就能让解决问题的时间缩短百倍,这便是算法之美,是人类强于计算机的智慧啊!
分而治之,不光是一个算法思维,还是一种交朋友的方式。今后当你在男厕所里提着裤子等位的时候,不妨试探地抛一句
如果前面的人惊喜地回你一句
那这期视频就让你们突然有话题了!你们可以聊一聊这家厕所的坑位利用率是多少,玩一个套娃排序,算一个大整数乘法。
分而治之让厕所里原本无言的尴尬化为亲密的会心一笑!正道之光从此照在厕所之上。
感谢大家管看本期文章,希望给我点赞、在看,支持一下!我们下期再见!
参考文献
1、Jon Kleinberg, Éva Tardos. Algorithm Design[J]. Prentice Hall, 2005.
2、Cormen T H , Leiserson C E , Rivest R L , et al. Introduction to algorithms, third edition Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein[J]. Journal of the Operational Research Society, 2001, 42(9).
3、Cuppen J J. A divide and conquer method for the symmetric tridiagonal eigenproblem[J]. Numerische Mathematik, 1980, 36(2): 177-195.
4、 Karatsuba, Anatolii A.; Yuri P. Ofman (1962). "Умножение многозначных чисел на автоматах". Doklady Akademii Nauk SSSR. 146: 293–294.
5、Strassen, Volker, Gaussian Elimination is not Optimal, Numer. Math. 13, p. 354-356, 1969
6、Huang, Jianyu; Smith, Tyler; Henry, Greg; van de Geijn, Robert (2016). Strassen's Algorithm Reloaded. International Conference for High Performance Computing, Networking, Storage and Analysis (SC'16)
7、Richard Tolimieri, Chao Lu, Myoung An. Cooley-Tukey FFT Algorithms[J]. 1997