|
Оптимальный перебор всех значений битового массива
Есть массив длины N, в котором элементы могут принимать значения либо 0, либо 1.
Над ним можно проводить только два вида операций:
1. Менять ячейку массива на противоположную (0 -> 1, 1 -> 0).
2. "Инвертировать" массив - все значения в ячейках заменяются противоположными.
Требуется найти оптимальный алгоритм (наименьшее количество операций) перебора всех возможных вариантов массива для произвольной его длины (N).
Первым вариантом массива считается массив со всеми нулевыми значениями в ячейках.
Замечание:
Массив и его "инвертированный" вариант считаются одинаковыми. Например, 01000 == 10111.
Решение задачи для N = 1:
1. 0
Решение задачи для N = 2:
1. 00
2. 01
Решение задачи для N = 3:
1. 000 - 0
2. 010 - 2
3. 110 == 001 - 1
4. 100 == 011 - 3
Решение задачи для N = 4:
1. 0000 - 0
2. 0010 - 2
3. 0110 - 6
4. 1110 == 0001 - 1
5. 1010 == 0101 - 5
6. 1011 == 0100 - 4
7. 0011 - 3
8. 0111 - 7
Короткая формулировка задачи:
Оптимально перебрать все варианты битового массива, имея один дополнительный бит - флаг инвертирования.
|