算法导论 思考题 4-5

这题实在没什么思路,网上找了一下答案。

基本思路是这样的:如果检测结果两块都是好的,则随意拿出来一块参与下一轮检测;一好一坏或者都是坏的,则一块都不拿;如果两两检测完剩余一块,也拿进来参与下一轮检测。

如果一开始就能够确定好的芯片多于坏的,则可以保证每轮检测结束好的芯片都多于坏的,一直到最后如果剩2块芯片,则两块肯定都是好的;剩3块芯片就再检测一次,如果结果都是好的,就随意取一片必定是好的;如果结果都是坏的,则剩下的那块肯定是好的。

来证明一下上面的结论:

设有x组好芯片,y组一好一坏的芯片,z组坏芯片,一共A块好的芯片,B块坏的芯片。可以看到A=2x+y,B=2z+y,当然可能还有一块多出来的,等会儿再讨论。

假设一开始就已知A>B,则2x+y>2z+y,可得x>z。某一轮检测结束剩下x个好芯片和z个坏芯片,还是有x>z,所以好芯片还是多于坏芯片。而且x+z<x+y+z,可得每次检测完都小于原规模的一半。

如果有一块多出来:

1、假设它是好的,则A=2x+y+1,由A>B得,2x+y+1>2z+y,得x+1/2>z,所以x+1>z,所以好芯片还是多于坏芯片。x+z+1<=x+y+z+1/2,可得每次检测完都小于原规模的一半。

2、假设它是坏的,则B=2z+y+1,由A>B得,2x+y>2z+y+1,得x>z+1/2,所以x>=z+1,好芯片还是多于坏芯片。x+z+1<=x+y+z+1/2,可得每次检测完都小于原规模的一半。

综上,可以证明这个方法是正确的,只要A>B,就一定能在最后一轮检测出一块好的芯片。

检测一块好的芯片递归式为:T(n)=T(n/2)+θ(n),时间复杂度θ(n),再用这块好的芯片去重新检测剩下的所有芯片,时间复杂度θ(n)。所以总共时间复杂度还是θ(n)。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值