Algebraiczne aspekty kodowania i kryptografii

Transkrypt

Algebraiczne aspekty kodowania i kryptografii
Algebraiczne aspekty kodowania i kryptografii
Kodowanie1: sformułowanie problemu
1
Przypuśćmy, że chcemy przesłać (przekazać) pewną informację. Wtedy informację
i, którą checemy przesłać (informację przesyłaną) przekazujemy do kanału transmisyjnego. Po przesłaniu informacji i, po drugiej stronie kanału otrzymujemy jakąś
informację (odebraną) T (i). Chcielibyśmy, aby zachodziła równość T (i) = i. Bardziej prawdopodobne jest jednak, że T (i) 6= i. Przykładem takiej sytuacji może
być przesyłanie zdjęć z kosmosu.
Chcemy, aby nawet po odebraniu informacji T (i) 6= i w jakiś sposób odtworzyć
wysłaną informację i. Nietrudno zauważyć, że wtedy nie możemy przekazywać
każdej możliwej informacji. Jeżeli po przesłaniu i możemy otrzymać T (i) 6= i i
jeżeli możemy wysyłać informację T (i), to po odebraniu T (i) nie odtworzymy
informacji przesyłanej. Tak jest, gdyż tę samą informację otrzymujemy w dwóch
sytuacjach: gdy podczas przesłania i wystąpił błąd, oraz gdy bezbłędnie została
przesłana informacja T (i).
Komplikujemy więc schemat przesyłania: Informację przesyłaną najpierw odpowiednio preparujemy, będziemy mówić, że ją kodujemy, przesyłamy informację
zakodowaną i mamy nadzieję, że nawet po otrzymaniu informacji zniekształconej
uda nam się odczytać informację wysłaną (poprawić informację otrzymaną) i w
końcu zdekodować.
Informacją dla nas będą ciągi znaków (słowa nad pewnym alfabetem). Najczęściej będziemy posługiwać się alfabetem złożonym z 0 i 1.
Symbolem | x | będziemy oznaczać długość słowa x.
Będziemy zakładać, że ani znaki nie giną podczas przesyłania, ani nie pojawiają
się znaki dodatkowe (a więc | i | = | T (i) |), a także, że przesyłamy informacje o
ustalonej długości (długie informacje możemy dzielić na fragmenty o ustalonej
długości).
1.1
Podstawowe definicje
Niech n będzie ustaloną liczbą naturalną. Kodem długości n będziemy nazywać
dowolny zbiór słów długości n. Elementy kodu będziemy nazywać słowami kodowymi. Najczęściej będziemy rozważąć kody złożone ze słów zerojedynkowych.
Intuicje: Będziemy przesyłać wyłącznie słowa kodowe. Sposób kodowania informacji za pomocą słów kodowych nie ma żadnego znaczenia, choć czasem będzie
można coś o nim powiedzieć. To, co będziemy mogli zrobić z odebraną informacją
zależy wyłącznie od tego, co zostało fizycznie wysłane, a nie zależy od związanych
z tym naszych intencji.
Odległością Hamminga dwóch słów (tej samej długości) x = x0 x1 . . . xn−1 i
y = y0 y1 . . . yn−1 nazywamy liczbę
d(x, y) = | {i < n : xi 6= yi } |.
1
Według książki: Jiřı́ Adámek, Foundation of Coding
1
Lemat 1.1 Odległość Hamminga jest odległością, tzn. ma następujące własności
(wymagane od pojęcia odległości na analizie matematycznej, geometrii, topologii
itp.)
1) d(x, y) = 0 wtedy i tylko wtedy, gdy x = y,
2) d(x, y) = d(y, x) oraz
3) d(x, y) ¬ d(x, z) + d(z, Y )
dla wszystkich możliwych x, y i z. 2
Kulą o środku x ∈ {0, 1}n (otoczeniem słowa x) o promieniu r nazywamy
Sr (x) = {y ∈ {0, 1}n : d(x, y) ¬ r}.
Kolejne założenie: rozważamy takie sposoby przesyłania danych, które powodują wystąpienie najwyżej r błędów, a więc które spełniają warunek T (i) ∈ Sr (i) dla
wszystkich przesyłanych informacji (słów kodowych) i (r to odpowiednio dobrana, ustalona liczba). Wtedy Sr (x) interpretujemy jako zbiór wszytkich informacji,
które można otrzymać po wysłaniu informacji x.
Kod K wykrywa r błędów, jeżeli dla każdych dwóch (róznych) słów kodowych
x, y ∈ K, słowo y nie należy do Sr (x).
Uzasadnienie definicji: najprostszy algorytm sprawdzający, czy podczas przesyłania słowa kodowego x wystąpił błąd polega na sprawdzaniu, czy otrzymaliśmy
T (x), które jest słowem kodowym. Warunek z definicji kodu wykrywającego r błędów gwarantuje poprawność tego algorytmu przy założeniu, że podczas przesyłania
informacji występuje najwyżej r błędów.
Kod K koryguje r błędów, jeżeli dla każdych dwóch (róznych) słów kodowych
x, y ∈ K, zbiory Sr (x) oraz Sr (y) są rozłączne.
Uzasadnienie definicji: najprostszy algorytm korygujący błędy powstające podczas przesyłania polega na znalezieniu dla otrzymanego słowa y słowa kodowego x
takiego, że y ∈ Sr (x). Także w tym przypadku warunek z definicji kodu korygującego r błędów gwarantuje poprawność tego algorytmu przy założeniu, że podczas
przesyłania informacji występuje najwyżej r błędów.
Dla kodu K minimalna odległość słów kodowych to liczba
d(K) = min{d(x, y) : x, y ∈ K ∧ x 6= y}.
Twierdzenie 1.2 Kod K wykrywa r błędów wtedy i tylko wtedy, gdy d(K) > r.
Kod K koryguje r błędów wtedy i tylko wtedy, gdy d(K) > 2 · r. 2
1.2
Najprostsze przykłady
Najprostszymi przykładami kodów są
1) kody powtórzeniowe, czyli zbiory {0n , 1n }. Minimalna odległość słów kodowych dla tych kodów jest równa długości kodu. Kod powtórzeniowy długości
n wykrywa więc n − 1 błędów i koryguje (n − 1) div 2 błędów.
2) kody słów z parzystą liczbą zer (kody z bitem parzystości), czyli zbiory
{~x ∈ {0, 1}n : d(~x, ~0) jest liczbą parzystą}.
Można przedstawić je inaczej jako
{x0 x1 x2 . . . xn−1 ∈ {0, 1}n : xn−1 =
X
i<n−1
xi mod 2}.
Przy takim spojrzeniu ostatni bit słowa może być rozumiany jako informacja,
czy przed nim występuje nieparzysta liczba jedynek (jedynka oznacza, że
tak). Minimalna odległość słow kodowych w tym przypadku wynosi 2, kody
te wykrywają jeden błąd.
3) kody słów z parzystą (ewentualnie: nieparzystą) liczbą jedynek. Jeżeli parzystość długości kodu jest taka, jak liczb jedynek, to są to kody z bitem
parzystości. Kody nieparzystej długości złożone ze słów z parzystą liczbą jedynek są przykładami kodów nieliniowych (patrz dalej), ale mało ciekawymi.
Operacja wzajemnej zamiany zer i jedynek przekształca je w kody z bitem
parzystości i nie wpływa na istotne własności.
2
Nieco algebry liniowej
2.1
Ciała
Ciałem nazywamy algebrę F z dodawaniem i mnożeniem, w której dodawanie
jest łączne i przemienne, ma element neutralny 0 i każdy element ma przeciwny
(więc ciało z samym dodawaniem jest grupą przemienną), podobnie mnożenie jest
łączne i przemienne, ma element neutralny 1, każdy niezerowy element ma element
odwrotny (więc F \ {0} z mnożeniem też jest grupą przemienną i w szczególności
0 6= 1), dodatkowo mnożenie jest rozdzielne względem dodawania.
Przykładami ciał są algebry liczb rzeczywistych, wymiernych i zespolonych, a
także dla dowolnej liczby pierwszej p algebry Zp złożone z liczb naturalnych < p
z dodawaniem i mnożeniem modulo p. W szczególności, ciałem jest Z2 = {0, 1} z
dodawaniem spełniającym 1 + 1 = 0 (inne, podobne równości w Z2 są takie, jak
w każdym innym ciele).
2.2
Przestrzenie i podprzestrzenie liniowe
Przestrzenią liniową nad ciałem F nazywamy algebrę z dodawaniem i mnożeniem
przez elementy ciała F . Przestrzeń liniowa rozważana tylko z dodawaniem jest
grupą przemienną (dodawanie jest łączne i przemienne, posiada element neutralny
(zero) i każdy element ma element przeciwny). Elementy przestrzeni liniowej są
lub są nazywane wektorami. Mnożenie w tym kontekscie to mnożenie wektora
przez skalar z ciała F . Mnożenie ma własności przypominające prawa łączności i
rozdzielności:
(ab) · ~x = a · (b · ~x), a · (~x + ~y ) = a · ~x + a · ~y oraz (a + b) · ~x = a · ~x + b · ~x
a także spełnia równość
1 · ~x = ~x,
gdzie a, b ∈ F , a · oznacza mnożenie przez skalar (tę kropkę będziemy zwykle
opuszczać).
Ważnymi przykładami przestrzeni liniowych nad ciałem F są przestrzenie F n
z działaniami zdefiniowanymi wzorami
(x1 , . . . , xn ) + (y1 , . . . , yn ) = (x1 + y1 , . . . , xn + yn )
oraz
a · (x1 , . . . , xn ) = (ax1 , . . . , axn ).
Podprzestrzenią przestrzeni liniowej nazywamy jej niepusty podzbiór zamknięty ze względu na dodawanie i mnożenie przez wszystkie skalary.
Podprzestrzenie liniowe same też są przestrzeniami, a więc działania ograniczone do podprzestrzeni mają wszystkie własności wymagane od działań w przestrzeniach liniowych.
2.3
2.3.1
Zbiory generatorów i bazy
Podprzestrzeń generowana przez zbiór
Niech V będzie przestrzenią liniową nad ciałem F , a X – podzbiorem V .
Przypuśćmy, że ~x1 , . . . , ~xn ∈ V i a1 , . . . , an ∈ F . Kombinacją liniową tych
wektorów z podanymi współcznnikami nazywamy wyrażenie
n
X
ai~xi .
i=1
Zbiór
{
n
X
ai~xi ∈ V : ~x1 , . . . , ~xm ∈ X ∧ a1 , . . . , an ∈ F }
i=1
jest podprzestrzenią liniową przestrzeni V i nazywamy go podprzestrzenią generowaną przez X.
Jeżeli X = {~x1 , . . . , ~xm }, to podprzestrzenią generowaną przez X jest
{
m
X
ai~xi ∈ V : a1 , . . . , am ∈ F }.
i=1
Przestrzeń jest generowana przez X, jeżeli jest swoją podprzestrzenią generowaną przez X. W tym kontekscie zbiór X nazywamy zbiorem generatorów przestrzeni.
Będziemy rozważać niemal wyłącznie przestrzenie liniowe mające skończone
zbiory generatorów (skończenie generowalne). Uogólnienie niektórych definicji na
przypadek dowolnych przestrzeni wymaga pewnej uwagi.
2.4
Zbiory liniowo niezależne
Zbiór X złożony z wektorów ~x1 , . . . , ~xm jest liniowo niezależny, jeżeli wektor zerowy
można przedstawić w postaci kombinacji tych wektorów w dokładnie jeden sposób,
używając zer jako współczynników, a więc jeżeli warunek
m
X
ai~xi = ~0
i=1
implikuje, że
a1 = . . . = am = 0.
Nietrudno zauważyć, że jeżeli ~x1 , . . . , ~xm są elementami zbioru liniowo niezależnego, to każdy wektor daje się przedstawić w postaci kombinacji liniowej tych
wektorów w najwyżej jeden sposób, a więc warunek
m
X
i=1
ai~xi =
m
X
bi~xi
i=1
implikuje, że
a1 = b 1 , . . . a m = b m .
2.4.1
Bazy
Bazą przestrzeni liniowej nazywamy dowolny liniowo niezależny zbiór generatorów.
Przykładem bazy w przestrzeni F n jest zbiór złożony z wektorów
~e1 = (1, 0, . . . , 0), ~e2 = (0, 1, . . . , 0), . . . ~en = (0, 0, . . . , 1).
Jest to tzw. baza standardowa. Dla tej bazy słuszny jest wzór
(x1 , x2 , . . . , xn ) =
n
X
xi~ei .
i=1
Lemat 2.1 Każdy zbiór generatorów zawiera pewną bazę. Każdy zbiór liniowo niezależny jest zawarty w pewnej bazie. 2
Lemat 2.2 następujące warunki są równoważne:
1) B jest bazą,
2) B jest minimalnym zbiorem genaratorów,
3) B jest maksymalnym zbiorem liniowo niezależnym. 2
Lemat 2.3 Jeżeli X jest zbiorem generatorów zawartym w zbiorze liniowo niezależnym Y , to X = Y . 2
Lemat 2.4 Każde dwie bazy skończenie generowalnej przestrzeni liniowej mają
tyle samo elementów. 2
Wymiarem skończenie generowalnej przestrzeni liniowej nazywamy liczbę elementów (dowolnej lub pewnej) bazy tej przestrzeni.
Ważną własnością bazy ~x1 , . . . , ~xm jest fakt, że każda definicja następującej
postaci:
m
X
f(
ai~xi ) = coś wyznaczonego jednoznacznie przez a1 , . . . , am
i=1
jest poprawna i dobrze definiuje funkcję określoną na całej przestrzeni liniowej.
2.5
Funkcje liniowe
Przyjmijmy, że V i W są przestrzeniami liniowymi nad tym samym ciałem F .
Funkcję f : V → W nazywamy liniową, jeżeli
f (a~x + b~y ) = af (~x) + bf (~y )
dla wszystkich skalarów a, b ∈ F i dla dowolnych wektorów ~x, ~y ∈ V . Funkcje
liniowe to homomorfizmy przestrzeni liniowych i przekształcają ~0 na ~0. W szczególności, różnowartościową i liniową funkcję typu „na” nazywamy izomorfizmem
przestrzeni liniowych. Funkcję liniową przyjmującą wartości w ciele F (albo w
przestrzeni F 1 ) nazywamy funkcjonałem liniowym.
2.5.1
Definiowanie funkcji liniowych
Lemat 2.5 Funkcje liniowe równe na zbiorze generatorów pewnej przestrzeni liniowej przyjmują te same wartości dla wszystkich wektorów z tej przestrzeni. 2
Lemat 2.6 Przypuśćmy,że wektory ~v1 , . . . , ~vm tworzą bazę przestrzeni V , a wektory w
~ 1, . . . , w
~ m są dowolnymi elementami przestrzeni W . Wtedy wzór
f(
m
X
ai~vi ) =
i=1
m
X
ai w
~i
i=1
definiuje funkcję liniową f : V → W taką, że f (~vi ) = w
~ i dla i = 1, . . . , m. Ponadto,
taka funkcja f jest jednoznacznie określona. 2
Wniosek 2.7 Każde dwie przestrzenie liniowe tego samego wymiaru m są izomorficzne. W szczególności, jeżeli w
~ 1, . . . , w
~ m jest bazą przestrzeni W , to funkcja
m
f : F → W zdefiniowana wzorem
f (a1 , a2 , . . . , am ) =
m
X
ai w
~i
i=1
jest izomorfizmem. 2
Wniosek 2.8 Przestrzeń liniowa wymiaru m nad skończonym ciałem F ma |F |m
elementów. 2
2.5.2
Struktura funkcji liniowych
Lemat 2.9 Przyjmijmy, że V jest przestrzenią liniową nad ciałem F o bazie
~v1 , ~v2 , . . . , ~vm . Każdy wzór postaci
m
X
f(
i=1
m
X
xi~vi ) = (
i=1
c1,i xi ,
m
X
c2,i xi , . . . ,
i=1
m
X
cn,i xi )
i=1
dla dowolnych skalarów ci,j ∈ F definiuje funkcję liniową f : V → F n . Co więcej,
każda taka funkcja liniowa może zostać zdefiniowana w ten sposób. 2
Funkcję f : V → V zdefiniowaną wzorem f (~x) = ~a+~x nazywamy przesunięciem
o wektor ~a. Symbolem ~a + K oznaczamy przesunięcie zbioru K o wektor ~a, czyli
zbiór {~a + ~x : ~x ∈ K}.
Jądrem ker(f ) przekształcenia liniowego f : V → W nazywamy zbiór
{~x ∈ V : f (~x) = ~0}.
Jądro dowolnego przekształcenia liniowego jest podprzestrzenią liniową jego dziedziny.
Lemat 2.10 Przypuśćmy, że K jest jądrem przekształcenia liniowego f : V → W
i ~a ∈ V . Wtedy
{~x ∈ V : f (~x) = f (~a)} = ~a + K. 2
Lemat 2.11 Jeżeli funkcja liniowa f przekształca przestrzeń V na przestrzeń W
i ma jądro K, to wymiar przestrzeni V jest sumą wymiaru obrazu f (V ) = W i
wymiaru jądra K.
Dowód. Weźmy bazę w
~ 1, w
~ 2, . . . , w
~ n przestrzeni W i bazę ~v1 , ~v2 , . . . , ~vk jądra K.
Niech ~vk+1 , ~vk+2 , . . . , ~vk+m będą wektorami takimi, że f (~vk+i ) = w
~ i . Dowodzi się,
że ~v1 , ~v2 , . . . , ~vk , ~vk+1 , . . . , ~vk+n jest bazą przestzreni V . 2
2.5.3
Zastosowanie do układów równań liniowych
Rozważamy układ równań liniowych
m
X
c1,i xi = b1 ,
i=1
m
X
c2,i xi = b2 , . . . ,
i=1
m
X
cn,i xi = bn .
i=1
Odpowiadający mu układ jednorodny ma postać
m
X
i=1
c1,i xi = 0,
m
X
c2,i xi = 0, . . . ,
i=1
m
X
cn,i xi = 0.
i=1
Możemy wziąć funkcję liniową f : F m → F n zdefiniowaną wzorem
m
X
f (x1 , x2 , . . . , xm ) = (
i=1
c1,i xi ,
m
X
c2,i xi , . . . ,
i=1
m
X
cn,i xi ).
i=1
Wtedy jądro przekształcenia f jest zbiorem K rozwiązań układu równań jednorodnych odpowiadających danemu.
Dany układ może nie mieć rozwiązań. Jeżeli ma rozwiązanie (a1 , a2 , . . . , am ), to
f (a1 , a2 , . . . , am ) = (b1 , b2 , . . . , bn ) i zbiorem jego rozwiązań jest (a1 , a2 , . . . , am )+K
(oczywiście, K jest tu jądrem f ).
Tak więc, aby rozwiązać układ równań liniowych, należy zbadać, czy ma rozwiązanie, jeżeli ma, to znaleźć jedno z nich, a następnie rozwiązać odpowiadający
mu układ równań jednorodnych.
2.5.4
Iloczyn skalarny i dopełnienie ortogonalne
Iloczynem skalarnym nazywamy funkcję · : F m × F m → F zdefiniowaną wzorem
(x1 , x2 , . . . , xm ) · (y1 , y2 , . . . , ym ) =
m
X
xi y i .
i=1
Po ustaleniu któregokolwiek wektora-argumentu otrzymujemy z niej funkcjonał
liniowy. Jest to więc funkcjonał dwuliniowy i to symetryczny: ~x · ~y = ~y · ~x.
W przestrzeni R3 zachodzi znany wzór ~x · ~y = | ~x || ~y | sin ϕ, gdzie ϕ jest
kątem między wektorami ~x i ~y . Wobec tego, wektory takie, że ~x · ~y = 0 nazywamy
ortogonalnymi (prostopadłymi). Iloczyn skalarny pozwala na zdefiniowanie np.
płaszczyzny prostopadłej do prostej. Należy pamiętać, że niezerowy wektor w R3
nie może być prostopadły do siebie, ale innych przypadkach – może być.
Dopełnieniem ortogonalnym zbioru X nazywamy zbiór
X ⊥ = {~y ∈ V : ∀ ~x ∈ X ~x · ~y = 0}.
Lemat 2.12 Dopełnienie ortogonalne jest zawsze podprzestrzenią liniową. Jeżeli
zbiór X generuje podprzestrzeń W , to X ⊥ = W ⊥ . 2
Lemat 2.13 Jeżeli W jest podprzestrzenią F m , to wymiar dopełnienia ortogonalnego W ⊥ jest różnicą liczby m i wymiaru W .
Dowód. Przestrzeń L(W, F ) wszystkich funkcjonałów liniowych określonych na
W jest tego samego wymiaru, co W .
Weźmy bazę w
~ 1, w
~ 2, . . . , w
~ n przestrzeni W . Przyjmijmy, że fi jest funkcjonałem
liniowym na W spełniającym równości
fi (w
~ i ) = 1 oraz fi (w
~ j ) = 0 dla wszystkich j 6= i.
Można dowieść, że funkcjonały f1 , f2 , . . . , fn są bazą przestrzeni L(W, F ). W szczególności, zachodzi wzór
f=
n
X
f (w
~ i )fi .
i=1
Weźmy teraz funkcję ϕ : F m → L(W, F ) zdefiniowaną wzorem
ϕ(~a)(~x) = ~a · ~x dla wszystkich ~x ∈ W.
Jest to funkcja liniowa, a jej jądrem ker(ϕ) jest dopełnienie ortogonalne W ⊥ przestrzeni W .
Zauważmy, że ϕ jest typu „na”. Każdy funkcjonał liniowy f określony na W
można rozszerzyć do funkcjonału liniowego g określonego na F m . Funkcjonał g jest
spełnia równość g(~x) = ~a · ~x dla pewnego ~a ∈ F m i dla wszystkich ~x ∈ F m . Tym
bardziej f (~x) = ~a · ~x dla wszystkich ~x ∈ F m . Tak więc ϕ(~a) = f .
Wiemy, że wymiar jądra przekształcenia jest różnicą wymiaru dziedziny i wymiaru obrazu. Stąd teza. 2
Wniosek 2.14 Dla dowolnej podprzestrzeni W ⊆ F m mamy zawieranie W ⊆
(W ⊥ )⊥ , a ponieważ obie te podprzestrzenie są tego samego wymiaru, więc W =
(W ⊥ )⊥ . 2
2.5.5
Definiowanie podprzestrzeni
Lemat 2.15 Niech W będzie podzbiorem przestrzeni F m . Następujące warunki są
równoważne:
1) W jest podprzestrzenią,
2) W jest zbiorem wartości pewnej funkcji liniowej,
3) W jest zbiorem wartości pewnej funkcji liniowej f : F n → F m zdefiniowanej
wzorem postaci
f (x1 , x2 , . . . , xn ) = (x1 , x2 , . . . , xn ,
n
X
i=1
a1,i xi , . . . ,
n
X
am−n,i xi )
i=1
(z dokładnością do kolejności współrzędnych wartości funkcji),
4) W jest dopełnieniem ortogonalnym pewnej podprzestrzeni,
5) W jest zbiorem rozwiązań jednorodnego układu równań liniowych. 2
3
Kody liniowe
Przypuśćmy, że rozważamy kody długości m nad alfabetem {0, 1}. Taki kod K jest
liniowy, jeżeli jest podprzestrzenią liniową przestrzeni Z2m . Pojęcie kodu liniowego
bez trudu uogólniamy na przypadek dowolnych ciał skończonych. Kod nad ciałem
F jest liniowy, jeżeli jest podprzestrzenią liniową przestrzeni F n .
Lemat 3.1 Jeżeli K jest kodem liniowym, to minimalna odległość słów kodowych
d(K) jest równa
min{d(~0, ~x) : ~x ∈ K ∧ ~x 6= ~0},
a więc jest równa minimalnej wadze niezerowego słowa kodowego (odległość słowa ~x ∈ Z2m od ~0, czyli d(~0, ~x), to liczba jedynek w słowie ~x, nazywana też wagą
słowa ~x). 2
3.1
Macierze generujące i funkcje kodujące
Niech w
~ 1, w
~ 2, . . . , w
~ n będzie bazą liniowego kodu K ⊆ F n . Macierzą generującą kodu K nazywamy macierz, której i-tym wierszem są kolejne litery (wyrazy,
wspłórzędne) wektora w
~ i . Macierz generująca G w pewnym sensie definiuje kod
K. Mamy bowiem
K = {[x1 , x2 , . . . , xn ]G : x1 , x2 , . . . , xn ∈ F }
([x1 , x2 , . . . , xn ]G to iloczyn (w sensie mnożenia macierzy) jednowierszowej macierzy [x1 , x2 , . . . , xn ] i macierzy generującej G, wynikiem mnożenia jest jednowieszowa macierz, którą utożsamiamy np. z wektorem o odpowiednich współrzędnych).
Funkcje kodujące nie odgrywają istotnej roli w teorii kodowania. Dla kodów
liniowych można jednak podać kilka naturalnych sposobów definiowania funkcji
kodującej. Taką jest funkcja f : F n → F m zdefiniowana wzorem
f (x1 , x2 , . . . , xn ) = [x1 , x2 , . . . , xn ]G,
gdzie G jest macierzą generującą. W algebrze liniowej taką funkcję definiuje się
raczej wzorem
f (x1 , x2 , . . . , xn ) = GT [x1 , x2 , . . . , xn ]T
(T oznacza operację transponowania), ze względu na inny sposób zamiany wektorów na macierze (wektory zwykle odpowiadają macierzom jednokolumnowym)).
Macierzom generującym kody liniowe można – w zasadzie – nadać postać

1 0 . . . 0 a1,n+1 a1,n+2 . . . a1,m

 0 1 . . . 0 a2,n+1 a2,n+2 . . . a2,m

...
...


0 0 . . . 1 an,n+1 an,n+2 . . . an,m



.


Takim macierzom odpowiadają funkcje kodujące definiowane wzorami
f (x1 , x2 , . . . , xn ) = (x1 , x2 , . . . , xn ,
n
X
i=1
ai,n+1 xi ,
n
X
ai,n+2 xi , . . . ,
n
X
ai,m xi ).
i=1
i=1
Wzór ten świadczy o tym, że dla kodów liniowych kodowanie może polegać na
dopisywaniu do kodowanej informacji tzw. sum kontrolnych.
Przykład 3.2 Macierzami generującymi kod z bitem parzystości są albo











albo












1 1 0 0 ... 0 0 0
0 1 1 0 ... 0 0 0 


0 0 1 1 ... 0 0 0 

,
...



0 0 0 0 ... 1 1 0 
0 0 0 0 ... 0 1 1

1 0 0 0 ... 0 0 1
0 1 0 0 ... 0 0 1 


0 0 1 0 ... 0 0 1 

.
..

.


0 0 0 0 ... 1 0 1 
0 0 0 0 ... 0 1 1
Pierwsza z tych macierzy wyznacza funkcję kodującą
f (x1 , x2 , . . . , xm−1 ) = (x1 , x1 + x2 , x2 + x3 , . . . , xm−1 + xm , xm ),
druga –
f (x1 , x2 , . . . , xm−1 ) = (x1 , x2 , . . . , xm−1 ,
m−1
X
xi ).
i=1
Przykład 3.3 Innym przykładem jest pewna wersja kodu powtórzeniowego z macierzą generującą


1 1 0 0 0 0


 0 0 1 1 0 0 .
0 0 0 0 1 1
Ten sam – z dokładnością do kolejności
jącą

1 0 0

 0 1 0
0 0 1
współrzędnych – kod ma macierz generu
1 0 0
0 1 0 
.
0 0 1
Funkcjami kodującymi dla tych kodów mogą być
f (x1 , x2 , x3 ) = (x1 , x1 , x2 , x2 , x3 , x3 ) lub f (x1 , x2 , x3 ) = (x1 , x2 , x3 , x1 , x2 , x3 ).
3.2
Macierze kontrolne
Każda podprzestrzeń liniowa, a więc i każdy kod liniowy jest zbiorem rozwiązań
pewnego jednorodnego układu niezależnych równań liniowych. Dla kodów liniowych macierz główną takiego układu (macierz współczynników) nazywamy macierzą kontrolną.
Jeżeli G jest macierzą generującą kod liniowy długości m i wymiaru n, to
macierz kontrolną H tego kodu ma m − n wierszy długości m. Ponadto iloczyn
HGT jest macierzą zerową.
Przykład 3.4 Kod z bitem parzystości z przykładu 3.2 jest zbiorem rozwiązań
równania
x1 + x2 + . . . + xm−1 + xm = 0.
Macierz kontrolna dla tego kodu składa się z jednego wiersza długości m wypełnionego jedynkami.
Kod z przykładu 3.3 jest zbiorem rozwiązań układu
x1 + x2 = 0, x3 + x4 = 0 oraz x5 + x6 = 0.
Macierz kontrolna dla tego kodu jest równa macierzy generującej.
3.3
Algorytm korygowania błędów dla kodów liniowych
Niech K będzie kodem liniowym. Macierzą standardową dla kodu K (długości m)
nazywamy macierz tworzoną zgodnie z następującym algorytmem:
1) Tworzymy macierz słów M o wierszach długości | K |:
2) pierwszy wiersz tej macierzy wypełniamy słowami kodowymi, w dowolnej
kolejności, poza tym, że M [1, 1] = 00 . . . 0;
3) i := 1;
4) Dopóki w macierzy M nie znajdą się wszystkie słowa
5) i := i + 1;
6) znajdź słowo L, nie umieszczone jeszcze w M , o możliwie małej wadze (którekolwiek), słowo to będziemy nazywać liderem i-tego wiersza;
7) dla j od 1 do | K | wykonaj podstawienie M [i, j] := L + M [1, j].
Lemat 3.5 Macierz standardowa M dla kodu liniowego K ma następujące własności:
1) W pierwszej kolumnie macierzy znajdują się liderzy poszczególnych wierszy.
2) Jeżeli w pewnym wierszu M występuje słowo X i A ∈ K, to w tym wierszy
jest także A + X.
3) Jeżeli L jest liderem i-tego wiersza M i waga X jest mniejsza niż L, to X
występuje w pewnym wierszu M o numerze mniejszym niż i. 2
Lemat 3.6 Macierz standardowa kodu liniowego długości m nad ciałem F ma
| F |m
wierszy. Każde słowo długości m występuje w macierzy standardowej i to na
|K|
dokładnie jednym miejscu. 2
Rozważmy następujący algorytm dla kodu K długości m:
1) Niech M będzie macierzą standardową dla kodu K, a X – danym słowem
długości m;
2) Znajdź i oraz j takie, że M [i, j] = X;
3) Wynikiem obliczeń jest M [1, j].
Lemat 3.7 Przypuśćmy, że K jest kodem liniowym długości m, korygującym r
błędów. Wtedy wyżej podany algorytm koryguje r błędów, a więc jeżli po wysłaniu
słowa A ∈ K otrzymaliśmy slowo A + E dla pewnego E o wadze nie przekraczającej r, to podany algorytm uruchomiony ze słowem A + E zakończy obliczenia i
wynikiem będzie słowo A.
Dowód. Załóżmy, że A + E = M [i, j] = M [i, 1] + M [1, j] i E ma wagę nie przekraczającą r.
Gdyby waga E była mniejsza od wagi M [i, 1], to E znalazłoby się w macierzy
M w wierszu o numerze < i. W tym samym wierszu znalazłoby się też słowo A+E,
a to nie jest możliwe.
Wobec tego, waga M [i, 1] nie przekracza r. Wynika stąd, że A + E ∈ Sr (A) ∩
Sr (M [1, j]). Ponieważ kod K koryguje r błędów i słowa A, M [1, j] ∈ K, więc
M [1, j] = A. 2
4
4.1
Kody Hamminga
Macierze kontrolne kodów Hamminga
Minimalna odległość słów kodów Hamminga będzie równa 3. Zauważmy, że mamy
Lemat 4.1 Niech H będzie macierzą kontrolną kodu liniowego K. Minimalna odległość słów kodowych K jest równa 1 wtedy i tylko wtedy, gdy macierz H ma
zerową kolumnę.
Dowód. Jeżeli i-ta kolumna macierzy H jest zerowa, to ~ei jest rozwiązaniem układu równań liniowych opisanych macierzą H, a więc należy do K i w konsekwencji
d(K) = 1.
Także odwrotnie, jeżeli d(K) = 1, to ~ei ∈ K (dla pewnego i) i jest rozwiązaniem
układu równań z macierzą główną H. Wtedy i-ta kolumna H jest zerowa. 2
Lemat 4.2 Niech H będzie macierzą kontrolną kodu liniowego K, bez kolumny
zerowej. Minimalna odległość słów kodowych K jest równa 2 wtedy i tylko wtedy,
gdy każde dwie kolumny macierzy H są różne.
Dowód. Jeżeli i-ta kolumna macierzy H jest taka sama, jak j-ta, to ~ei + ~ej jest
słowem kodowym należącym do K. Stąd d(K) ¬ 2, a przeciwna nierówność wynika
z poprzedniego lematu.
I odwrotnie, jeżeli d(K) = 2 i wektor postaci ~ei + ~ej jest rozwiązaniem układu
o macierzy H, to i-ta kolumna macierzy H jest równa j-tej. 2
Tak więc macierze kontrolne kodów Hamminga nie mogą zawierać ani kolumny
zerowej, ani dwóch identycznych kolumn.
4.2
Kody Hamminga
Weźmy liczbę naturalną m ­ 2 i utwórzmy macierz o wierszach długości m numerowanych od 1 do 2m − 1. W i-tym wierszu tej macierzy umieszczamy przedstawienie dwójkowe liczby i, a następnie tę macierz obracamy o 90o w lewo. Otrzymaną
macierz oznaczamy Hm . Przyjmujemy, że Hm macierz kontrolną kodu Hamminga
długości 2m − 1. Na przykład, mamy


1 0 1 0 1 0 1


H3 =  0 1 1 0 0 1 1  .
0 0 0 1 1 1 1
Układ równań definiujący kod Hamminga składa się więc z m liniowo niezależnych
równań. Łatwo to zauważyć obserwując kolumny o numerach będących potęgami
dwójki, zawierające po jednej jedynce. Przyjmijmy, że Xi jest zbiorem tych liczb
< 2m , które w przedstawieniu dwójkowym mają składnik 2i . Nietrudno zauważyć,
że i-ty wiersz macierzy Hm ma jedynki dokładnie w tych kolumnach, których
numery należą do Xi .
Kod Hamminga wyznaczony przez macierz Hm jest kodem o długości 2m − 1
i wymiarze 2m − m − 1. Minimalna odległość słów kodowych jest równa 3, słowa
1110 . . . 0 (o odpowiedniej długości) należą do kodów Hamminga.
Macierze Hm są zredukowane, można z nich od razu odczytać rozwiązania
układów równań definiujących kody Hamminga. Przyjmując, że zmienne x2i są
zależne od pozostałych, wyrażamy je następującymi wzorami:
x1 = x3 + x5 + x7 + x9 + . . . + x2m −1
x2 = x3 + x6 + x7 + x10 + . . . + x2m −1
x4 = x5 + x6 + x7 + x12 + . . . + x2m −1
..
.
x2i =
..
.
X
xj
j∈Xi ∧j>2i
Macierze generujące kody Hamminga tworzymy biorąc słowa, które mają jedynkę na i-tym miejscu, nie będącym potęgą dwójki, oraz na miejscach odpowiadającym potęgom dwójki z przedstawienia i. W szczególności, macierz generująca
kod Hamminga dla m = 3 jest postaci





1
1
0
1
1
0
1
1
1
0
0
0
0
1
1
1
0
1
0
0
0
0
1
0
0
0
0
1



,

a kolejne jej wiersze są wyznaczone przez jedynki na 3, 5, 6 i 7 pozycji.
4.3
Algorytm korygujący błąd
Dla kodu Hamminga długości 2m − 1 rozważmy następujący algorytm:
1) Dane jest słowo-wektor ~x długości 2m − 1.
2) Obliczamy ~s = Hm~xT ∈ Z2m (wektor ~s jest nazywany syndromem);
3) jeżeli ~s = ~0, to kończymy obliczenia i przekazujemy jako wynik dane słowo
~x;
4) W przeciwnym razie wektor ~s (ewentualnie ~sT ) jest jedną z kolumn macierzy
Hm i znajdujemy numer tej kolumny i;
5) kończymy obliczenia i przekazujemy jako wynik słowo ~x +~ei (zmieniamy dane
słowo na i-tej pozycji).
Można łatwo dowieść, że jeżeli korzystamy z kodu Hamminga, to powyższy
algorytm koryguje jeden błąd.
4.4
Doskonałość kodów Hamminga
Kod korygujący r błędów jest doskonały, jeżeli każde słowo jest albo słowem kodowym, albo powstaje z pewnego słowa kodowego w wyniku popełnienia ¬ r błędów.
Bardziej formalnie, kod długości m, korygujący r błędów jest doskonały, jeżeli
Z2m =
[
Sr (~x).
~
x∈K
W przypadku kodów K Hamminga zachodzi równość
m −1
Z22
=
[
S1 (~x).
~
x∈K
Łatwo się o tym przekonać, porównując liczności zbiorów po obu stronach równości.
Tak więc kody Hamminga są doskonałe.
5
5.1
Kody Reeda - Mullera
Przestrzeń słów kodowych
Ustalmy teraz liczbę m, będziemy definiować kody R(r, m) długości 2m .
m
Będą to więc kody zawarte w {0, 1}2 , czyli w zbiorze słów nad alfabetem
{0, 1}. Zbiór ten będziemy interpretować na kilka sposobów, a dwa podstawowe są
następujące:
1) może to być zbiór funkcji m zmiennych x0 , x1 , . . . , xm−1 o argumentach 0 i 1
oraz wartościach z ciała Z2 (ewentualnie o wartościach boolowskich), a więc
na przykład funkcji f takich, że f : Z2m → Z2 . Takie funkcje możemy dodawać i mnożyć tak, jak się to zwykle robi, dodając lub mnożąc poszczególne
wartości (w przypadku funkcji boolowskich: wykonując alternatywę wykluczającą lub koniunkcję),
2) lub może to być zbiór P(Z2m ) podzbiorów przestrzeni liniowej Z2m z dodawaniem, czyli z różnicą symetryczną, oraz mnożeniem, czyli przekrojem. Elementy Z2m możemy uważać za wektory, punkty m wymiarowej przestrzeni
geometrycznej nad dziwnym ciałem lub za liczby naturalne < 2m .
Będziemy w następujący sposób opisywać potrzebne przestrzenie: Przestrzeń
Z2m składa się z punktów pi indeksowanych liczbami naturalnymi i < 2m . Taki punkt możemy utożsamiać z liczbą i. Jeżeli liczba i ma przedstawienie dwójkowe xm−1 xm−2 . . . x0 , to będziemy mówić, że pi jest punktem o współrzędnych
(x0 , x1 , . . . , xm−1 ) i będziemy go utożsamiać także z wektorem (x0 , x1 , . . . , xm−1 ).
W poniższej tabelce utworzonej dla m = 3 w kolumnie oznaczonej pi od góry do
dołu są podane kolejne współrzędne punktu pi .
p0 p 1 p2 p3 p4 p5 p6 p7
x0
0 1 0 1 0 1 0 1
x1
0 0 1 1 0 0 1 1
0 0 0 0 1 1 1 1
x2
f (x0 , x1 , x2 ) f0 f1 f2 f3 f4 f5 f6 f7
Wyżej mamy tabelkę (bliżej nieokreślonej) funkcji f : Z23 → Z2 . Dla każdego
możliwego układu argumentów x0 , x1 , x2 pod tym układem są w niej podane wartości funkcji f (x0 , x1 , x2 ) i zostały wprowadzone pewne zasady notacyjne. Możemy
więc napisać
f (x0 , x1 , x2 ) = f (px2 x1 x0 ) oraz f (pi ) = fi .
Funkcję f przedstawioną w tej tabelce utożsamiamy z zerojedynkowym słowem
f0 f1 f2 f3 f4 f5 f6 f7 .
Jest ona funkcją charakterystyczną zbiorów
{i < 23 : fi = 1}, {pi : i < 23 ∧ fi = 1} lub {(x0 , x1 , x2 ) : f (x0 , x1 , x2 ) = 1}
i może być z tymi zbiorami utożsamiana. Co więcej, to utożsamienie zachowuje
m
działania w rozważanych algebrach funkcji (lub słów) Z22 i podzbiorów z P(Z2m ).
Zmienna xi (rozumiana jako funkcja f (x0 , x1 , x2 ) = xi ) jest utożsamiana ze słowem podanym w odpowiednim wierszu tabelki, oznaczonym napisem xi . Zmienna
xi , jako funkcja, jest też funkcją charakterystyczną pewnego zbioru, który oznaczamy symbolem Xi . W szczególności, mamy
X0 = {1, 3, 5, 7} lub X0 = {(1, 0, 0), (1, 1, 0), (1, 0, 1), (1, 1, 1)}.
Ogólniej, Xi jest zbiorem tych liczb < 2m , które przedstawione w postaci sumy potęg 2 (bez powtórzeń) mają składnik równy 2i . Tak więc X0 jest zbiorem
nieparzystych liczb < 2m , a Xm−1 jest zbiorem liczb i spełniających nierówność
2m−1 ¬ i < 2m .
5.2
Funkcje jako wielomiany
Funkcję f (x0 , x1 , . . . , xm−1 ) = xi będziemy (jak zwykle) oznaczać symbolem xi .
Funkcja f = f0 f1 . . . f2m −1 , mająca m zmiennych, wyznacza dwie funkcje f (0) =
f0 f1 . . . f2m−1 −1 oraz f (1) = f2m−1 f2m−1 +1 . . . f2m −1 , mające po m − 1 zmiennych.
Funkcje te można inaczej zdefiniować wzorami
f (0) (x0 , . . . , xm−2 ) = f (x0 , . . . , xm−2 , 0) i f (1) (x0 , . . . , xm−2 ) = f (x0 , . . . , xm−2 , 1).
Zauważmy, że
f (x0 , . . . , xm−2 , xm−1 ) =
= f (x0 , . . . , xm−2 , 0) + (f (x0 , . . . , xm−2 , 0) + f (x0 , . . . , xm−2 , 1))xm−1 =
= f (0) (x0 , . . . , xm−2 ) + (f (0) (x0 , . . . , xm−2 ) + f (1) (x0 , . . . , xm−2 ))xm−1 .
Korzystając z indukcji ze względu na liczbę zmiennych i podanego wzoru dowodzi się
Lemat 5.1 Każda funkcja f : Z2m → Z2 jest wielomianem stopnia ¬ m. 2
Analogiczny lemat w wersji zbiorowej wynika z wzoru
{t} =
\
\
Xj ∩
tj =1
Xjc ,
tj =0
gdzie tm−1 tm−2 . . . t0 jest przedstawieniem dwójkowym liczby t. Jeżeli przekrój będziemy uważać za mnożenie, to przyjmuje on postać
{t} =
Y
Xj ·
Y
(1 + Xj )
tj =0
tj =1
(1 to funkcja stale równa 1 lub zbiór wszystkich możliwych elementów, 1 + X to
różnica symetryczna przestrzeni i jej podzbioru, czy dopełnienie zbioru X). Mamy
też


A=
[
{t} =
t∈A
X
{t} =
t∈A
X
Y

Xj ·
(1 + Xj ) ,
tj =0
tj =1
t∈A
Y
gdyż w przypadku zbiorów rozłącznych sumę mnogościową można zastąpić różnicą symetryczną (będącą w tym przypadku dodawaniem). Prawa strona powyższego wzoru jest oczywiście wielomianem stopnia ¬ m ze zmiennymi X0 , . . . , Xm−1 .
Funkcja charakterystyczna zbioru A jest definiowana wzorem

f (x0 , x1 , . . . , xm−1 ) =
X

t∈A
5.3

Y
tj =1
xj ·
Y
(1 + xj ) .
tj =0
Jednomiany
Jednomiany to iloczyny niezerowego współczynnika i zmiennych. Jeżeli rozważamy
jednomiany nad ciałem Z2 , to są to iloczyny zmiennych bez powtórzeń, gdyż jedynym niezerowym współczynnikiem jest 1, a mnożenie spełnia równowność x2 = x.
m
W pierścieniu Z22 funkcji m zmiennych mamy więc następujące jednomiany:
1, x0 , . . . , xm−1 , x0 x1 , . . . , xm−2 xm−1 , x0 x1 x2 , . . . , x0 x1 . . . xm−1 .
Nietrudno policzyć, że jest ich 2m . Z lematu 5.1 wynika, że generują przestrzeń
m
Z22 , a ponieważ jest to przestrzeń wymiaru 2m , więc mamy
Lemat 5.2 Wyżej wymienione jednomiany są bazą przestrzeni Z22 . 2
m
5.4
Definicja kodów Reeda - Mullera
Kodami Reeda - Mullera nazywamy zbiory
R(r, m) = {w : Z2m → Z2 : w jest wielomianem stopnia ¬ m}.
Są to oczywiście kody liniowe wymiaru
r
X
i=0
m
i
!
.
Zostały zdefiniowane przez wskazanie generatorów, więc bez trudu tworzymy ich
macierze generujące.
Zauważmy, że R(0, m) jest kodem powtórzeniowym, mamy też
Lemat 5.3 Zbiór R(m − 1, m) jest kodem z bitem parzystości.
Dowód. Najpierw zauważmy, że jednomian xi1 xi2 . . . xis rozumiany jako zbiór,
czyli zbiór
{(x0 , x1 , . . . , xm−1 ) ∈ Z2m : xi1 xi2 . . . xis = 1} =
= {(x0 , x1 , . . . , xm−1 ) ∈ Z2m : xi1 = xi2 = . . . = xis = 1},
ma 2m−s elementów.
Wobec tego, jednomiany stopnia < m są zbiorami o parzystej liczbie elementów.
Z faktu, że różnica symetryczna zbiorów o parzystej liczbie elementów też ma
parzystą liczbę elementów otrzymujemy, że
R(m − 1, m) ⊆ {(x0 , x1 , . . . , xm−1 ) ∈ Z2m :
X
xi = 0}.
i<m
Te zbiory są równe, gdyż są przestrzeniami liniowymi tego samego wymiaru. 2
5.5
Macierze kontrolne kodów Reeda – Mullera
Lemat 5.4 Wielomiany f i g są ortogonalne (a więc ich iloczyn skalarny f ·g = 0)
wtedy i tylko wtedy, gdy ich iloczyn f g ∈ R(m − 1, m) (a więc wielomian f g ma
stopień < m). 2
Twierdzenie 5.5 Dopełnieniem ortogonalnym R(r, m) jest kod R(m − r − 1, m).
Dowód. Łatwo dowodzi się zawieranie
R(m − r − 1, m) ⊆ R(r, m)⊥
oraz sprawdza się, że obie podprzestrzenie w tym zawieraniu są tego samego wymiaru. 2
Na podstawie powyższego twierdzenia bardzo łatwo tworzymy macierze kontrolne kodów Reeda – Mullera: wiersze macierzy kontrolnej kodu R(r, m) to słowa
odpowiadające jednomianom stopnia ¬ m−r−1. Dzięki niemu mamy też algorytm
pozwalający na testowanie, czy dane słowo jest słowem kodowym: algorytm ten
wylicza iloczyny skalarne danego słowa s z wielomianami stopnia ¬ m−r−1. Jeżeli
wszystkie takie iloczyny są równe 0, to stwierdza, że s ∈ R(r, m). W przeciwnym
razie, że s 6∈ R(r, m).
5.6
Geometria w przestrzeni Z2m
Będziemy rozważać podzbiory przestrzeni liniowej nad ciałem F (choć najczęściej
F = Z2 ).
Prostą przechodzącą przez punkt p~, o kierunku wektora ~q nazywamy zbiór
{~p + a~q : a ∈ F } = p~ + {a~q : a ∈ F }.
Płaszczyzną przechodzącą przez punkt p, o „kierunku” (niezależnych) wektorów ~q1 i ~q2 nazywamy zbiór
{~p + a1 ~q1 + a2 ~q2 : a1 , a2 ∈ F } = p~ + {a1 ~q1 + a2 ~q2 : a1 , a2 ∈ F }.
Hiperpłaszczyzną przechodzącą przez punkt p~, o kierunku wyznaczonym przez
K (lub równoległą do K) nazywamy zbiór p~ + K, gdzie K jest podprzestrzenią
liniową wymiaru o 1 mniejszego niż wymiar przestrzeni.
Płaszczyzną wymiaru k przechodzącą przez punkt p~ nazywamy zbiór p~ + K,
gdzie K jest podprzestrzenią liniową wymiaru k.
Zamiast o płaszczyznach wymiaru k mówi się też o hiperpłaszczyznach wymiaru
k. Będziemy raczej używać krótszej nazwy.
Płaszczyzny p~1 + K1 i p~2 + K2 są równoległe, gdy K1 ⊆ K2 lub K2 ⊆ K1 .
Lemat 5.6 Płaszczyzna wymiaru k ma | F |k elementów. 2
Lemat 5.7 Jeżeli p~2 ∈ p~1 + K, to p~1 + K = p~2 + K (płaszczyzna przechodzi przez
każdy punkt, który do niej należy). 2
Lemat 2.10 stwierdza, że każde przekształcenie liniowe wyznacza rozbicie przestrzeni argumentów na pewną liczbę równoległych płaszczyzn wymiaru takiego,
jak wymiar jądra przekształcenia. Jądro jest jedną z tych płaszczyzn, a jest ich
tyle, ile wartości przyjmuje to przekształcenie.
W szczególności, możemy rozważać przekształcenie f : Z2m → Z2k zdefiniowane
wzorem
X
X
X
f (x0 , x1 , . . . , xm−1 ) = (
a1,i xi ,
a2,i xi , . . . ,
ak,i xi ).
i<m
i<m
i<m
Płaszczyzny wyznaczone przez to przekształcenie są zbiorami rozwiązań układów
równań liniowych
X
i<m
a1,i xi = c1 ,
X
i<m
a2,i xi = c2 , . . . ,
X
ak,i xi = ck
i<m
dla odpowiednio dobranych wyrazów wolnych c1 , c2 , . . . , ck .
Lemat 5.8 Każda płaszczyzna wymiaru k zawarta w m wymiarowej przestrzeni
jest zbiorem rozwiązań pewnego układu m − k równań liniowych. 2
Lemat 5.9 Przypuśćmy, że k wymiarowa płaszczyzna p~ + K1 jest zawarta w k + 1
wymiarowej płaszczyźnie p~ + K2 ⊆ Z2m (zawiera ona p~, a więc jest takiej postaci).
Niech ~q ∈ K2 \ K1 . Wtedy
p~ + K2 = (~p + K1 ) ∪ ((~p + ~q) + K1 ),
a więc każda taka płaszczyzna p~ + K2 jest sumą mnogościową dwóch rozłącznych
płaszczyzn wymiaru k, równoległych do K1 .
Dowód. Nietrudno zauważyć, że
K1 ⊆ K1 ∪ (~q + K1 ) ⊆ K2 ,
jak również, że środkowy ze zbiorów jest podprzestrzenią liniową nad Z2 . Ponieważ
jest różny od K1 , więc
K1 ∪ (~q + K1 ) = K2 .
Tezę otrzymujemy dodając do tej równości stronami p~. 2
Lemat 5.10 Przypuśćmy, że p~ + K jest płaszczyzną wymiaru k zawartą w Z2m i
k < m. Wtedy
1) Z2m jest sumą (mnogościową) 2m−k rozłącznych płaszczyzn postaci ~q + K (a
więc wymiaru k i równoległych do K);
2) jeżeli p~ + K 6= ~q + K, to
(~p + K) ∪ (~q + K) = p~ + (K ∪ ((~q − p~) + K))
jest płaszczyzną wymiaru k +1, zawierającą p~ +K, jedyną, do której należy ~q;
3) dowolna płaszczyzna p~ + K wymiaru k jest zawarta w dokładnie 2m−k − 1
płaszczyznach wymiaru k + 1. 2
Lemat 5.11 Jednomian stopnia k, rozumiany jako zbiór, jest zbiorem rozwiązań
układu k niezależnych równań, a więc jest płaszczyzną wymiaru m − k.
Dowód. W Z2 warunek x1 x2 = 1 jest równoważny warunkom x1 = 1 i x2 = 1. 2
Lemat 5.12 Każda płaszczyzna wymiaru m − k jest zbiorem rozwiązań pewnego
układu k równań liniowych
X
i<m
a1,i xi = c1 ,
X
a2,i xi = c2 , . . . ,
i<m
X
ak,i xi = ck .
i<m
Funkcja charakterystyczna tego zbioru wyraża się wzorem
f (x0 , x1 , . . . , xm−1 ) =
k
Y
!
1 + cj +
j=1
X
aj,i xi ,
i<m
a więc jest szczególnej postaci wielomianem stopnia k (wielomianem, który jest
iloczynem czynników liniowych). 2
5.7
Zbiory generujące kod R(r, m)
Wiemy na podstawie definicji, że kod R(r, m) jest generowany przez jednomiany
stopnia ¬ r. Jednomiany stopnia ¬ r wyznaczają szczególne (równoległe do osi
układu współrzędnych) płaszczyzny wymiarów ­ m − r. Jeżeli elementy kodu
R(r, m) będziemy uważać za zbiory, to będziemy też mogli powiedzieć, że kod
R(r, m) jest generowany przez płaszczyzny wymiarów ­ m − r.
Lemat 5.13 Dla każdego k spełniającego m − r ¬ k ¬ m, zbiór płaszczyzn o
wymiarach między m − r i k generuje kod R(r, m).
Dowód. Dowód ze względu na t przez „odwróconą” indukcję.
Jeżeli P jest płaszczyzną wmiaru k + 1, to na mocy lematu 5.9, P jest sumą
mnogościową dwóch rozłącznych płaszczyzn P1 i P2 wymiaru k. Ponieważ są to
płaszczyzny rozłączne, więc P = P1 + P2 . Wobec tego P i inne płaszczyzny wymiaru t + 1 można usunąć ze zbioru generatorów zawierających P1 i P2 i pozostałe
płaszczyzny wymiaru t. 2
Wniosek 5.14 Zbiór płaszczyzn wymiaru m − r generuje kod R(r, m). Albo w
innym języku, kod R(r, m) jest generowany przez zbiory wszystkich wielomianów
stopnia r, a także zbiory iloczynów r wielomianów liniowych (czyli stopnia 1). 2
Wniosek 5.15 Zbiór X należy do kodu R(r, m) wtedy i tylko wtedy, gdy dla każdej
płaszczyzny P wymiaru r + 1 przekroje X ∩ P mają parzystą liczbę elementów.
Dowód. Wynika to z twierdzenia 5.5 i wniosku 5.14 dla kodu R(m − r − 1, m). 2
5.8
Algorytm korygujący błędy dla kodów R(r, m)
Dla r < m i kodu R(r, m) definiujemy indukcyjnie pojęcie parzystości płaszczyzn.
Niech X będzie danym zbiorem. Płaszczyzna P wymiaru r + 1 jest parzysta
dla X, jeżeli przekrój P ∩ X ma parzystą liczbę elementów.
Płaszczyzna P wymiaru k ¬ r jest parzysta dla X, jeżeli większość zawierających ją płaszczyzn wymiaru k + 1 (więcej niż połowa takich płaszczyzn) jest
parzysta.
Lemat 5.16 Jeżeli X jest zbiorem, który ma < 2m−r−1 elementów, a P jest płaszczyzną wymiaru ¬ r + 1, to P jest parzysta dla X wtedy i tylko wtedy, gdy przekrój
P ∩ X ma parzystą liczbę elementów.
Dowód. Znowu dowodzimy przez „odwrotną” indukcję ze względu na wymiar k
płaszczyzny P .
Lemat jest oczywisty dla płaszczyzn wymiaru k = r + 1 na mocy definicji
parzystości.
Niech P będzie płaszczyzną wymiaru k ¬ r. Rozważmy zbiór płaszczyzn wymiaru k + 1, zawierających P , czyli – na mocy lematu 5.10 – zbiór
Pk+1 = {P ∪ Q : Q 6= P ∧ Q jest równoległe do P, wymiaru k}.
Zbiór ten ma 2m−k − 1 elementów.
Weźmy teraz zbiór
{P ∪ Q ∈ Pk+1 : Q ∩ X 6= ∅}.
Z lematu 5.10 i założenia wynika, że zbiór ten ma mniej niż 2m−r−1 elementów.
Stąd zbiór
P = {P ∪ Q ∈ Pk+1 : Q ∩ X = ∅}
ma więcej niż 2m−k − 1 − 2m−r−1 elementów, czyli ma przynajmniej
1
2m−k − 2m−r−1 = 2 · 2m−k−1 − 2m−r−1 ­ 2m−k−1 ­ 2m−r−1 > | Pk+1 |
2
elementów. Tak więc większość płaszczyzn wymiaru k + 1, zawierających P należy
do P.
Załóżmy, że płaszczyzna P jest parzysta dla X. Na mocy definicji parzystości,
większość elementów Pk+1 jest parzysta dla X. Dwa zbiory mające (każdy z osobna) większość elementów nie mogą być rozłączne. Jest więc Q takie, że płaszczyzna
P ∪ Q ∈ P jest parzysta dla X. Na mocy założenia indukcyjnego, płaszczyzny wymiaru k + 1, parzyste dla X mają parzystą liczbą elementów zbioru X. Wobec
tego, zbiór P ∩ X = (P ∪ Q) ∩ X ma parzystą liczbę elementów.
Z drugiej strony, jeżeli P ∩X ma parzystą liczbę elementów, to także dla każdego
P ∪ Q ∈ P przekroje (P ∪ Q) ∩ X mają parzystą liczbę elementów. Płaszczyzny z
P stanowią większość, więc większość płaszczyzn wymiaru k + 1, zawierających P
zawiera parzystą liczbę elementów X. I – na mocy definicji – płaszczyzna P jest
parzysta dla X. 2
Udowodniony lemat pozwoli nam przeanalizować następujący algorytm:
1) Dany jest zbiór X ∈ P(Z2m ).
2) Dla każdej płaszczyzny wymiaru r + 1 ustalamy, czy jest ona parzysta dla
X.
3) Dla wszystkich k od r do 0 ustamy (zgodnie z przytoczoną definicją), które
płaszczyzny wymiaru k są parzyste dla X.
4) Wynikiem obliczeń jest zbiór ϕ(X) tych punktów p, które nie są parzyste
dla X (dla których zerowymiarowe płaszczyzny {p} nie są parzyste).
Lemat 5.17 Jeżeli dany zbiór X ma mniej niż 2m−r−1 elementów, to ϕ(X) = X.
Dowód. Zauważmy, że
ϕ(X) = {p ∈ Z2m : {p} nie jest parzysta} = {p ∈ Z2m : 2 6 | | {p} ∩ X |} =
= {p ∈ Z2m : | {p} ∩ X | = 1} = {p ∈ Z2m : p ∈ X} = X.
Druga z równości wynika z lematu 5.16. 2
Lemat 5.18 Jeżeli A ∈ R(r, m), to ϕ(A+X) = ϕ(X) dla dowolnego X ∈ P(Z2m ).
Dowód. Tak jest ponieważ dla danych X oraz A+X obliczenia opisane w punkcie
2) algorytmu dają taki sam rezultat i determinują dalszą realizację algorytmu.
Niech P będzie płaszczyzną wymiaru r + 1. Aby przekonać słuszności stwierdzenia z poprzedniego akapitu zauważmy, że P jest parzysta wtedy i tylko wtedy,
gdy zbiór P ∩ X ma parzystą liczbę elementów, a to z kolei jest równoważne temu, że iloczyn skalarny P · X jest równy 0. Widać też na mocy twierdzenia 5.5
i wniosku 5.15, że dla A ∈ R(r, m) iloczyny skalarne P · X oraz P · (A + X) są
identyczne. To gwarantuje tezę. 2
Twierdzenie 5.19 Jeżeli r < m, to minimalna odłegłość słów kodu R(r, m) wynosi 2m−r .
Dowód. Załóżmy najpierw, że istnieją dwa słowa (zbiory) A i B w kodzie R(r, m),
których odległość Hamminga nie przekracza 2m−r −2. Tak więc |A+B | ¬ 2m−r −2.
Zbiór, który ma najwyżej 2m−r − 2 elementów można przedstawić w postaci sumy
dwóch rozłącznych zbiorów X i Y , które mają najwyżej 2m−r−1 − 1 elementów.
Przyjmijmy, że X i Y są takimi zbiorami i A + B = X ∪ Y = X + Y .
Równość A + B = X + Y implikuje, że A + X = B + Y . Z udowodnionych
wyżej lematów wynika, że
X = ϕ(X) = ϕ(A + X) = ϕ(B + Y ) = ϕ(Y ) = Y.
Zbiory, które jednocześnie są rozłączne i równe, są puste. Wobec tego, także zbiory
A i B są równe.
Odległość różnych słów kodu R(r, m) jest więc przynajmniej równa 2m−r − 1.
Jest to kod liniowy, a w przypadku r < m każde słowo tego kodu ma parzystą liczbę
jedynek. Minimalna odległość słów kodowych jest więc parzysta, a więc równa
przynajmniej 2m−r . Z drugiej strony wielomian x0 x1 . . . xr−1 odpowiada słowu,
które ma dokładnie 2m−r jedynek i jest odległe od zera o 2m−r . Stąd teza. 2
Twierdzenie 5.20 Algorytm
1) Dla danego słowa X oblicz ϕ(X)
2) a następnie przekaż X + ϕ(X).
w przypadku kodu R(r, m) koryguje 2m−r−1 − 1 błędów.
Dowód. Przypuśćmy, że po wysłaniu słowa A ∈ R(r, m) otrzymaliśmy słowo
A + E dla pewnego słowa E, które ma najwyżej 2m−r−1 − 1 jedynek. Wtedy, po
uruchomieniu podanego algorytmu z daną A + E zostanie wyliczone
ϕ(A + E) = ϕ(E) = E
i za wynik obliczeń zostanie uznany zbiór
(A + E) + ϕ(A + E) = (A + E) + E = A.
Tak więc zostały skorygowane błędy E. 2