Alfabet źródłowy:
Alfabet kodu:
Pomyślałem, że aby kod był unikalnie dekodowalny, musiał być bez prefiksów. Ale w tym kodzie słowo kodowe jest na przykład prefiksem słowa kodowego , więc nie jest wolne od prefiksu. Jednak mój podręcznik mówi mi, że jego odwrotność jest wolna od prefiksu (nie rozumiem tego), a zatem jest wyjątkowo dekodowalna. Czy ktoś może wyjaśnić, co to znaczy lub dlaczego jest wyjątkowo dekodowalne? Wiem, że zaspokaja nierówność Krafta, ale jest to tylko warunek konieczny, a nie wystarczający.
encoding-scheme
2000moliver
źródło
źródło
c
może być prefiksemb
if
, ale pozostałe przyrostki nie istnieją w kodzie. Po odwróceniu kodu sufiksy stają się prefiksami, a następnie stają się wolne od prefiksów.Odpowiedzi:
Twój kod ma właściwość polegającą na tym, że jeśli odwrócisz wszystkie słowa kodowe, otrzymasz kod prefiksu. Oznacza to, że Twój kod jest jednoznacznie dekodowalny.
Rzeczywiście, rozważ dowolny kod którego odwrotne jest jednoznacznie dekodowalne. Twierdzę, że jest również wyjątkowo dekodowalny. Wynika to z tego, że Słowami, dekompozycje język słów kodowych są odpowiednio jeden do jednego z dekompozycje na słowa kodowe o . Ponieważ te ostatnie są wyjątkowe, tak samo są te pierwsze.do= x1, … , Xn doR: = xR1, … , XRn do w = xja1… Xjam jeśli i tylko jeśli wR= xRjam… XRja1. w do wR doR
Ponieważ kody prefiksów są jednoznacznie dekodowane, wynika z tego, że rewers kodu prefiksu jest również jednoznacznie dekodowalny. Tak jest w twoim przykładzie.
Nierówność McMillana stwierdza, że jeśli można jednoznacznie zdekodować, to Innymi słowy, unikalnie dekodowalny kod spełnia nierówność Krafta. Dlatego jeśli wszystko, co Cię interesuje, to zminimalizowanie oczekiwanej długości słowa kodowego, nie ma powodu, aby szukać poza kodami prefiksów.do ∑i = 1n2)- | xja|≤ 1
Sam Roweis podaje w swoich slajdach dobry przykład unikalnie dekodowalnego kodu, który nie jest ani kodem prefiksu, ani odwrotnością kodu prefiksu: Aby pokazać, że ten kod jest jednoznacznie dekodowalny, wystarczy pokazać, jak zdekodować pierwsze słowo kodowe słowa. Jeśli słowo zaczyna się od , to pierwsze słowo kodowe to . Jeśli ma postać , musi mieć wartość lub . W przeciwnym razie musi istnieć prefiks formularza . Rozróżniamy teraz kilka przypadków:0 , 01 , 110. 1 110 01∗ 0 01 01∗0
źródło
1001010101010101…
może byćfcccccc…
albocaaa…
i może musimy poczekać do końca wejścia na decyzję.Jeśli dam ci jakąś wiadomość, którą chcesz zdekodować, możesz wykonać następujące czynności: Odwróć wiadomość, zaczynając od ostatniego bitu zamiast pierwszego bitu. Odwróć słowa kodowe. Dekoduj wiadomość. Odwróć dekodowany ciąg.
Możesz to zrobić, ponieważ po odwróceniu sześciu słów kodowych otrzymasz kod bez prefiksu: 1010, 1001, 01, 000, 11, 001 jest wolny od prefiksów.
źródło
Jeśli bez prefiksu oznacza to, co myślę, odwrotność „a” zaczyna się od 1, 10 lub 101, z których żaden nie jest żadnym innym poprawnym kodem.
Dlatego jeśli komunikat kończy się na 0101, może być tylko „a” i można zastosować podobną logikę do poprzednich bitów.
Co jednak, jeśli nie ma końca, aby zacząć? Cóż, jeśli pierwszy bit to 1, wiesz, że to nie jest „a” ani „d”. Drugi bit wyeliminuje „e” lub {„b”, „c”, „f”}. Trzeci bit może sprowadzić go do jednego wyboru, ale jeśli nie, jest unikalny pod czwartym bitem.
Gdy tylko dojdziesz do unikalnej sekwencji, ponownie uruchom algorytm na następnym bicie.
źródło