【计算机】如何科学的扔鸡蛋?计算机算法的研究

【计算机】如何科学的扔鸡蛋?计算机算法的研究

00:00
08:28

粉丝福利 

严伯钧的硬派科普秀交流群来啦,跟着严老师一起聊聊科普、了解物理界新动向、第一时间get严老师的活动消息,还有不定期的社群活动福利哦。


入群方式

微信添加yan_bojun,并回复:科普秀,我们将会邀请你入群。


欢迎每一位在听《严伯钧的硬派科普秀》的你的到来。


精华笔记 

计算机研究的前沿领域是算法的研究。


一、什么是算法?

1. 算法就是在面对一个具体问题的时候,计算机所采取的解决问题的方法;


2. 譬如有两个鸡蛋和一栋一百层高的建筑,我们现在要检验从哪一层楼开始扔鸡蛋,鸡蛋会碎;


3. 比较笨的办法当然是用一个鸡蛋一层层地往下扔。但是如果运气不好,最多要试100次鸡蛋才会碎;


4. 因为我们有两个鸡蛋,比较聪明的办法是先每10层楼扔一次鸡蛋,试出具体是第几个十层开始鸡蛋会碎。譬如扔到80层的时候,鸡蛋碎了,那么第二个鸡蛋就可以从71层开始扔,最多再扔9次就可以试出结果。很显然这种算法比第一种算法快;


5. 算法研究就是针对同一个问题,尽量找到快速的方法,让计算的步骤减少;


二、复杂度

6. 算法有复杂度的概念,也就是针对一个具体问题,某个算法最多要多少步能完成解答。如果问题的规模是N的话,复杂度通常是关于N的函数;


7. 譬如你从图书馆借了64本书,但是走出图书馆的时候警报器响了,已知其中只有一本书没有消磁,那么应该怎么利用警报器测试出哪本书没有消磁呢?


8. 比较笨的方法,当然是一本本地试,最多要试64次才能试出来,这种算法的复杂度就是64;


9. 另一种算法是你可以把64本书分成两组,每组32本,看哪组会让警报器响。再把响的那一组分成两组,再去试,重复刚才的操作,只要6次就能试出结果。这个算法的复杂度就是6,也就是log2^N;


10, 很明显第二种算法的复杂度是更低的,算法的研究就是要尽量找到复杂度低的算法;


三、加密算法

11. 解决问题的算法基本都是解密算法,与之相应的还有加密算法;


12. 例如在一个荒岛上有两个人A和B。A有一把锁叫A锁,只有A自己的钥匙可以打开,B也有一把锁叫B锁,只有B自己的钥匙可以打开。A和B分别在小岛两端,这时B受了伤,A手上有药,岛上还有一个人C可以负责运送药物。A有一个箱子,这个箱子上可以挂多把锁。A想要把药放在箱子里让C运送给B,又不想让C有机会偷走箱子里的药。问A和B要怎么操作,才能成功地把药送到B手上?


13. 可行的操作是这样的:A先把药放在箱子里,用A锁把箱子锁上,让C把上锁的箱子带给B。B再把自己的锁也锁在箱子上,再让C把箱子带给A。A解开自己上的A锁,再让C把箱子带给B,最后B解开自己上的B锁,就能拿到药了。这就是所有加密过程的基本逻辑。


以上内容来自专辑
用户评论
  • zhuoyuqian

    设x为最优步数,可得公式 (x+1)*x/2=100,解得x等于14(向上取整)。最优解应该是14步,第一次扔是14层,如果不碎,往上增加的楼层数递减。如果碎了,再逐个实验。

    zhuoyuqian 回复 @zhuoyuqian: 设x为最优步数,那第一次就是在第x层扔,如果不碎,就往上走x-1层再扔,不碎,再上走x-2层,以及类推,最后是往上走1层再扔,这时应该是走到顶楼了。那我们总共走的楼层数是x+(x-1)+(x-2)+....+2+1,这是个等差数列求和,等于了公式(x+1)*x/2。然后又因为到顶楼了,那就等于100了,这样公式就出来了。 手机码公式实在不易,觉得好的请点赞。

  • 1530260qpas

    设ax2+bx+c=0 x等于二a分之副b加或减b减4ac的平方 老师我敲的对嘛

    严伯钧 回复 @1530260qpas: 最后是根号下b平方减4ac,不是平方

  • 彼岸不可知

    测100层,每次取中间楼层,最多7次就能算出鸡蛋从哪层摔下会碎

    严伯钧 回复 @彼岸不可知: 这样确实快,但是没有那么多鸡蛋,限定条件是只有2个鸡蛋可以用。

  • 八年级侠客

    先从14层扔,再往上13层扔,再往上12层扔…

    严伯钧 回复 @八年级侠客: 对 差不多是这样,具体从几开始可以多算算,我有点不太记得了。

  • 锦鲤是帅哥

    两个人分别从1到50和51到100扔,最多50次

    严伯钧 回复 @锦鲤是帅哥: 要算最少。

  • 13803360ipl

    如果扔的是恐龙蛋会发生什么事呢?

    严伯钧 回复 @13803360ipl: 理想模型,不考虑这些细节。

  • panomax

    用鸡蛋做例子不太好吧。而且就算是铁蛋也要考虑每一次挨摔的损耗。只有每次都用崭新的蛋才能测。

  • 嘻嘻顽童

    如果要达到最少那就需要开始的时候不是以10为单位固定的增加,而是要开始的时候大一些,后续慢慢减少。比如开始16层然后每次就少一层,递减规律实现。老师说最多试17次,所以开始第一次就是17,碎了的话在1-16层实验了。然后依次16、15、14、13往下减少就行。但是这个结果应该是每次都要17,而以十层为单位最多20步

    严伯钧 回复 @云江左岸_: 思路是对的,用简单的穷举法也行,答案应该是14次。

  • 人之初900

    第二个鸡蛋也从中间的楼层开始扔

    我们丶若相知 回复 @人之初900: 那第一个蛋试出来是70-80之间的楼层 第二个蛋从75层开始试 万一是71层 那75层就破了 岂不是试不出来?