The Algorithm of Sweeping the Idiots in Your Friend List of Wechat
By 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) = Y
delete Firend(i)
if L' =L and M' = M, //关注数没变//
copy Y into Back[ ] //标记该好友,后续要加回//
Delete Y
n-- //一轮操作结束,好友数减少1个//
break //中止循环操作//
Back[ ] = Friend //将没有关注罗胖和咪蒙的好友加回//