测出你的姓氏--算命先生的“算法”分析

来源:互联网 发布:网络上睿智是什么意思 编辑:程序博客网 时间:2024/04/28 17:24
         在农村或者小城镇生活的人可能都见过这样一种算命的,他首先会给你8张卡片,上面写满了姓氏,让你从里面找出有你自己姓氏的卡片,当你把所有自己姓氏的卡片给他的时候,他竟然会一口说出你的姓氏。然后你就会相信他后面所说的所有话,当然,拿钱也是毫不犹豫的事情了。 
     不过,只要是读过书的人都知道,这肯定是骗人的,都明白这个道理很简单,不就是在几张卡片中找出相同的姓氏,而且这些卡片中有且仅有一个姓氏是同时存在的。但是,大家有没有想过,一个卡片上有三四十个姓氏,你给他拿去的可能加起来就是100好几个姓氏,他是怎样一眼就看出来的呢?当然,这个也不是难题,不就是给每个卡片、每个姓氏加一个唯一的标示嘛,但仔细一样,要怎样加这个标示呢?又怎么样来快速的辨认这些标示呢?
    学过计算机的人可能一下子就明白了,“二进制”,或许能帮我们解决这个问题。大家都知道一个4位的二进制可以表示16以内任意一个十进制数,那么5位,6位...11111111这个8位的二进制数相当于10进制的255,也就是说一个8位的二进制数可以表示255以内的任意一个十进制数值。那么,我们就不难想到,取出他们的权值“1,2,4,8,16,32,64”,那么255以内的任意一个10进制数值都可以通过这8个数值中的任意个数想加得到。比如说:我们分别为8张卡片(假设为:A1,A2,A3,A4,A5,A6,A7,A8)分配上述8个数值。然后为所有姓氏分配一个唯一的大于0的数值。比如有:赵(1),钱(5),孙(14),李(43),王(90),卢(104)那么我们可以得到如下集合
A1=“赵,钱,李”;
A2=“孙,李,王”;
A3=“钱,孙”;
A4=“孙,李,王,卢”;
A5=“王”;
A6=“李,卢”;
A7=“王,卢”;
如果你是个要算命的,你给我拿来A1,A3卡片,我可以很快的算出:1+4=5,既“钱”;拿来A4,A6,A7,那就是“8+32+64=104” 既“卢”。异词类推,想必大家都已经豁然开朗。如果想通过计算机实现此功能也就相当简单了,只是对每个姓氏对应的数值转换成2进制,然后根据它的权值就可以确定这个字应该放在那些卡片里,然后把选出的卡片的值想加,再查询响应的姓氏就搞定了。
    由此我们可以清楚的认识到,不管是算命还是魔术或者其他,“骗人”只是众人的一种叫法,其实,它只是科学知识的另一种用途而已,所以,不管遇到什么让我们难以想象的事情,如果仔细想想,或许能通过自己所学来揭开它的迷团
原创粉丝点击