一、问题描述:
找假币问题:一个袋子里有30个硬币,其中一枚是假币,并且假币和真币一模一样,仅凭肉眼无法区分,仅知道假币比真币轻一些,用分治策略找出假币。
二、算法描述:
划分的思想,但是注意奇数和偶数的情况的下的不同处理。
-
偶数情况:
平均分为左右两块,再比较左右两边重量的差异,对于轻的一方,再度调用该函数进行比较,问题规模减半。如若两边重量一致,则没有假硬币。当问题处理最终硬币个数为一个的时候,递归终止,该硬币即为假硬币。
-
奇数情况:
对于位于中间的硬币进行单独的处理,再将剩下的硬币进行平均分配,比较左右两边硬币的总重量,轻一方包含着假硬币,问题规模减半,再度调用该函数对于这一部分硬币进行处理,当两边重量一样时,就对单独分离出来中间位置的硬币和其他的硬币进行重量的比较,如果重量不一样,该硬币即为假硬币,否则就没有假硬币。
当问题规模削减到一个的时候,该硬币即为假硬币,递归调用终止