![]() |
|
|
![]()
|
|
| getch2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 Короткая формулировка задачи: Оптимально перебрать все варианты битового массива, имея один дополнительный бит - флаг инвертирования. |
|||
|
||||
| getch2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 4.1.2011 Репутация: нет Всего: нет |
После наводки на код Грея задачу можно считать решенной.
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
всё проще гораздо
то, что можно менять независимо любые ячейки, означает, что можно построить любую комбинацию т.к. инвертированные комбинации считаются одинаковыми, нужно из них оставить только одну например, ту, у которой первый бит 0 так что устанавливаем первый бит в 0, а для остальным перебираем все возможные комбинации (2^(n-1)) -------------------- qqq |
|||
|
||||
| getch2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 4.1.2011 Репутация: нет Всего: нет |
Спасибо, но проще кода Грея решения быть не может.
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
упс... извиняюсь
не заметил "наименьшее количество операций" -------------------- qqq |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |