Strona główna Algorytmy i Struktury Danych Kod Graya — binarny odbity i ścieżka po hipersześcianie

🔢 Kod Graya — binarny odbity i ścieżka po hipersześcianie

Poznaj kod Graya (g = b XOR b>>1), w którym każda kolejna wartość zmienia dokładnie jeden bit. Przejdź sekwencję 2ⁿ, prześledź ścieżkę Hamiltona na n-sześcianie i zobacz, dlaczego enkodery obrotowe unikają błędów wielobitowych.

Algorytmy i Struktury Danych2DŁatwy60 FPS
gray-code ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

O kodzie Graya

Kod Graya (formalnie odbity kod Graya binarny, BRGC) to uporządkowanie liczb binarnych, w którym sąsiednie wartości różnią się dokładnie jednym bitem. Wynaleziony przez Franka Graya w Bell Labs w 1947 roku i opatentowany do zastosowania w modulacji kodowo-impulsowej, eliminuje przejściowe błędy wielobitowe występujące w zwykłym systemie binarnym, gdy wiele bitów zmienia się jednocześnie — kluczowe w elektronice cyfrowej, gdzie sygnały nie mogą zmieniać się natychmiastowo. Enkodery obrotowe wału, przetworniki analogowo-cyfrowe oraz mapy Karnaugh wykorzystują własność zmiany pojedynczego bitu, by zredukować błędy przejściowe i uprościć minimalizację logiki.

Ta symulacja wizualizuje kody Graya jako ścieżkę na n-wymiarowym hipersześcianie: każda pozycja bitu odpowiada jednej osi, a każde przejście kodu Graya to krawędź sześcianu. Możesz przechodzić przez sekwencję dla n od 1 do 5, obserwując, jak przejście odwiedza każdy wierzchołek dokładnie raz — ścieżka Hamiltona na grafie hipersześcianu — oraz obserwować, jak każde przejście odwraca dokładnie jeden bit.

Najczęściej zadawane pytania

Jak konstruowany jest standardowy kod Graya z liczby binarnej?

n-bitowy kod Graya G(k) dla liczby całkowitej k jest obliczany jako G(k) = k XOR (k >> 1): weź binarną reprezentację k, przesuń ją o jedną pozycję w prawo i wykonaj XOR z oryginałem. Na przykład k=6 (binarnie 110) → 110 XOR 011 = 101 (dziesiętnie 5), dając 4. kod Graya w 3-bitowej sekwencji (0,1,3,2,6,7,5,4 dziesiętnie). Operacja odwrotna — odzyskanie k z G(k) — wymaga iteracyjnego prefiksowego XOR wśród bitów.

Dlaczego kod Graya ma znaczenie dla enkoderów obrotowych?

Enkoder obrotowy odczytuje pozycję kątową wału na podstawie wzorca segmentów odblaskowych lub przewodzących. Jeśli używany jest standardowy system binarny, przejście takie jak 7→8 (0111→1000) wymaga zmiany wszystkich czterech bitów; jeśli mechaniczny odczyt lekko się rozjeżdża, mogą zostać odczytane stany pośrednie, takie jak 0110 czy 1010, zgłaszając skrajnie błędne pozycje. Kod Graya zapewnia, że sąsiednie pozycje zawsze różnią się dokładnie jednym segmentem, więc tylko jeden bit może kiedykolwiek znaleźć się w stanie niejednoznacznym, ograniczając błędy pozycji do ±1.

Czym jest konstrukcja „odbita”, od której kod Graya wziął swoją pełną nazwę?

n-bitowy BRGC jest budowany rekurencyjnie: weź listę (n−1)-bitowych kodów Graya, poprzedź każdy zerem, by uzyskać pierwsze 2n−1 wpisów, a następnie dołącz odwróconą listę poprzedzoną jedynką. „Odbity” odnosi się do tego odwrócenia w formie lustrzanego odbicia, które zapewnia, że ostatni wpis połowy z prefiksem 0 i pierwszy wpis połowy z prefiksem 1 różnią się dokładnie jednym bitem (najstarszym). Rekurencja daje ten sam wynik co wzór XOR G(k) = k XOR (k >> 1).

Jak kod Graya jest wykorzystywany w mapach Karnaugh?

Mapy Karnaugh rozmieszczają komórki tablicy prawdy w kolejności kodu Graya wzdłuż każdej osi, tak by logicznie sąsiadujące składniki minimalne (różniące się jedną zmienną) były fizycznie sąsiadujące w siatce. Umożliwia to wizualną identyfikację prostokątów jedynek (lub zer), które odpowiadają implikantom pierwszym, upraszczając wyrażenia boolowskie. Bez uporządkowania Graya sąsiednie komórki w siatce nie byłyby logicznie sąsiadujące, co niweczyłoby sens mapy.

Czy sekwencja kodu Graya jest unikalna?

Nie. Istnieje wiele różnych sekwencji ze zmianą pojedynczego bitu dla n bitów; nazywane są kodami Graya lub cyklami Hamiltona na n-sześcianie, a ich liczba rośnie super-wykładniczo wraz z n. Odbity kod Graya binarny jest kanonicznym wyborem ze względu na prostą konstrukcję rekurencyjną i wzór XOR w postaci zamkniętej. Inne rodziny obejmują zbalansowane kody Graya (gdzie każdy bit zmienia się równie często), monotoniczne kody Graya oraz kody Snake-in-the-Box używane w korekcji błędów.

Jak kod Graya wiąże się z Wieżami Hanoi?

Sekwencja pozycji bitów zmieniających się w kolejnych wartościach kodu Graya jest dokładnie sekwencją numerów krążków przenoszonych w optymalnym rozwiązaniu Wież Hanoi: pozycja 1, 2, 1, 3, 1, 2, 1, 4, … (sekwencja linijki). Ta izomorfia oznacza, że każdy ruch w łamigłówce Hanoi odpowiada odwróceniu jednego bitu w liczniku kodu Graya, dając głębokie kombinatoryczne powiązanie między tymi dwoma problemami.

Czym jest zbalansowany kod Graya?

Zbalansowany kod Graya to taki, w którym każda pozycja bitu zmienia się niemal równie często, jak to możliwe, wśród 2n przejść. W standardowym BRGC najstarszy bit zmienia się tylko raz, podczas gdy najmłodszy bit zmienia się 2n−1 razy, tworząc bardzo nierówny rozkład. Zbalansowane kody Graya rozdzielają przejścia równomiernie, co jest ważne w zastosowaniach takich jak wyrównywanie zużycia pamięci flash i redukcja mocy przełączania w obwodach CMOS.

Jak kod Graya jest wykorzystywany w korekcji błędów?

Kody Snake-in-the-Box to ścieżki kodu Graya na n-sześcianie, gdzie żadne dwa niesąsiadujące węzły ścieżki nie są też sąsiadujące w sześcianie (ścieżka Hamiltona w formie „węża”). Tworzą samodetekcyjne kody pojedynczego błędu: dowolny błąd pojedynczego bitu w słowie kodowym przenosi je do węzła niebędącego słowem kodowym. Kody Coil-in-the-Box osiągają większą minimalną odległość Hamminga. Te kody kombinatoryczne pojawiają się w obliczeniach odpornych na awarie i systemach przechowywania danych.

Czy kody Graya można zdefiniować dla niebinarnych systemów liczbowych?

Tak. Istnieją zbalansowane trójkowe kody Graya, kody Graya o mieszanej podstawie oraz kody Graya dla permutacji. Algorytm Steinhausa-Johnsona-Trottera generuje wszystkie permutacje N elementów poprzez sąsiednie transpozycje, co jest permutacyjnym odpowiednikiem kodu Graya ze zmianą pojedynczego bitu. Są one wykorzystywane w algorytmach przeszukiwania wyczerpującego, które wyliczają permutacje lub kombinacje z minimalną zmianą między kolejnymi stanami.

Jak kod Graya upraszcza projektowanie obwodów cyfrowych?

W sekwencyjnych automatach stanów (FSM) kodowanie stanów w kodzie Graya zapewnia, że przejścia stanów wymagają zmiany tylko jednego przerzutnika naraz. Eliminuje to przejściowe stany usterkowe, które mogłyby wywołać niezamierzoną logikę, redukując zużycie energii i poprawiając marginesy czasowe. Narzędzia projektowe FPGA często automatycznie oferują kodowanie FSM w kodzie Graya jako opcję, gdy projektant wybiera style kodowania „bezpieczne” lub „one-hot-sąsiadujące”.

O tej symulacji

Ta symulacja buduje odbity binarny kod Graya dla wybranej liczby bitów i animuje go jako spacer po n-wymiarowym hipersześcianie. Każda liczba całkowita jest przekształcana wzorem g = b XOR (b >> 1), więc kolejne kody zawsze różnią się jednym bitem. Spacer jest ścieżką Hamiltona; drugi widok mapuje go na tarczę enkodera obrotowego, trzeci jako tabelę.

🔬 Co pokazuje

Widok hipersześcianu rysuje wierzchołki i krawędzie n-sześcianu, śledząc ścieżkę Hamiltona zielonym śladem i oznaczając bieżący kod. Widok enkodera zacienia koncentryczne pierścienie jak prawdziwa tarcza enkodera obrotowego. Widok tabeli wypisuje każdy indeks z wartościami binarnymi i Graya, podświetlając odwrócony bit.

🎮 Jak korzystać

Przełączaj widoki przyciskami Hipersześcian, Enkoder i Tabela. Suwak liczby bitów n (2–6) ustala, ile bitów, a więc 2ⁿ kodów, się pojawia. Prędkość (0,2–4) ustala, jak szybko postępuje Odtwarzanie; Krok przesuwa o jeden kod naraz; Reset wraca do kodu 000.

💡 Czy wiesz, że?

Frank Gray złożył patent na ten kod w 1947 roku w Bell Labs, pracując nad modulacją kodowo-impulsową; został on przyznany w 1953 roku, dekady zanim kod stał się standardem w enkoderach obrotowych i mapach Karnaugh.

Najczęściej zadawane pytania

Co dokładnie pokazują trzy tryby widoku (Hipersześcian, Enkoder, Tabela)?

Widok hipersześcianu rysuje wierzchołki i krawędzie sześcianu i śledzi ścieżkę Hamiltona w miarę postępu sekwencji. Widok enkodera renderuje te same kody jako koncentryczne pierścienie na tarczy, jak fizyczny enkoder obrotowy. Widok tabeli wypisuje kody binarne i Graya obok siebie.

Co oznacza statystyka „zmieniony bit”?

Podaje, która pozycja bitu zmieniła się między poprzednim a bieżącym kodem Graya, licząc od najstarszego bitu. Pokazuje myślnik przed pierwszym krokiem, a następnie indeks taki jak #0 lub #1 — zawsze dokładnie jeden bit.

Dlaczego układ hipersześcianu zmienia się przy przesuwaniu suwaka liczby bitów n?

Każdy bit dodaje oś: 2 bity tworzą kwadrat, 3 bity sześcian, a do 4 bitów są spłaszczane przy użyciu ustalonego kierunku na bit. Powyżej 4 bitów układ przełącza się na okrąg, rozmieszczając wszystkie 2ⁿ kody równomiernie, ponieważ płaska projekcja staje się nieczytelna.

Czym są koncentryczne pierścienie w widoku Enkodera?

Każdy pierścień reprezentuje jeden bit, przy czym pierścień najbardziej zewnętrzny to najstarszy bit. Segment zapala się, gdy ten bit ma wartość 1 dla kodu pod danym kątem, więc tarcza odtwarza wzorzec, jaki prawdziwy absolutny enkoder obrotowy drukuje na swoim kole kodowym.

Czym różnią się sterowania Odtwarzanie, Krok i Reset?

Odtwarzanie animuje w sposób ciągły z tempem ustawionym przez Prędkość, postępując o jedną krawędź naraz aż do ostatniego kodu. Krok przesuwa dokładnie o jeden kod i zatrzymuje się. Reset wraca sekwencję do indeksu 0 i zatrzymuje trwającą animację.

Podobne symulacje