Алгоритм довольно прост. Вам просто нужно выбрать все возможные двоичные числа, содержащие от 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);
Примечание: число чисел, которые имеют расстояние Хэмминга до K от N, может быть чрезвычайно большим, так как вскоре оно растет в геометрической прогрессии, зависит от значения K.