专栏|不正经的经济学2:微信“脑残友”的清理算法
The Algorithm of Sweeping the Idiots in Your Friend List of WechatBy Hanson Koo, 30th. Jan.,2019作者:无惑先生:HansonKu微信公众号:Hanson_say【1】吸烟有害健康,咪蒙摧残智商。吸烟虽然不好,但大量的烟民创造了庞大的需求、岗位、产出、税收,这部分剩余再进入到消费和投资,给社会带来持续的经济价值。本文的“脑残”不带有歧视的意思,就好比投机这个词(speculation)原本是中性的,由于理解上的偏差,变成了“投机倒把”的意思(贬义),从而产生些误解。如果你的朋友是逻辑思维和咪蒙的铁粉,你就得做好心理准备:在很多方面,他们的观点和思考方式会显得非常奇葩,甚至不可理喻。但这并不代表他们内心是邪恶的,思想是龌龊的,人品是底下的。至于能力方面,试想一个学生将九九乘法口诀背得滚瓜烂熟,并认为他已经**地掌握了高斯公式和马尔科夫过程。然后他想在数学研究工作中有所建树,你觉得会是怎样的结果?【2】今天大家都在忙着检测自己微信朋友的质量,具体方法如下:我去试了下,数据还是挺令人惊讶的:我自己的微信朋友中的比例是11.7%和23.16%。另外,添加新的好友时,可以关注下这几个公众号的好友关注数是否发生了变化。如果数字增加了,说明……关键的难题是:我们如何区分当前朋友清单里关注罗胖和咪蒙的部分呢?算法的逻辑并不复杂,给大家介绍下假设当前微信好友数是n,罗胖的好友关注数为L,咪蒙的好友关注数为M第一步:随机delete 1个好友,这个时候你的好友清单变成了n-1;第二步:观察罗胖(L)和咪蒙(M)的好友关注数变化,这里有四种情况:①L减少1,M不变;②L不变,M减少1;③L和M都减少1;④L和M都不变。如果是情况④,说明该好友没有关注罗胖和咪蒙,应该把他加回来。创建一个back列表,将这位好友放进去;第三步:在n-1的好友清单中,继续随机选出一名好友,重复以上操作。什么时候停止呢?有两个信号:①n-1<0>,说明你所有的好友已经全部检测过了。② L =0 并且 M = 0 的时候,说明所有关注罗胖和咪蒙的人已经被你清理掉了。剩下的朋友是clean的。第四步:将back列表中的好友重新添加回来。这样,你就把关注罗胖和咪蒙的好友都清理掉了。//这段不是代码,也不遵循任何programming Language的语法!!!//print Friend(n),count n, Create Back[ ],//确认好友数量,建立back列表//while n-1 > = 0 //当n-1小于0时意为着所有朋友已经检验过了//,L+M > 0 // 如果L和M都等于0,说明所有关注罗胖和咪蒙的人已经被清理,可以中止该循环操作。//i = random(n), Friend(i) = Ydelete Firend(i)if L' =L and M' = M, //关注数没变//copy Y into Back[ ] //标记该好友,后续要加回//Delete Yn-- //一轮操作结束,好友数减少1个//break //中止循环操作//Back[ ] = Friend //将没有关注罗胖和咪蒙的好友加回//