Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимальный перебор всех значений битового массива 
:(
    Опции темы
getch2
Дата 4.1.2011, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.1.2011

Репутация: нет
Всего: нет



Есть массив длины 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

Короткая формулировка задачи:
Оптимально перебрать все варианты битового массива, имея один дополнительный бит - флаг инвертирования.
PM   Вверх
getch2
Дата 4.1.2011, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.1.2011

Репутация: нет
Всего: нет



После наводки на код Грея задачу можно считать решенной.
PM   Вверх
maxim1000
Дата 4.1.2011, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



всё проще гораздо

то, что можно менять независимо любые ячейки, означает, что можно построить любую комбинацию
т.к. инвертированные комбинации считаются одинаковыми, нужно из них оставить только одну
например, ту, у которой первый бит 0

так что устанавливаем первый бит в 0, а для остальным перебираем все возможные комбинации (2^(n-1))


--------------------
qqq
PM WWW   Вверх
getch2
Дата 4.1.2011, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.1.2011

Репутация: нет
Всего: нет



Спасибо, но проще кода Грея решения быть не может.
PM   Вверх
maxim1000
Дата 4.1.2011, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



упс... извиняюсь
не заметил "наименьшее количество операций"


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.