从零开始学算法:基于Python
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2.1 可恶的假币

什么是假币?顾名思义就是假的货币,当没有数字货币的时候,人们通常会使用纸币或者硬币进行交易,在使用实体货币进行交易的时候,人们第一件事就是检查货币是不是假的。笔者很不幸,在一次买菜的时候,找零收到了16枚硬币,好心的邻居告诉笔者其中一枚硬币是假的,收到假币让人很气愤,为了防止假币继续骗人,笔者想找出这个假币然后扔掉,因为假币通常比真币轻一些,基于这种判别方法,笔者进行了如下操作。

笔者当时想的策略很简单,先比较硬币1和硬币2的质量,如果硬币1比硬币2轻,则硬币1是假币,任务完成。如果硬币2比硬币1轻,则硬币2是假币。如果两枚硬币的质量相等,说明两个硬币都是真币,我们继续比较硬币3和硬币4;同样,如果有某一枚硬币较轻,则可以检测出假币,任务顺利完成。如果没有较轻的硬币,我们继续比较硬币5和硬币6。按照这种方式比较,最多进行8次质量比较就可以确定假币的存在并找出这个假币,这种比较方式的时间复杂度是On)。那么除了笔者这个简单的算法,还有更优的寻找假币的策略吗?