`
licweiwei
  • 浏览: 10318 次
  • 性别: Icon_minigender_1
  • 来自: SuZhou
社区版块
存档分类
最新评论

ECC Concept Rule Generation

 
阅读更多

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Zuhe  {

    public static void main(String[] args) throws Exception {
        Zuhe zhuhe = new Zuhe();
        zhuhe.printAll("1,2/9,3,4/10,5/6/7/8");
    }

    /**
     *
     */
    public void printAll(String input) throws Exception {
        String[] elementArray = input.split(",");
        Map<String, String[]> elementAlias = new HashMap<String, String[]>();
        int length = elementArray.length;
        for (int i = 0; i < length; i++) {
            if (elementArray[i].indexOf("/") > 0) {
                String[] alias = elementArray[i].split("/");
                elementArray[i] = alias[0];
                String[] aliasArray = new String[alias.length - 1];
                System.arraycopy(alias, 1, aliasArray, 0, alias.length - 1);
                elementAlias.put(alias[0], aliasArray);
            }
        }
        List<String[]> result = new ArrayList<String[]>();
        for (int i = 2; i <= length; i++) {
            result.addAll(combine(elementArray, i));
        }
        result = processAlias(result,elementAlias);
        print(result);
    }

    public List<String[]> combine(String[] elements, int m) throws Exception {
        int n = elements.length;
        if (m > n) {
            throw new Exception("m>n");
        }

        List<String[]> result = new ArrayList<String[]>();


        int[] bs = new int[n];
        for (int i = 0; i < n; i++) {
            bs[i] = 0;
        }
        //初始化
        for (int i = 0; i < m; i++) {
            bs[i] = 1;
        }
        if (m == n) {
            result.add(print(bs, elements, m));
            return result;
        }
        boolean flag;
        boolean tempFlag;
        int pos;
        int sum;
        //首先找到第一个10组合,然后变成01,同时将左边所有的1移动到数组的最左边
        do {
            sum = 0;
            pos = 0;
            tempFlag = true;
            result.add(print(bs, elements, m));

            for (int i = 0; i < n - 1; i++) {
                if (bs[i] == 1 && bs[i + 1] == 0) {
                    bs[i] = 0;
                    bs[i + 1] = 1;
                    pos = i;
                    break;
                }
            }
            //将左边的1全部移动到数组的最左边

            for (int i = 0; i < pos; i++) {
                if (bs[i] == 1) {
                    sum++;
                }
            }
            for (int i = 0; i < pos; i++) {
                if (i < sum) {
                    bs[i] = 1;
                } else {
                    bs[i] = 0;
                }
            }

            //检查是否所有的1都移动到了最右边
            for (int i = n - m; i < n; i++) {
                if (bs[i] == 0) {
                    tempFlag = false;
                    break;
                }
            }
            flag = !tempFlag;

        } while (flag);
        result.add(print(bs, elements, m));

        return result;
    }

    private String[] print(int[] bs, String[] a, int m) {
        String[] result = new String[m];
        int pos = 0;
        for (int i = 0; i < bs.length; i++) {
            if (bs[i] == 1) {
                result[pos] = a[i];
                pos++;
            }
        }
        return result;
    }

    private void print(List<String[]> l) {
        for (String[] a : l) {
            for (String anA : a) {
                System.out.print(anA + " ");
            }
            System.out.println();
        }
    }

    private List<String[]> processAlias(List<String[]> l, Map<String, String[]> alias) {
        List<String[]> result = new ArrayList<String[]>();
        result.addAll(l);
        for (String[] a : l) {
            for (int i = 0; i < a.length; i++) {
                if (alias.containsKey(a[i])) {
                    String[] aliasArray = alias.get(a[i]);
                    for (String aliasElement : aliasArray) {
                        String[] b = new String[a.length];
                        System.arraycopy(a, 0, b, 0, a.length);
                        b[i] = aliasElement;
                        result.add(b);
                    }
                }
            }
        }
        return result;
    }
}
分享到:
评论

相关推荐

    ECC算法校验工具---ECC开发

    ECC算法校验工具ECC算法校验工具ECC算法校验工具

    ECC算法c代码

    ECC(Error Correction Code,错误纠正码)是一种用于检测和纠正数据传输或存储过程中可能出现错误的技术。在IT领域,特别是嵌入式系统和存储设备中,ECC算法扮演着至关重要的角色,它能够提高数据的可靠性,确保...

    明文嵌入式ECC加密方案_明文嵌入式ECC加密方案_ECC嵌入式加密_

    ECC,全称为椭圆曲线密码学(Elliptic Curve Cryptography),是一种先进的公钥加密技术,被广泛应用于嵌入式系统中,因为其在安全性和效率方面具有显著优势。在明文嵌入式ECC加密方案中,我们通常会涉及到以下几个...

    256字节ECC代码

    ### 256字节ECC代码:深入解析与应用 #### ECC算法概览 **错误纠正码(Error Correction Code,简称ECC)**是一种在数据传输或存储过程中用于检测和纠正错误的编码技术。其核心在于能够在不重传原始数据的情况下...

    ECC和RECC的区别

    ECC和RECC的区别 ECC和RECC是两种常见的服务器内存类型,它们之间的区别在于错误检查和纠正技术的实现方式。ECC是Error Checking and Correcting的简写,中文名称是“错误检查和纠正”,它是一种校验技术,能够实现...

    ECC的verilog代码

    **错误校验编码(Error Correction Code,ECC)在数字电子系统中扮演着至关重要的角色,尤其是在内存和数据传输领域。Verilog是一种硬件描述语言,用于设计和验证数字系统的逻辑功能。本篇将深入探讨ECC在Verilog中...

    C++实现ECC算法

    ECC,全称为椭圆曲线密码学(Elliptic Curve Cryptography),是一种基于数学难题——椭圆曲线离散对数问题的公钥加密算法。它在安全性与效率方面相较于传统的RSA算法具有显著优势,尤其在处理小尺寸密钥时。在通信...

    ECC密钥生成、加密解密、签名验签工具

    ECC(椭圆曲线密码学)是一种现代的公钥加密技术,因其安全性高、效率优良而被广泛应用在网络安全、数字签名以及身份验证等领域。在这个项目中,开发者使用C语言和Visual Studio 2010创建了三个工具:ECC密钥生成器...

    ECC_C语言ECC_ECC算法_ecc_ECCC实现_

    ECC,全称为椭圆曲线密码学(Elliptic Curve Cryptography),是一种基于数学难题——椭圆曲线上的离散对数问题的公钥加密技术。它在信息安全领域中被广泛应用,因为其安全性高且密钥长度相对较短,使得计算效率更高...

    verilog_ecc_gen

    本项目"verilog_ecc_gen"专注于实现ECC(错误检测和校正码)的生成,特别是针对8位和16位数据流的编码。 ECC是一种有效的错误检测和纠正技术,特别是在存储器系统和数据传输中,它可以检测并修正由于噪声或硬件故障...

    FLASH-ECC校验算法的C语言实现

    **标题:“FLASH-ECC校验算法的C语言实现”** 在存储系统中,尤其是在嵌入式设备中,Flash存储器由于其非易失性、低功耗和高密度等特点,被广泛使用。然而,Flash存储器在多次读写操作后可能会出现数据错误,这是...

    ECC算法(基于openssl)

    ECC,全称为椭圆曲线密码学(Elliptic Curve Cryptography),是一种现代的公钥加密算法,以其高效性和安全性而被广泛应用于网络安全领域。基于OpenSSL库的ECC算法,能够实现包括密钥生成、加密和解密在内的多种功能...

    ECC加密算法源代码

    **椭圆曲线加密算法(ECC)** 椭圆曲线加密算法是一种先进的公钥加密技术,以其高效性和安全性在现代密码学中占据重要地位。ECC是基于数学中的椭圆曲线理论构建的,与传统的RSA、DSA等算法相比,ECC在相同的安全...

    ECC算法 C#实现代码

    ECC,全称为椭圆曲线密码学(Elliptic Curve Cryptography),是一种先进的加密技术,广泛应用于现代网络安全,包括数字签名、密钥交换和身份验证等领域。C#是一种常用的编程语言,尤其在开发Windows应用程序和游戏...

    ECC.zip_C++ 椭圆_ECC算法_椭圆 加密_椭圆曲线ecc_椭圆曲线算法

    相比传统的RSA等加密算法,ECC在安全性和效率上具有显著优势。在C++环境下实现ECC算法,可以有效地进行数据加密与解密,保障信息安全。 首先,我们来理解椭圆曲线的基本概念。椭圆曲线是一类代数几何对象,其数学...

    基于fpga的ecc算法实现

    **基于FPGA的ECC算法实现** 在现代电子系统中,数据存储的可靠性至关重要,特别是在非易失性存储器(如NAND Flash)中。错误校验和纠正代码(Error Correction Codes,简称ECC)是一种有效提高数据完整性的技术。...

    NAND FLASH中的ECC校验

    ### NAND Flash中的ECC校验详解 #### 一、引言 随着计算机技术的发展,数据存储设备变得越来越重要。在众多存储解决方案中,NAND Flash因其高密度、低成本等特点成为了移动设备、固态硬盘等存储领域的首选。然而,...

    ECC数字签名的实现(C语言)

    ECC,全称为椭圆曲线密码学(Elliptic Curve Cryptography),是一种现代的公钥加密算法,以其高效性和安全性在信息安全领域广泛应用。在本文中,我们将深入探讨ECC数字签名的实现,主要关注C语言的编程实践。 首先...

    ECC校验原理

    ### ECC校验原理详解 #### 一、ECC的基本概念 ECC(Error Checking and Correction)是一种广泛应用于存储器中的纠错技术,特别是针对NAND Flash这类非易失性存储器。其主要目的是检测并纠正存储过程中可能出现的...

Global site tag (gtag.js) - Google Analytics