自动生成格雷码算法
来源:互联网 发布:java object wait 编辑:程序博客网 时间:2024/05/29 19:26
典型的二进制格雷码(Binary Gray Code)简称格雷码,在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。
自动生成格雷码的算法主要利用以下规则:
1. 1位格雷码有两个码字。
2. (n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0。
3. (n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1。
4. (n+1)位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1。
简而言之,就是后面的格雷码等于其相邻的前面的格雷码按顺序书写,加前缀0,再按逆序书写,加前缀1。如下图所示:
按照这个思路很容易的实现代码:
void generaterGrayCode(int n){vector<string> grayCodeVec;//当n为1的时候的格雷码string aa = "0";string bb = "1";grayCodeVec.push_back(aa);grayCodeVec.push_back(bb);//产生大于两位的格雷码,n位格雷码的数量为2^n个if (n > 1){for (int i = 2; i <= n; i++){//设置一个临时存储空间来存储n-1位格雷码vector<string> tempGrayCodeVec;for (size_t k = 0; k < grayCodeVec.size(); k++){tempGrayCodeVec.push_back(grayCodeVec[k]);}//在前面产生的n-1位格雷码前面添加一位数0产生2^(n-1)个n位格雷码,并替换掉原来的n-1位格雷码int tempGrayCodeVecSize = tempGrayCodeVec.size();for (int j = 0; j < tempGrayCodeVecSize; j++){string tempbitzero = "0";tempbitzero += tempGrayCodeVec[j];grayCodeVec[j] = tempbitzero;}//将前面产生的n-1位格雷码的顺序反转//在反转后的n-1位格雷码前面添加一位数1产生剩下2^(n-1)个n位格雷码,并存储起来for (int jj = tempGrayCodeVecSize-1; jj >= 0; jj--){string tempbitone = "1";tempbitone += tempGrayCodeVec[jj];grayCodeVec.push_back(tempbitone);}//释放掉临时存储空间tempGrayCodeVec.clear();}}//输出n位格雷码for (size_t i = 0; i < grayCodeVec.size(); i++){cout << grayCodeVec[i] << endl;}cout << endl;}
完整代码下载链接http://download.csdn.net/detail/qq_22980439/9482303
0 0
- 自动生成格雷码算法
- 也谈自动生成格雷码算法
- 自动生成格雷码
- 微博用户标签自动生成算法
- 任意多边形三维屋顶自动生成算法
- 微博用户标签自动生成算法
- 格雷码生成算法
- 《一种宋词自动生成的遗传算法及其机器实现》
- PHP树生成迷宫及A*自动寻路算法
- 自动生成
- 基于粒子群算法的软件测试用例自动生成算法
- 生成算法
- 生成新类时自动生成注释
- C#生成安装文件后自动附加数据库的思路跟算法
- C#生成安装文件后自动附加数据库的思路跟算法
- 用计算机自动作曲?Wolfram的手机铃声生成算法
- C#生成安装文件后自动附加数据库的思路跟算法
- C#生成安装文件后自动附加数据库的思路跟算法
- 获取目录下的普通文件数目
- Mysql命令大全
- Swift UIAlertView/UIActionSheet
- android视图学习---什么是Overdraw?
- 在FreeBSD上安装Bugzilla
- 自动生成格雷码算法
- ADB启动相应的广播、服务、图形界面
- jquery树形控件Ztree 使用
- springmvc 基本原理和helloworld
- calibre recipe抓取中没有注意的空格
- 实现自己的ls命令
- 使用JMeter对Tomcat进行压力测试与Tomcat性能调优
- DevExpress RibbonForm的标题栏(Title Caption)中文显示不全
- Linux下获取进程状态