← Назад к математике

Генерация всех двоичных векторов

Рекурсивная генерация всех двоичных векторов длины n

🐍 Python
n = int(input())
used = [0] * (n + 1)
Alf = list(range(0, 2))

def gen(p, n):
    if len(p) == n:
        print(*p)
        return
    for c in Alf:
        p.append(c)
        if not used[c]:
            gen(p, n)
            used[c] = 1
        used[c] = 0
        p.pop()

p = []
gen(p, n)
⚙️ C++
#include <bits/stdc++.h>
using namespace std;

vector<int> used;
vector<int> Alf;
vector<int> p;

void gen(vector<int>& p, int n) {
    if (p.size() == n) {
        for (int x : p) cout << x << " ";
        cout << "\n";
        return;
    }
    for (int c : Alf) {
        p.push_back(c);
        if (!used[c]) {
            gen(p, n);
            used[c] = 1;
        }
        used[c] = 0;
        p.pop_back();
    }
}

int main() {
    int n;
    cin >> n;
    used.resize(n + 1);
    for (int i = 0; i <= 1; i++) {
        Alf.push_back(i);
    }
    gen(p, n);
    return 0;
}

Генерация двоичных векторов

Двоичный вектор — это последовательность из нулей и единиц длины n. Общее количество таких векторов равно 2ⁿ.

Алгоритм

Применение

Генерация всех подмножеств множества (каждый бит соответствует наличию элемента).

Временная сложность: O(2ⁿ)

Формат ввода и вывода

Ввод: n — длина вектора

Вывод: все двоичные векторы длины n

Пример для n=3:

3

Вывод:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

Попробовать онлайн

Результат появится здесь...