Генерация всех полиномов с коэффициентами 0 или 1 заданной степени n

Я пытаюсь перечислить в "C#" все возможные полиномы с учетом степени. Есть ли алгоритм для перечисления всех возможных многочленов заданной степени n? Может быть, я не знаю, как точно задать этот вопрос, но это примеры

например:

для n=1

x+1    return [1 1]
x      return [1 0]

для n=2

x^2+x+1  return [1 1 1]
x^2+x    return [1 1 0] 
x^2      return [1 0 0]
x^2+1    return [1 0 1] 

для х =3

x^3           return [1 0 0 0]
x^3+x^2       return [1 1 0 0]
x^3+x         return [1 0 1 0]
x^3+x^2+x     return [1 1 1 0]
x^3+1         return [1 0 0 1]
x^3+x^2+1     return [1 1 0 1]
x^3+x+1       return [1 0 1 1]
x^3+x^2+x+1   return [1 1 1 1]

Любой псевдокод или алгоритм помогут.

1 ответ

Решение

Установите самый левый бит, затем сделайте двоичный счетчик на правильных n битах. На самом деле вам нужно n+1 бит, чтобы учесть x^0 (в моей первой попытке я был выключен на 1).

Вы можете создать перечисление следующим образом:

IEnumerable<int[]> GenPolys(int n)
{
    int[] a = new int[n + 1];
    a[0] = 1;
    bool ok = true;
    while (ok)
    {
        yield return a;
        ok = false;
        for (int i = 1; i < a.Length; i++)
        {
            a[i] = 1 - a[i]; // flip the ith bit
            if (a[i] == 1)
            {
                ok = true;
                break;
            }
        }
    }
}

Использование:

foreach (int[] poly in GenPolys(4))
{
    // your code here
}
Другие вопросы по тегам