A 2002-2003 tanévi 11-12-es FPI tehetséggondozó szakkör 16. foglalkozása

Kódok

Összeállította Hraskó András és Szőnyi Tamás

2. szakkör

A szakkörön tovább folytattuk a Kódok feladatgyűjtemény feldolgozását. Megbeszéltük az 5.8  feladatot, visszatértünk az 1.1 példára és 1.2 megbeszélése után 5.5-re is. Kielemeztük a 4.1 feladatot.

Házi feladat lesz: 5.3, 1.2-nél az összes minimális megoldás jellemzése,  4.6 és 5.6.

További gondolkodnivaló: az ISBN szám elemzése.

A következő alkalommal megbeszéljük a januári Kömal B feladatokat.

5.8 a) Az 1, 2, 3, ... 16 számok közül kell kitalálni egyet barkochba kérdésekkel. Legalább hány kérdésre van szükség?
b) És ha a kérdéseket előre le kell írni, azaz a következő kérdés nem függhet az előzőre kapott választól?

Megoldás a) Egy-egy kérdés a szóbajövő számok halmazát két részhalmazra bontja: azokra, amelyekre igen a válasz (ha az a szám a gondolt szám) és azokra, amelyekre nem a válasz. "Rossz esetben" olyan választ kapunk, amely azt mutatja, hogy a nagyobb, pontosabban a nem kisebb részhalmazban van a gondolt szám. Ezért, ha biztosra megyünk nem tehetünk jobbat, minthogy kérdéseinkkel megfelezzük a lehetőségeket. 4 kérdés kell a kitaláláshoz, és ennyi elég is.

b) Most is szükséges a 4 kérdés, és elég is. Ehhez azt kell elérnünk, hogy a következő kérdés az előzőre adott bármely válasz esetén megfelezze a lehetőségeket.

I. konstrukció Az alábbi megoldás négy kérdése mind így kezdődik: "A gondolt szám az itt megadott halmazban van?". A négy megadott halmaz:

1. halmaz 1 2 3 4 5 6 7 8                
2. halmaz 1 2 3 4         9 10 11 12        
3. halmaz 1 2     5 6     9 10     13 14    
4. halmaz 1   3   5   7   9   11   13   15  

II. konstrukció Az iménti megoldást a diákok gyakran megtalálják, de ritkán veszik észre, hogy teljesen megegyezik a következővel. Írjuk fel a gondolt számnál eggyel kisebb számot kettes számrendszerben négy jeggyel (pótoljuk az elejét 0-kal, ha szükséges)! Ezek a felírások az alábbi táblázat oszlopaiban láthatók.

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
n-1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1. sor 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
2. sor 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
3. sor 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
4. sor 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

Kérdéseink:
1. Az így kapott szám balról (a táblázatban fölülről) számított első jegye 0?
2. Az így kapott szám balról (a táblázatban fölülről) számított második jegye 0?
3. Az így kapott szám balról (a táblázatban fölülről) számított harmadik jegye 0?
4. Az így kapott szám balról (a táblázatban fölülről) számított negyedik jegye 0?

A négy válasz alapján megkapjuk a gondolt számnál eggyel kisebb szám kettes számrendszerbeli alakját, így ki tudjuk találni a gondolt számot. Látható, hogy táblázatunk négy sora, megfelel az I. konstrukció négy kérdésének. Az adott sorban az n-1 számnak megfelelő oszlopban pontosan akkor áll 0,  ha az előző megoldás megfelelő kérdésében n benne volt a kijelölt halmazban.

1.1 Visszatérünk az 1.1 a), b) feladatokhoz, egy általánosító kérdés erejéig. Végezzünk két mérést: az elsőben az 1., 2., ... 10., széria súlyaiból rendre a1, a2, ..., a10; a másodikban a szériákból rendre b1, b2, ..., b10 darabot teszünk fel a mérlegre (a1, a2, ..., a10, b1, b2, ..., b10 nemnegatív egész számok). Adjunk meg olyan algebrai feltételt a felsorolt darabszámokra vonatkozólag, amely alapján eldönthető, hogy a két mérésből kitalálható-e hogy melyik széria adatai hibásak vagy nem található ki.

Elemezzük például az alábbi három tervet:

A)

széria: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
1. mérés (ai) 1 2 3 4 5 6 7 8 9 10
2. mérés (bi) 0 1 2 3 4 5 6 7 8 9

B)

széria: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
1. mérés (ai) 0 1 2 3 4 5 6 7 8 9
2. mérés (bi) 1 2 4 8 16 32 64 128 256 512

C)

széria: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
1. mérés (ai) 1 1 1 1 1 1 1 1 1 1
2. mérés (bi) 0 1 2 3 4 4 3 2 1 0

Megoldás

Az A) terv jó, mert a két mérés különbsége, épp az 1.1 a) feladat megoldásában adott mérést állítja elő, az 1. mérés pedig az 1.1 b) feladat megoldásának mérése.

A B) terv nem jó, a 2. és 3. szériákkal van a gond. Ha a 2. széria súlyai 2 kg-mal nehezebbek az előírt értéknél, akkor ugyanazokat az eltéréseket érzékeljük, mint amikor a 3. széria súlyai 1 kg-mal nehezebbek az előírtnál.

A C) tervnél hasonló jellegű a hiba az 1. és a 10., a 2. és a 9., stb. szériapárok viszonyában.

Általában, akkor nem tudjuk eldönteni, hogy a  k-adik vagy a j-edik széria a hibás, ha van olyan εkés olyan εj nemnulla hibatag, amelyre ak·εk = aj ·εj és ugyanakkor bk·εk = bj·εj. Pontosan akkor vannak ilyen ε-ok, ha ak:aj = bk:bj, azaz ha az (ak; bk), (aj; bj) vektorok egyállásúak.

Továbbra is házi feladat az 1.2 feladatra vonatkozó hasonló jellegű diszkusszió: ott egy mérési tervhez meg kell adni az előírt mérések számát - a továbbiakban ezt n jelöli - továbbá nemnegatív egész számokkal kell kitölteni az űrlap 1., 2., 3., 4., 5. oszlopait. Jelölje az így kapott számtáblázat i-edik sorának (i = 1, 2, ..., n) j-edik oszlopába (j = 1, 2, 3, 4, 5) írt számot aij (aij természetes szám). Tehát aij -vel jelölöm az i-edik mérésnél a j-edik szériából vett súlyok számát. Határozzunk meg az  aij számokkal kapcsolatos olyan algebrai feltételt, amely azzal ekvivalens, hogy a mérésekből meghatározhatók a súlyok (feltéve, hogy legfeljebb egy hibás az eredmények közül).

5.2 Egy hajó és utasai, összesen 100 fő, Ungabunga szigetén az emberevők fogságába esett. Tudják, hogy másnap reggel a kannibálok leültetik őket egymás mögé, és mindegyikük fejére egy-egy piros vagy kék sapkát húznak. Mindenki csak az összes előtte ülő ember fején lévő sapkát fogja látni, a sajátját és a mögötte ülőkét nem. A leghátsó embertől kezdve sorban mindenki hangosan mondhat majd egy színt: pirosat vagy kéket. A végén azt engedik szabadon, aki saját sapkája színét mondta, aki nem találta el, azt bizony megeszik. A kannibálok szigorúak, ha bárki mást tesz, minthogy a lehető legegyszerűbben kimondja a "piros" vagy a "kék" szót, akkor senkinek sem kegyel­meznek.
A foglyoknak még egy esélye van. Most este még összebeszélhetnek. Szeretnék, hogy minél többen megszabaduljanak. Hány fogoly tud biztosan megmenekülni?

I. megoldás 50 rabot szabadítok meg, hátulról számítva minden párosadikat. A páratlan sorszámú rabok bemondják az előttük levő sapkájának színét, a páros sorszámú rabok pedig a saját sapkájuk színét. Így az utóbbiak mind megszabadulnak, a többiek csak szerencsés esetben menekülhetnek meg.

II. megoldás 93 rabot szabadítok meg. A leghátsó hét rab csak az első 93-mal törődik. Megszámolják, hogy azokon összesen hány piros sapka van, ezt a számot felírják maguknak kettes számrendszerben (ez legfeljebb hétjegyű), és ennek jegyeit mondják be sorban (pld "piros" jelenti az "1"-et). Az első 93 mindegyike tudja, hogy rajtuk összesen hány piros sapka van, mindegyik hallja a mögötte levők sapkájának színét (a 93-ból), látja az előtte levőkét, így a sajátját ki tudja találni és bemondja.

III. megoldás Az előző megoldás javítható. 99 rabot is ki lehet szabadítani.
Az embereknek szükségtelen tudni az összes piros sapka pontos számát, elég tudni a piros sapkák számának paritását. Megállapodnak pld abban, hogy a leghátsó ember "piros"-at mond, ha az előtte levő 99 ember közül összesen páratlan soknak a fején lát piros sapkát, és kéket mond az ellenkező esetben. Így a 99 emberből már mindenki tudja, hogy rajtuk összesen páros vagy páratlan db piros sapka van, látja az előtte levők sapkáját, hallja a mögötte levők sapkájának színét, így a sajátját is kitalálhatja és bemondja.
100 rab nyilván csak szerencsés esetben szabadulhat, a leghátsó nem kap információt saját sapkájáról.

4.1 (Pálvölgyi Dömötör példája, Bergengóc példatár 2. 237. fel.)
A budapesti telefonszámok hétjegyűek. Sokszor előfordul, hogy valaki két szomszédos számot felcserél, ezért téves a hívása. Keress minél egyszerűbb eljárást arra, hogy a hétjegyű számok végére még egy ellenőrző számot téve, a központ számcsere (két szomszédos szám felcserélése) esetén jelezni tudja, hogy a szám téves, és ne kapcsoljon!

I. megoldás Legyen x8x1 + 2x2+ 3x3+ 4x4+ 5x5+ 6x6+ 7x7 (mod 10). Az 1.1 d) feladat I. megoldásának mintájára látható, hogy két szomszédos jegy felcserélődése esetén a jobb oldali kifejezés értéke változik, így az összefüggés nem marad érvényben.

Megjegyzés: Sajnos baj van a 7. és 8. jegyek cseréjénél. Ilyenkor a bal oldal is változik, nem csak a jobb, az összefüggés esetleg érvényben marad. Lehetséges, hogy egyszerre teljesüljön az
x1 + 2x2+ 3x3+ 4x4+ 5x5+ 6x6+ 7x7 x8 (mod 10) és a
x1 + 2x2+ 3x3+ 4x4+ 5x5+ 6x6+ 7x8 x7 (mod 10)
összefüggés is. Valóban a két kongruencia kivonása és rendezés után
8(x8 - x7) ≡ 0 (mod 10),
ami teljesül pld x8 = 6, x7 = 1 esetén, tehát ha egy jó nyolcjegyű szám utolsó két jegye 6 és 1, akkor az utolsó két jegy cseréjét nem veszi hibának a rendszer.

II. megoldás Legyen x8x1 + x3 + x5 + x7 (mod 10). Két szomszédos jegy felcserélődése esetén a jobb oldali kifejezés értéke változik, így az összefüggés nem marad érvényben.

Megjegyzés: Sajnos most is baj van a 7. és 8. jegyek cseréjénél. Lehetséges, hogy egyszerre teljesüljön az
x1 + x3+ x5+ x7 x8 (mod 10) és a
x1 + x3 + x5 + x8 x7 (mod 10)
összefüggés is. Valóban a két kongruencia kivonása és rendezés után
2(x8 - x7) ≡ 0 (mod 10),
ami az előzőével analóg hibát okoz.

I'. megoldás Legyen x8 ≡ 0x1 + 1x2+ 2x3+ 3x4+ 4x5+ 5x6+ 6x7 (mod 10). Most a 7. és 8. jegy felcserélését firtató kongruencia-rendszer a

7(x8 - x7) ≡ 0 (mod 10)
kongruenciához vezet, amelyből már következik, hogy x8x7 (mod 10), azaz x8 = x7, azaz nincs igazi csere.

II'. megoldás Legyen x8x2 + x4 + x6 (mod 10). Az első hét jegyből két szomszédos cseréjénél csak a jobb oldal, az utolsó két jegy cseréjénél csak a bal oldal értéke változik, tehát a kongruencia nem marad fenn.

Házi feladat: 4.2 Nézd meg sok különböző könyv azonosítóját, az úgynevezett ISBN (International Standard Book Number) számot! Próbáld meg kideríteni, milyen részekből áll, hogyan épül fel ez az azonosító! (Segítség: a legutolsó jegy egy ellen­őrző jegy, segítségével kiszűrhető bármelyik két számjegy felcserélése, illetve bármelyik jegy elírása. A többi jegy három csoportba osztható és a könyv azonosítására szolgál.)

Elméleti összefoglaló a kódokról:

Legyen adva egy tetszőleges abc (betűkészlet, a kódolásnál tipikusan {0,1}) és egy n pozitív egész (a szavak hossza).

Az abc elemeiből készíthető n hosszúságú sorozatokat szavaknak nevezzük.

Két szó távolságán (Hamming távolság) azoknak a helyeknek a számát értjük, amelyeken különböznek egymástól.

(Az AABC, CBBC szavak távolsága pld. 2, mert az első és a második helyen térnek el egymástól.)

Az általános megközelítésben kódon a szavak egy tetszőleges részhalmazát értjük. A kódba tartozó szavak a kódszavak.

Úgy képzeljük, hogy két fél kommunikál egymással és a kódszavak az értelemmel bíró jelek. Előfordulhat, hogy a kommunikáció során egy kódszó sérül (a küldő hibázott, a kommunikációs csatorna zaja módosította az üzenetet vagy a fogadó fél hibásan olvasta ki a szót). A kapott szót úgy javítjuk, hogy átírjuk a tőle legkisebb (Hamming) távolságra lévő egyik kódszóra.

A kód k-hiba javító, ha bármelyik kódszavában k vagy annál kevesebb betű módosulása esetén a fenti hibajavító módszer mindig egyértelműen helyreállítja az eredeti üzenetet.

A kód k-hiba jelző, ha bármelyik kódszavában k vagy annál kevesebb betű módosulása esetén nem juthatunk másik kódszóhoz, azaz a fogadó fél észre tudja venni, hogy hiba van, mert nem kódszót olvas.

A kód k-törlés javító, ha bármelyik kódszavában k vagy annál kevesebb betű törlődése (olvashatatlansága) esetén hiányzó k betű csak egyféleképpen tölthető ki úgy, hogy kódszót kapjunk.

A kód minimális távolsága a kódszavai között fellépő legkisebb pozitív Hamming távolság.

Régen, amikor a számítógépeknek kazettán adtak információt, akkor az üzenetet hetes bitcsomagokban tárolták, és minden hetest egy további bittel egészítettek ki egy byte-tá. Ez az egy bit volt az úgynevezett paritásjelző bit, amelyet úgy állítottak be, hogy a byteban összesen páros darab 1-es legyen. Ha egy kiolvasott byteban nem ez volt a helyzet, akkor újra lekérték az adatot. Ebben a megközelítésben egy 1-hiba jelző kódról van szó.

Az 5.2 feladatban egy hasonló eljárást 1-törlés javításra alkalmaztunk. A "törlés" itt azt jelenti, hogy (az első 99 ember közül) mindenki látja vagy hallja a többiek sapkájának színét, számára egy sapka színe - a sajátjáé - van törölve.

Az 5.5 feladat (térbeli sakktábla) megoldása is felfogható ilyen módon. Nézzük pld a 8×8-as esetet! A "tábla" mezőit nevezzük meg a {0, 1, 2, ..., 7} halmazból képzett számhármasokkal. (2, 0, 3) pld a 2. emelet 0. sor 3. oszlopában álló mező kódja. A 64 bástya mezőinek koordinátáit (x, y, z) megadhatjuk pld az alábbi feltétellel:

x + y + z ≡ 0 (mod 8).

Ennek 64 mező felel meg, hiszen x és y értéke tetszőlegesen megadható. Két bástya akkor üti egymást, ha koordinátáik közül kettő is megegyezik egymással. Ez a fenti feltételnek eleget tevő mezők közül semelyik kettőre sem teljesülhet, ugyanis, ha x, y és z közül kettőt megadunk, akkor a harmadik már egyértelműen meghatározható, nincs két lehetőség.

További házi feladatok:

4.6 Keress háromféle betű alkalmazásával minél több szóból álló négybetűs 1-hibajavító kódot!

5.6 Bergengóciában a totó, a bajnokságnak megfelelően csak 4 mérkőzést tartalmaz. Minden mérkőzés eredményére háromféleképpen lehet tippelni: 1-gyel, 2-vel vagy X-szel. Egy szelvényen csak egy tipposzlop van.
a) Hány szelvényt kell venni ahhoz, hogy biztosan legyen telitalálatunk?
b) És ahhoz, hogy biztosan legyen olyan szelvényünk, amely legalább 3 találatos?