算法设计与分析第二章习题 分治法——如何构造Gray的分治算法

如果想要快速地理解一个你不知道的算法:

    有两个办法:

    1 通过图解进行快速理解      

    在大脑中模拟处理的过程,进而进行理解。比如说中断返回的原理,快速排序,归并排序,稀疏矩阵的表示方法等。

    2.模拟一个比较小的过程,进而理清整个算法的步骤。

     通常来说,在当你被算法中的参数搞得晕头转向的时候,这是一个不错的解决办法。比如说在递归的时候,可以先带入n = 1或者n = 2 ,3,模拟一下流程,进而达到理解的目的。

    下午被这道题所困扰,代码的思想需要自己去参透。

     代码的思路:首先建一个a数组,然后在每一个a[i] 前加上1。比如a[2] = 1; 则 a[2 * 2 - 2 + 1] = a[3] = a[2] + 10 = 1+10 = 11;a[2*2 - 1 +1] = a[4] = a[1] + 10 = 0 + 10 = 10;

     比较难理解的是,a数组其实只是格雷码的一半,当进行输出的时候,代码会在n-1的格雷码之前自动添加上0,成为n的格雷码。 这样说会比较难理解,下面给出具体的例子。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值