自动产生N位格雷码算法
2006-03-09 23:15
169 查看
最近算法课上,老师布置了一个题目:
“格雷码”(Gray code)是一个长度为2n的序列,满足
A) 每个元素都是长度为n比特的串。
B) 序列中无相同元素。
C) 连续的两个元素恰好只有1比特的不同。例如,n=2时{00,01,11,10}
(1) 构造n=3时的“格雷码”。
(2) 利用分治策略设计一个算法对任意的n构造相应的“格雷码”
我是用了一个递归的方法来解决这个问题,下面是代码:
// 文件名:GrayCode.h
// 功 能:自动产生N位格雷码算法头文件
// 作 者:石头
// 创建日期:2006-03-05
// 修改日期:2006-03-05
#include <iostream>
#include <string>
#include <cstdio>
#include <string>
#include <stack>
#include <conio.h>
using namespace std;
//定义结点数据结构
//函数声明
void GenerateGrayCode( int n );
CodeList CreateCodeList();
void IncreaseCode( CodeList L );
void PrintGrayCode( CodeList L );
void ReleaseGrayCode( CodeList L );
char *CodeCat( char *des, char *src );
//定义全局变量
CodeList L;
// 文件名:GrayCode.cpp
// 功 能:自动产生N位格雷码算法实现文件
// 作 者:石头
// 创建日期:2006-03-05
// 修改日期:2006-03-05
#include "GrayCode.h"
void main()
void GenerateGrayCode( int n ) //算法主体
CodeList CreateCodeList() //建立链表
void ReleaseGrayCode( CodeList L ) //释放内存空间
void IncreaseCode( CodeList L) //做编码的一位扩展
void PrintGrayCode( CodeList L ) //打印编码
char *CodeCat( char *des, char *src ) //粘合两个字符串
{
char *stone = (char*)malloc((strlen(src)+strlen(des))*sizeof(char));
strcpy(stone,des);
strcat(stone,src);
return stone;
总的来说这个算法对数据结构的应用还是比较成功的,但是在性能方面还有改进的空间,当N达到100的时候就会比较慢,下次有时间要把这个算法重写一下,以得到更高的效率.
“格雷码”(Gray code)是一个长度为2n的序列,满足
A) 每个元素都是长度为n比特的串。
B) 序列中无相同元素。
C) 连续的两个元素恰好只有1比特的不同。例如,n=2时{00,01,11,10}
(1) 构造n=3时的“格雷码”。
(2) 利用分治策略设计一个算法对任意的n构造相应的“格雷码”
我是用了一个递归的方法来解决这个问题,下面是代码:
// 文件名:GrayCode.h
// 功 能:自动产生N位格雷码算法头文件
// 作 者:石头
// 创建日期:2006-03-05
// 修改日期:2006-03-05
#include <iostream>
#include <string>
#include <cstdio>
#include <string>
#include <stack>
#include <conio.h>
using namespace std;
//定义结点数据结构
//函数声明
void GenerateGrayCode( int n );
CodeList CreateCodeList();
void IncreaseCode( CodeList L );
void PrintGrayCode( CodeList L );
void ReleaseGrayCode( CodeList L );
char *CodeCat( char *des, char *src );
//定义全局变量
CodeList L;
// 文件名:GrayCode.cpp
// 功 能:自动产生N位格雷码算法实现文件
// 作 者:石头
// 创建日期:2006-03-05
// 修改日期:2006-03-05
#include "GrayCode.h"
void main()
void GenerateGrayCode( int n ) //算法主体
CodeList CreateCodeList() //建立链表
void ReleaseGrayCode( CodeList L ) //释放内存空间
void IncreaseCode( CodeList L) //做编码的一位扩展
void PrintGrayCode( CodeList L ) //打印编码
char *CodeCat( char *des, char *src ) //粘合两个字符串
{
char *stone = (char*)malloc((strlen(src)+strlen(des))*sizeof(char));
strcpy(stone,des);
strcat(stone,src);
return stone;
总的来说这个算法对数据结构的应用还是比较成功的,但是在性能方面还有改进的空间,当N达到100的时候就会比较慢,下次有时间要把这个算法重写一下,以得到更高的效率.
相关文章推荐
- 在EXCEL中自动产生图表
- xdoclet自动产生ejb remote home接口
- Oracle EBS VMI/寄售(5)--不能自动产生AP Invoice
- C# 禁止datagridview 自动产生列
- ,自动产生SQL SERVER存储过程:
- exchange 用户建立好之后,无法自动产生邮箱 问题解决
- Eclipse下Android工程无法自动产生R文件解决
- 去除MDI子窗体最大化后在MainMenuStrip上自动产生的图标和最大化、最小化等按钮(转)
- C++空类产生哪些成员函数 || C++类可以自动生成的6个成员函数
- 自动产生依存关系
- tomcat自动持久会话产生问题
- 自动产生Makefile
- 自动产生文件夹,并返回文件夹的路径
- [Ext JS 4]后台自动产生图档
- 安装WIN7时绕过自动产生100MB分区
- [导入]JSI缺陷:在自动选择编码模式下产生“不能执行已释放的JScript代码”
- JAVA Struts2 考试功能 —— 自动产生随机试题
- 利用宏自动产生Get/Set函数
- storyboard设置autolayout时子view会自动产生20边距
- 如何自动产生makefile(例子分析)