Algebra v informatice



Podobné dokumenty
[1] samoopravné kódy: terminologie, princip

Samoopravné kódy. Katedra matematiky a Institut teoretické informatiky Západočeská univerzita

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

1 Linearní prostory nad komplexními čísly

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

BCH kódy. Alena Gollová, TIK BCH kódy 1/27

Kódováni dat. Kódy používané pro strojové operace

0.1 Úvod do lineární algebry

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

0.1 Úvod do lineární algebry

[1] samoopravné kódy: terminologie, princip

Matematika IV 10. týden Kódování

Uspořádanou n-tici reálných čísel nazveme aritmetický vektor (vektor), ā = (a 1, a 2,..., a n ). Čísla a 1, a 2,..., a n se nazývají složky vektoru

Generující kořeny cyklických kódů. Generující kořeny. Alena Gollová, TIK Generující kořeny 1/30

maticeteorie 1. Matice A je typu 2 4, matice B je typu 4 3. Jakých rozměrů musí být matice X, aby se dala provést

Lineární algebra Operace s vektory a maticemi

Odpřednesenou látku naleznete v kapitole 3.3 skript Diskrétní matematika.

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

Hammingův odhad. perfektní kódy. koule, objem koule perfektní kód. triviální, Hammingův, Golayův váhový polynom. výpočet. příklad

Kódy a kódování dat. Binární (dvojkové) kódy. Kód Aikenův

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

1 Co jsou lineární kódy

Samoopravné kódy, k čemu to je

Věta o dělení polynomů se zbytkem

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

8 Kořeny cyklických kódů, BCH-kódy

Základy maticového počtu Matice, determinant, definitnost

Necht tedy máme přirozená čísla n, k pod pojmem systém lineárních rovnic rozumíme rovnice ve tvaru

Číselné vektory, matice, determinanty

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

1 Báze a dimenze vektorového prostoru 1

8.3). S ohledem na jednoduchost a názornost je výhodné seznámit se s touto Základní pojmy a vztahy. Definice

(Cramerovo pravidlo, determinanty, inverzní matice)

Informace, kódování a redundance

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

Matice. Předpokládejme, že A = (a ij ) je matice typu m n: diagonálou jsou rovny nule.

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

vyjádřete ve tvaru lineární kombinace čtverců (lineární kombinace druhých mocnin). Rozhodněte o definitnosti kvadratické formy κ(x).

Matematika B101MA1, B101MA2

označme j = (0, 1) a nazvěme tuto dvojici imaginární jednotkou. Potom libovolnou (x, y) = (x, 0) + (0, y) = (x, 0) + (0, 1)(y, 0) = x + jy,

Informatika Kódování. Obsah. Kód. Radim Farana Podklady předmětu Informatika pro akademický rok 2007/2008

Lineární algebra nad obecným Z m, lineární kódy

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

Dosud jsme se zabývali pouze soustavami lineárních rovnic s reálnými koeficienty.

Hammingovy kódy. dekódování H.kódů. konstrukce. šifrování. Fanova rovina charakteristický vektor. princip generující a prověrková matice

VI. Maticový počet. VI.1. Základní operace s maticemi. Definice. Tabulku

Matice. Modifikace matic eliminační metodou. α A = α a 2,1, α a 2,2,..., α a 2,n α a m,1, α a m,2,..., α a m,n

VĚTY Z LINEÁRNÍ ALGEBRY

Determinanty. Obsah. Aplikovaná matematika I. Pierre Simon de Laplace. Definice determinantu. Laplaceův rozvoj Vlastnosti determinantu.

Základy algoritmizace

Učební texty k státní bakalářské zkoušce Matematika Vlastní čísla a vlastní hodnoty. študenti MFF 15. augusta 2008

1 Vektorové prostory.

PSK2-5. Kanálové kódování. Chyby

Úvod do teorie informace

Univerzita Karlova v Praze Pedagogická fakulta

Vektorový prostor. Př.1. R 2 ; R 3 ; R n Dvě operace v R n : u + v = (u 1 + v 1,...u n + v n ), V (E 3 )...množina vektorů v E 3,

Operace s maticemi. 19. února 2018

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s

Báze a dimenze vektorových prostorů

IB112 Základy matematiky

ANALYTICKÁ GEOMETRIE V ROVINĚ

Polynomy nad Z p Konstrukce faktorových okruhů modulo polynom. Alena Gollová, TIK Počítání modulo polynom 1/30

Střípky z LA Letem světem algebry

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

9 Kolmost vektorových podprostorů

Soustavy lineárních rovnic

Matematika. Kamila Hasilová. Matematika 1/34

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

příkladů do cvičení. V textu se objeví i pár detailů, které jsem nestihl (na které jsem zapomněl) a(b u) = (ab) u, u + ( u) = 0 = ( u) + u.

Lineární algebra - I. část (vektory, matice a jejich využití)

2 Vektorové normy. Základy numerické matematiky - NMNM201. Definice 1 (Norma). Norma je funkcionál splňující pro libovolné vektory x a y a pro

Úloha - rozpoznávání číslic

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Úvod do lineární algebry

1 Determinanty a inverzní matice

Úlohy k přednášce NMAG 101 a 120: Lineární algebra a geometrie 1 a 2,

z = a bi. z + v = (a + bi) + (c + di) = (a + c) + (b + d)i. z v = (a + bi) (c + di) = (a c) + (b d)i. z v = (a + bi) (c + di) = (ac bd) + (bc + ad)i.

Soustavy lineárních rovnic a determinanty

Matematika B101MA1, B101MA2

CVIČNÝ TEST 5. OBSAH I. Cvičný test 2. Mgr. Václav Zemek. II. Autorské řešení 6 III. Klíč 17 IV. Záznamový list 19

Dělitelnost čísel, nejmenší společný násobek, největší společný dělitel

Lineární algebra : Metrická geometrie

3 Lineární kombinace vektorů. Lineární závislost a nezávislost

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Vlastní číslo, vektor

Jednoduché cykly

Lineární algebra : Lineární prostor

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

ALGEBRA. Téma 4: Grupy, okruhy a pole

1 Zobrazení 1 ZOBRAZENÍ 1. Zobrazení a algebraické struktury. (a) Ukažte, že zobrazení f : x

Základní jednotky používané ve výpočetní technice

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?

1 Řešení soustav lineárních rovnic

DEFINICE Z LINEÁRNÍ ALGEBRY

Necht L je lineární prostor nad R. Operaci : L L R nazýváme

ALGEBRA. Téma 5: Vektorové prostory

Matematika 1 MA1. 2 Determinant. 3 Adjungovaná matice. 4 Cramerovo pravidlo. 11. přednáška ( ) Matematika 1 1 / 29

Slovo ALGEBRA pochází z arabského al-jabr, což znamená nahrazení. Toto slovo se objevilo v názvu knihy

Transkript:

Algebra v informatice Pro učitele matematiky Antonín Jančařík

Obsah Obsah... 1 Algebra a informatika... 2 Kontrolní součty... 5 Rodné číslo... 5 Využití dělitelnosti... 7 Čárový kód (Universal Product Code)... 9 ISBN... 11 Dvojková soustava a paritní bity... 13 Hashovací funkce... 14 Samoopravné kódy... 15 Opakovací kód... 15 Hammingův kód... 17 Rozšíření kódů pomocí paritního bitu... 25 Cyklické kódy... 26 Hadamardův kód... 30 Ortogonální kódy... 32 Automaty a gramatiky... 35 Konečný automat... 35 Nerodova věta... 39 Zásobníkové automaty... 42 Turingovy stroje... 44 Literatura... 45 1

Algebra a informatika Základem arabského výrazu algebra je slovo ربجلا (al-jabr). Al-jabr znamená dávat něco dohromady (stejné slovo se používá například při léčbě zlomenin). Do matematiky se slovo algebra dostalo díky spisu perského matematika Muhammada ibn Mūsā al-kwārizmīho, nazvaného Al-Kitab al- Jabr wa-l-muqabala ( Souhrnné pojednání o počítání pomocí doplňování a vyrovnávání ). Tento spis se zabývá řešením obecných lineárních a kvadratických rovnic. al-kwārizmī 780-850 Laická veřejnost si pod pojmem algebra představí nejčastěji řešení soustav rovnic. Řešením rovnic bylo po několik století skutečně hlavním úkolem, jímž se matematici v rámci algebry zabývali. Na počátku devatenáctého století však algebra našla nový obsah a začala se zabývat strukturami (množinami, na kterých jsou definované nějaké operace) a vztahy mezi nimi. Za zakladatele moderní abstraktní algebry je všeobecně považován Évariste Galois. Galois, ačkoli zemřel mlád ve věku pouhých 20 let na zranění utrpěné ve střeleckém souboji, dokázal, že rovnice vyšších řádů nelze řešit Évariste Galois 1811 1832 nástroji algebry, neboť jejich kořeny nelze vždy vyjádřit pomocí základních matematických operací a odmocnin. Na základě jeho myšlenek byla vybudována jedna z důležitých součástí moderní algebry teorie grup. Na rozdíl od algebry, kterou pěstovali již Babylóňané, je informatika moderní vědní disciplína, která se zabývá strukturou, zpracováním a využitím informací. Za otce informatiky je považován americký matematik Claude Elwood Shannon (1916 2001), který stál i u zrodu prvních počítačů a je také zakladatelem teorie návrhu digitálních elektrických obvodů. Přesto, že se informatika rozvíjela Claude Elwood Shannon 1916 2001 současně s počítači, souvisí s počítači asi tak, jako ekologie (věda zabývající se vztahem organismů a jejich prostředí a vztahem 2

organismů navzájem) se tříděním odpadů. Známý informatik Edsger Dijkstra uvádí: Informatika se nezabývá počítači o nic více než astronomie dalekohledy. Teoretická informatika se zabývá především algoritmy, formální logikou, formálními jazyky či ochranou a utajením dat. Otázky, které informatika řeší, jsou často na pomezí mezi matematikou a informatikou. Cílem tohoto textu je seznámit čtenáře s některými otázkami, kterými se informatika zabývá, a současně ukázat, jak lze při jejich řešení efektivně aplikovat nástroje, které známe z algebry. Jen na okraj: slovo algoritmus má podobný původ jako algebra, vzniklo z latinského přepisu jména perského matematika Muḥammada ibn Mūsā al- Kwārizmīho (Al Choritmi Algoritmy), autora spisu Al-Kitab al-jabr wa-l-muqabala, který dal název algebře. Slovníček pojmů Algebra Matematická disciplína zabývající se abstraktními strukturami a vztahy mezi nimi. Algebraická struktura Množina, na které je definovaná jedna nebo více operací. Mezi nejznámější algebraické struktury patří grupy, tělesa, Booleovy algebry a vektorové prostory. Algoritmus Algoritmus je jednoznačně určená posloupnost konečného počtu kroků vedoucí k řešení daného problému. Algoritmus musí splňovat následující podmínky: Hromadnost a univerzálnost algoritmus musí řešit úlohu pro různá vstupní data (splňující předem daná omezení) a musí fungovat ve všech situacích, které mohou při výpočtu nastat. Determinovanost (jednoznačnost) v každém kroku musí být jednoznačně určeno, co je jeho výsledkem a jak má algoritmus dále pokračovat. Konečnost a rezultativnost algoritmus musí skončit vždy po konečném počtu kroků s nějakým výsledkem. Správnost výsledek vydaný algoritmem musí být správný. Bit Základní jednotka informace. 3

Informace Pojem informace je velice obtížné definovatelný, neboť patří k nejobecnějším kategoriím současné vědy i filozofie, podobně jako hmota, vědomí, myšlení či čas. Formálně lze informaci definovat jako energetickou veličinu, jejíž hodnota je úměrná zmenšení entropie systému. Informatika Věda zabývající se informacemi a jejich zpracování. 4

Kontrolní součty Mezi základní problémy, se kterými je nutné se při zpracování dat vypořádat, patří chyby a nepřesnosti, které vznikly v důsledku lidské nepozornosti. Každý z nás jistě vyplňoval do nějakého formuláře rodné číslo, číslo občanského průkazu, číslo účtu či podobný údaj. Tato data následně někdo přepisuje k dalšímu počítačovému zpracování. Při zadávání a následném přepisu dochází, vzhledem k ohromnému množství takto zpracovávaných dat, k chybám. Mezi nejčastější chyby, se kterými se můžeme setkat, patří záměna jednoho znaku za jiný a přehození pořadí dvou znaků (vzpomeňte si, jak často se vám něco podobného stalo při zadávání telefonního čísla). Důsledky těchto chyb mohou být v některých případech fatální, např. když pošlete peníze omylem na jiný účet, je invalidní důchod přidělen jiné osobě, přijde Vám jiná kniha, než jste si pomocí ISBN objednali. Je tedy naprosto přirozené, že tato data jsou nějakým způsobem chráněna. Tato ochrana zpravidla není absolutní, ale je schopna odhalit alespoň část chyb, ke kterým v důsledku nepozornosti při zadávání došlo. Rodné číslo V České republice je pro identifikaci osob používáno rodné číslo. Systém udělování rodných čísel a jeho vývoj může sloužit jako výborná ukázka jak kódování dat, tak využití kontrolního součtu pro ochranu před drobnou chybou vzniklou nepozorností. Prvních šest číslic rodného čísla popisuje datum narození ve formátu rrmmdd (např. 501218 označuje datum narození 18. prosince 1950), ženy mají k měsíci připočteno 50 (tzn. 506218 označuje ženu narozenou ve stejný den). Zbytek rodného čísla je použit pro odlišení osob narozených ve stejný den. U starších rodných čísel bylo možné z čísla za lomítkem vyčíst i oblast, ve které se osoba narodila (např. počáteční nula označovala do roku 2004 Prahu). Do roku 1954 se používaly pouze tři čísla za lomítkem. Od 1. ledna 1954 je číslo za lomítkem čtyřciferné. Čtvrtá číslice slouží ke kontrole platnosti rodného čísla. Jako čtvrtá číslice se doplňuje zbytek po dělení prvních devíti číslic číslem 11. Pokud tento zbytek vyšel 10, doplnila se číslice 0. Čísel, která nejsou dělitelná jedenácti a byla u nich doplněna na konec nula, bylo vydáno asi 1000. Tato rodná čísla jsou platná. Na uvedeném postupu je vidět 5

správně zadaný algoritmus především splněnou podmínku rezultativnosti. Algoritmus dává kontrolní číslici i tehdy, kdy číslo nelze doplnit tak, aby bylo dělitelné jedenácti. Přidělování rodných čísel, která nejsou dělitelná jedenácti, bylo roku 1985 podle interního předpisu FSÚ Č. Vk. 2898/1985 ukončeno. Od roku 2004 se přidělování rodných čísel řídí zákonem č. 53/2004 Sb, který mimo jiné řeší i situaci, kdy se v jednom dni narodí více dětí, než je odpovídajících rodných čísel. V takovém případě se použije rodné číslo, kde je k měsíci přičteno 20 u mužů a 70 u žen. Nyní se budeme zabývat tím, jak je ochrana rodného čísla úspěšná při nejčastějších chybách v přepisu. Pro jednoduchost se budeme zabývat jen rodnými čísly, která jsou dělitelná 11. Přidělených rodných čísel, která nejsou dělitelná 11 je tak málo, že je můžeme zanedbat. Nejčastější chybou (připadá na ní cca 79% všech chyb) je záměna jedné číslice za druhou. Pokud u čísla dělitelného jednu číslici, dostaneme ve všech případech číslo, které již 11 dělitelné není. U rodného čísla je tedy záměna jedné číslice odhalena ve 100 % případů. Druhou nejčastější chybou (nastává v cca 10% případů) je záměna pořadí dvou sousedních číslic. I tato chyba je odhalena ve 100 % případů. Ověření tohoto faktu přenecháváme čtenáři jako cvičení. Další velice často chybou jsou skupinové záměny typu cba za abc. U rodného čísla již nelze tuto záměnu rozpoznat v žádném případě. Poznámka na závěr Změna rodného čísla se provede v případě, kdy a) totožné rodné číslo bylo přiděleno dvěma nebo více obyvatelům, b) bylo přiděleno chybné rodné číslo, c) se provádí nezrušitelné osvojení, nebo d) došlo ke změně pohlaví. 6

Cvičení Ověřte, zda se jedná o platná rodná čísla, u platných rodných čísel určete pohlaví a datum narození držitele rodného čísla. Své rozhodnutí zdůvodněte. a) 831231/0013 b) 531231/0014 c) 636231/0010 d) 866231/0020 e) 890931/0256 f) 892131/0255 g) 067130/0256 Výsledky cvičení a) Nejedná se o platné rodné číslo. Číslo není dělitelné 11. b) Nejedná se o platné rodné číslo. Před rokem 54 se nepoužívaly čtyřmístné přípony. c) Platné rodné číslo. Číslo sice není dělitelné 11, je však platné. Žena narozená 31. 12. 1963. d) Nejedná se o platné rodné číslo. V roce 1986 se již čísla nedělitelná 11 nepoužívala. e) Nejedná se o platné rodné číslo. Září má pouze 30 dní. f) Nejedná se o platné rodné číslo. Třetí číslice neodpovídá normě. g) Platné rodné číslo. Výjimka pro větší počet narozených dětí. Žena narozená 30. 1. 2006. Využití dělitelnosti Metoda, která je použita pro kontrolu správnosti rodného čísla, je velice efektivní: pomocí jedné přidané číslice dokáže odhalit velkou část nejčastějších chyb, kterých se při zadávání dopouštíme. Její hlavní nevýhodou je fakt, že některá čísla 7

nelze pomocí jedné číslice na násobek čísla jedenáct doplnit. V praxi se proto používají i jiné kontrolní číslice, které využívají dělitelnost čísly 9 či 7. Metodu doplňování čísla pomocí dělitelnosti 9 používá pošta v USA pro označování poštovních zásilek. Kontrolované číslo není doplňováno na násobek, ale jako poslední číslice se přidává zbytek čísla, které doplňujeme po dělení 9. Při použití této metody sice můžeme každému číslu přidělit kontrolní číslici, ale schopnost detekce chyby je mnohem menší, než při doplňování na násobek čísla 11. Uvedená metoda není schopna rozeznat prohození dvou číslic, s výjimkou prohození posledních dvou číslic a není dokonce spolehlivá ani v případě záměny jedné číslice za druhou. Kontrolní součet se nemění, pokud v původním čísle je nahrazena devítka za nulu a naopak. Úspěšnost při odhalování záměny jedné číslice za jinou je tak u této metody pouze 98 %. Důvodem, proč nelze kontrolou čísla pomocí zbytku po dělení 9 rozeznat prohození dvou číslic je skutečnost, že všechny mocniny čísla 10 mají stejný zbytek po dělení 9 a to 1. Zbytek čísla po dělení 9 tak můžeme snadno spočítat pomocí ciferného součtu. Tuto nevýhodu lze odstranit tak, že místo devítky použijeme pro výpočet zbytku sedmičku. Pomocí kontrolní číslice, kterou dostaneme jako zbytek čísla po dělení sedmi, lze rozeznat méně záměn znaků, než při použití čísla devět. Nelze rozeznat záměnu ve dvojicích (0-7, 1-8, 2-9). Úspěšnost při odhalování záměny jedné číslice za jinou je tak pouze 95 %. Na druhou stranu pomocí zbytku při dělení sedmi lze rozeznat takřka všechny záměny pořadí dvou sousedních číslic. Jediné dvojice, jejichž prohození nelze rozeznat, jsou, stejně jako při záměně číslic, dvojice (0-7, 1-8, 2-9). Tyto dvojice se vyskytují v cca 6 % případů. Úspěšnost této metody při odhalování záměny pořadí dvou sousedních číslic je 94 %. Výpočet kontrolní číslice jako zbytek čísla při dělení sedmi se používá pro kontrolu správnosti čísla letenky, nebo jsou jí zajištěna čísla zásilek u společností UPS a FedEx. 8

Čárový kód (Universal Product Code) S čárovými kódy (UPC) na výrobcích se dnes setkáváme denně. Také tento číselný údaj je zabezpečen pomocí kontrolní číslice. Kontrolní číslice je úplně poslední číslice, kterou v čárovém kódu nalezne a vypočítá se jako doplněk trojnásobku součtu lichých číslic a součtu sudých číslic do násobku čísla deset (počítáno odzadu, číslice na místě jednotek je vždy násobena třemi). Podoba čárového kódu není jednotná, v současnosti se nejčastěji setkáváme s kódy, u kterých je jedna předsazená číslice a následují dvě skupiny po šesti číslicích. V takovém případě se kontrolní číslice nejsnáze vypočítá pomocí skalárního součinu dle následujícího vzorce: (1,3,1,3,1,3,1,3,1,3,1,3) ( a, a, a, a, a, a, a, a, a, a, a, a )mod10 1 2 3 4 5 6 7 8 9 10 11 12 Čárový kód je stoprocentně úspěšný při změně jedné číslice za druhou. Při nahrazení jedné číslice za jinou vždy na dané pozici změníme zbytek po dělení desíti (nejen v případě, kdy je číslice započítávána jednou, ale i v případě, kdy je násobena třemi). Tato změna se promítne do celkového součtu a kontrolní součet ji ovlivní. Kontrolní součet UPC není stoprocentně spolehlivý při rozeznávání chyb vzniklých záměnou pořadí dvou po sobě jdoucích znaků. Pomocí tohoto kontrolního součtu nedokážeme rozeznat prohození pořadí číslic jedna a šest. Úspěšnost UPC u tohoto typu chyb je pouze 89 %. Cvičení 1. Ověřte správnost následujících čárových kódů: a) 5 449000 050229 b) 8 12686 00072 0 c) 9 001890 757809 9

2. Doplňte kontrolní číslici k následujícím čárovým kódům: a) 4102 064? b) 2013 904? c) 8 593838 01121? 3. Nalezněte všechny dvojice, u nichž nelze rozeznat záměnu pořadí. Výsledky cvičení 1. Kontrola správnosti kódů: a) Správný kód. Coca-Cola light 2 litry b) Správný kód. Mathematical Explorer c) Chybný kód. Správný kontrolní součet je 8, hra Digit. 2. Doplnění kontrolních součtů do UPC: a) 4102 0647, Droždí b) 2013 9049, Máslo c) 8 593838 011314, Hera 3. Kontrolní součet UPC nerozezná prohození dvojic čísel, jejichž dvojnásobky se modulo deset rovnají. Nelze rozeznat dvojice (0,5) (1,6), (2,7), (3,8) a (4,9). 10

ISBN Každá kniha, která na světě vyjde je v současnosti označena pomocí desetimístného kódu ISBN. Pro výpočet kontrolní číslice ISBN se používá metoda, která je podobná metodě použité pro kontrolu rodného čísla v České republice. Také ISBN je doplňováno na násobek čísla jedenáct. Rozdíl je v tom, že u ISBN je každá číslice brána s jinou váhou. Kontrolní číslice c je volena tak, aby číslo 10a + 9a + 8a + 7a + 6a + 5a + 4a + 3a + 2a + c 1 2 3 4 5 6 7 8 9 bylo dělitelné jedenácti. Pokud taková číslice neexistuje, je doplněno místo číslice písmeno X. ISBN tak vyřešilo problém s čísly, která na násobek jedenácti nelze doplnit. Cenou za toto vylepšení je fakt, že ISBN není vždy číselný kód. Kromě desetimístného kódu ISBN se můžeme u knih setkat také s označením, které je třinácti místné a začíná číslicemi 978 (resp. 979). V takovém případě se nejedná o ISBN, ale UPC kód, který vznikl s ISBN přidáním číslic 978 (tento prefix je vyhrazen pro knihy) a dopočítáním kontrolní číslice podle pravidel pro čárový kód. Cvičení 1. Ověřte správnost následujících ISBN. V případě chyby opravte kontrolní součet. Ke všem platným ISBN vytvořte příslušný čárový kód. a) 0-387-94293-9 b) 0-387-54894-6 c) 80-8094-057-6 2. Pomocí internetu určete knihy, jejichž ISBN bylo v předchozím cvičení použito. 3. Nalezněte ISBN, jehož kontrolní součet je v obou variantách (ISBN i UPC) stejný. Výsledky cvičení 1. Kontrola ISBN: a) Správný kód. 9 780387 942933 b) Chybný kód. 0-387-54894-7, 9 780387 548944 c) Správný kód. 9 788080 940577 11

2. Názvy titulů: a) N. Koblitz, A Course in Numer Theory and Cryptography b) J. H. van Lint, Introduction to Coding Theory c) IKT vo vyučování matematiky 2, ed. J. Fulier 3. Takové čísla skutečně existují, kontrolu proveďte sami. Slovníček pojmů Čárový kód Čárový kód (Universal Product Code) je celosvětově používané značení výrobků, umožňující jejich snadnou identifikaci a počítačové zpracování. Pro čtení údajů se používají specielní čtečky, které načítají údaje do počítače. Pro usnadnění obsluhy je u čárového kódu údaj vždy přepsán i do číselné podoby. ISBN (International Standard Book Number) je alfanumerický kód určený pro jednoznačnou identifikaci knižních vydání. Formát ISBN byl vytvořen na konci šedesátých let na žádost knihkupecké firmy W H Smith týmem profesora Gordona Fostera. Vydávání ISBN je specifikováno mezinárodním standardem ISO 2108 a od roku 1972 koordinováno Mezinárodní agenturou ISBN sídlící v Berlíně. ISSN International Standard Serial Number je obdobou ISBN a používá se pro periodické publikace (noviny, časopisy, včetně těch vycházejících online). ISSN je pouze osmimístný a používá obdobný algoritmus pro výpočet kontrolní číslice jako ISBN. Kontrolní součet Údaj umožňující ověřit, zda zaslaný údaj byl s velkou pravděpodobností doručen správně, respektive zda při zadávání dat nedošlo k překlepu či jiné chybě. UPC Universal Product Code viz čárový kód. 12

Dvojková soustava a paritní bity Všechna data, která jsou v počítači uložena, se skládají z nul a jedniček. Informace, která může obsahovat pouze dvě možné hodnoty nula x jedna, ano x ne, pravda x nepravda, vypnuto x zapnuto má velikost jeden bit. Proto budeme o jedné pozici v paměti, která může nabývat pouze dvou hodnot (nula x jedna) budeme mluvit jako o jednom bitu. Nuly a jedničky se skládají do skupin, kterým říkáme slova. Slova mohou mít různou délku. Nejčastěji se používají slova sedmi bitová (mají délku sedm znaků) a osmibitová. Slovo o délce osm bitů nazýváme byte (čti bajt). Častá jsou ale i slova o délce dva, čtyři, osm či šestnáct byte. Mezi nejjednodušší způsoby, jak zjistit, zda při přenosu či ukládání a opětovném načtení datového slova nedošlo k chybě je použití paritního bitu. Paritní bit je bit přidaný k datovému slovu (resp. vyhrazený, zpravidla poslední, bit v rámci datového slova), který obsahuje informaci o počtu jedničkových bitů ve slově. Pokud je počet jedniček v původním slově sudý, přidáváme nulu. Pokud lichý, přidáváme jedničku. Počet jedniček ve výsledném slově je tak vždy sudý. Paritní bity se například používají pro zabezpečení komunikace po sériové lince. Cvičení Doplňte paritní bity na konec následujících slov: a) 0010100 b) 1101101 c) 1111111 d) 0101010 Výsledky cvičení a) 00101000 b) 11011011 c) 11111111 d) 01010101 13

Hashovací funkce Speciálním případem kontrolního součtu jsou hashovaní funkce. Cílem hashovaní funkce je ke vstupním datům vypočítat poměrně malé číslo (otisk, výtah, miniaturu, fingerprint či hash), pomocí kterého lze data kdykoli ověřit. Cílem hashovaní funkce není rozeznat náhodné změny (překlepy), ale pokud možno odhalit všechny (a to i záměrné) změny, ke kterým v dokumentu došlo. Otisk bývá odesílán či ukládán společně s daty, která chceme zabezpečit, případně je veřejně dostupný (např. na internetu). Po převzetí dat je otisk znovu nezávisle spočítán. Pokud je nezávisle spočítaný otisk odlišný od přeneseného nebo uloženého, je zřejmé že při přenosu nebo uchovávání došlo k chybě, nebo že byla data záměrně změněna. Pokud je shodný, tak téměř jistě k žádné změně nedošlo. Mezi nejznámější a nejpoužívanější hashovaní funkce patří v současnosti MD5 (Message-Digest algorithm 5) a SHA (Secure Hash Algorithm). Hashovací funkce se považuje za bezpečnou, pokud splňuje následující dvě podmínky: Je velice obtížné najít zprávu, která odpovídá danému otisku. Je velice obtížné najít dvě rozdílné zprávy, které mají stejný otisk. V současné době panují pochybnosti o bezpečnosti používaných hashovacích funkcí, a proto byl vypsán konkurz na vytvoření nové hashovací funkce, která by se stala celosvětovým standardem. 14

Samoopravné kódy V předchozí kapitole jsme se zabývali otázkou, jak zjistit, zda při zadávání či přenosu dat nedošlo k jejich pozměnění. Zjistit, jestli data při přenosu byla doručena správně, je užitečné, ale ve mnoha případech potřebujeme také vědět, jaká data byla odeslána. Kontrolní součty nám tuto informaci neposkytují. Pomocí kontrolního součtu pouze zjistíme, zda data jsou v pořádku či nikoli. Běžnou reakcí na doručení chybné informace je žádost o její opětovné zaslání. V některých situacích však informaci nelze opakovaně zaslat, nebo by její přenos byl velmi technicky a finančně nákladný (například při zasílání snímků z družice na Marsu). Proto byly vyvinuty samoopravné (nebo také samoopravující) kódy, které dokáží chybu v datech nejen detekovat, ale také identifikovat a opravit. Schopnost kódu detekovat a opravovat chyby je samozřejmě omezená. Pokud nelze zaručit, že alespoň polovina znaků dojde v pořádku, tak neexistuje mechanismus, který by dokázal chyby opravovat. V praxi se používají kódy, které opravují mnohem menší počet chyb, než je polovina ze všech znaků. Běžné jsou kódy, které například opravují i pouze jednu chybu v datovém slovu. To, aby v datech nebylo více, než je očekávaný počet chyb, je technický problém a řeší se například zesílením signálu při přenosu, odstíněním a dalšími prostředky, kterými se zde nebudeme zabývat. Opakovací kód Nejjednodušším příkladem samoopravujícího kódu je opakovací kód. Jednoduše informaci pošleme několikrát po sobě, například třikrát. Pokud dojde při přenosu chybě, označíme jako správnou tu informaci, která přišla víckrát. Samozřejmě platí, že čím víckrát informaci při odesílání opakujeme, tím víc chyb dokážeme opravit. Teoreticky se počet opravitelných chyb blíží až padesáti procentům, to by ale bylo nutné informaci při opakování opravdu mnohokrát opakovat. Častější odesílání informace nám nepomůže detekovat chybu vždy. Pokud informaci pošleme dvakrát, tak v případě jedné chyby nejsme schopni chybu opravit, protože nevíme, kde chyba nastala. Například pokud odesíláme pouze nuly a jedničky, tak v případě doručení slova 01nevíme, zda chyba nastala na prvním místě a odesílané slovo bylo 11, nebo na druhém místě a bylo odesláno 00. Jednu chybu 15

jsme schopni opravit až při odesílání informace třikrát po sobě, protože v tomto případě již budeme mít správný znak dvakrát, zatímco chybový pouze jednou. Doručené slovo Odesílané slovo 000 0 001 0 010 0 100 0 111 1 110 1 101 1 011 1 Pokud bychom každý bit odesílaly čtyřikrát, nezvýšíme tím počet chyb, které jsme schopni opravit. U slova 0101sice víme, že při jeho přenosu došlo k více než jedné chybě, ale opět nedokážeme rozhodnout, kde k chybě došlo. Vyplatí se proto informaci opakovat v lichém počtu, protože sudé bity nezvyšují počet chyb, které je možné opravit. U opakovacího kódu, který odesílá 1 každý bit n -krát je počet chyb, které lze opravit [ ] n 2. Než se seznámíme s dalšími kódy, je nutné zavést terminologie, kterou budeme nadále používat. Všechny pojmy si vysvětlíme na příkladu opakujícího kódu, který každý znak odesílá třikrát. Slovníček pojmů Délka kódu Počet symbolů v kódovém slově. V případě opakujícího kódu odpovídá délka kódu počtu opakování zasílaného bitu. Hammingova vzdálenost Počet míst, na kterých se dvě slova liší. Kódové slovo Kódové slovo je slovo, které odesíláme společně. V případě opakujícího kódu máme pouze dvě kódová slova, jedno je tvořené samými jedničkami a druhé samými nulami. 16

Hammingův kód Výraznou nevýhodou opakujícího kódu je jeho velká náročnost na počet zasílaných bitů. Poměr mezi délkou a dimenzí kódu je příliš veliký. Pro opravu jedné chyby je nutné každou informaci zasílat třikrát, což může být v některých případech (například při zmiňované komunikaci z Marsu) časově, energeticky i finančně náročné. Byly proto vytvořeny kódy, které sice opravují menší množství chyb, než opakující kód, ale poměr mezi předanou informací a počtem odesílaných bitů je u nich mnohem výhodnější. Asi nejznámější z těchto kódů je Hammingův kód. V dalším textu budeme pracovat s kódovými slovy tvořenými nulami a jedničkami. Pokud pracujeme s těmito slovy, používáme modulární aritmetiku, která se od normální liší tím, že místo výsledku bereme vždy zbytek výsledku po dělení dvěma (tedy 1+ 1= 0), pracujeme tedy v dvouprvkovém tělese Z 2. Richard Wesley Hamming 1915 1998 Hammingův kód je nejsnazší popsat pomocí kontrolní matice. Kontrolní matice je matice, jejíž řádky tvoří vektory báze ortogonálního doplňku k vektorovému prostoru tvořeného kódovými slovy. To znamená, že kódová slova jsou právě ty, které po vynásobení s kontrolní maticí dávají nulový vektor. Tato vlastnost je velmi užitečná pro kontrolu, zda v doručeném slově nedošlo k chybě. V některých případech (a Hammingův kód je takový případ), lze na základě součinu kódového slova (jako vektoru) a kontrolní matice i přesně určit, k jaké chybě v průběhu přenosu došlo. Nyní ale již přistupme k Hammingovu kódu. Hammingův kód je příkladem lineárního kódu, který je schopen detekovat jednu chybu a byl pojmenován po svém objeviteli Richardu Hammingovi. Kontrolní maticí Hammingova kódu je matice, jejíž sloupce tvoří všechna různá nenulová bitová slova délky k. Pro k=3 vypadá tato matice takto: 0001111 K = 0110011 1010101 17

Tuto matici můžeme chápat jako matici homogenní soustavy tří rovnic o sedmi neznámých. Řešení této soustavy tvoří lineární prostor dimenze čtyři. Pokud nalezneme čtyři lineárně nezávislé řešení této soustavy, dostáváme tak i bázi řešení a současně generující matici Hammingova kódu: H 1000011 0100101 =. 0010110 0001111 Slova Hammingova kódu tvoří nejenom řádky generující matice, ale i všechny jejich lineární kombinace. Slovo (1100110) je také kódovým slovem, protože vzniklo jako součet prvních dvou řádků. Můžete snadno ověřit, že tento vektor je také řešením původní homogenní soustavy rovnic. Cvičení Ověřte, která z následujících slov jsou slovy Hammingova kódu s generující maticí H 1000011 0100101 = : 0010110 0001111 a) (0000000) b) (1111111) c) (1111000) d) (0000111) e) (1000011) Výsledky cvičení a) Ano b) Ano c) Ne d) Ne e) Ano 18

Použití Hammingova kódu Při použití opakujícího kódu se původní informace odesílala vícekrát. Bylo proto naprosto jasné, jak souvisí odesílaná informace s informací původní. U Hammingova kódu není možné odesílat všechny kombinace nul a jedniček. Je nutné nejprve nějak přiřadit k odesílané informaci slova z Hammingova kódu, zakódovanou zprávu odeslat, následně ji opravit a přijatá slova opět převést. Technická realizace první a poslední fáze tohoto procesu je velice jednoduchá, stačí jen upřesnit, jakou informaci budeme odesílat. Pomocí Hammingova kódu délky sedm lze odesílat informace o délce čtyři bity. Čtveřici nul a jedniček přiřadíme slovo z Hammingova kódu tak, že tuto čtveřici (jako vektor) vynásobíme generující maticí Hamingova kódu: 1000011 0100101 ( 1 0 1 0) = ( 1 0 1 0 1 0 1) 0010110 0001111 Toto vynásobení odpovídá tomu, že sečteme ty vektory báze prostoru kódových slov, které odpovídají pozicím jedniček v odesílaném půlbytovém slově. Příklad: Pokud chceme zakódovat slovo (1010), příslušné slovo v Hammingově kódu je to, které dostaneme součtem prvního a třetího řádku z generující matice kódu (1010101). Všimněte si, že první čtyři pozice v odesílaném slově (1010101) přesně odpovídají odesílané informaci. Při dekódování tedy stačí vždy zapomenout poslední čtyři místa v přijatém (a opraveném) slově. Vzdálenost slov v Hammingově kódu Nyní přistupme k důležité otázce, zda jsme s pomocí Hammingova kódu skutečně schopni opravovat nějaké chyby, které vznikly při přenosu dat. Aby bylo možné chyby opravovat, je nutné, aby mezi dvěma kódovými slovy byla dostatečně velká vzdálenost (ve smyslu Hammingovy vzdálenosti). Pokud se dvě kódové slova například liší pouze na jednom místě, chyby nelze opravovat, neboť není jasné, jestli bylo odesláno první slovo a při přenosu nedošlo k chybě, nebo druhé a při přenosu nastala jedna chyba. Obdobnou úvahou lze ověřit, že na opravu jedné chyby nestačí ani rozdíl na dvou místech (srovnej s podobnou úvahou v kapitole o opakujícím 19

kódu). Pokud má být Hammingův kód schopen opravovat jednu chybu, musí se každá dvě jeho slova lišit alespoň na třech místech Je tomu ale opravdu tak? Pro ověření, zda se každá dvě slova v Hammingově kódu lišší alespoň na třech místech, můžeme samozřejmě porovnávat každé slovo s každým. Celkem se jedná o 120 dvojic. Mnohem jednodušší je ale využít vlastností lineárního kódu. Vzdálenost dvou slov je rovna počtu jedniček ve slově, které vznikne jejich součtem. Počet jedniček ve slově budeme nazývat váhou slova. Protože Hammingův kód je lineární kód, tak i součet dvou kódových slov je opět kódovým slovem. Nejmenší vzdálenost dvou slov odpovídá nejmenší váze nenulového kódového slova. Pokusme se tedy nenulové slovo s nejmenší váhou nalézt. Při hledání tohoto slova využijeme vlastnost, že každé kódové slovo je současně řešením homogenní soustavy rovnic dané kontrolní maticí kódu. Předpokládejme nejprve, že kódové slovo s nejmenší váhou má váhu jedna. Jedná se o slovo, které je tvořeno šesti nulami a jednou jedničkou. Toto slovo nemůže být řešením homogenní soustavy rovnic dané kontrolní maticí. Kódové slovo s vahou jedna v Hammingově kódu neexistuje. Nyní proveďme stejnou úvahu pro slovo s vahou dvě. Toto slovo obsahuje dvě jedničky. Po dosazení do homogenní soustavy dostáváme vektor, který je součtem sloupců (jako vektorů) odpovídajících pozicím jedniček ve slově. Aby tento součet byl nulový, musely by být oba sloupce stejné. V kontrolní matici jsou ale všechny sloupce různé, proto neexistuje kódové slovo s vahou dva. Kódové slovo s vahou tři již existuje, příkladem jsou například první tři vektory z námi vytvořené báze. Jak se opravují chyby v Hammingově kódu Poslední otázkou, která je spojena s použitím Hammingova kódu je otázka, jak rozpoznat a opravit případnou chybu, která mohla při přenosu nastat. Poslední fáze se skládá ze dvou kroků. V prvním kroku vynásobíme kontrolní matici doručeným slovem. Pokud je výsledkem nulový vektor, je doručené slovo zároveň odesílaným slovem. 20

Pokud je výsledkem součinu nenulové slovo, přejdeme k druhému kroku a opravíme doručené slovo na místě, které odpovídá sloupci kontrolní matice shodnému s výsledkem provedeného kontrolního součinu. Tento fakt je možná překvapivý, ale má velice jednoduché odůvodnění. Doručené slovo d si lze představit jako součet odesílaného slova o a chybového slova e, jehož váha je nejvýše jedna. Platí tedy d = ( o+ e). Součin s kontrolní maticí lze vypočítat následovně: K d = K ( o+ e) = K o+ K e= K e, neboť součin kontrolní matice s odesílaným slovem je vždy nulový. Poslední součin K e odpovídá přesně sloupci, ve kterém se v chybovém slovu nachází jednička. Cvičení Nalezněte odesílaná slova, pokud při použití Hammingova kódu s generující maticí H 1000011 0100101 = 0010110 0001111 byla doručena slova: 0001111 K = 0110011 1010101 a) (0011011) b) (1011011) c) (0111010) d) (0100111) e) (1001011) Výsledky cvičení a) (0011001) b) (1011010) c) (0101010) d) (0100101) e) (1000011) 21

Slovníček pojmů Dimenze kódu Dimenze vektorového prostoru tvořeného kódovými slovy. Dimenze kódu odpovídá počtu bitů, které lze zakódovat do jednoho kódového slova. Generující matice lineárního kódu Matice, jejíž řádky tvoří vektory báze prostoru tvořeného kódovými slovy. V případě opakujícího kódu má tato matice rozměry 1 n a je tvořena samými jedničkami. Kontrolní matice kódu Matice, jejíž řádky tvoří báze ortogonálního doplňku kódu. Lineární kód Lineární kód je takový kód, jehož kódová slova tvoří vektorový prostor nad tělesem Z 2. Příkladem lineárního kódu je opakující kód. 22

Perfektní kódy Hammingův kód má jednu velice pozoruhodnou vlastnost, pokud vezmeme libovolné slovo, tak nalezneme kódové slovo, které má od vybraného slova vzdálenost jedna. Kódová slova jsou v prostoru rozmístněna velice efektivně. Pokud si představíme, že slova s povolenou chybou tvoří kolem kódových slov koule o poloměru jedna, tak v případě Hammingova kódu tyto koule vyplňují celý prostor. O tom se můžeme přesvědčit snadným výpočtem. Pro zvolená k použité pro tvorbu kontrolní matice je: Délka slova je 2 k 1. Počet všech slov 2 1 2 k. Počet kódových slov je (2 1) 2 k k. Počet slov lišících se od vybraného slova o 1 je (2 1) k. Počet slov, která jsou buď kódová, nebo se od nich liší o jedna je: k k k (2 1) k k (2 1) k k (2 1) 2 (1+ 2 1) = 2 2 = 2 Tedy přesně stejný, jako počet všech slov. Kódy, které splňují, že každé slovo se od nějakého kódového slova liší nejvýše o maximální povolený počet chyb, nazýváme perfektní. Oba kódy, se kterými jsme se doposud seznámili (Hammingův i opakovací), jsou perfektní. Tato vlastnost ale není u kódů obvyklá. Převážná většina lineárních kódů není perfektní. To znamená, že v nich existují slova, která nelze dekódovat, protože se liší od všech kódových slov o více, než je povolený počet chyb. Ve skutečnosti již existuje jen jeden další kód tvořený nulami a jedničkami, který je perfektní. Tento kód je pojmenován po svém objeviteli, švýcarském matematikovi Marcel J.E. Golayovi (1902 1989). Binární Golayův kód má slova délky 23 a je schopen opravovat 3 chyby. 23

Kontrolní matice Golayova kódu vypadá následovně: Neexistence dalších perfektních kódů byla dokázána v roce 1973 za pomoci počítačů, které prozkoumaly posledních několik tisíc možností, které se nepodařilo teoretickými úvahami vyloučit. Cvičení Spočtěte, kolik kódových slov má binární Golayův kód a určete dimenzi tohoto kódu. Výsledky cvičení Golayův kód má 4096 slov a jeho dimenze je 12. 24

Rozšíření kódů pomocí paritního bitu Rozšířený Hammingův kód Hammingův kód perfektně využívá prostor všech slov a je schopen bezchybně detekovat a opravit jednu chybu. V případě, že v průběhu přenosu dojde v jednom kódovém slově ke dvěma chybám, Hammingův kód již není schopen tuto situaci rozeznat a doručené slovo dekóduje chybně. Tato vlastnost může být v některých aplikacích závažným nedostatkem. Proto se někdy v praxi používá rozšířený Hammingův kód. Rozšířený Hammingův kód vznikne z Hammingova kódu přidáním paritního bitu ke všem kódovým slovům. V rozšířeném Hammingově kódu je vzdálenost každých dvou slov minimálně čtyři. Rozšířený Hammingův kód je schopen opravovat jednu chybu a detekovat dvě chyby. V angličtině se kódy s touto vlastností označují zkratkou SECDED ("single error correction, double error detection"). V případě dvou chyb již nelze doručené slovo opravit a takto poškozená informace musí být odeslána znovu. Rozšířený Golayův kód Stejným způsobem, jakým byl rozšířen Hammingův kód, lze pomocí paritního bitu rozšířit i kód Golayův. Pomocí rozšířeného Golayůvo kódu lze zakódovat dvanácti bitovou informaci do čtyřiadvaceti bitového slova tak, že každá dvě kódová slova se liší na minimálně osmi místech. Rozšířený Golayův kód je proto schopen opravovat 3 chyby a detekovat chyby 4. Rozšířený Golayův kód je používán v americkém standartu pro vysokofrekvenční (HF) radiovou komunikaci. Rozšířený Golayův kód byl také využit pro přenos barevných fotografií Marsu a Jupiteru, které získaly sondy Voyager 1 a Voyager 2. Cvičení Dokažte, že vzdálenost dvou slov se sudou váhou je sudá. Dokažte, že v rozšířeném Hammingově kódu je vzdálenost každých dvou slov minimálně čtyři. 25

Cyklické kódy Speciálním případem lineárního kódu je cyklický kód. Cyklické kódy se vyznačují tím, že cyklickou záměnou kódového slova opět dostáváme kódové slovo. Tuto podmínku lze zjednodušit na podmínku, že pokud ( a1, a2,..., a ) je kódové slovo, tak také ( a, a 2 3,..., a1) je kódové slovo. Cyklické kódy lze velice snadno popsat pomocí polynomů. Každý polynom stupně n 1 lze reprezentovat jako uspořádanou n-tici n jeho koeficientů n 1 i f = ax ( a,..., a ). Pokud polynom i= 0 i 0 n 1 f n 1 i = ax i vynásobíme i= 0 n polynomem x a spočítáme zbytek po dělení polynomem x 1dostaneme polynom n 1 i n 1 i 1 n 1 0 n 2 i= 1 f = a + a x ( a, a,..., a ). Provedená operace (vynásobení polynomu n polynomem x a výpočet zbytku po dělení polynomem x 1), budeme ji značit g, nám reprezentuje cyklický posun koeficient polynomu. Problém nalezení cyklického kódu je tedy převeden na otázku, zda lze nalézt podmnožinu množiny všech polynomů, která je současně vektorovým prostorem a současně odolná vůči operaci g, tzn. pokud f je polynom reprezentující kódové slovo, tak také g(f) reprezentuje kódové slovo. Tuto podmínku můžeme přeformulovat tak, že pokud C T[ x]/( x n 1) je množina kódových slov a ab, Ca c T[ x], tak také a+ b Ca a cmod( x n 1) C.Množinu splňující tyto podmínky nazýváme ideálem okruhu n n T[ x]/( x 1). Cyklické kódy tedy tvoří ideály okruhu T[ x]/( x 1). Z teorie ideálů n víme, že ideály okruhu T[ x]/( x 1) jsou tvořeny všemi násobky pevně zvoleného n polynomu f modulo x 1 (tento polynom nazýváme generující). Pokud chceme, aby námi vytvořený kód opravoval nějaké chyby, nesmí obsahovat všechna kódová n slova, a proto je nutné volit f tak, aby NSD( f,( x 1)) 1. Příklad Zkonstruujeme sedmimístný cyklický kód nad dvouprvkovým tělesem. Polynom 7 3 3 2 n x 1 = ( x 1)( x + x+ 1)( x + x + 1) má osm různých dělitelů. Polynomy 1a x 1jsou triviální dělitelé a pro konstrukci kódu je nebudeme využívat (zamyslete se proč). Jako generující polynom zvolíme polynom 3 4 3 2 ( x 1)( x x 1) x x x 1 + + = + + +. Kódová 26

slova námi vytvořeného cyklického kódu tvoří slova (0,0,1,1,1,0,1), (0,1,1,1,0,1,0), (1,1,1,0,1,0,0) a všechny jejich lineární kombinace. Takto vytvořený cyklický kód má tedy osm kódových slov a je schopen opravovat jednu chybu. Použití cyklického kódu Nechť C je lineární cyklický kód délky n generovaný polynomem f a x a x a n k n k n k 1 n k 1 0 = + +... + stupně n k. Potom báze kódu C je tvořena vektory reprezentujícími polynomy 2 k 1 f, x f, x f,..., x f, kód C má tedy dimenzi k a jeho generující matice je tvořena (jako řádky) právě uvedenými vektory báze. Pokud chceme odeslat pomocí kódu C slovo ( a 1,..., a k ), zakódujeme ji pomocí vektoru reprezentujícího polynom k 1 a f a x f ak x f 1 + 2 +... +. n Jelikož polynom dělí f polynom x 1, existuje polynom h stupně k takový, že n fh. = x 1. Vektory reprezentující polynomy 2 n k 1 hx, hx, h,..., x h jsou kolmé na všechny vektory kódu C a tvoří (jako řádky) kontrolní matici kódu C. Kontrolní matice kódu C je ale současně generující maticí cyklického kódu generovaného polynomem h. Kódy generované polynomy f a h jsou navzájem kolmé a současně báze f a h tvoří dohromady bázi celého prostoru. Kódy, které splňují tuto podmínku nazýváme kódy duální. Cyklické kódy se dále dělí podle toho, jakým způsobem je volen generující polynom. Nejznámější cyklické kódy se nazývají podle svých objevitelů BCH (Bose- Chaudhuriho-Hocquenghemovy) kódy. BCH kódy volí jako generující polynom nejmenší společný násobek zvoleného počtu minimálních polynomů. Ale i BCH kódy se dále dělí. Nejznámější podtřídu BCH kódů tvoří Reed-Solomonovy kódy, které nacházejí široké uplatnění v mnoha technických aplikacích. Reed-Solomonovy kódy jsou využívány pro ochranu informací uložených na CD a DVD, ale také v rámci nové technologie Blu-ray Disk. Pomocí Reed-Solomonových kódů je zabezpečen přenos dat v technologiích DSL a WiMAX, ale i přenos televizního signálu ve formátech DVB a ATSC. 27

Slovníček pojmů ATSC Advanced Television Systems Committee (ATSC) je formát digitální televize nahrazující původní analogový standard NTSC v zemích severní Ameriky (v USA od 2009 a Kanadě od roku 2011). Blue-ray disk Disk patřící ke třetí generaci optických datových disků. Kapacita disku může dosahovat až 80 GB (u oboustranné dvouvrstvé varianty), této kapacity je dosaženo díky velice malému příčnému odstupu stop (pouze 0,35 μm). Pro čtení disků Blu-ray se používá laserové světlo s vlnovou délkou 405 nm. CD Kompaktní disk (compact disc) je optický disk určený pro ukládání digitálních dat. CD může obsahovat digitální zvukovou nahrávku (tzv. audio CD) nebo (počítačem čitelná) data (CD-ROM). Pro čtení kompaktních disků se používá laserové světlo s vlnovou délkou 785 nm a příčný rozestup stop je 1,6 μm. Cyklický kód ( a Lineární kód splňující podmínky, že pro každé kódové slovo 1, a2,..., a n), je také (,,..., ) an a1 an 1 kódové slovo. DSL Digital subscriber line (DSL) je souhrnné označení pro skupinu technologií využívaných pro přenos dat prostřednictvím telefonních linek. Do skupiny DSL technologií patří například technologie ADSL využívané v ČR. DVB Digital Video Broadcasting (DVB) je mezinárodní standard pro přenos digitálního televizního signálu. Nejznámější standardy jsou DVB-S pro satelitní vysílání, DVB-C pro vysílání kabelových televizí a DVB-T pro televizní pozemní vysílání. 28

DVD Digital Versatile Disc (DVD) je optický disk určený pro ukládání digitálních dat. Disky DVD jsou podobné CD diskům, mají však větší kapacitu, neboť pro čtení používají laserové světlo s vlnovou délkou 660 nm a mají menší příčný odstup stop 0,74 μm. Ideál Podmnožina daného okruhu uzavřená vůči sčítání a násobené prvkem okruhu. WiMAX Worldwide Interoperability for Microwave Access (WiMAX) je technologie pro bezdrátový přenos dat, jedná se o obdobu DSL technologie pro kabelové přenosy. Družice Mariner 29

Hadamardův kód Jacques Hadamard 1865 1963 Posledním příkladem samoopravného kódu, který si představíme, je Hadamardův kód (někdy také nazývaný Walsh- Hadamardův kód). Hadamardův kód je konstruován pomocí Hadamardových matic. Nejprve si ukážeme, co jsou Hadamardovy matice a jak se konstruují a následně sestrojíme s jejich pomocí Hadamardův kód. Hadamardova matice podmínku Hadamardova matice řádu n je čtvercová matice H s položkami ±1 splňující H H n I T =. (Součin matice H a matice H transponovaná dává diagonální matici, která má na diagonále pouze číslo n.) Příkladem Hadamardovy matice je matice 1 1 1 1. Je jednoduché ukázat, že jediná Hadamardova matice lichého řádu je matice řádu 1. Cvičení Dokažte, že každé dva různé řádky Hadamardovy matice se shodují právě na polovině pozic. Hadamardovy matice lze konstruovat postupem, který jako první ukázal v polovině devatenáctého století J.J. Sylvestr: James Joseph Sylvester 1814 1897 Nechť H je Hadamardova matice, potom také H H Hadamardova matice. H H je Konstrukce Hadamardova kódu Nechť H je Hadamardova matice řádu nxn. Vezměme všechny řádky matice H a matice H a nahraďme v nich číslo -1 číslem 0. Dostáváme tak kód obsahující 2n n slov délky n, jehož každá dvě slova se liší na 2 pozicích. Tento kód nazýváme Hadamardův kód délky n. Hadamardův kód délky 8 je totožný s rozšířeným Hammingovým kódem. 30

Hadamardův kód délky 32 byl použit v roce 1969 pro komunikaci s družicemi Mariner 6 a Mariner 7. Družice Mariner 31

Ortogonální kódy Hadamardův kód, respektive řádky Hadamardovy matice jsou speciálním příkladem ortogonálního kódu. Ortogonální kód je kód, ve kterém jsou každá dvě různá kódová slova navzájem kolmá, tzn. jejich skalární součin je nula. Ortogonální kódy mají praktické využití při přenosu dat pomocí mobilních telefonů. Základním principem bezdrátové komunikace po dlouho dobu byla zásada, že v jednom okamžiku na jedné frekvenci (nebo v jednom frekvenčním pásmu) probíhá komunikace jenom s jedním účastníkem. Pokud bylo potřeba komunikovat s více účastníky komunikace, používala se následující dvě řešení: Každému účastníkovi bylo přiděleno užší pásmo pro komunikaci, neboli se frekvenční pásmo rozdělí na menší části. Tento způsob komunikace nazýváme vícenásobný přístup s frekvenčním dělením (FDMA). Použije se celé frekvenční pásmo, ale komunikace probíhá vždy s pouze jedním účastníkem, přičemž ostatní účastníci na přenos čekají. Takovýto způsob komunikace se nazývá vícenásobný přístup s časovým dělením (TDMA). Nejznámějším příkladem TDMA komunikace je GSM. Stále větší počet mobilních telefonů a stále větší nároky na množství přenesených dat a rychlost přenosu způsobily, že ani jedna z představených forem nepostačovala vzrůstajícím nárokům. Proto se objevila převratná myšlenka, že komunikace může probíhat ve stejném pásmu se všemi účastníky najednou, neboli není potřeba oddělovat účastníky komunikace, plně postačí, když se oddělí jejich data. Data pro všechny účastníky lze vysílat současně a každý účastník komunikace si svoje data z centrálního toku dat odfiltruje. Tento postup komunikace nazýváme vícenásobný přístup s kódovým dělením (CDMA). Myšlenku, na které je CDMA založeno si vysvětlíme na příkladu komunikace s využitím Hadamardova kódu. Jak funguje CDMA Komunikace probíhá tak, že je každému účastníkovi je přidělen jeden kód jeden řádek Hadamardovy matice (v technické terminologii se nazývá chip). Předpokládejme, že máme čtyři účastníky (Adam, Bohouš, Cyril a Dan), těm tedy postupně přidělíme chipy (1,1,1,1),(1, 1,1, 1),(1,1, 1, 1) a (1, 1, 1,1). 32

Informaci kterou chceme jednotlivým účastníkům poslat, kódujeme pomocí účastnických chipů. Pokud chceme odeslat jedničku, použijeme chip, pokud nulu, použijeme mínus jedna násobek chipu. Na závěr informaci pro všechny účastníky sečteme a odešleme. V následující tabulce je uvedeno, co kterému účastníkovi chceme odeslat, jaký je použit chip a jak je informace zakódovaná. Jméno CHIP INFORMACE ZAKÓDOVÁNO Adam (1,1,1,1) 1011 (1,1,1,1, 1, 1, 1, 1,1,1,1,1,1,1,1,1) Bohouš (1, 1,1, 1) 0101 ( 1,1, 1,1,1, 1,1, 1, 1,1, 1,1,1, 1,1, 1) Cyril (1,1, 1, 1) 0011 ( 1, 1,1,1, 1, 1,1,1,1,1, 1, 1,1,1, 1, 1) Dan (1, 1, 1,1) 1101 (1, 1, 1,1,1, 1, 1,1, 1,1,1, 1,1, 1, 1,1) Odesláno (0,0,0,4,0, 4,0,0,0,4,0,0,4,0,0,0) Každý z účastníků komunikace obdrží stejnou informaci a dekóduje ji tak, že ji po částech skalárně pronásobí svým chipem. Budeme informaci dekódovat pouze pro Adama: (0,0,0,4) (1,1,1,1) = 4 (0, 4,0,0) (1,1,1,1) = 4 (0,4,0,0) (1,1,1,1) = 4 (4,0,0,0) (1,1,1,1) = 4 Po dekódování tedy Adam obdržel (4, 4,4,4). Na závěr Adam pronásobí získaný vektor konstantou odpovídající počtu komunikujících (1/4) a obdrží odesílanou informaci (1, 1,1,1), resp. (1,0,1,1) po převedení mínus jedniček na nuly. Cvičení Ověřte, že i ostatní uživatelé mohou dekódovat své informace. 33

Proč funguje CDMA Nechť v1,..., vn jsou čipy jednotlivých účastníků, vi vj = 0, pro i j, a vi vi = n. Dále nechť x1, x2,..., xn jsou informace, které jsou, po řadě, vysílány jednotlivým účastníků. Vysílané slovo má tedy podobu x1v1 x2v2... xnvn. Při dekódování dostáváme: v ( xv x v... x v ) = xv v + x ( v v ) = nx + 0 = nx. i 1 1 2 2 n n i i i j i j i i j i Díky ortogonalitě jednotlivých chipů je tedy zaručeno, že každý účastník správně dekóduje svoji část informace. Slovníček pojmů CDMA Code division multiple access (CDMA) je metoda digitálního přenosu přenášející současně informaci pro více účastníků prostřednictvím jediného média. FDMA Frequency Division Multiple Access (FDMA) je metoda komunikace využívající vícenásobný přístup s frekvenčním dělením, tzn. rozdělí frekvenční pásmo mezi jednotlivé účastníky. GSM Groupe Spécial Mobile (GSM) je nejrozšířenější standard pro mobilní telefony na světě. GSM telefony používá přes miliardu lidí z více než 200 zemí. Jedná se jak o TDMA, tak o CDMA standard. GSM využívá jako chipy CDMA kanonickou bázi. Ortogonální kód Kód, pro nějž platí, že skalární součin každých dvou různých kódových slov je nulový. TDMA Time Division Multiple Access (TDMA vícenásobný přístup s časovým dělením), je metoda komunikace s více uživateli zajišťovaná tak, že systém komunikuje vždy pouze s jedním uživatelem a ostatní vždy na spojení čekají. Cvičení Vysvětlete, proč je GMS řazeno mezi CDMA i TSMA způsoby komunikace. 34

Automaty a gramatiky Teorie konečných automatů je dalším oborem teoretické informatiky, se kterým se seznámíme. Jak již název napovídá, teorie automatů se zabývá studiem automatů. Nejjednodušší automat si můžeme představit jako stroj, který má omezenou paměť. Která nabývá jen několik předem definovaných stavů. To lze například realizovat tak, že se do paměti vejde jen jeden znak. Automat funguje tak, že čte znaky ze vstupu a po přečtení každého znaku vyhodnotí situaci a na základě stavu, ve kterém se nachází jeho paměť a přečteného znaku přejde do nějakého stavu paměti. Automat má vždy výchozí stav, ve kterém se nachází na začátku, před přečtením prvního znaku zadání a jeden nebo více znaků koncových. Pokud se po přečtení posledního znaku zadání automat nachází v koncovém stavu, skončil výpočet úspěchem a automat akceptoval zadání. V opačném případě automat vstupní informaci neakceptoval. Aby bylo vůbec možné automat vytvořit, musí být dopředu známé, jaké znaky se mohou vyskytovat na vstupu. Množinu znaků, které lze pro zadání automatu použít, nazýváme vstupní abeceda. Konečný automat Popis, který jsme pro automat použili v předchozím odstavci, je pouze neformální. S formální definicí se ještě seznámíme. Uvedený popis je ale velice široký. Strojem automatem nemusí být jen nějaká černá skříňka. Příkladem automatu je například i Rubikova kostka. Vstupní abecedu tvoří všechny možné tahy, které lze s Rubikovou kostkou provést. Stavy automatu jsou všechny pozice, které lze na Rubikově kostce získat. Jedna pozice tvoří výchozí stav. Koncové stavy tvoří složená kostka. Posloupnost tahů je automatem Rubikova kostka akceptována, pokud po jejím provedení je Rubikova kostka složena. Automat Rubikova kostka má ohromné (ale konečné) množství stavů, ve kterých se může nacházet. Podívejme se na automat, který bude mít pouze tři stavy (0,1,2). Vstupní abecedu budou tvořit všechny číslice. Výchozí stav bude stav 0. Automat po přečtení číslice přejde do stavu, který odpovídá zbytku po dělení třemi součtu stavu, ve kterém se automat nacházel a přečtené číslice. 35

Tento popis může být pro někoho nepřehledný, proto můžeme tento automat popsat pomocí tabulky, v řádcích jsou jednotlivé stavy a ve sloupcích znaky ze vstupní abecedy: 0 1 2 3 4 5 6 7 8 9 0 0 1 2 0 1 2 0 1 2 0 1 1 2 0 1 2 0 1 2 0 1 2 2 0 1 2 0 1 2 0 1 2 Automat můžeme také popsat pomocí grafu, jehož uzly odpovídají jednotlivým stavům a u každé hrany je napsáno, pro které znaky vstupní abecedy je přechod použit. Nyní se zamysleme nad tím, co vlastně uvedený automat dělá. Navržený automat čte čísla a v každém kroku se nachází ve stavu, který odpovídá zbytku přečteného čísla po dělení třemi. Pokud jako koncový stav zvolíme 0, tak číslo je automatem akceptováno právě tehdy, když je dělitelné třemi. Obdobným způsobem můžeme navrhnout konečný automat, akceptující právě čísla dělitelná libovolným, pevně zvoleným přirozeným číslem. Uvědomte si, že automat pouze číslo přečte a okamžitě rozhodne o dělitelnosti bez toho, že by čísla dělil. 36

Jak ukázku uvádíme tabulku automatu, který akceptuje právě čísla dělitelná sedmi: 0 1 2 3 4 5 6 7 8 9 0 0 1 2 3 4 5 6 0 1 2 1 3 4 5 6 0 1 2 3 4 5 2 6 0 1 2 3 4 5 6 0 1 3 2 3 4 5 6 0 1 2 3 4 4 5 6 0 1 2 3 4 5 6 0 5 1 2 3 4 5 6 0 1 2 3 6 4 5 6 0 1 2 3 4 5 6 Cvičení Sestrojte konečné automaty ověřující dělitelnost 6 a 11. Výsledky cvičení Výchozí i koncový stav konečného automatu je 0. 0 1 2 3 4 5 6 7 8 9 0 0 1 2 3 4 5 0 1 2 3 1 4 5 0 1 2 3 4 5 0 1 2 2 3 4 5 0 1 2 3 4 5 3 0 1 2 3 4 5 0 1 2 3 4 4 5 0 1 2 3 4 5 0 1 5 2 3 4 5 0 1 2 3 4 5 Výchozí i koncový stav konečného automatu je 0. 0 1 2 3 4 5 6 7 8 9 0 0 1 2 3 4 5 6 7 8 9 1 10 0 1 2 3 4 5 6 7 8 2 9 10 0 1 2 3 4 5 6 7 3 8 9 10 0 1 2 3 4 5 6 4 7 8 9 10 0 1 2 3 4 5 5 6 7 8 9 10 0 1 2 3 4 6 5 6 7 8 9 10 0 1 2 3 7 4 5 6 7 8 9 10 0 1 2 8 3 4 5 6 7 8 9 10 0 1 9 2 3 4 5 6 7 8 9 10 0 10 1 2 3 4 5 6 7 8 9 10 37