Нерекурсивное понимание алгоритма кода Грея

Это задание из книги алгоритмов.

Дело в том, что я совершенно не знаю, с чего начать!

Trace the following non-recursive algorithm to generate the binary reflexive
Gray code of order 4. Start with the n-bit string of all 0’s. 
For i = 1, 2, ... 2^n-1, generate the i-th bit string by flipping bit b in the 
previous bit string, where b is the position of the least significant 1 in the 
binary representation of i. 

Итак, я знаю, что код Грея для 1 бита должен быть 0 1на 2 00 01 11 10 и т.п.

Много вопросов

1) Знаю ли я, что для n = 1 я могу начать с 0 1?

2) Как я должен понимать "начать с n-битной строки всех 0"?

3) "Предыдущая битовая строка"? Какая строка является "предыдущей"? Предыдущее значит от младшего n-битного? (например, для n=2, предыдущий является тем из n = 1)?

4) Как мне даже преобразовать 1-битные строки в 2-битные строки, если единственная операция - перевернуть?

Это меня сильно смущает. Единственный "человеческий" метод, который я до сих пор понимаю: взять наборы из младшего n-бита, продублировать их, инвертировать 2-й набор, добавить 0 в каждый элемент 1-го набора, добавить 1 в каждый элемент 2-го набора. Готово (пример: 0 1 -> 0 1 | 0 1 -> 0 1 | 1 0 -> 00 01 | 11 10 -> 11 01 11 10 сделанный.

Спасибо за любую помощь

1 ответ

Решение

Ответ на все четыре ваших вопроса состоит в том, что этот алгоритм не начинается с более низких значений n, Все генерируемые им строки имеют одинаковую длину, и i-th (за i = 1,..., 2n-1) строка генерируется из (i-1)-th один.

Вот первые несколько шагов для n = 4:

Начните с G0 = 0000

Чтобы сгенерировать G1, переверните 0-th бит в G0, как 0 позиция наименее значимой 1 в двоичном представлении 1 = 0001б. G1 = 0001,

Чтобы сгенерировать G2, переверните 1-st бит в G1, как 1 позиция наименее значимой 1 в двоичном представлении 2 = 0010б. G2 = 0011,

Чтобы сгенерировать G3, переверните 0-th немного в G2, как 0 позиция наименее значимой 1 в двоичном представлении 3 = 0011б. G3 = 0010,

Чтобы сгенерировать G4, переверните 2-nd немного в G3, как 2 позиция наименее значимой 1 в двоичном представлении 4 = 0100б. G4 = 0110,

Чтобы сгенерировать G5, переверните 0-th немного в G4, как 0 позиция наименее значимой 1 в двоичном представлении 5 = 0101б. G5 = 0111,

Другие вопросы по тегам