A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre. Algebrai kódelmélet
Először csak a kódelméletet (nem feltétlenül algebrait) vizsgáljuk. Mi az, hogy kód? Az elmélet a következő, az életben előforduló reális problémából származik. Valamilyen információt szeretnénk valamilyen csatornán továbbítani. Ez lehet egy telefonbeszélgetés, Morse jelek, vagy egy számsorozat, amelyet a számítógépes hálózaton küldünk. Sajnos a csatorna, amelyen továbbítunk, kis valószínűséggel ugyan, de hibázhat. Képzeljük el, hogy egy nagyon hosszú ‐ sorozatot küldtünk, ilyenkor előfordul, hogy mi ugyan egy helyen -t továbbítottunk, de helyette -est vettek. Ez sokszor komoly károkat okoz. A kódelmélet olyan módszereket igyekszik kidolgozni, amellyekkel a hiba csökkenthető. Egy speciális, de talán fontosabb típusa a kódoknak a következő: a nagyon hosszú üzeneteket felbontjuk egyenlő, mondjuk hosszúságú részekre
A számítógépek speciálisan az ún. ASCII kódokat használják. Ez hosszúságú ‐ sorozatokat hoz létre, és ez összesen lehetőséget ad. Közülük az első a , , , , az utolsó a csupa -esből álló -es számrendszerbeli szám. Ez a felosztás -tól -ig minden természetes számot előállít. Tekintsünk egy ilyen természetes számot, és rendeljünk hozzá egy jelet a számítógépen, ezek között szerepelni fognak az ábécé kis- és nagy betűi és sok minden más. Az ASCII kód a hozzárendelésnek amerikai szabvány szerinti, az egész világon elterjedt módja. Az ASCII kód használata a következőt jelenti: pl. írunk egy hosszú, mondjuk oldalas levelet,majd azt a hosszú ‐ sorozatot, ami a mi információnkat tartalmazza, hosszúságú részekre osztjuk, s így továbbítjuk. A számítógépen az a hosszúságú sorozat érkezik meg általában, amit továbbítottunk, már csak azért is, mert a beírás és kibocsátás helye közel van egymáshoz. Nem biztos, hogy ez így lenne ez akkor is, ha pl. Új-Zélandba küldenénk jeleket. Ezért a következő ötletet alkalmazzák: Minden hosszúságú sorozat helyett vesznek egy hosszúságú sorozatot. Összesen van darab hosszúságú és darab hosszúságú sorozat. Ez utóbbiból alkalmasan kiválasztunk darabot. Szeretnénk ezt olyan ügyesen megtenni, hogy észrevegyük, hogyha hiba történt az hosszúságú sorozatban (egy-két -ból -es lett, vagy fordítva) és meg tudjuk mondani, hogy melyik sorozatot akarták küldeni a kiválasztott sorozat közül. Ezt alkalmazzuk akkor is, amikor sajtóhibát veszünk észre. Könnyen felismerhetjük, hogy milyen hibát követtek el. Hogyan? Veszünk egy szót, ami közel van a hibás szóhoz, és feltételezzük, hogy azt akarták írni. Fogalmazzuk meg pontosan ezt a közel levést: Legyen egy véges ábécé. Tekintsük azokat hosszúságú , , , sorozatokat, amelyeknek minden eleme -ból való. Majd vegyük a halmazt, az összes olyan hosszúságú sorozatot, amelynek elemei a -ból valók. Definició: E halmaz elemeit nevezzük szavaknak. Összesen szó van, ahol a a elemszáma. Definiáljuk két szó távolságát. Legyen , , , A távolságuk jelentse azt, hogy hány helyen különböznek. Definició: Ezen halmaz elemszáma lesz az , távolsága. Két szó tehát akkor van közel egymáshoz, ha kevés helyen különbözik. Kérdés, hogy ezt milyen jogon hívom távolságnak? Azért, mert olyan tulajdonságai vannak, mint a térbeli távolságnak. A térbeli távolság (amely mindig egy nem negatív valós szám), a következő alapvető tulajdonsággal rendelkezik:
Az ilyen tulajdonságú halmazokat metrikus térnek nevezzük. Ilyen a közönséges tér is. További példa metrikus térre: vegyünk egy összefüggő nem irányított gráfot. Legyen a legrövidebb -et -nal összekötő út hossza. Feladat. Miért metrikus tér ez? (Itt és -ben is, a távolság mindig nem negatív egész szám volt.) A szavak közti távolságot Hamming-távolságnak nevezik. Most foglalkozzunk egy kicsit precízebben azzal, hogy milyen kódot akarunk csinálni. -nek egy részhalmazát nevezzük kódnak. Definició: Jelöljük két -beli különböző elem távolságának minimumát -vel. Definició: | |
Tegyük fel, hogy páratlan . Ha veszek egy hosszúságú -beli szót, amelynek elemei a -ból valók, és elrontom néhány, de legfeljebb helyen, akkor még rekonstruálni tudom, hogy mi volt az eredeti szó. Más szóval, definiáljuk ebben a ,,geometriában'', amit most csináltunk, a gömb fogalmát. Definíció: | | az körüli sugarú gömb. (Ha úgy tetszik, ez egy zárt gömb, de ha úgy tetszik nyílt.) Ebben a gömbben persze is benne van, a távolság definiciója szerint. Tehát, ha a kód minimális távolsága , akkor ha az gömbök egyesítését vesszük, ahol az végig fut a kód elemein, akkor | | azaz a kódszavak körüli sugarú gömbök páronként diszjunktak. Ha kapok egy szót, és tudom, hogy valaki valamelyik kódszót akarta küldeni, akkor, ha a hibák száma kisebb vagy egyenlő -nél, akkor ez a szó valamelyik egyértelműen meghatározott gömbben van, s akkor azt mondom, hogy annak a középpontjában lévő kódszót akarta küldeni. Ha egyik gömbben sincs benne, akkor egyrészt biztos, hogy -nél több hiba történt, másrészt nem sokat tudok mondani. Két dolgot szeretnénk elérni: 1) az minél nagyobb legyen, vagyis is, azaz minél több hibát javítson ki a kód, 2) minél hatékonyabb legyen, vagyis minél több eleme legyen: nagy legyen. E két dolog nyilvánvalóan ellentmond egymásnak. Sok pont körüli nagy sugarú gömböknek már biztos van nem üres metszete. Érdekes feladat hatékony kódokat csinálni, olyanokat, amelyeknek sok eleme van és sok hibát javítanak ki. Ehhez célszerű, ha a elemeinek van valamilyen struktúrája. Ha csak a -ból és az -ből áll, értelmezzünk rá egy összeadást és egy szorzást. Írjuk ezt táblázatba: Van egy kivonás is, ez az összeadásból származik, és van egy osztás is. Ezekre a műveleteknél szokásos szabályok érvényesek, pl. stb., azaz úgy viselkednek, mint a valós számok. Ha egy halmazban értelmezve van egy összeadás és egy szorzás, ezekre ugyanolyan szabályok érvényesek mint a valós számokra, akkor ezt a halmazt testnek hívjuk.
Az egész számok nem alkotnak testet: az osztás nem végezhető el, azaz két egész szám hányadosa nem mindig létezik a halmazban. Ezeknek a testeknek végtelenül sok elemük van. Persze van más test is: és között csak úgy hemzsegnek a testek.
Véges sok elemű testek
Tekintsünk egy tetszőleges prímszámot, és tekintsük a , számokat. Lehet értelmezni egy összeadást és egy szorzást közöttük. A probléma nemcsak az, hogy az eredmény nem lesz mindig a számok között. Ezen azonban könnyen tudunk segíteni: ha az eredmény nagyobb -nél, akkor elosztjuk -vel, és a maradékot tekintjük az összeadás vagy szorzás eredményének. Írjuk fel a műveletek táblázatát -ra: | |
Látjuk, hogy az -es és a a szorzásra úgy viselkedik, mint a számok körében. Figyeljünk fel arra, hogy az összeadásnál minden szám minden sorban és oszlopban pontosan egyszer fordul elő. A szorzásnál ez már csak akkor igaz, ha az első sort és oszlopot kitöröljük. Mivel a -t tetszőlegesnek választhatjuk, és végtelen sok prímszám van, így végtelen sok véges test létezik, ezeket jelöljük -vel. Kérdés, nincs-e más véges test? De van, és ezek könnyen áttekinthetők, mert érvényesek rájuk a következő tételek. 1. Tétel. Ha egy véges test, akkor elemszáma egy prímhatvány, azaz 2. Tétel. Minden prímhatványhoz található egy véges test, amelyiknek ennyi az elemszáma: | | ( jelentése: van olyan, a felkiáltó jel pedig azt jelenti, hogy csak egy van.) 3. Tétel. Minden prímhatványhoz lényegében csak egy véges test létezik.( egy elemű véges testet jelent.)
A testek elmélete fontos része az algebrának. Most már látjuk, miért hívják algebrai kódelméletnek azt, amiről most beszélünk. A továbbiakban az ábécé legyen valamelyik véges test. Most már csak ilyen kódokat fogunk vizsgálni. Ha véges test, kód, akkor megkövetelhetem, hogy a kódnak bizonyos jó szerkezete legyen, vagyis
1. ha , . Mit jelent az összeg? Legyen , hosszúságú sorozat, akkor Itt végül is vektorokról van szó, az összeadást is úgy értelmezzük, mint a vektoroknál. 2. ha és , tehát egy skalár, akkor , . Az ilyen kódokat lineáris kódoknak nevezzük. A lineáris kódok ún. vektorteret alkotnak, ezzel a lineáris algebra foglalkozik. A lineáris kódok elemszáma szükségképpen valamilyen -ra, ahol . Ha , akkor az elemszám , s ez a csupa -ból álló sorozat. Ha akkor darab vektorom van, ami azt jelenti, hogy veszem közülük valamelyiket, (de nem a csupa -át), és annak összes skalárszorosát. Általános -ra és -re visszajutottunk a esethez. Feladat. 1. Készítsük el a , , elemű véges , , testet. (Vigyázat, itt nem alkalmazhatjuk azt a fogást, amit prímszám esetén alkalmaztunk, vagyis, hogy a maradékot vesszük.) 2. Mitől igaz, hogy minden lineáris kód elemszáma ? Egy lineáris kódnak jellemzője van. 1. a kódszavak hossza 2. a kódszavak számában a kitevője -kód 3. a minimális távolság -kód 4. ahány elemű véges test felett dolgozunk. (Ezt bizonyos szempontból adottnak tekintjük, azaz előre elhatározzuk, hogy mi lesz az alaptest.)
Állítás. Lineáris kód esetén . Ha nagy, azaz sok eleme van a kódnak, akkor kicsi ( rögzített), azaz kicsi a minimális távolság. Nem tudjuk elérni, hogy a nagy sugarú gömbök diszjunktak legyenek, hiszen a fenti állítás ekvivalens azzal, hogy .
Feladat: Gondoljuk ezt meg! Az olyan kódokat, amelyeknél egyenlőség áll fenn, MDS-kódoknak hívjuk (maximal distance code).
MDS-kódok
Ideje lenne valamilyen értelemben jó kódokat csinálni. Az egyik értelem, ami szerint a kód jó, ha benne a távolság olyan nagy, amilyen nagy csak lehet. Egy MDS-kód az ún. Reed‐Solomon kód. Ezt valószínüleg mindenki ismeri, csak nem tud róla. A compact discben (CD) ilyen hibajavító kód van. Előnye, hogy nagyon gyorsan lehet kódolni és dekódolni, vagyis hosszúságú sorozatból hosszúságút csinálni és viszont. Ez azért fontos, hogy a hang elhangzása előtt még idejében ki legyen javítva a hiba. Vegyünk egy elemű véges testet, ahol egy prímhatvány, és legyen , az legyen. darab hosszúságú kódszót kellene csinálnunk. Keresni kellene valamiket, amikből darab van. Jelentse az -nek összes olyan polinomját, amelyben az együtthatók a elemű véges test elemei. Ezekkel a polinomokkal ugyanúgy végezhetünk műveleteket, mint a valós együtthatós polinomokkal. Ha azon polinomokat tekintjük ezek közül, amelyeknek a foka kisebb -nál, vagyis ezt a halmazt: | | ezekből pontosan darab van, mert minden pontosan értéket vehet fel. Ha az összes ilyen polinomot veszem, akkor máris rendelkezem egy természetes módon definiált elemű halmazzal. Hogyan csinálunk ezekből darab olyan kódszót, amelyeknek hossza ? Legyen , ha tetszik, választhatjuk az -t -nak, -et -nek, a többit meg valamilyen módon számozottnak. Vegyünk egy rögzített polinomot és sorban helyettesítsük be a polinomba a véges test elemeit. A következő hosszúságú sorozatot kapjuk: ; ha ezt az összes darab -re megcsinálom, megkapom a Reed‐Solomon kódot. Igaz-e, hogy ez egy lineáris kód? Igen, mert ha és két polinom, akkor az összegük is egy legfeljebb -ed fokú polinom lesz, és az összeg helyettesítési értéke a tagok helyettesítési értékének az összege lesz. Az is igaz, hogy egy polinom skalárszorosa is egy ugyanolyan fokú polinom (ha nem -val szorzunk), és ennek helyettesítési értéke az eredeti helyettesítési érték skalárszorosa. Mennyi ebben a kódban a minimális távolság? Azt tudjuk, hogy . Most bebizonyítjuk, hogy , s ebből következik az egyenlőség. Vegyünk két polinomot, és írjuk fel különbségüket. Legyen ennek a foka , hiszen és mindegyike legfeljebb -ed fokú. Vizsgáljuk meg a különbségek távolságát; ha foka , akkor , azaz bármely két különböző és -höz tartozó sorozat sok helyen tér el. Ugyanis az -beli együtthatós polinomok körében is igaz, hogy egy polinomnak legfeljebb annyi gyöke van, ahányad fokú. Ez a valós együtthatós polinomok körében abból adódik, hogy minden gyök esetén le lehet választani egy elsőfokú tényezőt, s akkor mindig egy -gyel alacsonyabb fokú polinomot kapunk. S mindez csak azon múlik, hogy a polinomok együtthatói testet alkotnak. Itt is igaz az, hogy gyökeinek száma . Hány olyan hely van, ahol megegyezhet az és az ? Ahol megegyezik, ott az -nek egy gyöke van, ez legfeljebb helyen fordulhat elő, tehát legalább helyen eltérnek, azaz a távolság legalább , s ezt állítottuk. Tekintve, hogy , , s ez az előzőekkel összevetve adja, hogy a minimális távolság egyenlő -gyel.
Bináris Hamming-kód
Most egy másik módszer szerint definiálunk egy kódot. A esetére válasszunk valamilyen -et. Föl szeretnénk sorolni az összes hosszúságú ‐ sorozatot, azaz a kettes számrendszerbeli számokat -től -ig. (A -t kihagyjuk.) -ra foglaljuk táblázatba. | |
Az oszlopok tartalmazzák a számokat nagyság szerinti sorrendben. A sorok hossza , esetünkben . Ezt a táblázatot használva következőképpen definiáljuk a bináris Hamming-kódot: azok a ‐ sorozatok, amelyeket ha vektoroknak tekintjük, merőlegesek erre a vektorra (a táblázat sorára). Azt már elfogadtuk, hogy ezek a sorozatok vektorok és két vektor merőlegességét a skalárszorzat segítségével definiáljuk. Akkor mondunk vektort merőlegesnek, ha skalárszorzatuk -val egyenlő. A skalárszorzat definíciója: A skalárszorzat itt is rendelkezik a vektoroknál szereplő tulajdonságokkal. Ha egy vektor merőleges mindhárom vektorra, és egy másik vektor is merőleges rá, akkor az összegük is és a skalárszorosuk is az. Jelöljük az előzőhöz hasonló táblázatot -val. minden sorára merőleges vektorok alkotják a kódot.Ez egy lineáris kód, és könnyen belátható, hogy . Ugyanis a vektorokból összesen , esetünkben van. merőlegességi feltétel van, s ezek "függetlenek''. Mindegyik feltételnek külön-külön a vektorok fele tesz eleget, így -szer feleződik, azaz a kód elemszáma: , vagyis . A kódok gyakorlati alkalmazása az űrhajózásban van. Van egy másik tulajdonsága is a kódnak. Mivel (ez legyen feladat), az sugarú gömbök páronként diszjunktak. Hány gömb van? Ahány kódszó, azaz . Definiáljuk a gömb térfogatát. Egy gömb térfogata annyi, ahány pont van benne. Van egy középpont, , és ez benne van, és ezen kívül mindazok a pontok, amelyek tőle valamelyik helyen különböznek. Ilyen hely van. Ha ezeket összeszorzom , de ennyi pont van összesen ebben a térben. Ezek tehát olyan páronként diszjunkt gömbök, amelyek egyesítése az egész tér. Az ilyen kódokat perfekt kódnak nevezzük. Páronként diszjunkt gömbökből minél többet elhelyezni a dimenziós közönséges térben egy eddig megoldatlan probléma. A görögdinnye-árusok tapasztalatból tudják, hogy lehet egy térfogatba a legtöbb dinnyét lerakni. Elöször csinálnak egy négyzetrácsot, majd a következő szinten elkezdik a lyukakat kitölteni. Valószínűleg ez a legsűrűbb gömbelhelyezés, de ez nincs bebizonyítva. Érdekes megemlíteni, hogy a -dimenziós euklidészi térben (tehát a korábbi jelöléssel -ben) van egy meglepően sűrű gömbelhelyezés, és ennek megtalálásában is az algebrai kódelmélet segített. A elemű test feletti hosszúságú vektorok terében van paraméterekkel rendelkező kód, az ún. Golay-kód: . Ennek segítségével lehet a -dimenziós euklidészi térben egy sűrű gömbelhelyezést csinálni. A Golay-kód sok tekintetben jelentős. Ha elhagyjuk minden vektor utolsó elemét, egy paraméterű kódot kapunk: -at (ezt is Golay fedezte fel). azt jelenti, hogy , ahol . Tehát ez a kód hibát javít. És ez a kód perfekt! (Ezt mindenki maga ki tudja számolni.) Van egy másik perfekt Golay-kód is, mégpedig a -elemű test feletti. Zárjuk a cikket Tietäväinen és van Lint egy híres eredményével: Ha prímhatvány és egy nem-triviális perfekt -hibajavító kód, ahol , akkor a két perfekt Golay-kód egyike. (kérdés: mik a triviális perfekt kódok -re?) Az Ifjúsági Matematikai Körön elhangzott előadás alapján |