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

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

    有两个办法:

    1 通过图解进行快速理解      

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

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

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

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

算法设计与分析第二章习题 分治法——如何构造Gray的分治算法    下午被这道题所困扰,代码的思想需要自己去参透。

     代码的思路:首先建一个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的格雷码。 这样说会比较难理解,下面给出具体的例子。

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