`

Gray码问题的程序实现

    博客分类:
  • JAVA
 
阅读更多

1 Gray码问题的程序实现用的是分治法测略递归调用:

 

 

public class Gray {
	public static void main(String[] args) {
		String[] string = new String[1 << 5];
		string = Grays(5);
		for (int i = 0; i < (1 << 5); i++)
			System.out.print(string + ".");
	}

	public static String[] Grays(int n) {
		String[] s = new String[1 << n];
		if (n == 1) {
			s[0] = "0";
			s[1] = "1";
		} else {
			int n1, n2, n3;
			n2 = n / 2; // 将n拆分成n1和n2的形式 递归调用实现
			n1 = n - n2;
			String[] s1 = new String[1 << n2];
			s1 = Grays(n2);
			String[] s2 = new String[1 << n1];
			s2 = Grays(n1);
			for (int i = 0; i < (1 << n2); i++) {
				n3 = (1 << n1) + 1; // 这个变量用户将一定位置的S调换
				for (int j = 0; j < (1 << n1); j++) {
					if (i % 2 != 0) {
						n3 = n3 - 2;
						s = s1 + s2[j];//实现有些变量的逆转
					} else
						s = s1 + s2[j];
				}
			}
		}
		return s;
	}

}

 2 这个是另一种的Gray码算法

void Gray(int n){
 
              /* 初始条件 */
 
              if(n == 1){
 
                     gs[0] = "0";
 
                     gs[1] = "1";
 
              }
 
              else{
 
                     /* 先算出n-1位所有的Gray码 */
 
                     Gray(n-1);
 
                     /* n位Gray码的后半部分是n-1位Gray码倒序再加上一个"1" */
 
                     for(int j = 1<<(n-1);j < 1<<n;j++)
 
                            gs[j] = gs[(1<<n)-j-1]+"1";
 
                     /* n位Gray码的前半部份是n-1位Gray码末尾加"0" */
 
                     for(int j = 0;j < 1<<(n-1);j++)
 
                            gs[j] = gs[j]+"0";
 
              }

 

3 第三种方法

    

public class MyGray{

public static void main(String args[]){
  Gray(4);
} 

public static void Gray(int n){
   String [] s = new String[(1<<n)];
   s[0] = new String("0");
   s[1] = new String("1");
   
   for(int i = 1;i <= n;i++){
    for(int j = 1;j <= (1<<(i-1));j++){
     s[(1<<i)-j] = s[j-1];
     s[j-1] = s[j-1]+"0";
     s[(1<<i)-j] = s[(1<<i)-j]+"1";
    }
   }
   for(int i = 0;i<(1<<n);i++){
    System.out.print(s+" ");
   }
   
  }

}

 

 

分享到:
评论

相关推荐

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

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

    gray码编写

    算法实验报告。实验一用java编写gray码程序。内容简单

    Gray码的分治构造算法

    要实现分治构造Gray码,我们需要解决的关键问题是如何将一个n位的Gray码分解为两个较小的子问题,并合并它们的解决方案。由于Gray码的特性,我们可以考虑将n位的码分解为前n/2位和后n/2位,然后分别生成这两部分的...

    Gray code-参考代码

    本题要求编写一个程序来生成给定长度n的Gray码序列。根据题目描述,输入包含多个测试用例,每个测试用例给出一个正整数n(n ≤ 16),输出为相应的Gray码序列,每个元素占一行,并且每个测试用例之间用一个空行隔开...

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

    下面以C语言为例,演示如何实现这个简单的格雷码生成程序: ```c #include // 定义格雷码生成函数 void generate_gray(int n) { int grayCode = 0; for (int i = 0; i (1 ); i++) { // 循环遍历2^n个可能的二...

    格雷码生成程序

    格雷码生成程序 在数字逻辑设计中,格雷码是一种特殊的编码方法,它使得每对连续的编码之间只有一个数位的变化。这类编码可以解决编码盘的问题。在本文中,我们将为您介绍如何使用 C++ 语言生成格雷码,以及它的...

    算法分析与设计:分治法(整数的因子分解+Gray码)(C++可执行源码+完整算法分析)

    题目 2:用分治策略设计实现 Gray 码:Gray 码是一个长度为 2 的 n 次方的序列,序列中无相同元素,每个元素都是长度为 n 位的串,相邻元素恰好只有一位不同。 输入:输入一行,包含一个整数 n,n。 输出:输出其...

    num2gray.rar_num2gray_格雷码

    在这个程序中,`num2gray.m`很可能是主函数文件,它可能包含了将十进制或二进制数转化为格雷码的算法实现。MATLAB是常用的编程环境,因此这个`.m`文件可能是用MATLAB语言编写的。MATLAB支持各种数值计算和数据处理,...

    gray code method

    格雷码(Gray Code),又称为格雷编码或无歧义二进制码,是一种特殊的二进制码,它的...在压缩包文件"gray code"中可能包含了使用不同编程语言实现格雷码转换的示例代码,你可以参考这些代码加深对格雷码的理解和应用。

    格雷码编码程序

    格雷码的快速编码程序,算法经过优化,实现起来十分迅速

    32位格雷码译码程序

    在提供的"step7.txt"文件中,很可能包含了详细的PLC程序代码,展示了如何在西门子PLC中实现32位格雷码到自然二进制码的转换。阅读并理解这段代码,可以进一步了解这个转换过程的具体实现细节。对于PLC程序员来说,...

    二进制转格雷码MATLAB程序

    在MATLAB中实现二进制转格雷码的程序,主要是利用了格雷码与二进制码之间的转换规则。这个转换过程可以通过一系列数学操作完成,例如模2加法或者位翻转。MATLAB作为一种强大的数值计算和数据可视化工具,提供了丰富...

    基于matlab实现图像的条形码识别程序(识别EAN13码),只要条形码的背景部分是纯色,程序就能有相当强的鲁棒性 .rar

    本项目是基于MATLAB实现的图像条形码识别程序,特别针对EAN13码,这是一种广泛应用于商品包装上的13位数字条形码。MATLAB作为一个强大的数学计算和数据分析工具,同时提供了丰富的图像处理函数,使得实现这样的功能...

    GRAY码对2照表

    在实际应用中,GRAY码的生成和转换可以通过逻辑电路或者软件算法来实现。对于计算机程序来说,可以编写函数或方法来将二进制数转换为GRAY码,反之亦然。对于电路设计,可以利用触发器和逻辑门等基本电子元件构成GRAY...

    geleicounter.rar_FPGA计数器_counter gray vhdl_gray code_格雷码_格雷码计数器

    对于这个"counter_gray.vhd"文件,我们可以期待它包含了用VHDL编写的格雷码计数器的代码。 格雷码计数器的设计通常涉及以下几个关键部分: 1. **计数状态**:计数器有多个状态,每个状态对应一个格雷码。例如,...

    生成格雷码图案matlab程序

    总的来说,这个MATLAB程序实现了格雷码的生成与可视化,而提供的.bmp文件可能是在特定分辨率下生成的格雷码图像,适用于结构光系统的应用。这种技术在机器人导航、工业检测、医学成像等领域都有广泛应用。通过理解和...

    这是一个非常好的基于matlab实现条形码识别程序,里面包含M程序,执行所需图片,可直接执行,对于研究条形码识别的有非常好的帮助

    这个基于MATLAB的条形码识别程序提供了一个完整的解决方案,包括M程序和所需的执行图片,方便用户直接运行和学习。 首先,我们要理解条形码识别的基本原理。条形码是由一系列黑白相间的条纹组成,这些条纹代表不同...

    Matlab仿真程序实现LDPC低密度奇偶校验码

    低密度奇偶校验码(Low-Density Parity-Check Code, LDPC)是一种现代的...总的来说,掌握Matlab环境下LDPC码的实现,不仅可以提升在通信领域的理论知识,还能提高实际问题解决能力,为今后的研究和工作打下坚实基础。

Global site tag (gtag.js) - Google Analytics