zoukankan      html  css  js  c++  java
  • [置顶] 程序员必知(四):找次品

    用天平找次品问题

    具体问题是有一堆硬币(n个),其中有一个较轻的是次品,用天平称,至少称多少次才能找出此次品?

    很多人直接想到的就是二分法,先均分为2份,然后称,次品一定在较轻的一边,然后继续二分,直到找到那个次品,所以需要log以2为底n的对数次。其实还有更好的方法,此方法的局限在于认为天平一次只能分出来两种状态。其实是可以分成三种状态的。


    方法如下:

    每次把待测物品分成三组,称其中两组,这时候我们就可以分辨出次品在哪一组中。如果天平平衡,则次品在没有称的那一组中,否则,次品在较轻的一组中。此时物品有n/3个, 然后继续这样称, 可以看到,每次都会将原物品数删去2/3,所以总的此时是log以3为底n的对数次

    关系为:
    物品数目n                                         次数m
         2-3                                                    1
         4-9                                                    2
       10-27                                                  3
       28-81                                                  4 
       82-243                                                5

    其实这道题还可以进行变体,如有一堆硬币(n个),其中有一个较轻的是次品,如果要求用天平称m次就能将此次品找到,求最大的n

    同理可知,答案是3的n次方

    原文:http://blog.csdn.net/hongchangfirst/article/details/17249253

    作者:hongchangfirst

    hongchangfirst的主页:http://blog.csdn.net/hongchangfirst


     

    程序员必知(一):CSRF跨站请求伪造

    程序员必知(二):位图(bitmap)

    程序员必知(三):一分钟知道URI编码(encodeURI)

    程序员必知(四):找次品

  • 相关阅读:
    python 操作数据库
    python学习
    Java学习(十)
    Java学习(九)
    Java学习(八)
    Java学习(七)
    Java学习(六)
    Java学习(五)
    Java学习(四)
    Java学习(三)
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3469152.html
Copyright © 2011-2022 走看看