algorithm - 海明级数的产生

标签 algorithm combinatorics hamming-code

我一直在尝试解决一个编程问题,其中一个模块要求我生成汉明序列。该函数首先输入两个数字,一个是二进制数 N,另一个是十进制数 K。它现在应该生成所有可能的数字,这些数字与 N 的汉明距离最大为 K。

如果你能提供一个关于如何解决这个问题的算法,那将非常有帮助。

提前致谢。

最佳答案

算法非常简单。您只需要选择所有可能包含从 0 到 K 的二进制数。然后将它与 N 异或,就像这样:

    public static Char[] Xor(Char[] a, Char[] b)
    {
        Char[] c = new Char[a.Length];
        for (Int32 i = 0; i < a.Length; ++i)
            if (a[i] == b[i])
                c[i] = '0';
            else
                c[i] = '1';

        return c;
    }

    public static void Generate(Char[] original, Char[] current, int position, int k)
    {
        if (position == original.Length)
        {
            Console.WriteLine(Xor(original, current));
            return;
        }

        if (k > 0)
        {
            current[position] = '1';
            Generate(original, current, position + 1, k - 1);
        }

        current[position] = '0';
        Generate(original, current, position + 1, k);
    }

    // Find all Number with hamming distance up to 2 from 01100
    Generate("01100".ToCharArray(), "00000".ToCharArray(), 0, 2);

注意:从 N 到 K 的汉明距离的数字的数量可能非常大,因为它会很快呈指数增长,这取决于 K 的值。

关于algorithm - 海明级数的产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093493/

相关文章:

algorithm - 给定一个排序数组,找到重复值的最大子数组

algorithm - 在排序数组中查找所有重复项和缺失值

java - 计算两个给定的具有相同属性的二进制数之间存在多少个具有 X 个 1 位的二进制数

java - 如何阻止列表将 1 和 0 的混合转换为全 0?

communication - 汉明码是如何工作的?

python - 找到两个列表之间的 n 个最大差异

c++ - C++中最长的非重复子串

matlab - 为什么我计算的结果和matlab计算的不一样?

c++ - 计算大型组合

python - 如何在 Python 3 中将迭代过程扩展到大尺寸