Довідка та теорія
Код Грея (віддзеркалений двійковий код) упорядковує
2ⁿ двійкових значень так, що будь-які два
сусідні коди відрізняються рівно на
один біт. Запатентований Френком Греєм у 1953 році.
Формула XOR
Код Грея для цілого b дорівнює
g = b XOR (b >> 1). Для оберненого
перетворення складають зсуви:
b = g XOR (g>>1) XOR …
Побудова віддзеркаленням з префіксом
Почніть з 1-бітного списку [0, 1]. Щоб перейти від
n до n+1 бітів: візьміть список,
запишіть його віддзеркалення (обернену копію) знизу,
додайте префікс 0 кожному коду верхньої половини та
1 — нижньої. Властивість зміни одного біта
зберігається на лінії дзеркала.
Гамільтонів шлях на n-кубі
Розглядайте кожен код як вершину
n-вимірного гіперкуба; ребра з'єднують коди, що
відрізняються на один біт. Послідовність коду Грея — це саме
гамільтонів шлях: він відвідує кожну вершину один раз,
рухаючись одним ребром за крок.
Застосування
- Поворотні / позиційні енкодери — за крок змінюється один біт, тому неточне зчитування дає похибку щонайбільше на одну позицію замість дикого багатобітного збою.
- Карти Карно — рядки й стовпці впорядковані за Греєм, тож сусідні клітинки відрізняються однією змінною.
- Генетичні алгоритми та зменшення помилок — малі зміни значення відповідають малим змінам бітів.