格雷码详解(分治法)

格雷码是一个长度为2^n的序列。序列无相同元素,每个元素都是长度为n 的字符串,相邻元素恰好只有一位不同对于给定的正整数n,格雷码为满足如下条件的一个编码序列。

  1. 序列由2^n个编码组成,每个编码都是长度为n的二进制位串。
  2. 序列中无相同的编码。
  3. 序列中位置相邻的两个编码恰有一位不同。

例如n=3的格雷码

0 0 0
0 0 1
0 1 1
0 1 0
1 1 0
1 1 1
1 0 1
1 0 0

可以采用分治的方法求解

比如求解n=3格雷码

总共8个码,把前面一半码的最高位设为0,后面一半的最高位设为1

就可以把后面红色区域和黄色区域划分为n-1位格雷码

因为绿色区域,两个相邻的最高位不相同,所以其他位要相同,因此,红色区域和黄色区域的格雷码是对称的。这样就把求解n位格雷码的问题划分成了求解n-1位格雷码的问题,然后一直划分,直到分为成求解1位格雷码直接返回0,1即可。蓝色区域就是一位的格雷码。

代码:

#include<iostream>
using namespace std;
int gray[1000][1000];
int n;
int pow(int val, int n)
{int ret = 1;for(int i = 1; i <= n; i++){ret *= val;}return ret;
}void Gray(int n1, int num)
{if(n1 == 1){//一位格雷码直接返回gray[0][n-1] = 0;gray[1][n-1] = 1;return;   } //把前面一半格雷码最高位设置为0, 后面一半格雷码最高位设置为1for(int i = 0; i < num/2; i++){//gray[i][j] 表示第i个格雷码的第j位 gray[i][n-n1] = 0;gray[num-i-1][n-n1] = 1; }//求n-1次格雷码 Gray(n1-1, num/2);//n位格雷码后面一半2-n位放对称的n-1位格雷码 for(int i = num/2; i < num; i++){for(int j = n-n1+1; j < n; j++){gray[i][j] = gray[num-i-1][j];}}
}int main()
{int num;cin >> n;num = pow(2,n);Gray(n, num);for(int i = 0; i < num; i++){for(int j = 0; j < n; j++){cout << gray[i][j];}cout << endl;}return 0;
}

格雷码详解(分治法)相关推荐

  1. 【分治法】解决中位数问题、格雷码问题以及分治法直接折半存在的问题讨论————武汉理工大学算法分析实验1

    AlgorithmExperiment 算法分析课实验 分治法的核心思想是将问题分为若干子问题去,使规模一步步缩小,最终分到一步就能得出结果.要注意每个子问题需要性质相同而且相互不重复. 采用分治法完 ...

  2. 详解分治法(divide-and-conquer)及其典型应用

    什么是分治法 在昨天的文章<漫谈数据库中的join>的最后,提到Grace hash join和Sort-merge join都是基于分治思想的.分治法(divide-and-conque ...

  3. 封装成jar包_通用源码阅读指导mybatis源码详解:io包

    io包 io包即输入/输出包,负责完成 MyBatis中与输入/输出相关的操作. 说到输入/输出,首先想到的就是对磁盘文件的读写.在 MyBatis的工作中,与磁盘文件的交互主要是对 xml配置文件的 ...

  4. 李沐d2l《动手学深度学习》第二版——风格迁移源码详解

    本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...

  5. fdct算法 java_ImageSharp源码详解之JPEG压缩原理(3)DCT变换

    DCT变换可谓是JPEG编码原理里面数学难度最高的一环,我也是因为DCT变换的算法才对JPEG编码感兴趣(真是不自量力).这一章我就把我对DCT的研究心得体会分享出来,希望各位大神也不吝赐教. 1.离 ...

  6. Android 事件分发机制分析及源码详解

    Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...

  7. 【 卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10)】

    卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10) 本章主要进行卷积神经网络的相关数学原理和pytorch的对应模块进行推导分析 代码也是通过demo实 ...

  8. OpenstackSDK 源码详解

    OpenstackSDK 源码详解 openstacksdk是基于当前最新版openstacksdk-0.17.2版本,可从 GitHub:OpenstackSDK 获取到最新的源码.openstac ...

  9. Rocksdb Compaction源码详解(二):Compaction 完整实现过程 概览

    文章目录 1. 摘要 2. Compaction 概述 3. 实现 3.1 Prepare keys 过程 3.1.1 compaction触发的条件 3.1.2 compaction 的文件筛选过程 ...

  10. 源码详解Android 9.0(P) 系统启动流程之SystemServer

    源码详解Android 9.0(P) 系统启动流程目录: 源码详解Android 9.0(P)系统启动流程之init进程(第一阶段) 源码详解Android 9.0(P)系统启动流程之init进程(第 ...

最新文章

  1. tensorflow---alexnet training (tflearn)
  2. win10虚拟桌面使用方法-提高工作效率
  3. Sqlplus 联机文档学习
  4. 2013年1月第1个周末
  5. h5微信f分享链接给对方获取对方手机号_怎么加回微信删除的人?偷偷恢复,亲测有效!...
  6. 安装英文版xp时选择安装亚洲中文语言包
  7. 如何快速集成短信验证码API[图文教程]
  8. 锐炬显卡和独立显卡有什么不同?
  9. TOEFL wordlist 26
  10. 如何限制局域网计算机上网,怎么样禁止局域网用户修改电脑ip地址
  11. php博客模板源码下载,Z-BlogPHP博客学习SEM网站模板 v1.3
  12. 今日头条怎么申请开通原创,怎么快速过新手期
  13. python视频压缩算法_深度学习之图像视频压缩技术
  14. 汽车中控linux系统,特斯拉的中控系统为什么是Linux而不是Android?
  15. 51单片机c语言常用语句详解,51单片机之C语言-4.5基本语句之条件选择语句
  16. 数据分析的统计基础(下)
  17. 关于UI测试的相关及技巧
  18. Windows10编译MySQL8.0.28源码
  19. windows下使能/关闭硬件
  20. xxl-sso kisso cas三个单点登录系统分析

热门文章

  1. ap6212中串口蓝牙在linux下的使用记录
  2. MySQL Clone插件
  3. 浅谈人工智能 | 语音识别面面观
  4. 遗传算法求解带时间窗的VRP问题(python)
  5. 共轴双桨直升机飞行原理介绍
  6. OFD板式文档阅读器
  7. 删除亚马逊Kindle电子书的DRM,将AZW转为PDF格式文档
  8. python怎么设置为中文-python如何设置中文界面
  9. 百度地图只显示行政区划轮廓
  10. 项目总结 【电商后台管理系统】