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 |
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 kegyelmeznek.
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 x8 ≡ x1 + 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.
II. megoldás Legyen x8 ≡ x1 + 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.
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
II'. megoldás Legyen x8 ≡ x2 + 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:
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?