`

格雷码(Gray Code)序列Java实现 (反射式格雷码的生成算法)

阅读更多

格雷码(Gray Code)序列

现代计算机一般采用二进制来表示数据,即用0和1的组合来表示各种信息。格雷码是这样一种排列数字的方式,所有相邻整数在它们的二进制表示中只有一 个位不同。例如,下面是3bit的格雷码(注意开始和结束的数字也只有一位不同):

000 001 011 010 110 111 101 100
 0   1   3   2   6   7   5   4

格雷码具有很多重要的用途。例如,信息在传输的过程中,可能发生问题,某一位从0变到1或者反过来,格雷码的特性能够容易地检测到可能出现的奇数个 错误;在数模转换中,格雷码每次的数据变化量小,因此产生的电流脉冲变化也小,出现故障的几率会下降。格雷码还可以应用在集成电路优化、超立方体结构优 化,甚至包括图书馆书架上的书的摆放方法的优化等问题上。

 

产生格雷码的方法有多种,这里介绍反射式格雷码的生成算法:

gray code

如上图所示,一个bit的格雷码序列只有0,1;

两个bit的格雷码通过一个bit的格雷码序列产生:原始序列前面加上"0",然后把原始序列反序,前面加上"1",最后放在一起形成两个bit的 格雷码;

三个bit的格雷码用类似的方法从两个bit的格雷码产生。

 

======

本题要求生成指定bit的格雷码序列。

输入:

格雷码的位数n

输出:

对应的反射式

(请按照题目中给出的方法生成)

样例输入:

3

样例输出:

000

001

011

010

110

111

101

100

 

 

 

import java.util.Scanner;

public class Gray {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int num = (int)Math.pow(2, n);//根据输入的整数,计算出此Gray序列大小
		String[] s1 = {"0","1"};//第一个Gray序列
		for(int i=2;i<=n;i++){//循环根据第一个Gray序列,来一个一个的求
			int p = (int)Math.pow(2, i);//到了第几个的时候,来计算出此Gray序列大小
			String[] si = new String[p];
			for(int j=0;j<p;j++){//循环根据某个Gray序列,来一个一个的求此序列
				if(j<(p/2)){
					si[j] = "0" + s1[j];//原始序列前面加上"0"
				}else{
					si[j] = "1" + s1[p-j-1];//原始序列反序,前面加上"1"
				}
			}
			s1 = si;//把求得的si,附给s1,以便求下一个Gray序列
		}
		for(int i=0;i<num;i++){
			System.out.println(s1[i]);
		}
	}
}

 

 

分享到:
评论

相关推荐

    格雷码(Gray Code)序列

    格雷码(Gray Code),又称为葛莱码或格雷编码,是一种二进制数字系统,其中相邻的数值仅有一位二进制数不同。这种编码方式在数据传输、...在Java等编程语言中,我们可以通过递归或迭代算法轻松地实现格雷码的生成。

    C经典算法之格雷码(Gray Code)

    ### C经典算法之格雷码(Gray Code) #### 格雷码简介 格雷码(Gray Code)是一种特殊的编码方式,其特点在于任意两个相邻的代码仅有一位不同。这种编码方式最早由贝尔实验室的Frank Gray在1940年代提出,并在1953...

    1. 科普特序列和格雷码序列_格雷差分序列_科普特序列和格雷码序列_

    在MATLAB中,可以使用`graycode`函数生成格雷码序列。 格雷差分序列(Gray Difference Sequence)则是基于格雷码的概念,它关注的是连续格雷码之间的变化。这个序列通常用于测量系统,尤其是那些需要精确跟踪连续...

    生成格雷码图案matlab程序

    在IT领域,特别是计算机科学与图像处理中,格雷码(Gray Code)是一种重要的二进制数字系统。它最大的特点是相邻两个数值之间仅有一位不同,这使得在编码转换时能够减少错误的发生。在本主题中,我们将深入探讨如何...

    格雷码图片生成与保存C++实现代码

    最简单的格雷码生成方法是通过反射格雷码(reflected Gray code)规则,也称为循环移位格雷码。对于n位格雷码,其第i位代码可以通过将前i-1位的反码向左移一位得到。例如,对于3位格雷码,我们从000开始,依次得到...

    C语言写的产生格雷码的简单程序

    **正文** 格雷码(Gray Code),又称为格雷编码,是一种二...在实际应用中,这种方法可以轻松扩展到更复杂的场景,如生成多维格雷码或自定义格雷码序列。对于学习和理解格雷码以及C语言的位操作,这是一个很好的实例。

    格雷码生成算法

    通过以上分析,我们可以看出,该段代码实现了基于递归的格雷码生成算法,通过简单的数学运算和逻辑判断,有效地生成了指定长度的格雷码序列。这种方法不仅直观易懂,而且执行效率较高,是学习和应用格雷码生成算法的...

    格雷码算法

    本教程将深入探讨如何实现将十进制数字转换为格雷码的算法。 一、格雷码的基本概念 格雷码的每一位都是前一位的异或结果。例如,二位格雷码的序列是00, 01, 11, 10,可以看到每次只有一位变化。对于n位格雷码,其...

    格雷码问题 分治法产生n位的格雷码

    在生成格雷码的过程中,我们可以利用分治策略递归地构建n位的格雷码序列。 首先,理解n位格雷码的基本结构。对于一位格雷码,只有两种可能的值:0和1。两位格雷码有四种可能的组合:00, 01, 11, 10,其中01和10相邻...

    gray码生成组合算法的java代码

    本项目"gray码生成组合算法的java代码"是基于Java编程语言实现的,旨在结合组合数学原理生成Gray码。在实际编程中,生成Gray码通常涉及到循环移位和异或操作。下面将详细讲解这个程序可能涉及的知识点: 1. **Java...

    毕业设计-源码格雷码问题递归算法设计和实验

    格雷码(Gray Code),又称为二进制反射码,是一种二进制数字系统,它的特点是相邻两个码字之间仅有一位不同。在许多应用中,如编码器、解码器、数字测试序列以及数据通信等领域,格雷码因其独特的性质而被广泛应用...

    gray_cnt.rar_gray code verilog_gray_cnt_格雷码_格雷码计数器_计数器

    格雷码(Gray Code),又称为灰度码或无歧义二进制码,是一种特殊的二进制编码方式,它的特点在于相邻两个数值之间只有一位不同。这种编码在电子、通信、计算机等领域有着广泛的应用,比如在数据传输、编码器、解码...

    1. 科普特序列和格雷码序列.rar

    在生成科普特序列和格雷码序列时,MATLAB提供了丰富的数组操作、逻辑运算和自定义函数功能,使得编写这样的代码变得相对简单。 在提供的压缩包文件中,我们可以期待找到的MATLAB代码可能包括以下内容: 1. 用于初始...

    参考资料-格雷码Gray编码器与单片机的接口设计.zip

    格雷码(Gray Code),又称为格雷码或葛莱码,是一种非重叠的二进制编码方式,它的特点是相邻两个数值之间只有一个位元差异。这种编码在电子工程、计算机科学以及通信等领域有着广泛的应用,特别是在数据传输、编码...

    格雷码生成程序

    格雷码生成程序 在数字逻辑设计中,格雷码是一种特殊的编码方法,它使得每对连续的编码之间只有一个数位的...在本文中,我们介绍了格雷码的基本概念、生成方法和 C++ 实现,希望能够帮助您更好地理解和应用格雷码。

    C语言实现格雷码生成代码

    格雷码(Gray Code)是由Frank Gray在1953年提出的,它是一种特殊的二进制编码方式,主要特点是相邻两个代码之间仅有一位不同。格雷码最初被用于电信系统中的脉冲编码调制(PCM),现在也被广泛应用于数据传输、数字电路...

    int2gray.rar_格雷码_格雷码生成

    格雷码,又称格雷编码(Gray Code),是一种非重叠二进制编码方式,它的主要特点是相邻两个数值之间仅有一位二进制数不同。在数据传输、编码电路设计、图像处理等领域有广泛应用,比如在多路开关系统、编码器、解码...

    分治法求格雷码的C语言代码

    本文介绍了一种利用分治法求解格雷码(Gray Code)的方法,并提供了相应的C语言代码实现。格雷码是一种二进制数字系统,在该系统中,两个连续的数值其二进制表示仅有一位不同。 #### 描述解析 这段描述简要介绍了...

    C++OpenCV格雷码生成.zip

    格雷码(Gray Code)是一种非重叠二进制编码,其相邻两个数之间仅有一位不同,这在图像处理、数据传输和编码等领域具有重要应用。 首先,我们需要理解格雷码的基本概念。格雷码,又称格雷码循环码或无权码,是二...

    结构光正弦条纹 格雷码图案matlab生成程序

    在MATLAB中,可以通过循环和逻辑运算来生成格雷码序列,并将其应用于正弦条纹上,形成具有深度编码的条纹图案。 结合这两个概念,MATLAB程序会先生成正弦条纹,然后通过格雷码编码来修改条纹的相位,从而得到一系列...

Global site tag (gtag.js) - Google Analytics