Lovasz Laszlo Gacs Peter Algoritmusok

August 24, 2017 | Author: szirkkrisz | Category: N/A
Share Embed Donate


Short Description

Download Lovasz Laszlo Gacs Peter Algoritmusok...

Description

Lovász László—Gács Péter

Algoritmusok Műszaki Könyvkiadó, 1978

A sorozat

főszerkesztői:

H a j n a l A n d r á s Állami-díjas, uz MTA levelező t a g j a Szűcs E r v i n a műszaki tudományok

doktora

© Di'. L o v á s z László —Gács P é t e r , 1978

ETO: 511.1 512.1 519.1 r S B N : 963

10 2067 :!

Felelős kiailő: Soli Stiwlnr igazgat ö l'Ylelős s/.ei keszl ő: Oláli (ryulúné limár

- Yoco -

Tartalomjegyzék

Bevezetés

9

1. fejezet.

Kombinatorikai

algoritmusok

1.1. Szortírozás 1.1.1. 1.1.2. 1.1.3. 1.1.4. 1.1.5. 1.1.6.

15

17

Beszúrás 17 Összefésülés 18 Sorbarendezés 19 Átrendezés cserékkel 22 Legnagyobb és következő elemek Mediánskeresés 27

1.2. A pakolási

probléma

29

1.2.1. Próbálgatás módszerek

31

1.2.2. Intervallumpakolás 1.2.3. Párosítások 35 1.3. Útkeresés

33

39

1.3.1. Összefüggőség 39 1.3.2. A legrövidebb út 41 1.3.3. A leghosszabb út 44 1.4. Szuboptimális

algoritmusok

41

1.4.1. A hátizsákfeladat 41 1.4.2. A fedési feladat 49 1.4.3. A kromatikus szám 53 1.5. Gráfok

diagnosztikája

54

1.5.1. Összefüggőség 55 1.5.2. Kieséses verseny és egy rokon feladat 1.5.3. A probléma általánosítása 60

51

2. fejezet.

Kereső feladatok

63

2.1. A problémák

problémája

64

2.1.1. Ahol egy kismadár is segíthet 64 2.1.2. A kielégíthetőség problémája — univerzális 2.2. Nehéz kombinatorikai

feladatok

10

2.2.1. Közvetlen átfogalmazás 10 2.2.2. A háromszín-probléma 11 2.2.3. A pakolási probléma 13 2.3. Áttekintés

3.

Algebrai

74

fejezet.

algoritmusok

3.1. Gyorsabban 3.1.1. 3.1.2. 3.1.3. 3.1.4.

is lehet szorozni

6

80

Nagy számok szorzása 80 Nagy mátrixok szorzása 82 Polinomok szorzása 85 A véges Fourier-transzformált

3.2. Osztás helyett 3.2.1. 3.2.2. 3.2.3. 3.2.4.

79

szorzás

88

90

Számok osztása 90 Hatványsorok és polinomok osztása Az euklidészi algoritmus 91 Mátrixinvertálás 104

92

feladat

66

3.3. Polinomok

kiértékelése

106

3.3.1. Pan alsó becslései 107 3.3.2. Prekondicionálás 113 3.3.3. Tabellázás és fordítottja, 3.4. Párhuzamos 3.5. Moduláris

számolás

algoritmusok

az interpoláció

117

123 130

3.5.1. A kínai maradéktétel 130 3.5.2. Lineáris egyenletrendszer pontos megoldása 4.

137

fejezet

A kiszámíthatóság

elméletéről

4.1. Az algoritmikus

145

megoldhatóság

145

4.1.1. Az algoritmus fogalma 146 4.1.2. Az univerzális gép. A megállási feladat 4.1.3. Egyszerű eldönthetetlen feladatok 150 4.2. A számolások

terjedelméről

148

153

4.2.1. A terjedelem mérése 156 4.2.2. Optimális algoritmusok 158 4.2.3. Alsó becslések 160

Feladatmegoldások

163

7

b

Bevezetés

Az algoritmus legáltalánosabb értelemben nem más, m i n t tervszerűség. H a egy elvégzendő cselekvéssorozatot lépésről lépésre előre átgondolunk, megtervezünk, úgy is m o n d h a t j u k , hogy algoritmust a d u n k egy bizonyos cél elérésére. E g y épület terve, vagy egy ételrecept — ilyen legtágabb értelemben v e t t algoritmus. Algoritmust követ a futballbíró, amikor mérkőzést vezet — hiszen előre el v a n tervezve, méghozzá n e m is ő maga, hanem a játék szabályai m o n d j á k meg, hogy milyen szituációban m i t kell ítélnie. Sok mindennapi tevékenységünk szigorúan véve nem algoritmikus. Megállhatunk közben töprengeni, vagy akár csak m a g u n k elé meredni, h á t h a „beugrik" egy jó ötlet. H a azonban sokszor kell őket végrehajtani, előbb-utóbb „algoritmizál" az ember. Gondoljunk például a csomagolásra valamilyen utazáshoz, vagy egy t á r g y keresésére a lakásban. E g y tevékenységet csak akkor m o n d u n k teljesen algoritmizáltnak, ha m á r pontosan leírtuk, elterveztük,

9

hogy milyen lépéseket fogunk végrehajtani (esetleg a korábbi lépések eredményétől függően); végrehajtás közben további módosításra vagy gondolkodásra nincs szükség. Nemcsak fizikai tevékenységet, hanem gondolatit is lehet tervezni, „algoritmizálni". A bolti pénztáros, ha visszaad, egy egyszerű algoritmust követ, melynek segítségével végül is e l j u t t a t j a a vásárlónak a visszajáró pénzt. E g y hivatal eljárási rendje, egy zene k o t t á j a , egy bridzs-licitrendszer — algoritmusok. Persze sok ezek közül nem elégíti ki a szigorúbb kikötéseket: ugyanabból a kottából u g y a n a z t a zenét sokféleképpen le lehet játszani, ugyanabból a lapból ugyanazzal a licitrendszerrel lehet kis szlemmet játszani és nagy szlemmet bukni. Mindezek a tevékenységek érdekességüket, sőt értelmüket vesztenék, h a teljesen algoritmizálva volnának. A legjobb példákat a mindennapi életben használatos algoritmusokra a m a t e m a t i k a szolgáltatja. H o g y a n a d u n k (vagy szorzunk) össze két számot? Megtanultunk rá egy mindig működő, pontosan leírt, gépiesen végrehajtható eljárást, egy algoritmust. Ugyanez a helyzet az osztással, a gyökvonással, a háromszög területének kiszámításával, a százalékszámítással stb. Az általános iskolai m a t e m a t i k a a n y a g , de még részben a középiskolai is, főként algoritmusokat t a n í t az ilyen gyakran felvetődő feladatok megoldására. Talán meglepő egy „Algoritmusok" c. k ö n y v részéről, ha ezzel a gyakorlattal kapcsolatban kételyeknek ad hangot. Véleményünk azonban az, hogy az emberi szellemi tevékenység lényege nem algoritmusok végrehajtása, hanem algoritmusok alkotása. Természetes, hogy bizonyos alapvető algoritmusokat (összeadás, szorzás) mindenkinek ismernie kell. Azonban éppen az alapfeladatokat olyan sokszor, annyira változó körülmények között kell megoldanunk, hogy egy a d o t t algoritmust — akár a legközönségesebbet, például a szorzásét — legjobbnak, „egyedül üdvözítőnek" deklarálni nem lehet. É p p e n a szorzással kapcsolatban látni fogjuk, hogy nagyon sok jegyű számok szorzására v a n gyorsabb, jobb eljárás, m i n t amit az iskolában t a n u l t u n k ! Ilyen sok jegyű számok szorzására m a talán még nincsen szükség, de ahogy a számítások mennyisége növekszik — a hibák halmozódása m i a t t —, a pontosságot, t e h á t a jegyek számát is növelni kell. K ö n y v ü n k célja sem az, hogy algoritmusok lexikonja legyen. Sok feladatra a d u n k algoritmust, némelyekre több különbözőt is, de ezek főként példaként szolgálnak. F ő célunk az, hogy az olvasó arról kapjon képet, hogyan is kell algoritmust keresni, tervezni egy-egv feladat megoldására. Az algoritmus, most már a szűkebb, precíz m a t e m a t i k a i értelemben véve, önálló m a t e m a t i k a i létező. E g y algoritmus megvizsgálható sokféle szempontból (gyorsaság, tárigény stb.), két

10

algoritmus összehasonlítható, sőt olyan kérdések is felvethetők, hogy egy feladat megoldására alkalmazható összes lehetséges algoritmusok közül a d o t t szempontból melyik a legjobb (vagy van-e egyáltalán legjobb). Vagy: létezik-e egyáltalán algoritmus egy-egy feladat megoldására? Az ilyen vizsgálatok még gyerekcipőben járnak, de ezek alkotják az algoritmusok elméletének legérdekesebb fejezeteit. E könyvben igyekezni fogunk az ilyen eredményekből is legalább ízelítőt adni. Az előbb m á r említettük a számítógépeket, de részletesebben is kell szólnunk róluk, mivel az algoritmusok elméletében és gyakorlatában egyaránt forradalmi változást hoztak. B á r „algoritmusok" (tervszerűség) mindennapi életünkben is lépten-nyomon előfordulnak, és szűkebb értelemben vett, matematikai algoritmusokat m á r a görögök is alkottak, az algoritmus fogalmának precíz megalkotására csak az 1930-as években került sor. E k k o r bizonyította be Church, hogy v a n olyan feladat, amely algoritmussal nem oldható meg. Az az algoritmusfogalom, melyet ennek az időszaknak a m a t e m a t i k a i logikusai használtak, kellemetlenül bonyolult volt és egyáltalán nem szemléletes. Ma m á r szinte mindenki hallott, olvasott vagy t a n u l t arról, hogy hogyan működik egy elektromos számítógép; egyre többen írtak már programot is. í g y egyre t ö b b olyan ember van, akinek számára igen szemléletessé teszi az algoritmus fogalmát a következő kijelentés: algoritmus az olyan eljárás, amely számítógépre programozható. Ez persze nem matematikai definíció, de azzá tehető, ha a számítógép fogalmát pontosan leírjuk, és ezt fogjuk tenni könyvünk vége felé. A számítógépek az algoritmusok alkalmazhatóságát sokszorosára növelték. Olyan méretű feladatoknál, melyek a számítógépek megjelenése előtt megoldhatók voltak, a teljes gépesítés n e m okvetlenül volt előnyös, hiszen az algoritmus „ l e f u t t a t á s á t " , a gépies számítási m u n k á t is embernek kellett végeznie, és jelentősen növelhette a hatékonyságot, ha ez az ember is ügyeskedhetett, kihaszn á l h a t t a menet közben az előre nem látható egyszerűsítési lehetőségeket. A gépek megjelenése megváltoztatta a helyzetet: sokkal nagyobb, bonyolultabb számítási, adatfeldolgozási feladatokat tudnak megoldani, m i n t az ember magában, de ehhez pontosan, egyértelműen megfogalmazott programra, algoritmusra v a n szükségük. Ezek az algoritmusok a gépek nélkül gyakorlatilag használhatatlanok, ezért korábban a megfelelő feladatok fel sem vetődtek. A gép így aztán olyan m u n k á k a t is á t v á l l a l h a t o t t az embertől, melyekről az úgy érezte, hogy intelligenciája, nemformális ítélőképessége legjavát követelik tőle (pl. a piaci döntéseket). Eléggé elterjedt az a vélemény, hogy néhány d ö n t ő ponton az embert sohasem lehet gépekkel helyettesíteni. A kérdésnek

11

természetesen csak olyan feladatok esetén v a n értelme, amelyek a gépek számára egyáltalán megfogalmazhatók. H a elfogadjuk, hogy e feladatok megoldására az emberek is algoritmust használnak, akkor a helyettesítésnek csak gyakorlati akadálya lehet: az, hogy mi ezeket az algoritmusokat nem ismerjük (csak használjuk: könnyebb megtanulni pingpongozni, mint leírni, hogyan kell jól pingpongozni), vagv nem rendelkezünk elvégzésükhöz szükséges megfelelő mennyiségű és s t r u k t ú r á j ú gépi számolási kapacitással. Röviden: hogy az emberi agy a gépeknél minőségileg bonyolultabb módon dolgozik. Van olvan álláspont is, hogy az igazán magasrendű emberi tevékenységek nem algoritmizálhatok: eredendően nem formálisak. Akárhogyan vélekedünk is ezekről a kérdésekről, algoritmusokat gyártani a legkülönfélébb célokra — kétségtelenül hasznos tevékenység, és nincs izgalmasabb dolog, m i n t megfelelő algoritmusok segítségével utolérni az embert valamilyen bonyolult funkciójában (pl. az élőbeszéd áttétele írásba). Az algoritmusok készítése iparrá lett. Altalános rendeltetésű programok, a gépekkel együtt vagy külön, piacon vásárolhatók. Vannak cégek, melyek kizárólag programkészítéssel foglalkoznak megrendelésre. Könyvek, folyóiratok folyamatosan közölnek algoritmusokat. A „Communications of t h e ACM" nevű folyóirat sok év óta egységes rendszer szerint számozza az általa közölt algoritmusokat: visszatér r á j u k ú j a b b számolási tapasztalatok, javított változatok megjelenése alkalmából. (Algoritmusgyűjteménye e f a j t á b a n egyedülállónak számít.) Végül néhány szót a szükséges előismeretekről. Feltételezzük, hogy az olvasó tisztában v a n az algebra és kombinatorika alapfogalmaival. Egy-két helyen lineáris algebrai ismeretekre is építünk. Nem kívánunk jártasságot a számítógép-programozásban, de feltételezzük, hogy az olvasó ismeri a következő, egy számítógép működésének és programozásának megértésénél alapvető fogalm a k a t : központi és h á t t é r t á r (memória), blokkdiagram. A felhasznált algebrai, számelméleti és kombinatorikai ismeretanyag kifejtése megtalálható a következő könyvekben: Birkhoff—Bartee: A modern algebra a számítógép-tudományban. Műszaki K ö n y v k i a d ó , 1074. Busacker—Saaty: Véges gráfok és hálózatok. Műszaki Könvvkiacló. 1969. W. Mayeda: Alkalmazott gráfelmélet. Műszaki Könyvkiadó, 1976. Andrásfai Béla: ismerkedés a gráfelmélettel. Tankönyvkiadó, 1971. Rózsa Pál: Lineáris algebra műszaki alkalmazásokkal. 2. kiadás. Műszaki Könyvkiadó, 1976.

12

Anthony Ralston: Bevezetés a numerikus analízisbe. Műszaki Könyvkiadó, 1969. Azok számára, akiknek érdeklődését sikerült felkeltenünk az algoritmuselemzés témaköre iránt, elsősorban Trahtenbrot: Algoritmusok és absztrakt a u t o m a t á k (sajtó alatt), valamint D. K n u t h — magyarul eddig még meg nem jelent — könyvét a j á n l j u k : Donald Knuth: The art of computer programing (Addison — Wesley) I. F u n d a m e n t a l algorithms I I . Seminumerical algorithms I I I . Sorting and searching

13

L

1. fejezet

Kombinatorikai algoritmusok

A s a k k j á t é k feltalálójának jutalmul felajánlotta a perzsa sah, hogy azt kérhet, amit akar. „Szerény leszek, ó, királyok k i r á l y a " — válaszolta ó'. „Tégy a sakktábla első mezejére egy búzaszemet, a másodikra kettőt, a harmadikra négyet, a negyedikre nyolcat és így tovább, minden soron következőre kétszer annyit, m i n t a megelőzőre. Csak ennyi búzát k é r e k ! " Nagy volt a sah meglepetése, amikor kiderült, hogy nemcsak a búza nem fért volna el a táblán, de az idők kezdetétől nem t e r m e t t még a n n y i búza (264— 1 szem), a m e n n y i t a feltaláló k é r t ! Egyszerű kombinatorikai feladatok könnyen vezetnek ilyen elképesztően nagy számokhoz. Ahhoz, hogy egyszerű kombinatorikai kérdésekre választ adhassunk, gyakran kellene ilyen elképesztően sok esetet megvizsgálnunk. Sok kombinatorikai feladattal találkozunk rejtvényfejtés közben. Például: jussunk á t egy labirintuson. H a minden elágazásnál

15

minden lehetséges irányt végig akarunk próbálni, nagyon-nagyon sokáig kellene próbálkoznunk. A gyakorlott rejtvényfejtő persze nem néz végig minden esetet. Ötletei vannak (pl.: a labirintus jobb feléről a bal felére csak két helyen lehet egyáltalán á t j u t n i , tehát ezek valamelyikén feltétlenül á t kell, hogy haladjunk), elképzelései, megérzései (erre jó lehet menni, mert sok lehetőség van a folytatásra), sőt megpróbálja kitalálni a rejtvénykészítő gondolatait. A szokásos rejtvényeknél ez a kellemes a g y m u n k a és az izzadságos, unalmas ,.esetszétválasztás" arányban vannak egymással. De kezdjük csak el növelni a labirintus méreteit! A megvizsgálandó esetek száma gyorsan nő, m i n t a búzaszemeké a sakktábla mezőin; hamarosan nemcsak hogy túlságosan hosszúvá és unalmassá, hanem megoldhatatlanul bonyolulttá válik a feladat. Pedig ilyen „kombinatorikus", tehát véges halmazokkal, struktúrákkal, „kombinálgatással" foglalkozó feladatok a gyakorlatban is igen fontosak. Hogyan állítsuk össze a vasúti menetrendet Milyen sorrendben j á r j a be a h á z a k a t a levélkézbesítő? Hogyan osszuk szét a termelési feladatokat a vállalatok között? Néhány vonat, ház, vállalat esetében a (bizonyos szempontból) optimális megoldás megkeresése akár érdekes rejtvényfejtés is lehet. De egy város vagy ország méreteiben? Az ilyen kérdéseket a modern számítógépek t e t t é k megközelíthetővé. Ezek könnyen végigvizsgálják az esetek millióit, így mentesíthetik az embert a gépies, unalmas munkától. Persze, a gép csak azt csinálja, amit „ m o n d a n a k " neki. A rejtvényfejtéshez szükséges ötleteket az embernek kell kitalálni és a gépnek „ m e g t a n í t a n i " . A feladat megoldásában segítséget n y ú j t ó ötletek, egyértelmű és precíz utasításokként megfogalm a z v a : ez az algoritmus. Kombinatorikus algoritmusokat nem is nagyon vizsgáltak módszeresen a számítógépek megjelenése előtt; más szóval, senki sem vette magának a fáradságot, hogy a „ r e j t v é n y f e j t é s " közben használt ötleteket összegyűjtse és tanulmányozza. í g y aztán előállt az a helyzet, hogy még ma sem t u d j u k teljes egészében megválaszolni az olyan egyszerű kérdéseket, mint „ H o g y a n jó n dolgot sorbarendezni?" vagy „ H o g y a n jó kiválasztani felülről a 10-ediket egy listából?" (Míg pl. az égitestek pályaszámításairól, vagy igen bonyolult, folytonos, de nem differenciálható függvények létezéséről igen sokat tudunk.) E fejezetben néhány ilyen alapkérdésre keresünk választ. Sok példánk a legtöbbet vizsgált kombinatorikus s t r u k t ú r á k , az ún. gráfok köréből való. A gráfok igen általános, az elmélet és gyakorlat m a j d n e m minden területén előforduló s t r u k t ú r á k . (Bizonyos dolgok. melyek között e g y f a j t a kapcsolat, reláció áll fenn: gráf.)

16

H a az olvasó mégis túlzásba vittnek t a r t a n á a gráfok szerepeltetését, legyen elnéző az egyik szerző e személyes szimpátiája iránt. K ö n y v ü n k célja, hogy az algoritmusok elméletének helyzetéről, erejéről, fejlettségéről, módszereiről képet adjon, s így jobb összehasonlítási alapot kapunk, ha példáinkat egy fogalom köré csoportosítjuk.

1.1. Szortírozás

1.1.1. Beszúrás Elkészítettünk egy listát n— 1 dologról (pl. egy névsort). E z u t á n k a p u n k egy w-ediket, és ezt a helyére a k a r j u k tenni. Ez úgy értendő, hogy a listán szereplő bármely dologgal összehasonlítva meg kell t u d n u n k mondani, hogy előtte vagy u t á n a következik-e. H o g y a n csináljuk ezt? A' legegyszerűbb eljárás végigszaladni a listán, amíg az első olyan dologhoz nem érünk, amelyet a beszúrandó m á r nem előz meg, ekkor a szóban forgó w-ediket ez elé tesszük. E z az eljárás néha lehet, hogy a legjobb, de v a n egy h á t r á n y a : nagyon sok (a legrosszabb esetben n, általában nl2) összehasonlítást igényel. H a a helyzet olyan, hogy két dolog összehasonlításához hosszabb számítást vagy kísérletet kell végeznünk, érdemes másképpen eljárni. Egyszerűség kedvéért tegyük fel, hogy n = 2k (ha n nem ilyen alakú, akkor f i k t í v dolgokat odaképzelve a sor végére w-et kiegészítjük 2-nek legközelebbi hatványává). Hasonlítsuk össze az ú j dolgot a középső elemmel; legyen pl. az eredmény az, hogy az ú j elem megelőzi a középsőt. E k k o r m á r csak az első 2 A_1 — 1 elem közé kell beszúrni az ú j a t . Ismét összehasonlítva ezek közül a középsővel, sikerült 2k~2 — 1 elem közé való beszúrásra redukálni a feladatot. Hasonlóan továbbmenve, ¿—1 összehasonlítás u t á n „egy elem közé való beszúrásra" v a n csak szükség, amihez 1 összehasonlítás kell. í g y a k lépésszám n-nel kifejezve: & = log 2 n, vagy ha n nem volt 2-nek h a t v á n y a , akkor k a log 2 n-re következő legelső egész szám, melyet [log 2 w|-nel jelölünk. Az összehasonlítások száma ezzel igen lecsökkent az első eljáráshoz képest, pl. 1000 dolog esetén 1000 helyett 10-re. E n n e k fejében a programozás bonyolultabbá vált. M e g m u t a t j u k most, hogy az összehasonlítások számát nem lehet t o v á b b csökkenteni. Ez a meggondolás igen egyszerű példája lesz egy gyakran használható módszernek: hogyan k ö v e t h e t j ü k nyomon az egyes lépések u t á n rendelkezésünkre álló információ mennyiségét. 2 Algoritmusok

17

Kezdetben semmit sem t u d u n k arról, hogy hová kell beszúrni az ú j elemet. Tegyük fel, hogy elvégeztünk egy összehasonlítást a j-edik elemmel; m o n d j u k

71 -f- 1

——. ¿i

Ekkor

vagy

az

adódik,

hogy ez előtt, vagy hogy ez u t á n van az ú j . A d ó d h a t az, hogy u t á n a ; ekkor még

j elem közé kell az ú j a t beszúrni,

amelynek ezen elemekhez való viszonyáról semmit nem t u d u n k , így közöttük bárhol lehet. Hasonlóan t o v á b b m e n v e l á t j u k , hogy l lépés u t á n , ha nincs szerencsénk, még mindig van legalább nj2'— 1 egymás utáni elem, amelyeknek az újhoz való viszonyáról nem t u d u n k semmit. Ez még ¿ = pog 2 n\ — 1 esetén is legalább egy elem, ennél tehát t ö b b lépés kell. 1.1. feladat: 16 l á t s z a t r a e g y f o r m a p é n z d a r a b k ö z ö t t egyik hamis, k ö n n y e b b a többinél. E g y e g y k a r ú , skálás mérlegen közülük a k á r h á n y érme összsúlyát m e g t u d j u k h a t á r o z n i , és ebből m e g á l l a p í t a n i , h o g y közt ü k van-e a hamis. Keressük meg a hamis pénzt minimális számú méréssel. H a s o n l í t s u k össze f e l a d a t u n k a t a beszúrási f e l a d a t t a l . 1.2. feladat: K e r e s s ü k m e g 27 p é n z d a r a b közül a h a m i s a t , h a egy kétk a r ú m é r l e g ü n k v a n , súlyok n é l k ü l !

1.1.2. Összefésülés Rokon probléma a következő: van két, n hosszúságú listánk; egyesítsük őket! Ismét az a helyzet, hogy a listán szereplő dolgoknak van egy jól meghatározott sorrendje, és két dolgot össze tudunk hasonlítani. Szeretnénk kevés összehasonlítással megvalósítani az összefésülést. Legyen a két lista (xv . . ., xn) és (yv . . ., yn). E l j á r á s u n k a következő. Hasonlítsuk össze az y x elemet rendre cLZ «J/j j Xn y • • • elemekkel, míg meg nem találjuk az első olyat, m o n d j u k x2-t, melyet megelőz; ekkor tegyük be ,y r et x2 elé. Hasonlítsuk össze ezután az #2, #35 • • • elemekkel, amíg egy olyat nem találunk, melyet y2 megelőz; tegyük be y2-t ez elé stb. Megjegyezzük, hogy az eljárás kellemetlen tulajdonsága, hogy az x t elemeket sokszor meg kell mozgatni. Ezen segíthetünk, ha ,,plusz" t á r a t használunk. E k k o r az eljárás így írható le: Hasonlítsuk össze a két első elemet. í r j u k le azt, amelyik megelőzi a másikat egy külön helyre, és egyben töröljük is az eredeti helyéről. Ismételjük ezt, míg valamelyik lista el nem fogy, a másik lista maradékát írjuk át az ú j lista végére. E z t az eljárást alkalmazva, minden elemet csak egyszer mozdítunk meg.

18

1.3. feladat: G o n d o l j u k á t , h o g y a második e l j á r á s az elsőtől csak .-íz a d a t o k m á s elhelyezésében különbözik.

H á n y összehasonlítást végzünk így? Minden összehasonlításnál egy elem kerül az ú j listára; az utolsó, a 2w-edik elemhez m á r n e m is kell összehasonlítás. í g y legfeljebb 2n — 1 összehasonlításra volt szükség. K ö n n y ű megmutatni, hogy 2n — 2 összehasonlítás n e m mindig elegendő. Tegyük fel, hogy végső sorrendnek (xv yv x2, y2, ... . . ., xn, yn) adódik. E k k o r i t t bármely két szomszédos elem összehasonlítását el kellett, hogy végezzük az eljárás során, m e r t más összehasonlításokból a sorrendjükre következtetni nem lehet.

1.1.3. Sorbarendezés Gyakori feladat, hogy n a d o t t dolgot valamilyen szempont szerint sorba kell r a k n u n k . Pl. n nevet névsorba, vagy n a d a t o t nagyság szerint. Lehetséges, hogy a dolgoknak valamilyen „ é r t é k e " vagy „ s ú l y a " van, és pl. érték szerint növekvő sorrendbe a k a r j u k rakni őket. De lehet, hogy — mint pl. a névsor esetén — ilyen érték nincsen. Azt fogjuk ezért feltételezni, hogy bármely két adott dolgot tekintve, meg t u d j u k mondani, melyik előzze meg a másikat a sorrendben. E z t röviden a két dolog összehasonlításának fogjuk nevezni. (I) Első és legtermészetesebb m ó d j a a feladat megoldásának az, hogy először a dolgokat valahogyan sorbarakjuk, m a j d megnézzük, hogy az első és második, a második és harmadik, . . . , ( r a - l ) - e d i k és ?i-edik elem sorrendje jó-e. H a mindez jó, akkor az elemek máris megfelelő sorrendben v a n n a k . H a találunk két szomszédos elemet, melyek sorrendje n e m megfelelő, ezeket felcseréljük. Sajnos, lehet, hogy ezzel egy másik szomszédpár sorrendje elromlik. Pl. ha három egymás u t á n i helyen álló szám: ...15

22

13...,

akkor a 22 és 13 felcserélése u t á n a 15-nek és rákövetkezőjének sorrendje fordul rosszra. De ú j r a és ú j r a kezdve az eljárást, véges számú lépés u t á n eljutunk a jó sorrendhez. Megmutatható ugyanis, hogy a rossz sorrendben levő párok száma minden cserével csökken, így előbb-utóbb elfogy. 1.4. feladat: K é z e n f e k v ő , h o g y az a legrosszabb eset, lia a kiindulásul v e t t sorrend é p p e n f o r d í t o t t j a a k í v á n t n a k . Pl. a számok csökkenő sorr e n d b e n v a n n a k , és mi növekedően a k a r j u k őket rendezni. E k k o r a font

2'-

19

leírt e l j á r á s j

cserél igényel. B i z o n y í t a n d ó ,

(n) 2 I csere kell, és elegendő legfeljebb

hogy általában

legfeljebb

(n) ^ I szomszédos p á r t összehasonlítani.

Lehet-e jobb eljárást találni a sorbarakásra? Ez sok mindentől függ. A fenti eljárás könnyen programozható, nem igényel t ö b b tárhelyet, mint amennyi az a d a t o k elhelyezéséhez kell, és nem t ú l sok | legfeljebb |

egyszerű műveletet

igényel. Hogy szükség van-e más eljárásra, azt az határozza meg, mennyire egyszerűek ezek a műveletek. K é t a d o t t „dolog" összehasonlítása ugyanis esetleg bonyolult kísérlet vagy számítás elvégzését igényli. Még ha ilyenre nincs is szükség, de az összehasonlítás végett a gép adatszalagjához vagy lassabb tárához kell fordulnunk, előfordulhat, hogy két dolog összehasonlítása sokkal, de sokkal drágább (időigényesebb) dolog, m i n t pl. a dolgokat átrendezni vagy hosszabb programot írni. í g y aztán felvetődik a kérdés: nem lehetne-e olyan eljárást adni, mely kevesebb összehasonlítással (esetleg t ö b b egyéb jellegű lépés, vagy nagyobb tárigény árán) rendezi sorba az elemeket? (II) Képzeljük el, hogy a dolgok közül (11— l)-et m á r sorbarendeztünk és most k a p j u k az »-ediket (mint amikor valaki egyenként szedi fel a kártyáit). Az /i-edik dolgot kell „beszúrni" valahová. Ez, mint t u d j u k , [log 2 »] lépésben megtehető. Az első n — 1 dolgot ugyanilyen eljárással rendeztük sorba, utoljára | log 2 (n— 1)] összehasonlítás á r á n szúrva be az (n— l)-ediket az első n — 2 közé. Hasonlóan továbbmenve l á t j u k , hogy összesen [log2 n\-f . . . 4-Pog, 3] + [log 2 2"H»|"log2 n | összehasonlításra v a n szükség. 1.5. feladat: I g a z o l j u k , h o g y [log 2 nl + . . . + floga 2] = nfloga n] -

"1 + 1.

Ez az eljárás lényegesen kevesebb összehasonlítást igényel, mint az előző; pl. w = 1 0 0 0 esetén 499 500 helyett csak 9001-et. Kellemetlen tulajdonsága viszont, hogy minden ú j a b b elem beszúrásakor, t e h á t n-szer meg kell bolygatni a már elhelyezett elemek egy részét (helyet kell csinálni a beszúrt elemnek). (III) Rendezzük sorba az elemek első felét és a második felét, m a j d fésüljük össze a k a p o t t két sorozatot. 1.6. feladat: I g a z o l j u k , h o g y e n n e k az e l j á r á s n a k a lépésszáma azonos •i (["n eljáráséval

20

Mivel összefésülést csak [log 2 n]-szer kellett v é g r e h a j t a n u n k , a (II) eljárással szemben egy elemet csak [log 2 n]-szer kell megbolygatnunk. Ezzel szemben itt pótlólagos t á r r a v a n szükség az összefésülés elvégzéséhez. Lehet-e ennél „ j o b b " , vagyis kevesebb összehasonlítással dolgozó algoritmust adni ? Megmutatjuk, hogy lényegesen jobbat nem. Tegyük fel, hogy v a n egy eljárásunk, mely m e g a d j a a sorrendet. Nézzük meg, h á n y összehasonlításra v a n szükség. E v é g e t t gondoljuk meg, hogy mit tudunk, mennyi információnk v a n a sorrendről az egyes összehasonlítások u t á n . Mielőtt nekikezdenénk, az n dolognak bármely sorrendje elképzelhető számunkra, így n\ lehetőség van. Az összehasonlítások sorozatával azt szeretnénk elérni, hogy egy híján minden lehetőség ki legyen zárva. Az első összehasonlítás az n\ esetnek pontosan a felét z á r j a ki. A későbbi összehasonlításoknál ez m á r nem okvetlenül áll; de kedvezőtlen esetben a lehetőségeknek legfeljebb a fele zárható ki. Az összehasonlításkor ugyanis az addig még szóba jövő esetek két osztályra bomlanak aszerint, hogy mi az összehasonlítás eredménye. Nem t u d j u k , mekkora ez a két osztály, de ha az összehasonlítás u t á n a nagyobbikba tartozó sorrendek m a r a d n a k , akkor a szóba jövő esetek száma kevesebb, mint felével csökkent. így t e h á t k összehasonlítás elvégzése u t á n előfordulhat (azaz akárhogyan is végezzük az összehasonlításokat, v a n olyan eset, amikor előfordul), hogy még legalább n\/2k sorrend szóba jöhet, ELZ8LZ duZ eddigi összehasonlításokkal összhangban van. H a eljárásunk N összehasonlítással biztosan célba ér, azaz N összehasonlítás u t á n m á r biztosan csak egy sorrend lehetséges, akkor t e h á t fenn kell álljon, hogy n\/2N^l, azaz - Z á l o g a (7i!) = log 2 íi + log 2 ( n - l ) + . . . + l o g 2 2. Ez azt m u t a t j a , hogy az a d o t t eljárásban szereplő összehasonlítások száma lényegesen m á r nem volna csökkenthető. Foglaljuk össze az eddigieket: • Tétel: Bármély algoritmus, amely n dolgot sorbarendez, legalább log 2 (n\) összehasonlítást kell hogy tegyen. Van olyan logaritmus, mely log 2 (n\) + n— 1 összehasonlítással sorba tudja rakni az n dolgot. Megjegyzések: 1. A fenti bizonyításnak arra vonatkozóan, hogy minden sorbarendező algoritmusnak legalább n log 2 n összehasonlítást kell

21

tenni, információelméleti h á t t e r e van. Az információelméletből ismeretes ugyanis, hogy N tárgy közül egynek a kiválasztásához (ha mindegyik egyformán szóba jöhet) log 2 N „ b i t " (egység) információ kell. Esetünkben egy összehasonlítás egy ,,bit" információt szolgáltat. Hasonló feladatok a „keresési p r o b l é m á k " (pl. t ö b b érme közül a hamis kiválasztása mérlegeléssel). Ezekre itt most nem térünk ki. Érdekes összevetni e feladatokat a közkedvelt barkochba játékkal is. 2. Az általunk megadott algoritmusok csak kicsit hosszabbak, mint a bármely algoritmusra érvényes log 2 (n\) alsó becslés. A két algoritmus kombinációjával F o r d és Johnson még egy kicsit csökkenteni t u d t a a lépésszámot, de — nagy n mellett — még mindig van egy kis különbség az alsó becslés és algoritmusuk lépésszáma között. A pontos helyzet nem ismeretes (de ennek persze csak elméleti érdekessége van). 3. A fenti tétel állítása a legrosszabb esetre érvényes: minden sorbarendező algoritmushoz vannak olyan bemenő adatok, hogy ezeken az algoritmusnak log 2 (n\) d a r a b összehasonlítást kell tennie. Kérdezhetnénk azonban, nincs-e olyan algoritmus, ami átlagban — ha az összes sorrendet egyenlően valószínűnek t e k i n t j ü k — kevesebb összehasonlítást végez. Információelméleti gondolatmenettel m e g m u t a t h a t ó , hogy nincs. Vannak olyan algoritmusok, amelyek a legrosszabb esetben 'fyi'yy

J\

— ~ r — - összehasonlítást követelnek, átlagban pedig csak c-log 2 (n\) ¿i

darabot. Az átlagos lépésszám meghatározása sokszor fejlett matematikai technikát igényel. Az 1.1.4. pont példája a legegyszerűbbek közé tartozik.

1.1.4. Átrendezés cserékkel A most következő példa elsősorban azt illusztrálja, hogy lehet egy algoritmus átlagos lépésszámát kiszámolni. A feladat ugyanaz, m i n t az előbb: a d o t t n különböző szám, Kx, Ko, • . •, Kn, melyeket növekvő sorrendbe kell átrendezni. A következő algoritmust használjuk. 1. fázis (a Kx szám a helyére kerül): 1. csere: A Kx számot összehasonlítjuk Jf^-nel. H a Kri>K1, akkor továbblépünk, és jír n _ r gyel hasonlítunk össze. H a megint továbblépünk stb. H a pl. akkor Kvet kicseréljük -vei. Az ú j sorozat (függőleges vonallal v á g t u k

22

le a sorozat k é t végéről azokat a részeket, amelyekkel ü ^ - e t m á r nem kell hasonlítani): Kn-Z 1-^2^3 • • • % 2. csere: A csere u t á n 7^-et a legelső olyan számmal hasonlítjuk össze, amivel még nem hasonlítottuk: példánkban A"2-vel. H a K1s~K2, akkor továbblépünk és Kret Krmal hasonlítjuk össze stb. H a pl. Ks>Klt akkor Kx-et kicseréljük A"s-tel. Az ú j sorozat: Kn_2K2K3Kt|KJ^g

.. .

Kn_,s\KsKn_1Kn.

3. csere: Most / f 1 - e t megint a legutolsó olyan számmal hasonlítjuk össze, amivel még eddig nem volt összehasonlítva és lefelé haladunk, amíg cserére nem kerül sor. 4. csere: A esere u t á n / f r e t a legelső ú j számmal hasonlítjuk össze stb. Végül / f r e t m á r a sorozat minden elemével összehasonlítottuk és a nála nagyobbak mind mögé, a nála kisebbek pedig elé kerültek. H a pl. K1 az i-edik helyre került, a következő kép alakul ki: LltL2,

...,

L,_lt Kt, M1,M2,

. . .,

Mn_i,

ahol Lx < K1,

. . .,

Li_1

48

r — ir,.

»',•+

Legyen most az i-edik hátizsák az, amely a legkevésbé v a n tele. H a ez több m i n t félig van, vagyis W ^ V / 2 , akkor minden ;-re Wj^W^V/2,

és így F 1 + F 2 + . . . + F n = W^

W2+ . . . +

,

vagyis ?

n V Tehát F 1 + . . . + F n = ^ 1 + . . . + TF ffl >íF I .+ ( j r a - l ) ( F - í F i ) = F

F

amiből ugyanaz adódik, mint fentebb. Az állításból az is látható, hogy ha a pontos megoldás, vagyis az a d o t t dolgok bepakolásához szükséges hátizsákok minimális száma m 0 , akkor m / m 0 < 2. Megjegyezzük, hogy Demers, Garey, Johnson, Graham és Ullman igazolták azt is, hogy ralm() 1,7 és példát m u t a t t a k arra is, hogy az 1,7 t o v á b b m á r n e m javítható. Ugyanők megvizsgálták a ,,sietős" csomagolási algoritmus következő v á l t o z a t á t ; rendezzük a t á r g y a k a t térfogat szerint csökkenő sorrendbe, vagyis legyen V 1 ^ V 2 = . . . ^ V „ és ezután alkalmazzuk a „sietős" eljárást. Azt kapták, hogy az algoritmus által felhasznált hátizsákok t>i' számára m' /m0^l,22. . . teljesül, t e h á t az egyszerű előkészítés, hogy esökkenőleg rendezzük a t á r g y a k a t , lényeges javulást eredményezett, legalábbis a „legrosszabb esetet" illetően. Az átlagos viselkedésről a számítógépes tapasztalatok hasonló képet m u t a t nak, de erre vonatkozóan elméleti eredmények még nincsenek.

1.4.2. A fedési feladat A fedési feladatot két példán m u t a t j u k be. 1. példa: Legyenek Flt ..., Fm az elvégzendő feladatok; F , , . . ., Vn vállalatok, melyek mindegyike e feladatok közül 4 Algoritmusok

AQ

n é h á n y a t el t u d végezni. K i kell választani minimális számú vállalatot úgy, hogy ezek együttvéve valamennyi feladat elvégzésére alkalmasak legyenek. (Figyeljünk föl a különbségre a párosítási problémához képest; itt egy vállalat t ö b b feladatot is k a p h a t egyidejűleg!) 2. példa: E g y társaságban mindenki hajlandó pingpongozni valakivel, de nem szükségképpen mindenkivel (a hajlandóság kölcsönös). Hogyan kell minimális számú játszmát lejátszani úgy, hogy mindenki legalább egyet játsszon? E feladatok közös megfogalmazása a következő': A d o t t egy 8 halmaz; ennek elemeit pontoknak nevezzük. A d o t t a k t o v á b b á az í j , . . . , En halmazok, melyek egyesítése t a r t a l m a z z a S-t. Válasszunk ki az Ex, . . ., En halmazok közül minimális számút úgy, hogy ezek együtt lefedjék S-t. Ez a fedési probléma. Az első példában 8 a feladatok halmaza, Ei pedig a V, vállalat által elvégezhető feladatoké; a 2. példában 8 a társaság tagjainak öszszessége, Elf . . ., En pedig azok a párok, melyek hajlandók egymással játszani. A fedési probléma megoldására sok algoritmus ismeretes, amelyek azonban mind exponenciálisan hosszú ideig működnek. (Ezeket itt nem i s m e r t e t j ü k ; egy részük a pakolási problémánál tárgyalt ,,branch and b o u n d " módszerrel dolgozik, más részük pedig a lineáris programozás módszerére támaszkodik, amelyeket e könyvben nem t u d u n k tárgyalni.) Helyettük egyszerű szuboptimális algoritmusra m u t a t u n k példát. Ez olyankor működik jól, ha az E i halmazok viszonylag kicsik. Példaként i t t arra az esetre szorítkozunk, amikor minden E, 3 elemű. Miért nem a 2 elemű Erk esetét t e k i n t j ü k ? (Ez szerepel a 2. példában is!) A válasz: a 2 elemű Eck esete visszavezethető a párosítási feladatra. A következő eljárás adható ugyanis: Válaszszuk ki az a d o t t Ei (kételemű) halmazok közül maximálisan sok d i s z j u n k t a t ; legyenek ezek Eilt ..., Eih. (Ez éppen a párosítási feladat, és mint ott megjegyeztük, eléggé hatékonyan megoldható.) H a vannak még olyan pontok, melyeket Etl, . . ., Eik nem fednek le, válasszunk ki minden ilyen ponthoz egy-egy őt t a r t a l m a z ó Ej halmazt. H a 8 elemszáma m, akkor így m—2k további halmazt kell kiválasztanunk, vagyis az összes kiválasztott halmazok száma k+(m—2k)=m—k. Ezen a módon az $ - e t lefedő lehető legkevesebb halmazt választottuk ki. 1.16. feladat: I g a z o l j u k ezt az állítást!

í g y tehát kézenfekvő, hogy arra az esetre keresünk szuboptimális algoritmust, amikor minden egyes El 3 elemű.

50

Válasszunk ki egy Eh-et; m a j d , ha van ilyen, egy Ek-t, mely ü^-től diszjunkt; folytassuk ezt, mindig olyan Elk+1-et választva, melynek a már kiválasztott E ^ , . . ., E í k halmazokkal nines közös p o n t j a . H a elakadtunk, akkor nézzük meg, van-e olyan az a d o t t E j halmazok között, mely 2, még lefedetlen p o n t o t is tartalmaz, és ha igen, tegyük bele ezt a rendszerbe. Folytassuk ezt, míg el nem akadunk, vagyis bármely E j a még be nem fedett pontok közül m á r esak egyet tartalmaz. E k k o r minden, még lefedetlen ponthoz válasszunk ki egy-egy őt tartalmazó E j halmazt. Az így kiválasztott halmazok tehát minden p o n t o t le fognak fedni. Röviden szólva az algoritmus minden lépésben olyan E, halm a z t választ, amely a még lefedetlen pontokból a lehető legtöbbet fedi le. Ez magyarázza, hogy ezt az algoritmust „ m o h ó " algoritmusnak (greedy algorithm) nevezzük. Példaként vizsgáljuk meg a 11. á b r á n l á t h a t ó rendszert; i t t az egyenessel összekötött ponthármasok az E, halmazok. A bekarikázott sorszámok a mohó algoritmus által kiválasztott halmazokat m u t a t j á k . L á t h a t ó , hogy ez 3 helyett 5 halmazt választott ki (az első k e t t ő t feleslegesen). 1.17. feladat: A d j u n k o l y a n p é l d á t , ahol egy 11 b e f e d ő h a l m a z t v á l a s z t ki, b á r 6 is elég volna.

„mohó"

algoritmus

Bebizonyítjuk most a következőt: Ha

az S-et lefedő E, halmazok

a „mohó"

algoritmus

legfeljebb

minimális kn halmazt

száma választ

k0, ki

akkor (feltéve,

hogy minden Ei halmaz három elemű). A bizonyításhoz némi számolásra lesz szükségünk. Tegyük fel, hogy a „ m o h ó " algoritmus a lépésen keresztül t u d diszjunkt,

Q-

•o-

•o

ó-

•o-

-o

ó-

•6-

•o

11. ábra 4:

51

tehát három ú j a b b pontot lefedő E{ halmazokat választani: utána b lépésen keresztül t u d két-két ú j a b b p o n t o t lefedni; végül c lépésen keresztül fed le egy-egv ú j a b b pontot. E k k o r a kiválaszt o t t halmazok száma a + b + c. Nyilvánvaló, hogy az összes pontok száma

Mivel

k0 darab Et halmazzal az összes pont lefedhető,

innen +

+

(1)

Az első lépés u t á n visszamaradó lefedetlen pontok száma 2b + c. Egy-egy Et halmaz ezek közül legfeljebb k e t t ő t fed le, tehát ha ¿„ d a r a b E, halmaz mindet lefedi, akkor 26 + c-:2/«v

(2)

Hasonlóan, az első n-\-b lépés után r d a r a b pont marad lefedetlenül. Egy-egy E: halmaz ezek közül c^ak egvet fed le, tehát ha kn darab El mirulet lefedi, akkor c^k0.

(3)

Szorozzuk meg (l)-et 2-vel, adjuk hozzá (2)-t és (3) háromszorosát, akkor azt k a p j u k , hogy 0« - Gb + Gr :i 1

,

vagyis 11 j ' Íí + H c s — - . . . -»x n -»x^ változócsere sem v á l t o z t a t j a meg a függvényt. 1.24. feladat: Az

(®i A x2) V (®2 A aj3) V (®3 A ®-i) f ü g g v é n y b e n nines tagadásjel. Mutassuk meg, hogy logikai ériéke mégis k i s z á m í t h a t ó úgy, hogy csak h á r o m változó logikai értékére v a n szükség. 1.25. feladat: Az (xiAxiAyi

A 2/2) V (xi A ft A y-i A íte) V (®3 A xi AysAy\)

f ü g g v é n y b e n m i n d e n változó egyenértékű. M u t a s s u k meg, h o g y logikai értéke mégis kiszáll;ílható úgy, h o g y csak 5 változó logikai ériékére van szükség.

61

2. fejezet

Kereső feladatok

Az előző fejezetben sokféle problémát vizsgáltunk és különféle algoritmusokat a d t u n k rájuk. Az algoritmusok hossza (lépésszámigénye) igen széles keretek között változott: n paraméter esetén néha log 2 n, néha 2" volt a lépésszámigény. Ez a meglehetősen kaotikus helyzet sürgetően követeli az egységesítő elméletet (ugyanakkor persze megalkotásának nehézségére is r á m u t a t ) . A „Gráfok diagnosztikája" e. részben említettünk példát arra, hogy néhány feladatra egységes megfogalmazás található és — legalábbis sejtés erejéig — még meglehetősen általános kijelentést is meg t u d t u n k fogalmazni az őket megoldó algoritmusokkal kapcsolatban. Az o t t t á r g y a l t a k n a k azonban v a n egy alapvető hiányossága: a módszer nem képes figyelembe venni, hogy mi történik a számítógép belsejében. Megkerüli ezt a kérdést azzal, hogy esak azt vizsgálja, hányszor n y ú l a gép az adatszalaghoz. Ezért aztán elvileg képtelen többet mondani, mint hogy minden

63

a d a t r a szükség van, vagyis, hogy a gépnek legalább a n n y i lépést kell dolgoznia, mint az adatok száma. L á t t u k ugyanakkor, hogy vannak olyan feladatok (pl. a pakolási probléma), amikor az n 2 számú bemenő adaton minden ismert algoritmus exponenciálisan hosszú ideig dolgozik. Ilyen konklúzióra a fenti elmélet nem j u t h a t .

2.1. A problémák problémája

2.1.1.

Ahol egy kismadár is segíthet E b b e n a fejezetben egy olyan elmélet alapjait ismertetjük, amely megpróbál ezzel a nehézséggel megbirkózni. I n d u l j u n k ki néhány példából: 1. példa: Szorozzunk össze két n jegyű számot! 2. példa (pakolási probléma): Keressünk egy G g r á f b a n maximális független p o n t h a l m a z t ! 3. példa (színezési probléma): Színezzük ki ,,jól" a G gráf csúcsait 4 színnel (ha lehet)! 4. példa (prímprobléma): Találjunk egy adott n jegyű számhoz valódi osztót, h a v a n neki (tehát nem prímszám)! 5. példa (párosítási probléma): Adott páros g r á f b a n keressünk olyan független élrendszert, amely az összes ,,alsó" pontot tartalmazza (ha van ilyen)! E példák között érdekes különbség tételére ad lehetőséget az alábbi gondolat. Tegyük fel, hogy vállunkon egy tudós kismadár ül, aki valami rövidet a fülünkbe súghat. A 3., 4. és 5. példa esetén ez a kismadár egyszerűen megoldhatja a feladatunkat azzal, hogy megsúg v a l a m i t : így a harmadik feladatnál azt, hogy milyen színre színezzük az egyes pontokat, a negyediknél az a d o t t szám egy osztóját, az ötödiknél a keresett párosítást. H a m á r megsúgta, szinte nincs mit csinálnunk; annak ellenőrzése, hogy jó is, amit súgott (sose bízhatunk egy madárban), gyerekjáték. Kicsit más a helyzet az 1. és 2. feladat esetében: itt is megsúghatja a kismadár az eredményt, de ha nem bízunk benne, nem segített semmit. Annak ellenőrzésére, hogy két szám szorzata valóban a megsúgott szám-e, nemigen van más mód, mint összeszorozni őket; annak ellenőrzése, hogy az általa megsúgott pontok halmaza maximális független halmaz, nemigen történhet más-

64

képpen, m i n t az összes független halmazok többé-kevésbé ügyes végigvizsgálásával. (Az, hogy a halmaz tényleg független-e, persze k ö n n y e n ellenőrizhető.) Kereső f e l a d a t n a k nevezzük az olyan f e l a d a t o k a t , amelyekben v a l a m i t keresünk, és h a a k i s m a d á r (vagy a szerencse v a g y az intuíció) a keresett dolgot megsúgja, ezáltal a kérdés triviálissá válik (később p o n t o s a b b meghatározást is a d u n k ) . A kereső feladatoknál persze nem t u d h a t j u k , hogy létezik-e egyáltalán az a valami, a m i t keresünk. H a nem, a k k o r a k i s m a d á r nem t u d m i t súgni. H i á b a m o n d j a azt, hogy nines ilyen dolog, ennek ellenőrzése azonos nehézségű az eredeti f e l a d a t t a l . 5. p é l d á n k b a n azonban — ha a k i s m a d á r ismeri a Hali-tételt — (1.2.3. pont), akkor ilyenkor is t u d segíteni. H a nincsen k í v á n t tulajdonságú független élrendszer, akkor meg t u d súgni egy „alsó" pontokból álló h a l m a z t , melynek kevesebb szomszédja van, m i n t eleme. E n n e k helyességét ismét k ö n n y e n ellenőrizhetjük. V a l ó j á b a n arról v a n szó, hogy az 5. f e l a d a t t a l p á r h u z a m o s a n m e g f o g a l m a z h a t u n k egy másik kereső f e l a d a t o t : 5.* példa: Válasszuk ki a d o t t páros gráf „alsó" p o n t j a i n a k olyan részhalmazát, melynek kevesebb szomszédja van, m i n t eleme. Az 5. és 5.* kereső feladatok komplementáris (kiegészítő) fela d a t o k a b b a n az értelemben, hogy k e t t ő j ü k közül mindig pontosan egynek v a n megoldása (ezt m o n d j a ki Hall tétele). É r d e m e s megjegyezni, hogy a 4. p é l d á b a n t á r g y a l t f e l a d a t n a k , a prímség eldöntésének (vagyis valódi osztó keresésének) is v a n komplementáris feladata. E n n e k a megfogalmazása a z o n b a n bonyolult számelméleti eszközöket igényel, így i t t e l t e k i n t ü n k tőle. A 3. f e l a d a t n a k , a gráfszínezésnek eddig nem t a l á l t á k komplementáris f e l a d a t á t (valószínűleg nines is). A 2. f e l a d a t u g y a n a m o n d o t t f o r m á b a n nem kereső feladat, de visszavezethető olyanra. Legyen ugyanis a g r á f n a k n p o n t j a , és t e k i n t s ü k k= 2, . . ., n-re a következő f e l a d a t o k a t : 2.* példa: Keressünk az a d o t t G g r á f b a n k független p o n t o t ! H a ezt a f e l a d a t o t minden 4-ra megoldottuk, a k k o r a legnagyobb olyan i - t tekintve, melyre ilyen h a l m a z t t a l á l t u n k , m e g v a n a keresett maximális független halmaz. Megjegyzendő, hogy a 2* f e l a d a t n a k sem ismert komplementáris feladata. I t t az ideje, hogy p o n t o s a b b a n definiáljuk a kereső f e l a d a t fogalmát. Minden kereső f e l a d a t b a n v a n egy a d a t h a l m a z , valaAIijo: linuibuk

65

milyen alapul v e t t s t r u k t ú r a (gráf a 2*. és 3., egész szám a 4., páros gráf az 5. példában). E z t a s t r u k t ú r á t vagy a d a t h a l m a z t egy 0—1 sorozat f o r m á j á b a n kódolva képzeljük (egész szám esetén 2-es számrendszerbeli alakjában, gráf esetén az adjaceneiamátrixa segítségével stb.). E n n e k a sorozatnak a hosszát nevezzük a konkrét feladat méretének. Minden esetben keresünk v a l a m i t ; ezt a valamit célszerűen ugyancsak 0 — 1 sorozat f o r m á j á b a n képzeljük el. Mint m o n d t u k , a kereső feladatok alaptulajdonsága az, hogy bármely 0 — 1 sorozatról (melyet a kismadár f ü l ü n k b e csivitel) könnyen el t u d j u k dönteni, hogy megfelelő-e. Mit jelent az, hogy „ k ö n n y ű " ? I t t különböző definíciókat alapul véve, a kereső feladat fogalmának különböző változataihoz j u t u n k . Ezek közül egy bizonyult különösen gyümölcsözőnek, és mi i t t esak ezt az egyet t á r g y a l j u k : eszerint „ k ö n n y e n " azt jelenti, hogy adható olyan algoritmus, amely minden n méretű adatsorozat és minden „találgatás" esetén legfeljebb /¿konstans lépésben megmondja, hogy helyesen ,,tippeltünk-e" (természetes, hogy a „találgatás"-ként beadható 0—1 sorozat hossza is legfeljebb n konstans ). Azt az algoritmust, amelyhez v a n olyan c szám, hogy n számú bemenő a d a t esetén az algoritmus lépésszáma nem nagyobb, m i n t nc, a fejezet során effektív algoritmusnak fogjuk nevezni. T e h á t a ,,könnyen"-t úgy értjük, hogy „effektív algoritmussal". Az 5. példában megfogalmazott kereső feladat effektív algoritmussal megoldható; a 2* és a 3. példa a n n y i t legalábbis m u t a t , hogy ilyen algoritmus létezése nem magától értetődő, sőt valószínűleg nem is mindig létezik. A továbbiakban egy Cook, Karp és Levin által kidolgozott, erre vonatkozó elméletet ismertetünk.

2.1.2. A kielégíthetőség problémája — univerzális feladat A „Gráfok diagnosztikája" c. részben a logikai függvények segítségével az o t t tárgyalt problémának általános megfogalmazást t u d t u n k adni. Hasonlóan fogunk itt is eljárni. Most azonban csak bizonyos speciális logikai függvényekre lesz szükségünk. Jelöljenek Ax, ..., An bizonyos állításokat. Ezekkel más állításokat már kifejezhetünk. Emlékeztetünk arra, hogy az „és" szócskát a A jellel, a „ v a g y " szócskát a V jellel, a tagadást föléhúzással jelöljük. E k k o r pl. azt fejezi ki. hogy vagy At, A2 közül legalább egy igaz, vagy A3 nem teljesül. Nevezzük elemi összegnek az olyan formulákat, me-

66

lyeket úgy kapunk, hogy az Ai tulajdonságok és tagadásaik közül bizonyosakat V (vagy) jellel összekapcsolunk. Pl. A^M A Z \J Á 3 \ l A t elemi összeg, de A^il^Az),

A^U^Az)

nem. H a több ilyen elemi összeget az A (és) jellel kapcsolunk össze, akkor egy ú j a b b formulát kapunk, mely akkor és esak akkor igaz, ha a tekintett elemi összegek mindegyike igaz. Pl.: (A.VA^AiAsVAjAlA.VAaVAjAiA.VAj. Az ilyen kifejezést konjunktív normálformának vagy röviden normálformának hívjuk. Az Alt ..., An állítások igaz vagy hamis voltától függően a konjunktív normálforma értéke is lehet igaz vagy hamis. Az Alt ..., An-et a normálforma változóinak nevezzük, az előállításában szereplő elemi összegeket tényezőknek, számukat pedig a normálforma hosszának. Megjegyezzük, h o g y m i n d e n olyan állításfüggvény, a m e l y n e k igaz volta az Ai, . . ., An állítások igaz voltától f ü g g , előállítható, m i n t ezek normálf o r m á j a . P é l d á u l az, h o g y „Ai, Az, A3, Ai közül legalább k e t t ő igaz", így írható:

(Ai V Az v A*) A (Ai v A2 V A a) A (^1V A3 V Ai) A (A2 V A3 V Ai). E g y ilyen előállítás hossza á l t a l á b a n igen n a g y lehet. M o n d h a t n á n k , h o g y azok a „ n a g y o n egyszerű" t u l a j d o n s á g o k , m e l y e k e t rövid normálf o r m á v a l elő lehet állítani. E z a z o n b a n félrevezető l e h e t : pl. a z t a t é n y t , h o g y „ a z Ai, . . ., A2n+i

f o r m á v a l lehet felírni. 2.1. feladat: A d j u n k m e g egy ilyen n o r m á l f o r m á t és bizonyítsuk be, hogy kisebb f o k ú n e m fejezheti k i u g y a n a z t !

A rövid normálformákkal kapcsolatban vetődik fel fő problémánk. Egy normálformát kielégíthetőnek mondunk, ha változóinak van olyan logikai értéke, melyre igaz. Például (A1VA2)AÁ1 kielégíthető: ha Al hamis, A2 pedig igaz, akkor a normálforma logikai értéke igaz. De az (A^AjAAlAi; nem kielégíthető: ha Ax és A2 is hamis, akkor az első tényező, ha van köztük igaz, akkor a második vagy harmadik tényező nem igaz.

67

Most m á r megfogalmazhatjuk a következő fontos problémát: 6. példa: A d o t t egy konjunktív normálforma. Döntsük el, hogy kielégíthető-e ? Vegyük észre a következőt. H a az Ax, . . ., An változók értékeit t u d j u k (egy kismadár megsúgta), akkor a normálforma értékét könnyű megmondani: ha minden tényezőjében van egy igaz tag (tehát egv igaz A: vagy egy hamis A, föléhúzva), akkor az értéke igaz; egyébként hamis. I t t t e h á t ismét egy kereső feladatunk v a n : az Alt ..., An változóknak olyan értékét kell keresni, melyre az adott normálforma igaz. Kereső feladatunk méreteként pl. a __ normálformában előforduló változójelek számát tekinthetjük. így, ha n változó van és m tényező, akkor a méret legfeljebb mn. (Ha a formulát 0—1 sorozatként kódoljuk, akkor a sorozat ennél hosszabb lesz, hiszen pl. egy változójel kódolásához t ö b b 0-ra, ill. l-esre v a n szükség. E z t azonban elhanyagolhatjuk.) H a a normálforma változóinak száma kicsi a méretéhez képest (pl. ha n -- log m), akkor az összes lehetséges logikai értékrendszerek végigvizsgálása elég hatékonynak tekinthető. De ha pl. n^m, akkor ez m á r exponenciálisan sok lépést igényel a feladat méretéhez képest, és ezért más módszerek u t á n kell nézni. A 6. példának az a jelentősége, hogy univerzális kereső feladat, vagyis minden más kereső feladat visszavezethető rá. E z t a 3. és 2* feladat példáján m u t a t j u k be. Az általános bizonyítás az algoritmus fogalmának teljes precizitását igényli és ezért kissé hosszadalmas. Tekintsük először a gráfok 3 színnel való színezhetőségének kérdését. Jelölje Pn Kn ill. ZL azt az állítást, hogy a G gráf i-edik p o n t j a piros, kék, ill, zöld. E k k o r írjuk fel, hogy ( P , - V P ^ ( K - ^ J K j ) A (Z^jZj)

(1)

minden olyan i, j párra, melyre az i-edik és ;-edik pont össze van kötve. Ez azt fejezi ki, hogy a szomszédos pontok színe nem lehet azonos. í r j u k fel t o v á b b á minden i-re, hogy P^K^Z,,

(2)

vagyis hogy az i-edik p o n t n a k van valamilyen színe; t o v á b b á azt, hogy (Pi V •£,•) A (Zj V Ki) A(KÍVPÍ),

(3)

vagyis hogy csak egyetlen színe van. H a az (1), (2) és (3) kifejezéseket A (és) jelekkel összekapcsoljuk. az eredményül k a p o t t kifejezés azt mondja, hogy a P,-. K,-, Z{

68

állítások a gráfnak egy jó színezését írják le. E z a normálforma (melyben P , , Kít Zi változók) akkor lesz kielégíthető, h a a gráfnak v a n jó színezése. Mivel az így k a p o t t kifejezés hossza n pontú gráf esetén 2w2-nél biztosan nem több, minden olyan algoritmus, mely effektíven megoldja a 6. példában megfogalmazott problémát, a gráfok 3 színnel való színezhetőségére is választ ad. E b b e n az értelemben tekinthetjük a 3. példát a 6. példára visszavezethetőnek. Nézzük a 2.* példát: a d o t t egy G gráf és egy k természetes szám, keressük meg G-nek egy k elemű független p o n t h a l m a z á t ! Tegyük fel, hogy kiválasztottunk egy k elemű független S halmazt. Sorszámozzuk meg S elemeit, és jelölje Btj az alábbi állítást: ,,A gráf i-edik p o n t j a /5-nek ;-edik p o n t j a . " ( l ^ i s w , 1 E k k o r a következők teljesülnek: B^MB^M . . . \ j B n ]

(4)

minden l ^ j ^ k esetén (vagyis /5-nek van j-edik eleme): BkjVEy

(5)

minden 1 j - j ^ k , eleme van),

l^i^i^n-ve

(vagyis /5-nek esak egy j-edik

BihVÉih minden 1 ^i^n, és B,lh\lBÍ2h

(6) 1

esetén (vagyis S elemei különbözőek), (7)

minden olyan l s i ^ ^ m , 1 indexrendszerre, melyre az i 1 -edik és i 2 -edik p o n t egymással össze v a n kötve. (Ez azt jelenti, hogy 8 független ponthalmaz). H a az összes (4), (5), (6) és (7) alatti kifejezéseket az A jellel összekapcsoljuk, egy olyan K kifejezést kapunk, amely a Bt] állítások n o r m á l f o r m á j a és amely azt fejezi ki, hogy az S egy k elemű független halmaz. Megfordítva, ha a _B,y-ket változóknak t e k i n t j ü k , a K normálforma akkor és esak akkor elégíthető ki, ha g r á f u n k b a n v a n k elemű független halmaz. Észrevehetjük, hogy a K normálforma hossza kisebb, m i n t nl. í g y beláttuk, hogy a pakolási probléma is visszavezethető a normálformák kielégíthetőségének kérdésére. A két tárgyalt visszavezetés a l a p j á n t a l á n érezhető, hogy bármely kereső feladat visszavezethető a normálformákra vonatkozó kielégíthetőségi problémára. • Tétel: A kielégíthetőség problémája univerzális kereső vagyis minden kereső féladat visszavezethető rá.

feladat,

69

2.2. Nehéz kombinatorikai feladatok Mivel a k o n j u n k t í v normálforma fogalma igen általános logikai fogalom, nem meglepő, hogy segítségével megadható a kereső feladatok közös megfogalmazása. Meglepőbb tény, hogy más univerzális kereső feladatok is vannak, mégpedig igen egyszerűek: pl. a pakolási, a gráfszínezési, a fedési és a hátizsák-probléma. E z t m e g m u t a t j u k az első kettőről. Módszerünk most az lesz, hogy a normálformák kielégíthet őségi kérdését vezetjük vissza ezekre.

2.2.1. Közvetlen átfogalmazás Legyen t e h á t adva egy K konjunktív normálforma; konstruálni fogunk egy olyan G gráfot, amely akkor és csakis akkor színezhető ki 3 színnel, ha K kielégíthető. A konstrukciót az

{xL Vz 2 Vx3 Vx4 Vx5) A A{xx\J x2\J x3\J xA\! x5)

Vx z ) A (x2 Vx 3 ) A (x3 Vx t ) A (8)

forma példáján m u t a t j u k be, de elvégezhető volna ugyanígy bármely más konjunktív normálforma esetén is. Ehhez a logikai feladatot kombinatorikai f e l a d a t t á fogalmazzuk át. Vegyünk fel 10 pontot, és betűzzük meg őket £LZ ^jj x3, xv x-, x[, x~2, x^, xl, xl betűkkel. Az a d o t t (8) kifejezés minden tényezőjéhez képezzük azon pontok halmazát, melyek jele a tényezőben fellép. Kerítsük körül ezeket a p o n t o k a t (12. ábra). Kössük össze t o v á b b á B/Z > ) p o n t p á r t egy éllel. Mármost, ha az xrk logikai értéke olyan, hogy (8) igaz, akkor tekintsük mindazokat a pontokat, melyek „jele" igaz (tehát xrt, ha Xj igaz és a^-t, ha xj nem igaz). Ezekről a következőket állapítjuk meg:

70

(a) számuk annyi, mint a változóké (esetünkben 5); (b) bármely {xt, xt) párból és bármely körülkerített halmazból t a r t a l m a z n a k elemet. A példánkon az {xv x2, x3, xt, xl) halmaz ilyen tulajdonságú. Megfordítva, ha ki t u d j u k választani az a d o t t p o n t o k n a k egy olyan részhalmazát, melyre (a) és (b) teljesül, akkor a (8) kifejezés kielégíthető. 2.2. feladat: M u t a s s u k meg, h o g y ezzel a kielégíthetőségi f e l a d a t o t lényegében a fedési f e l a d a t r a (1.4.3. p o n t ) v e z e t t ü k vissza.

2.2.2. A háromszín-probléma Most olyan gráfot konstruálunk, melynek 3 színnel való színezhetősége egyenértékű lesz az eredeti (8) normálforma kielégíthetőségével. Ez hosszabb, bonyolultabb és kevésbé „természetes" konstrukció lesz, m i n t az előbbi volt. • Tétel: A normálformák kielégíthetőségének hető a gráfok 3 színnel színezhetőségének utóbbi is univerzális kereső feladat.

feladata visszavezetfeladatára, tehát az

Ennek bizonyításához abból a konstrukcióból indulunk ki, amit az 1.2.1. p o n t b a n a (8) kifejezésnél használtunk és a 12. ábrán látható. Felvesszük t e h á t pontokat, ELZ 3/j es Xj' p o n t o k a t éllel összekötjük, és körülkerítjük a normálforma egy-egy tényezőjében előforduló pontok halmazait. Vegyünk fel t o v á b b á két ú j pontot, M-t és v-t. Kössük össze ezeket egymással, t o v á b b á v-t minden xt, xt ponttal. T a r t s u k meg az (xi, x:) éleket. Tekintsünk egy körülkerített halmazt. H a ez páratlan elemszámú, mint például {xv x2, x3, xt, xs}, akkor vegyünk fel egy kettővel t ö b b esúesú sokszöget, és kössük össze két csúcsát w-val, a többit pedig rendre a körülkerített pontokkal. H a a körülkerített halmaz páros elemszámú, mint pl. {xv x2}, akkor egy eggyel t ö b b esúesú (tehát ismét páratlan) sokszöget veszünk fel, egy csúcsát w-val, a többit rendre a körülkerített pontokkal kötjük össze. í g y tehát egyG gráfot szerkesztettünk (13. ábra). • Állítás: A G gráf akkor és csakis akkor színezhető ha az eredeti problémánkra a válasz igenlő.

3

színnel,

Tegyük fel először, hogy G kiszínezhető 3 színnel, m o n d j u k pirossal, kékkel és zölddel. Legyen pl. u kék, v pedig zöld. E k k o r

71

az eredeti pontok között zöld színű nem lehet, m e r t mind össze van kötve v-vel. E z é r t az (xt, írj) párból — melyeket él köt össze — az egyik piros, a másik kék. Másrészről vegyük észre, hogy nem lehet egyetlen körülkerít e t t halmaznak sem minden eleme kék. Ez ugyanis azt eredményezné, hogy a hozzá tartozó páratlan sokszögben kék pont nem fordulhatna elő, hiszen annak minden csúcsa vagy w-val, vagy egy körülkerített p o n t t a l össze van kötve. Márpedig két színnel egy páratlan sokszög nem színezhető ki. Ez az ellentmondás bizonyítja, hogy nem lehet egyetlen körülkerített halmaznak sem minden eleme kék színű. Tehát a kék színű pontok olyanok, hogy minden (x-t, xt) párból az egyik közéjük tartozik, de nem tartozik egyetlen körülkerített halmaznak sem minden eleme közéjük. Igv a piros pontok kielégítik az (a) és (b) feltételeket. Megfordítva, tegyük fel most, hogy van a pontoknak olyan halmaza, mely eleget tesz az (a) és (b) feltételeknek. Ebből kiindulva megszínezzük G-t 3 színnel. Az a d o t t halmaz p o n t j a i t színezzük pirosra, az x,, x^ pontok közül a többit kékre, u-t kékre, v-t zöldre. Azt kell m e g m u t a t nunk, hogy ez a színezés [mely az (Xj, .rj) és a i'-ből kiinduló éleken nyilván jó] kiterjeszthető a legutoljára felvett páratlan sokszögekre.

72

Legyen pl. (xv x2, ..., x2k) egy körülkerített halmaz, és (y}, ... ..., y2k+a hozzá tartozó páratlan sokszög (a páratlan elemszámú körülkerített halmazokhoz tartozó sokszögre a kiterjesztés hasonlóan tehető meg). Az xv ..., x2k pontok között (b) feltevésünk szerint v a n piros, legyen a legelső piros xn és tegyük fel, hogy ¿ S 2 . Színezzük yrt kékre, m a j d színezzük ki az yl+1, . .., y2k+1, í/ 1 yt_y p o n t o k a t egymás után. IVIinden esetben csak két szín v a n kizárva; az előző y-é és a szomszédos x (vagy u) ponté. í g y mindig t u d u n k megfelelő színt találni. Csak abból lehetne baj, ha a végén és y, azonos színűek lennének. De ?/,_] színe nem kék, mert xhl kék; és y, is kék, t e h á t ez a nehézség n e m lép fel. Az i = l eset teljesen hasonlóan intézhető el. Ezzel beláttuk, hogy G akkor és csak akkor színezhető ki három színnel, h a az (a), (b) feltételeket kielégítő halmaz létezik. Bebizonyítottuk tehát, hogy egy gráf 3 színnel való színezhetősége univerzális kereső feladat. 2.3. feladat: A d j u n k e f f e k t í v a l g o r i t m u s t a n n a k eldöntésére, h o g y egy gráf kiszínezhető-e k é t színnel. 2.4. feladat: I g a z o l j u k , h o g y m i n d e n & s 3 - r a a n n a k eldöntése, h o g y egy g r á f kiszinezhető-e k színnel, univerzális kereső f e l a d a t .

2>2.3a A pakolási probléma Fogalmazzuk á t most a színezési feladatot pakolásivá. Egy a d o t t G gráfról (14. ábra) el a k a r j u k dönteni, hogy k színnel színezhetők-e a pontjai. Legyen G pontjainak száma n. Nyilván csak a 3 ^ k ^ n eset érdekes.

14. ábra Vegyük fel G-t k példányban: &'(1), . . . , G(k), és kössük még össze a különböző példányok egymásnak megfelelő p o n t j a i t (15. ábra). Legyen az így nyert gráf H . 9 Állítás: G akkor és csakis akkor H-ban van n független pont.

színezhető

ki k színnel,

ha

Tegyük fel először, hogy G kiszínezhető k színnel: nevezzük ezeket l-es, 2-es . . . színnek. Válasszuk ki 6-'(1)-ből az l-es, &'(2)-ből a 2-es, . . ., fíW-ból a k-as színű p o n t o k a t . Az így kiválasztott pon-

73

tok H-ban függetlenek. T o v á b b á G bármely x p o n t j á n a k megfelelő pontok közül egyetlenegyet választottunk ki, hiszen x-nek egyetlenegy színe volt. Ezért a kiválasztott pontok száma n. Ezzel beláttuk, hogy ha G kiszínezhető k színnel, akkor H - b a n v a n n független pont. Megfordítva, tegyük fel, hogy H - b a n v a n egy n elemű független ponthalmaz. Jelöljük ezt $-sel, és vizsgáljuk meg, hogyan helyezkedhet el 8 a H g r á f b a n . G minden egyes x p o n t j á n a k H - b a n k p o n t felel meg. Ezek páronként össze vannak kötve (így konstruáltuk H-t), ezért közülük legfeljebb egy t a r t o z h a t /5-hez. De /5-nek u g y a n a n n y i p o n t j a van, m i n t G'-nek, így t e h á t G minden egyes p o n t j á n a k kell is, hogy megfeleljen egy /5-beli pont. Színezzük ki G-t a következőképpen: G egy x p o n t j á t fessük ki az i színnel, ha az x-nek megfelelő H-beli pontok közül 8 éppen a 6r w -belit tartalmazza. Igen könnyű belátni, hogy az így definiált színezés jó, azaz az egymással összekötött G-beli pontok színe különböző. Igazoltuk t e h á t , hogy ha H - b a n v a n n független pont, akkor G kiszínezhető k színnel. L á t j u k , hogy a gráfszínezési probléma visszavezethető a pakolási feladatra (a visszavezetés elég egyszerű is volt). Ezért a pakolási probléma is univerzális kereső feladat.

2.3. Áttekintés Foglaljuk össze a kereső feladatokra vonatkozó ismereteinket! I. A normálformák kielégíthetőségének problémája univerzális kereső feladat. Ezen azt é r t j ü k , hogy minden kereső feladat vissza-

74

vezethető rá. Pontosabban, minden kereső feladathoz szerkeszthető egy olyan normálforma (méghozzá a szerkesztést egy effektív algoritmus végzi), amely akkor és csak akkor elégíthető ki, h a az eredeti kereső feladatnak v a n megoldása. E normálformát kielégítő változóértékekből az eredeti kereső feladat egy megoldása „visszaszámolható". Ez az állítás az algoritmus fogalmának pontosítása u t á n teljes általánosságban igazolható. E könyvben speciális példákon m u t a t t u k be a visszavezetést. I I . Vannak más univerzális kereső feladatok is, pl. a pakolási vagy gráfszínezési probléma. E g y feladatról azzal lehet bizonyítani, hogy univerzális, hogy — közvetve vagy közvetlenül — visszavezetjük r á a normálformák kielégíthetőségének problémáját. A visszavezetések sokfélék, minden egyes ú j a b b feladat esetén ú j a b b ötletet igényelnek. Vannak olyan feladatok is, melyekről azt hisszük, érezzük, hogy univerzálisak, de a megfelelő visszavezetést még nem sikerült megtalálni. A legismertebb példa erre az izomorfia-probléma: K é t gráfot izomorfnak nevezünk, ha „lényegében azonosak", vagyis — pontosan — p o n t j a i k úgy feleltethetők meg egymásnak, hogy két pont akkor és csakis akkor v a n összekötve az egyik gráfban, ha a megfelelő két pont össze v a n kötve a másikban. A probléma : döntsük el, hogy két a d o t t gráf izomorf-e. 2.5. feladat: Az i z o m o r f i a - p r o b l é m a n a g y o n k ö n n y ű n e k t ű n h e t . D ö n t s ü k el a 16. á b r á n l á t h a t ó gráfokról, m e l y e k i z o m o r f a k k ö z ü l ü k ! 2.6. feladat: M u t a s s u k meg, h o g y az i z o m o r f i a - p r o b l é m a is kereső feladat.

H a valaki eléggé sokat keresett izomorfia-tesztet (vagyis effektív algoritmust két gráf izomorf voltának eldöntésére), akkor egyre inkább megerősödik az a meggyőződés, hogy ez a feladat is a legnehezebb kereső feladatok közé tartozik; hogy azonban univerzális lenne, azt eddig nem sikerült bebizonyítani. I I I . Abból, hogy bármely kereső feladat visszavezethető bármely univerzálisra, következik, hogy h a az univerzális feladatok valamelyike megoldható effektív algoritmussal, akkor minden más kereső feladat is. Általánosan elfogadott (de nem bizonyított) hipotézis, hogy az univerzális kereső feladatok nem oldhatók meg effektív algoritmussal. Ilyenformán ha egy kereső feladatról be lehet bizonyítani, hogy univerzális (vagyis a m á r ismert univerzális feladatok valamelyikét vissza lehet vezetni rá), akkor úgy tekinthető, hogy az effektív algoritmussal való megoldhatatlanságát is igazolták. (Ez nem azt jelenti, hogy a feladat megoldhatatlan, hanem azt, hogy a nemeffektív — általában exponenciális — algoritmusok között érdemes minél gyorsabbat, jobbat keresni.) IV. L á t t u n k olyan kereső feladatokat (pl. a párosítási feladatot), melyek megoldhatók voltak effektív algoritmussal. Ezek

75

16. ábra

természetesen nem voltak univerzálisak. A megoldó algoritmusok viszonylag mély kombinatorikai meggondolásokon alapulnak és általános módszer az ilyen algoritmusok keresésére nincsen. V. L á t t u n k olyan kereső feladatokat, melyeknek volt komplementáris feladatuk, azaz egy olyan kereső feladat, mely azonos bemenő adatokhoz másvalamit keres, és az utóbbi akkor és csakis akkor oldható meg, ha az eredeti nem. K i m u t a t h a t ó , hogy ha egy kereső feladatnak v a n effektív megoldó algoritmusa, akkor v a n komplementáris feladata. Igaz-e ez megfordítva? Nem t u d j u k . Komplementáris feladatot találni gyakran könnyebb, m i n t effektív megoldó algoritmust, és így jó volna, ha az algoritmus kereséséhez a m á r megtalált komplemen-

76

tár is feladatot fel lehetne használni. Ilyen eredmények azonban nincsenek. VI. A 4. fejezetben ismertetjük a szovjet Levin algoritmusát, amely a kereső feladatokat bizonyos értelemben leggyorsabban oldja meg. Sajnos, nem t u d j u k , mennyi ez a leggyorsabb: exponenciális vagy polinomiális. A kereső feladatok vizsgálatának legfontosabb eredménye az, hogy általánosságban t u d t a fölvetni bizonyos feladatosztályok megoldó algoritmusainak a problémáját, és sok nemtriviális példa alapján érdekes és sokatmondó fogalmak megalkotását segítette elő (pl. univerzális kereső feladat vagy komplementáris feladat). Fontos, hogy érdekes és nehéz problémákat, sejtéseket is meg lehetett fogalmazni. Ez az elmélet ugyanakkor nagyon egyszerűsít, hiszen az algoritmusokat esak aszerint különbözteti meg, hogy a lefutásukhoz szükséges idő a feladat méretének (fix kitevőjű) h a t v á n y á n á l nem nagyobb-e. K é t algoritmus, amelyek közül az egyik (n méretű feladaton) n log n lépésig, a másik n12 lépésig dolgozik, nagyon is különböző hatékonyságú. Másrészt egy 1,2" lépésszámban dolgozó algoritmus tényleges problémák (tehát kis n) esetén sokkal használhatóbb lehet, mint egy 1000 w12 lépésszámú. Általánosságban mégis megállapítható: az, hogy mennyit é r t ü n k egy feladat hátteréből, m a t e m a t i k a i finomságaiból, jól mérhető azzal, hogy t u d u n k - e rá effektív algoritmust adni. Azok az eredmények, melyeket e fejezetben ismertettünk, esak az első lépéseket jelenthetik a feladatokat megoldó legrövidebb algoritmusok elméleti vizsgálatában, de m e g m u t a t j á k , hogy ilyen elmélet kidolgozható, és ezáltal az algoritmuselmélet egyik jövőbeli fejlődési irányát tűzik ki.

77

3. fejezet

Algebrai algoritmusok

Aki hagyományos középiskolai m a t e m a t i k a o k t a t á s b a n Tészesült, olyan benyomást szerezhetett, hogy a m a t e m a t i k a algoritmusok gyűjteménye. Ezeknek az algoritmusoknak nagy részét m á r a régi görögök felfedezték, és a t a n u l t eljárások az a d o t t problémák megoldására a legjobbak, esetleg az egyedül ésszerűek. Ez a benyomás t ö b b szempontból is hibás. Először, m e r t mint a Bevezetésben hangsúlyoztuk, a m a t e m a t i k a nem algoritmusok gyűjteménye, hanem annál jóval több. Másodszor: az iskolában t a n u l t algoritmusok nem is olyan régiek. (Az algoritmus szó a I X . évszázadban élt Mohamed ibn Musa al Chvarizmi egyik könyvének latin címéből ered, amelyben az alapműveleteket és az Indiából származó tízes számrendszert ismerteti. Az algebra szó al Chvarizmi másik „Hasib Aldzsabr V a l m u k a b a l a " című könyvéből származik.) A tizedes törtekkel való számolás szabályait például (különböző számrendszerekben) sokszor felfedezték a törté-

79

nelem folyamán, de alkalmazásuk esak a 17. században t e r j e d t el. Az osztás elvégzése a 16. században még művészetnek számított és segédeszközök sokaságát vették hozzá igénybe. Érdekes módon a szorzás és osztás m a szokásos m ó d j a körülbelül egyidős a logaritmustáblával, mely ezt a két műveletet sok esetben feleslegessé teszi. Harmadszor, és ez lesz fejezetünk t é m á j a : az iskolában tanult algoritmusok nem optimálisak. Talán igaz, hogy legegyszerűbb megtanulni őket és nyomon követni működésüket, de az utóbbi időben a legősibb számolási feladatok megoldására a közismertnél sokkal gyorsabb eljárások is születtek. Az „algoritmus" szóról például legtöbbünknek az euklideszi algoritmus (két szám vagy polinom legnagyobb közös osztójának meghatározása) j u t az eszébe. Ma m á r Eukleidész módszerét is egy gyorsabb v á l t o t t a fel. Szeretnénk most megismertetni az olvasóval n é h á n y a t az ú j algoritmusokból, és azokból a vizsgálatokból is, amelyek az optimalitás igen nehéz kérdésével foglalkoznak. Az ú j algoritmust nem azért ismertetjük, mert szerintünk máris ezt kellene alkalmazni, legalábbis a gépi számolásban. Az eljárás előnyei rendszerint csak nagy számokra, mátrixokra stb. érvényesülnek, viszont a leírása (program) bonyolultabb, a végreh a j t á s ellenőrzése még nem olyan kidolgozott, mint a régié. E g y ténylegesen alkalmazott algoritmusnak sok követelményt kell kielégítenie. Mi rendszerint esak a szükséges műveletek számával foglalkozunk, és nem vizsgáljuk, mekkora a tárigény, hogyan halmozódnak az esetleges számolási hibák stb. K ö n n y e n lehet, hogy a inost legjobbnak t a r t o t t eljárások valamilyen szempontból rosszul vizsgáznak és így a gyakorlatban másoknak a d j á k át a helyüket.

3.1. Gyorsabban is lehet szorozni E b b e n a részben módszereket m u t a t u n k be számok, mátrixok és polinomok szorzására.

3.1.1. Nagy számok szorzása Tegyük fel, hogy azt a nem túl gyakorlati feladatot k a p t u k : számoljuk ki ?ie értékét 40 értékes jegy pontossággal! Az iskolai módszer az lenne, hogy vesszük a számokat 40 értékes jegy pontossággal :

80

7i= 3,14159 26535 89793 23846 26433 83279 50288 41972. e = 2,71828 18284 59045 23536 02874 71352 66249 77572 összeszorozzuk őket, m a j d a k a p o t t 80 jegyű s z á m o t 40 j e g y ű r e k e r e k í t j ü k . í g y n y i l v á n 4 0 2 = 1600 elemi m ű v e l e t e t kell végeznünk. ( M e g t a k a r í t h a t j u k a számolásnak körülbelül a felét, h a a részlets z o r z a t o k a t esak a m a j d a n i 42-edik tizedesjegyig számoljuk.) H a k é t egész számot, m o n d j u k u-t és w-t a k a r u n k összeszorozni, ezek rendszerint valamilyen (pl. tízes) számrendszerben felírva állnak rendelkezésünkre: u = um_l. . .u1u0 = u0 + 1 0 ^ + 100w2 + . . . v = v„_1. . .vlv0 = v0+\Qv1+

100f2+ . . . .

Az e r e d m é n y t uv = w = wm+n_1.

. .w1w0 = w0+ 10^+

...

a l a k b a n kell megadni. A h a g y o m á n y o s módszer ehhez mn d a r a b elemi m ű v e l e t e t (tehát olyat, a m e l y e t egyjegyű, azaz 10-nél kisebb s z á m o k k a l végzünk) követel. J o b b eljárást először 1962-ben, a szovjet Karacuba fedezett fel. T e g y ü k fel, hogy u is, v is 2??, jegyű.

E z e k e t a s z á m o k a t így is í r h a t j u k : u=lff>U1+UQ,

w=10nF1+F0,

ahol U1 = u2n_1.. ,un az u ,,bal fele", Ua=un_x. • •> uo fele", és u g y a n í g y F 1 = w2n_1. . .«„, F 0 = w n _ 1 .. ,v0. Most a szorzatot így í r h a t j u k : uv= 1G*>U1V1+ 10"(£7 0 F 1 + UXV0) +

az

u

>»j°bb

U0V0.

E n n e k a kifejezésnek a k i s z á m í t á s á b a n a négy U l V j szorzat követeli a legtöbb m ű v e l e t e t . A d ö n t ő észrevétel az volt, hogy IJ 0 V x + + U^Vq kiszámításához elég egyetlen t o v á b b i szorzás: U0V1+

uxv0 =(Ul-

U^V^VJ

+

U^+U.V,.

Végül is t e h á t uv így í r h a t ó : « » = (10*" + 10")I7 1 F 1 + Í O " ^ - Ü0)(V0-Vx)

+ (10» + 1)Z7 0 F 0 .

Ezzel a f o r m u l á v a l k é t 2n jegyű szám szorzását h á r o m (és n e m négy) n jegyű számok k ö z ö t t i szorzásra r e d u k á l t u k . K ö n n y ű u t á n a számolni, hogy a felmerülő összeadások együttesen még legfeljebb ú Algoritmusok

Q4

9« elemi műveletet tesznek ki. H a T(n)-nek jelöljük a két n jegyű szám szorzásához szükséges elemi műveletek számát, akkor t e h á t T(2n)^3T(n)

+ 9n.

(1)

Nyilván T ( l ) = l . Alkalmazzuk az (1) képletet többször egymás után! T(4n) s T-T (a) + 3 • 9« + 2 • 9)i = '¿2T(n) + 9n(3 2 - 2 2 ), T(8n) ^ íi3T{a) + 9?i(3 3 - 3• 22) + 9• 2hi = 3 3 T ( n ) -f 9(3 3 - 2 3 )n. Általában T(2kn)

ZkT{n) -•- 9w(3': - 2").

(2)

Legyen n= 10, fc = 2! E k k o r ? 7 (40)rs9 7 7 (l0)-t-450. Mint t u d j u k , !F(10)^ 100. Ezért Í F ( 4 0 ) 1 3 5 0 . Ez persze még szerény megtakarítás az 1600-hoz képest. Eredeti feladatunkban, ahol a szorzatot nem 80, esak 40 jegy pontossággal kell ismerni, 8—900 művelet is elég volt. Minél nagyobbak a számok, annál nagyobb arányú a nyereség. K é t n jegyű számot e módszerrel lépésben szorozhatunk össze, az eredeti n 2 helyett. 3.1. feladat: B i z o n y í t s u k be a (2) egyenlőtlenséget és i n n e n a T(n) s 27H]0!;2 3 egyenlőtlenséget! 3.2. feladat: A l k a l m a z z u k szorzására!

Karacuba

módszerét

két

16-jegyű

szám

Karacuba módszerét azóta messzemenően általánosították. A ma ismeretes legjobb algoritmust a svájci Schönhage és Strassen adták meg. Ez a véges Eourier-transzformáltak felhasználásán alapul, és csak cn-\og n-\og log n számú műveletet igényel. Az általánosítás lényegét az a technika képezi, amelyet a polinomok szorzásáról szóló 3.1.3. p o n t b a n m u t a t u n k be.

3.1.2. Nagy mátrixok szorzása Olyan nagy számok, melyek összeszorzásakor Karacuba módszere lényeges egyszerűsítést jelentene, talán nem is léteznek! Az ismert világmindenségben található elemi részecskék száma nem nagyobb, mint 10100. Gyakran kell viszont nagy mátrixokkal műveleteket végezni. A 100 X 100-as mátrixok szorzása, ilyen

82

méretű egyenletrendszerek megoldása mindennapos feladat, és csak a számítógépek kapacitása korlátozza a méretek növelését (például statikai számításokban vagy a gazdasági m a t e m a t i k á b a n ) . A mátrixszorzás bonyolultságának becsléséhez kizárólag az egyes mátrixelemekkel végzendő algebrai műveleteket számoljuk össze. Már az előző fejezetben sem számoltuk azokat a műveleteket, amelyeket az algoritmus megszervezése (számok ide-oda tologatása stb.) igényel. Ezek figyelembevétele az általunk vizsgált esetekben a műveletszám nagyságrendjén nem változtatna, de módosítaná a képet, mégpedig — különösen a mátrixszorzás esetén — a használt számítógéptől függően. (Ha nagy a mátrix, akkor esetleg el sem fér egyszerre a központi tárban.) Tegyük fel, hogy össze akarunk szorozni két nXn-es m á t r i x o t ; legyenek ezek

«ii •

*





K

P* • •

L

K



A =

és B =

; )

(J = 0, . - ., n - 1).

3,6. feladat: B i z o n y í t s u k b e a f e n t i képletek helyességét!

A másik tulajdonság a definíciókból azonnal következik: két számsorozat konvolúciójának viszonylag bonyolult művelete a transzformált sorozatokon egy sokkal egyszerűbb műveletben jelenik meg. H a (c0, . . ., c2n_2) az (a0, . . ., an^) és (b0, . . ., &„_-,) sorozatok konvolúciója, és a Fourier-transzformálás során választott r nem kisebb, mint 2n— 2, akkor c0 = «. c1 = al'j1, . . ., cr_-j — ar_1br__1. A konvolúciót t e h á t így végezhetjük: transzformálás, r d a r a b szorzás, visszatranszformálás. Az eddigiekből az következik, hogy ha a 3.1.3. p o n t b a n ismertetett interpolációs módszerben a ?-k = £k értékeket választjuk, akkor a nem számolt műveletek számát is kb. n 2 -re szoríthatjuk. (Feltételezzük, hogy a komplex egységgyökök a kívánt pontossággal rendelkezésünkre állnak. Nem változtatna azonban az el-

88

végzendő műveletek számának nagyságrendjén, ha azokat is m a g u n k n a k kellene meghatározni). Ez az n2 számú művelet elsősorban a Powier-transzformáláshoz kell. Nem lehet-e gyorsabban transzformálni? Az amerikai Cooley és Tukey megadtak egy eljárást, amely a Powier-transzformáltat cr log r számú művelettel kiszámolja. Most b e m u t a t j u k ezt a — gyorsasága és egyszerűsége m i a t t nevezetes és széles körben alkalmazott — módszert. Jelöljük K{r)-re\ az r-edík egységgyökökkel végzett Fouriertranszformáláshoz szükséges algebrai műveletek minimális számát. Legyen a0, . . ., a2j._x egy 2r elemű sorozat. E sorozat transzformálásához az e2r = e2r egységgyököket használjuk. Ezzel a jelöléssel ák = a0 + aieÍ. + a2E%-(-.. . + a2r_1e%r~1'>k. Bontsuk ezt az összeget két részre, különválasztva a páros és a páratlan indexű t a g o k a t : ák = a0 + a2efr + atei* + . . . + axe\r + a 3 e|í + . . . =

(9)

= a 0 + a 2 ( 4 ) * + « 4 ( 4 ) 2 ' c + • • • + 4 [ O i + a8(4)* + a S (4r) a *+ • • •]• Vegyük most észre, hogy é|r = e r . E z é r t (9) a következő rekurzív formuláit a d j a : F^\a0,

...,

a2r_!) = Fp(a0,

+ 4 í f K . a ,

a2, .. ., a2n_2) + (1())

Vi)-

(10) alapján a szükséges műveletszám, K(2r), így becsülhető: e|r, • • f-lr^1 számolása 2r —2 d a r a b szorzást követel. A (10) jobb oldalán álló két r-ed rendű Fourier-transzformáláshoz definíció szerint 2K(r) művelet kell. (10) jobb oldalán még egy szorzás és egy összeadás van, ez, 2r-szer véve (hiszen minden i - r a el kell végezni), további 4r művelet. Ezért K(2r) ^ 2K{r) + 6r. Mivel Ül(1) = 0, innen a (11) képletet m-szer mazva,

(11) e g y m á s u t á n alkal-

K(2'n)^3m-2m. H a tehát r a 2-nek egy egész kitevőjű h a t v á n y a , akkor K(r) s 3r log 2 r.

89

H a r nem 2m alakú szám, akkor mindig megtehetjük, hogy az a0, . . . , ar_x sorozatot nullákkal an, . . ., as_y sorozattá egészítjük ki, ahol s egy 2-hatvány, m a j d a fenti módon egy s-ed rendű Powríer-transzformáeiót h a j t u n k végre.

3.2. Osztás helyett szorzás Nem nyilvánvaló, hogy az előző részben ismertetett szorzási algoritmusok az osztást is könnyebbé teszik. M e g m u t a t j u k ezért, hogyan lehet az osztás feladatát is szorzásokkal megoldani, számok, polinomok és mátrixok esetében. Részletesen foglalkozunk az egyik legrégibb nemtriviális algoritmussal, az euklideszi algoritmussal is. Ez az eljárás sok osztást tartalmaz, ezért hasznos, ha ezt a műveletet gyorsítani t u d j u k . Figyelmet érdemel az a módszer is, amellyel ebben az algoritmusban további lényeges javítást értek el: elemezni kell, hogy az egyes lépések végrehajtásához milyen információra van valóban szükség, és az információt nem tartalmazó tagoktól meg kell szabadulni.

3.2.1. Számok osztása H a u és v a d o t t számok, akkor v/u-t általában csak bizonyos pontosságig számolhatjuk ki. H a u, v egész számok, akkor esetleg kíváncsiak vagyunk a „ h á n y a d o s " és a „ m a r a d é k " értékére is. A „ h á n y a d o s " nem más, m i n t [v/u], azaz v/u egész része, ezért lényegében itt is v/u közelítő értékét keressük. Az iskolában tanult osztási módszer nem tekinthető szigorú értelemben algoritmusnak, m e r t találgatás is kell hozzá. Ez a hiányosság azonban könnyen kiküszöbölhető, és így olyan osztási algoritmusunk lesz, amely ahhoz, hogy az n jegyű u és v számok hányadosát n értékes jegy pontossággal megadja, cn2 elemi műveletet használ fel. Most leírjuk Newton módszerét 1 /u kiszámítására, ami a gyors szorzási módszerrel kombinálva a gyors osztást is lehetővé teszi. Tegyük fel az egyszerűség kedvéért, hogy a 2-es alapú számrendszerben dolgozunk. Azt is feltehetjük, hogy az u szám, amelynek a reciprokát keressük, 1 és 2 közé esik: 1 s í ? í £ 2 . Ha ez nem így volna, pl. u = 0,001 111 lenne, akkor — akárcsak a közönséges osztásnál — megtehetjük, hogy a „kettedesvesszőt" három hellyel jobbra toljuk, 1,111 reciprokát számoljuk ki, m a j d az eredményben a ..kettedesvesszőt" megint három hellyel jobbra toljuk. H a

90

akkor nyilván 1 / 2 ^ 1 / w S l . Vegyük ezért l / u első megközelítésének 3/4-et: xy = 3/4. H a m á r v a n egy m-edik xm közelítésünk 1/w-ra, akkor a következő közelítést, £ m+1 -et, így számoljuk : x

=

m+l

x m

{ 2 —

u x

m ) >

i

1

)

tehát pl. ha a; 1 = 3/4, akkor 3 /

3 4

x2 = — | 2—- u Győződjünk meg róla, hogy xm+1 valóban közelebb van 1/w-hoz, mint xm volt! Tegyük fel, hogy xm=-

+ e, t e h á t

IC

xm

az

1/w-t

e hibával közelíti meg. Helyettesítsük ezt az (1) képletbe: m+1

"

1

1

\í. II

u

(1

^

1

\u

II

u

H a t e h á t xm hibája e volt, akkor xm+1 m i n t 2 e2. H a xm-at

h i b á j a ue2, ami kisebb,

ismerjük, akkor 1/w-nak ^lényegében j^log^-J

értékes jegyét ismerjük. Jelöljük következik hogy

darab

l o g ^ •t L m -mel! A fentiekből

Lm+l^2Lm-l. Mivel L j S 2, ezért 22 — 1, m

Lm^2

m 2

2 3 - 2 — 1, m 3

— 2 ~ — 2 ~ — . . . — 1 = 2m — 2 m _ 1 + 1 > 2 m _ 1 .

Ezért az m-edik közelítés értékes jegyeinek száma kb. 2 m _ 1 . H a az l/u-t n értékes jegy pontossággal a k a r j u k tudni, akkor ezek szerint elég xk-t kiszámolni, ahol ¿ = f l o g 2 » 1 + 1 . Minden iterációban, azaz minden ú j a b b közelítés kiszámolásakor, 2 m -nél nem hosszabb számokkal két darab szorzást és kivonást végzünk. Az ehhez szükséges műveletek száma m i n t t u d j u k , c-2mrn log 2 m. E z é r t az összes műveletek száma legfeljebb k

c 2 2 m m log 2 máronként relatív prím m v . . ., m k számra van szükség. A (modjí) vett osztás, ez a sok moduláris eljárásban szereplő alapművelet, szintén az eukleidészi algoritmus segítségével végezhető el. Mielőtt egy további, kevésbé triviális példát m u t a t n á n k alkalmazására, lássuk Eukleidész algoritmusát! Célunk két természetes szám, mondjuk «„ és a 1 legnagyobb közös osztójának meghatározása. Osszuk el az « 0 számot a^-gvel maradékosan! Legyen a hányados qv a maradék pedig a2, egy etj-nél kisebb természetes szám:

a0 = g1a1 + a2

(a2iÜ/)+ «1«]+ • • • +a„[vn(y)+unt]

+ b(y).

111

Átalakítva: •»Ay)y+

••• + Vn(y)yn+t(uiy+

= alVl(y)+

•••

=

. . . + anvn(y) + b(y)+t(u1a1

+ ...

+unan).

A fenti egyenlőség csak úgy állhat fenn m i n d e n í-re, ha t e g y ü t t h a t ó j a a bal és jobb oldalon ugyanaz. E z pedig, lévén, hogy uv . . ., un között legalább egy nem 0 szám van, nem lehet y m i n d e n reguláris értékére igaz. Abból a feltételezésből t e h á t , hogy az xxy 4- . . . 4-x n y n polinomot kiszámító algoritmus n-nél kevesebb nemlineáris műveletet t a r t a l m a z , v a l ó b a n ellentmondásra j u t o t t u n k . H a s z n á l j u k fel a b e m u t a t o t t módszert még egy hasonló állítás bizonyítására! A z t állítjuk, hogy x\+ . . . + x2 nem számolható ki n-nél kevesebb szorzással v a g y osztással. Aki esetleg azt hinné, hogy ez nyilvánvaló, gondolkozzon azon, hogy kifejezést miért lehet mégis egyetlen szorzással előállítani, az xf — x2=(x1-\-x2)(x1 — x2) azonosság a l a p j á n ! Megint tegyük fel, hogy v a n olyan algoritmus, amely csak n — 1 számolt m ű v e l e t e t t a r t a l m a z és eredménye xf + . . . +x%. E k k o r t a l á l h a t ó k olyan uv .. ., un, av .. ., an, vv . . ., vn, b számok, ahol . . ., un nem mindegyike 0 és t minden értékére teljesül a (i^ + ^í)2-!-

. . . +(vrl + urlt)2 = a1(v1 + u1t)+ . . . +an(vn+unt)

+b

egyenlőség. Á t a l a k í t v a : t2(uf+

. . . +u2) = tcl + c2,

ahol c 1 és c 2 konstansok. Ez az azonosság esak ú g y állhat fenn minden í-re, h a u\ r . . . + u 2 = 0. Mivel u v . . u n közül nem mindegyik 0, innen ellentmondásra j u t u n k . 3.13. feladat: M u t a s s u k

•)

4- . . . +

o

meg,

hogy

komplex

számok

körében

az

n

négyzetösszeg — szorzással is kiszámítható. Miért m o n d akkor

csődöt a fenti bizonyítás? 3.14. feladat: Pan módszerével lássuk be, hogy ha össze kell szorozn u n k egy kXn-es m á t r i x o t és egy n hosszúságú v e k t o r t : Xi\

.

Til .

h



Xl„

• X]cn

'

yi'

Vn

azaz képeznünk keli az fi = Xll'Jí

112

+

- • • ~r Xivítn

(i = h

• • ••

n)

összegeket, a k k o r ehhez legalább m n nemlineáris m ű v e l e t e t kell hajtanunk.

végre-

Tanulságos összevetni a 2. feladat eredményét a k o r á b b a n közölt Strassen-féle mátrixszorzási módszerrel. Hiszen ha képezni kell az X

11 •

• xm~

ki • • xnn

>11 • • V\n yní •

• Vnn_

szorzatot, ez tulajdonképpen n darab mátrixvektor szorzást jelent: minden i-re ki kell számítani az xn . • X1 n X

nl •

• xnn

szorzatot. És noha minden ilyen szorzat kiszámítása külön-külön n2 nemlineáris műveletbe kerülne, Strassen módszerével együtt 'ÍV' helyett cn 2 ' 81 művelettel is kiszámíthatók. A Pan-téle alsó becslések é r t é k e sajnos, s o h a sem h a l a d h a t j a m e g a v á l t o z ó k s z á m á t . H a t e h á t egy f e l a d a t o l y a n bonyolult, hogy m e g o l d á s a a v á l t o z ó k s z á m á n á l s z e m m e l l á t h a t ó a n s o k k a l t ö b b m ű v e l e t e t igényel, a k k o r ahhoz, h o g y erről a t é n y r ő l m a t e m a t i k a i l a g is m e g g y ő z ő d j ü n k , m á s m ó d s z e r e k e t kell keresni. Strassen eredményei, melyek az euklideszi algoritmus, a t a b e l l á z á s és az interpoláció esetében n log n-es alsó becslést a d n a k , ahol n a v á l t o z ó k s z á m a (1. 3.2.3. és 3.3.3. p o n t ) , m á r o l y a n t e c h n i k á n a l a p u l n a k , a m e l y n e k ismertetésére i t t n e m v á l l a l k o z h a t u n k . A h e l y z e t kissé emlékeztet a r r a , a m i t a „ G r á f o k d i a g n o s z t i k á j a " részben t a p a s z t a l h a t t u n k . O t t is csak o l y a n alsó becsléseket t u d t u n k adni a lépések s z á m á r a , m i n t az a d a t o k s z á m a . (Mivel a z o n b a n a k é r d é s e k s z á m a t ö b b se lehetett, m i n t az a d a t o k é , o t t az alsó becslések m i n d i g azt á l l í t o t t á k , h o g y az a d o t t esetben „ m i n d e n t m e g kell k é r d e z n i " . )

3.3.2. Prekondicionálás A gyors szorzás és gyors osztás eljárásait nem régen ismerik, és „kézi" számolásban nem is érdemes ezeket használni. A sokjegyű számok gyors szorzása mégsem okoz problémát a 17. század eleje óta. E n n e k igen egyszerű oka van. Azóta v a n n a k logaritmustábláink ! Ezeket természetesen — különösen eleinte, kézi erővel — nehéz volt kiszámolni, de hányszorosan megtérült azóta a befekt e t e t t m u n k a ! Minden b számhoz kiszámolták log & és eb értékét, és ha ezután két tetszőleges számot, b-t és c-t, össze kellett szorozni, 3 Alj;.'ritmusok

113

e művelet helyett csak log b-t kellett összeadni log c-vel. Az ilyen előkészítő jellegű számolást prekondicionálásnak nevezik. Miért jobb logaritmustáblát csinálni, mint m o n d j u k szorzástáblát? Tegyük föl, hogy az 1 és 10 közötti számokat a k a r j u k 4 tizedesjegy pontossággal szorozni. Logaritmustáblában kb. 9-10 4 szám logaritmusát kell leírni, ami megvalósítható. Szorzástáblában 9-10 4 -9-10' 1 ss8'10 g szorzatot kellene tárolni, ami lehetetlen. Először m e g m u t a t j u k annak előnyét, ha a skalárszorzást prekondicionálással végezzük. Pan módszerével beláttuk, hogy az x = (x1, . . . , xn) és y = = (*/i> • • ••• Vn) vektorok (x, y)=x1y1+ . . . +xnyn skalárszorzatának kiszámítása legalább n d a r a b nemlineáris műveletet kíván. I t t is elképzelhető azonban, hogy azok a műveletek, amelyeket egy-eszy vektoron belül végzünk, kisebb súllyal esnek latba, és ezért első közelítésben nem kell őket számolni. Márpedig ekkor a skalárszorzáshoz már nj2 darab nemlineáris művelet is elég, amint ezt a következő átalakítás m u t a t j a + x?.y2 = (xi + y'i)(Ui + xz) - xix2 ~ yű)2A jobb oldal második és harmadik tagjának kiszámítása prekondicionálásnak számít: az olyan szorzások száma, amelyekben a két tényező különböző vektorokból származik, csak feleannyi, ha a jobb oldali és nem a bal oldali elrendezést használjuk. Ennek az észrevételnek akkor lehet jelentősége, ha például sok különböző vektort kell tárolni, és ezek közül gyakran kell kettőt összeszorozni. Ilyenkor esetleg érdemes minden egyes x vektorhoz előre kiszámítani és vele együtt tárolni az

összeget is, mert akkor az x (l) és x (;) vektorok skalárszorzata az (x« ; xW) = (.«{') +

+ 4')) + ( 4 ' ) i ^ K ^ + 4 ° ) + . • • -

képlet alapján n/2 nemlineáris művelettel előállítható. Ennél többet a skalárszorzás esetén prekondicionálássál sem lehet nyerni. n\2 nemlineáris műveletre mindenképpen szükség van. E z t a szovjet Belaga bizonyította be. A prekondicionálás egy másik alkalmazási területe a polinomkiértékelés. Tegyük fel, hogy egy adott P(x) = a0 + a1x + . . . +anxn polinomot gyakran a k a r u n k kiértékelni különböző x helyeken. A későbbi számolások meggyorsítása érdekében esetieg hajlandók

114

vagyunk egyszer nagyobb áldozatot hozni: bizonyos dolgokat előre kiszámolni. Ehhez természetesen csak az e g y ü t t h a t ó k a0, . . . , an értékeit h a s z n á l h a t j u k fel. Most az érdekel minket, hogy m e n n y i t lehet az előkészítéssel, a polinom prekondícionálásával nyerni! F e l a d a t u n k a t szabatosan ismét olyan algoritmusok segítségével f o g a l m a z h a t j u k meg, amilyenek a 3.2.1. p o n t b a n szerepeltek. Bemenő a d a t o k n a k a0, . .., an, x és tetszőleges számok vehetők. A négy alapműveletet lehet használni. Csak az olyan műveleteket számoljuk azonban, amelyekben x-et tartalmazó kifejezés nemlineáris módon szerepel. Más szóval, csak a következő f a j t a utasításokat számoljuk: 1.

z í ^z / *z A ,

ahol Zj és zk is függ x-től. Zj

2.

z^

, ahol zk függ x-től. z

k

Megmutatjuk, hogy v a n olyan algoritmus P(x) kiértékelésére, amely így esak n l 2 nemlineáris műveletet tartalmaz. Alkalmas prekondicionálással t e h á t a szorzások fele megtakarítható. Indulásként próbáljuk a skalárszorzásnál észrevett átalakítási lehetőséget a polinomszorzásra is k a m a t o z t a t n i : A Q(x) = b0 + b1x+b2x2+

+bm_lxf-1

...

polinomot felfoghatjuk, mint két vektor, (60, bv . . ., öm_x)

és

(1, x, x 2 , . . . , ^ - 1 )

skalárszorzatát. Foglaljuk össze most is páronként a tagokat, de nem sorban, hanem az elsőt az utolsóval, másodikat az utolsó előttivel stb. (tegyük fel, hogy m páros): Q(x)=(b0 + bm_1x"-1) + (b1x + bm_1x°'-*) + (b^

+b

m

_ ^ ) +... = 7YI

(b0 + zfn-1)(l+bm_1)

+ (b1 + xm-*)(x+bm_2)+ 2

.. .

--g-a^-i

2

Mit n y e r t ü n k ezzel az átalakítással? Számoljuk össze a szorzásokat! x2, x3, . . . , xm~x előállításához m -2 d a r a b szorzás, 11% 2 - fi()fim-i+ • • • + fim fim előállításához — darab szorzás, 1.

115

3.

a szögletes zárójelben levő tag kiszámításához — darab szorzás szükséges.

A 2. alatti műveleteket nem kell számolni: ezek előre elvégezhetők. Az 1. alatti műveleteket számolni kell, de van egy kellemes tulajdonságuk, a b0, b1} . . ., bn számok nem fordulnak elő bennük. Ezért, h a több polinomot kellene ugyanezen az x helyen kiszámolni, e műveletek jelentősége csökkenne. A számolt műveletek száma TO + —. H a k darab prekondicionált ra-ed fokú polinomot kellene Tíí ugyanezen az x helyen kiértékelni, ez a szám k—Jrm lenne. Most e tulajdonságot felhasználjuk egy P(x) = a0 + aix + . . . (n— l)-ed fokú polinom kiértékeléséhez, ahol Osszuk a tagokat m-es csoportokba: P(x)=Qn(x)+Ql(x)xm

ntíkm.

+ Qi(x)x°~'"+ . . . +Ql:_i(x)x^k-1>",

ahol Q0(x) = a0 + . . . +a,n_1x:n~í, Q,(x) = am + • • • +a2m_-Lxm~1, Amint láttuk, Q0(x), . . ., Qk~i(x)

kiszámítása legfeljebb

km számolt műveletbe került. Mivel x"1 m á r megvan, P(x)-et ezután a Q0(x), . .., Qk_x(x) együtthatókból további k — 1 művelettel megh a t á r o z h a t j u k . Az egész számolás így legfeljebb km . — 4-m-H« műveletet követel, ahol k és m csak a krn^n alávetve. H a pl.

feltételnek vannak

k = m = \Yn\, akkor a műveletszám 2[|^]-nel becsülhető. Van t e h á t egy algoritmusunk, amely a P(x) polinom értékét - prekondicionálással — n/2-\-cYn számolt művelettel állítja elő.

116

A polinom prekondicionálása abban áll, hogy előre ki kell számolni és vele együtt tárolni a k d a r a b

S = a

1

ma2m-l + am+la2m-2 + • • •

= a

(k-l)makm-l + a(k-l)m+lakm-2 + • 1 •

összeget. Ismeretes olyan (valamivel t ö b b algebrai fogalmat felhasználó) algoritmus is, amely a prekondieionálás u t á n m á r csak

műveletet igényel. Azt is bebizonyították (Belaga), hogy w/2-nél kevesebb művelet nem elegendő. Végül megjegyezzük, hogy a számítógépek elemi függvényeket (pl. sin x-et) szolgáltató szubrutinjai rendszerint egy közelítő polinomot számolnak. E z t azonban nem mindig könnyű felismerni, mert a program a polinomot m á r prekondieionált f o r m á b a n t a r t a l mazza. A nagyobb pontosság is követelheti, hogy a polinomot ne eredeti f o r m á j á b a n írjuk fel.

3a3a3a Tabellázás és fordítottja, az interpoláció Előfordulhat, hogy a P(x) = a0+alx + .. . + ajcn polinomnak sok különböző helyen felvett értékére v a n szükség: szeretnénk elkészíteni a

PK), . . . , % ) táblázatot, ahol uv . . ., uk a d o t t számok. A feladatot meg lehet oldani úgy, hogy P(m1), ..., P(uk) értékét Horner módszerével külön-külön kiszámoljuk. E z kn d a r a b nemlineáris műveletet kíván. Az előző p o n t b a n tárgyalt prekondíeionálással ezt kb. knj2-re lehet leszorítani. Felmerül a kérdés, nem lehetne-e nyerni azon, ha az egész táblázatot egyszerre számítjuk ki? H á t h a bizonyos eredmények egyszerre t ö b b u t esetén is hasznosak? Most m e g m u t a t j u k , hogy ha k^n, akkor a P(u}), . . ., P(uk) t á b l á z a t o t már k log n

117

nemlineáris művelettel és (ha mindent számolunk) k log 2 n művelettel előállíthatjuk. Az egyszerűség kedvéért a k = n esetre szorítkozunk. • Tétel: Az n-cdfokú P(x) polinom n helyen való együttes kiértékeléséhez cn log n nemlineáris és összesen cn Jog2 n művelet elegendő. Ez az eljárás nem j a v í t h a t ó lényegesen, m e r t Strassen nyította a következő (ételt.

bebizo-

• Tétel: A P K ) , ...,

P(un)

értékek kiszámítása kíván.

legalább n l o g ( ? i - l ) nemlineáris

műveletet

Hasonlítsuk össze az első Tételt a gyors Pov.rier-transzíbrmálás algoritmusával! O t t P(e), P(e 2 ), • • P(e") kiszámításához cn log n művelet kellett. Most tetszőleges u v . . . , u n számokra is kiszámoljuk P(x) értékét, cn log 2 n lépésben. E z t azonban, mint látni fogjuk, éppen a gyors PoMner-transzformáeiónak (ill. a segítségével gyorsan végrehajtható szorzásnak) köszönhetjük. R á t é r ü n k a P ( % ) , . . . , P(un)-et kiszámító algoritmusra. Ezekkel az értékekkel egyidőben az I(x, uv

. . ., un) = (x-u1)(x-u2).

.-

(x-un)

polinom e g y ü t t h a t ó i t is kiszámítjuk. Az I(x, ult . . ., un) polinom n-ed fokú, benne x" e g y ü t t h a t ó j a 1, és gyökei SÍ Z LAF^y » • » y Vjn számok. (Ezek a tulajdonságok egyértelműen meg is határozzák a polinomot.) A szokásos a l a k b a n felírva: I(x, uv

. . ., un) = xn -

a2xn~2 +

ahol U

l +

U

n.

>

a2 = uxu2 + MiM3 4- . . . -rU n _ 1 u n , an = uLu2. . . un az . . ., u n számok ún. elemi szimmetrikus polinomjai. Eljárásunk rekurzív. Tegyük fel, hogy már t u d j u k , mit kell tenni, h a P(x) foka kisebb, mint az m szám. Most definiáljuk t o v á b b az el-

118

járást olyan P(x) polinomokra, amelyeknek foka kisebb vagy egyenlő, mint 2m. A P(x)-et esetleg nulla e g y ü t t h a t ó j ú tagokkal kiegészítve, feltehetjük, hogy P(x) foka n=2m, azaz P(x) = a0 + a1x+ ... + almx2m. K i a k a r j u k számítani P(x) értékét az u

l> • • • > u2m

helyeken. Osszuk ezeket a helyeket két részre: ult wm+1, . . ., u 2ir csoportokra. Képezzük az I(x, uv

. . ., um)

és

I(x, um+1,

. . . , um és

W2m)

polinomokat (az eljárás m-re m á r ismert!). Osszuk el a P(x) polinomot az l(x, ) polinommal: P(x) = I(x, uv

...,

ulh)Q0(x) + B0(x),

és az I(x, um+1, . . . , u2m) polinommal: P(x) = I(x, um+1, . . ., u.tJQ^

+ R^x),

ahol az R0(x), Rt(x) maradékpolinomok foka kisebb, mint m. Mivel I(x, Mj, . . . , um) értéke nulla az uv . . . , um helyeken, ezért P(u1) = R0(u1),

...,P(um)

= R0(um).

Hasonlóan P(um+l) = Rl(um+l),

P(u2m) = Rl(U2m)-

Ilyen módon megtehetjük, hogy ahelyett, hogy a 2m-ed fokú P(x) polinomot értékelnénk ki az . . . , u2n, helyeken, az m-nél kisebb fokú R0(x), Rx(x) polinomokat értékeljük ki az uv .. ., um, 111. az um+1, . . ., u2m helyeken. Az eredmény ugyanaz. Az m-nél kisebb fokú polinomokra viszont az eljárás m á r definiálva van. H á t r a v a n még I(x, uv . . . , u2m) kiszámítása. Ez egyszerű, mert Ui

u2m) = I(x, uv

...,

um)I(x,

um+1,

...,

u2m).

Beesüljük meg a felhasznált műveletszámot! Jelöljük M(n)-nel két legfeljebb n-ed fokú polinom összeszorzásához, D(n)-nel pedig az osztáshoz szükséges műveletek számát, I^wJ-nel a P{u^), . . . ..., P(un) és I(x, uv . . ., un) kiszámításához szükséges műveletek együttes számát. A fenti eljárás alapján T(2m)^2T(m)

+ 2D(2m) + M(m).

(3)

119

Tudjuk, 3.1. és 3.2. szakaszból, hogy •^nemiin(ra) ^ c^n,

DmmVJn)

Muw{n) S c3n log n,

Ds,Jn)

^ r.2n,

== c4ji log

n

(Cj, c2, c;!. r 4 állandók), ezért (3)-ból a szükséges nemlineáris, ¿11 _ az összes szükséges műveletek számára a következő felső becslést kapjuk:

f • r"i ' —

n- !(»g2

9

Az algoritmus tehát \ a l ó b a n igen gyorsan dolgozik. A tabellázás műveletének fordítottja az interpoláció: a d o t t a k az w0, . . ., un, vn, . . ., vn számok, (w0, . . ., un mind különböző), határozzuk meg azt az n-ed fokú P(x) polinomot, amely eleget tesz a P(u0) = vn, . ..,P{ur)

= vn

feltételeknek. (Más szóval: illesszünk egy %-ed fokú görbét az («„, v0), ...,

(un, vn)

koordinátapárokkal megadott pontokra). Ezzel a feladattal m á r találkoztunk a polinomszorzásról szóló fejezetben. L á t t u k , hogy az an + axu0+ . . . + anu% = v0 %+

+ ... + a n u ^ = vn

lineáris egyenletrendszerből a P(x) polinom ismeretlen a0, . . ., an együtthatói valóban meghatározhatók, mégpedig olyan műveletekkel is, amelyek lineárisak v0, . . ., v n -ben. Most azonban u n , . . . . . ., «„-et is változónak kell tekinteni, ezért a felmerülő műveletek általában nem lesznek lineárisak. Ennek az interpolációs feladatnak speciális esete nemcsak a Fourier-transzformáció inverze, hanem lényegében az I(x, uv . . . . un) polinom kiszámításának feladata is. Hiszen a szóban forgó polinomot a P(ux) = G, . ..,P(un)

=0

feltételek határozzák meg. Strusscn következő tétele alsó becslést ad a szükséges nemlineáris műveletek szániára. • Tétel: I(r, u, linet'vii niitvcldr-

120

un) kiszámításához v>tn szükség.

Irgnlábh n log n

nem-

Megmutatjuk, hogy ennyi elég is, nemcsak I(x, ux, . .., un) kiszámításához, de az általános interpolációs feladat megoldásához is. Célunk t e h á t olyan algoritmus megadása, amely az u0 un, vQ, ..., vn értékek alapján kiszámítja a P(x) polinom a0, .. ., an együtthatóit. Bebizonyítjuk a következő tételt: • Tétel: Az interpolációs feladat cn log n nemlineáris művelettel, és (ha mindent számolunk) cn log 2 n művelettel megoldható. Legyen D(x) = I(x; uv

. . ., un), D(x)

D,(x) = (x-ul).

..(x-u^x-u,^)..

és legyen A P(x) polinomot Lagrange képlete a d j a meg: (*)

P(x)=^D1(x)+...+^-D(x).

Valóban, ha x helyébe urt helyettesítünk, akkor ebben az összegben az í-edik kivételével minden tag 0, az i-edik tag pedig

F e l a d a t u n k t e h á t a (*) polinom együtthatóinak gyors kiszámítása. 1. Első lépésként kiszámoljuk az I(x; uv ..., un) = D(x) polinomot, n log n lépésben, az előző p o n t b a n ismertetett módon. Részeredményként megkapjuk az I(x; uv . . . , « „ ) , I(x ;un . .., un) ~2 "2 +1 polinomokat is, valamint az összes többi, ezekből hasonló felezéssel k a p h a t ó polinomokat. (Feltehetjük, hogy n= 2k. H a n nem ilyen alakú, az u t á n a következő első ilyen alakú számmal dolgozunk.) 2. Második lépésként kiszámoljuk a dn számokat. Ehhez a következő észrevételt használjuk: A Taylor-formula szerint D(x) = D(Uí) + D'(u,)(x - Uj) + F,(x)(z - ut)2, ahol Ft(x) egy polinom. Mivel D(u) - 0, innen Di(x)=^L

•v

= D'(ui) +

(x-ul)Fi(x),

121

Tehát di nem más, mint a D'(x) polinom ui helyen felvett értéke. A D'(x) polinom az előző pont eljárásával kiértékelhető az . . ., un helyeken n log n lépésben, ezért a dx, . . ., dn számokat is nlogn lépésben megkaptuk. 3. H á t r a v a n még a w ^ v j d f számok ismeretében a (*) képletbeli P(x) kiszámítása. Feledkezzünk meg most wv . . ., wn eredeti jelentéséről, tekintsük e számokat is a feladat bemenő a d a t a i n a k : tetszőleges u v . . ., u n , w v . . ., icn számokra kerestetik a (*) képlet által megadott P(x; , . . ., un; , . . ., wn) polinom. Legyen n=2m. Osszuk két részre az (*) képletbeü összeadandókat, és emeljünk ki az első és a második részből is annyi tényezőt, amennyit esak t u d u n k ! Az alábbi összefüggést k a p j u k : P{x \ uv . . ., u2m\ ?5a2a Lineáris egyenletrendszer pontos megoldása A moduláris algoritmusok legfontosabb alkalmazási területének az olyan algebrai feladatok tűnnek, ahol (az ismert megoldási eljárásban) a részeredmények jegyeinek száma nagyra nőhet, kerekíteni pedig nem szabad. Annak, hogy kerekíteni nem szabad, kétféle oka lehet. Egyik, hogy a végeredmény egész szám, és a számunkra érdekes információt nem is feltétlenül a nagysága hordozza (hanem pl. az, hogy páros-e). Ez leginkább algebrai vagy számelméleti feladatoknál fordul elő. H a például az euklidészi algoritmust közvetlenül a k a r j u k többváltozós polinomokra alkalmazni, akkor ilyen jellegű nehézségekkel találkozunk. Vannak olyan elméleti fizikai feladatok is, ahol egy lineáris egyenletrendszer megoldásai egész számok, és teljes pontossággal van r á j u k szükség. A másik lehetséges ok az, hogy az a d o t t eljárás mellett kis kerekítés is nagy torzításhoz vezethet az eredményben. N e m kell feltétlenül erőltetett példákra gondolni. Tekintsünk egy Ax=b, kiírva (4) a

mXl

+ • • • + a-nnxn = hn

lineáris egyenletrendszert! Az a feladat, hogy „oldjuk meg (4)-et", sokszor még nem nevezhető jól megfogalmazottnak. Hiszen előfordulhat, hogy a megoldás nem egyértelmű, és az is, hogy nines megoldás. Helyesebb talán úgy megfogalmazni, hogy meg kell állapítani, megoldható-e (4), és ha igen, fel kell írni maximális számú független megoldást? Sajnos, még ezt a kérdést sem nevezhetjük értelmesnek. A (4) rendszer bemenő adatai, az

. . aIn

mátrix és a b=

TM :

137

vektor rendszerint esak közelítően ismertek. Márpedig, h a sok megoldás van, akkor a b vektor akármilyen kis változtatása már olyan egyenlethez vezet, amelynek nines megoldása. Ez a két eset tehát a közelítő adatok alapján nem választható szét egyértelműen. H a viszont az A mátrixot változtatjuk meg kissé, akkor az új egyenletnek m a j d n e m biztos, hogy pontosan egy megoldása lesz! Még azokban az ebetekben is, amikor a megoldás egyértelmű, előfordulhat, hogy a bemenő adatok jelentéktelen (a pontossági határokon bőven belül eső) változtatása a megoldás óriási arányú változásához vezet. Lássunk most olyan példát, amikor az ok nem vezethető vissza arra, hogy a „megoldhatatlanság — t ö b b megoldás" határon vagyunk. (A példa Buhválovtól származik.) Mint t u d j u k , ha az A mátrix determinánsa nem nnlia, akkor a megoldás egyértelmű. Legyen most 1 2i 21 9

1 21 (A be nem töltött helyeken nullák állnak.) E k k o r A determinánsának értéke 1. P r ó b á l j u k megoldani az Ax = b egyenletet! Kiírva: 2xx

a-, = 6 , x., = b,

2xn_x+xn-=bn. A formális megoldás egyszerű : x2=b2—2bj bn-2bnLl~±bn_2-...+{-2"-1)bv

xn = Másképp írva: xn=(~

2"-*){ - 2b x + b2) + ( - 2 " " 4 ) ( - 263 + bt) +

Tegyük fel, hogy b x - .1 2.

138

h 2 . 1.

_ 1/2.

ó 4 ---l, . . . .

E k k o r tehát 0, ha n páros 1/2, h a n páratlan. xn tehát egy viszonylag kis szám, és nem v á r n á n k óriási ingadozásokat attól, hogy bt értékét nem t u d j u k teljes pontossággal. Márpedig, ha értéke esak 10 - 7 pontossággal ismert, és n = 1 0 0 , akkor xn h i b á j a 2"-10~ 7

1022.

Még ha a bemenő adatok pontosak is, xn kiszámolása közben olyan nagy számok léphetnek fel, amelyeket a számítógép rekeszeniek korlátozott nagysága m i a t t kénytelenek lennénk kerekíteni. Az eredmény ugyanilyen arányú pontatlanság. Mindezek a megfontolások azt bizonyítják, hogy a lineáris egyen1et re ndsz er megoldásának feladata az ún. inkorrektül felállított feladatok közé tartozik. Példánkban egy ún. rosszul kondicionált mátrix szerepelt: ilyenkor nem feltétlenül értelmes dolog az egyenlet pontos megoldásáról beszélni. Sok érdekes elméleti problémát vet fel a közelítő megoldás olyan értelmezése, amely a fenti hibáktól mentes. Ű j feladatot jelent a jó algoritmusok keresése közelítő megoldások kiszámítására. Ezzel a kérdéssel k i t e r j e d t irodalom foglalkozik. Mi most csak azt m u t a t j u k meg (Borosh és Fraenkel nyomán), hogy ha a bemenő adatok hibáin m á r nem is áll módunkban változtatni, a kerekítési hibák nélküli számolás gyakorlatilag megvalósítható. Ehhez a 3.5.1. p o n t b a n ismertetett számelméleti fogásokat használjuk fel. A feladat bemenő adatait, az a¡j és a bi számokat egészeknek t e k i n t h e t j ü k . (Ha nem lennének azok, közös nevezőjükkel beszorozva egésszé tehetők.) Az eljárás a következő ismert algebrai t é n y t használja fel. • Tétel (Cramer-szabály): Jelöljük determinánsok értékeit: \b1

al2 ...

aln

uv u2, . .., un-nel a következő

au

^ ...

a

K . .. ann

m

a

aln

l l • • • a lín-\) • • • an{n-l)

n

139

Jelöljük

K-val az A mátrix

determinánsát.

ii-ii •

KI

•'Jkkor az uv

. . ., an egész számok kielégítik az An

Kh. azaz az

(/uMj-l- • • • h"lnitn = Kbí

egyenletrendszert.

Ha K / 0, akkor más megoldás nhir.t is.

Tegyük fel most az egyszerűség kedvéért, liogy K,- 0. A moduláris algoritmusok alkalmazása közben érteni kell ahhoz, hogy egy determináns abszolút értékét egyszerű módon felülről megbecsüljük. E r r e alkalmas eszköz Iladamard tétele: * Tétel ( H a d a m a r d ) : K^

+ . . . + a\xy 2 . . . ( < £ , + . . . + yj_x.

163

1.4. E g y elempárt legfeljebb egyszer kell kicserélni, legfeljebb j ^ j csere kell. összehasonlítani

többször

is

és ezért szükséges

lehet ugyanazt az elempárt. de azt észrevehetjük, hogy a sor első végigfutása u t á n a legnagyobb elem m á r biztosan végső helyére (az utolsó helyre) kerül. E z é r t a második végigfutás során m á r esak n— 2 összehasonlítást kell végeznünk. U g y a n í g y látható, hogy a h a r m a d i k , negyedik stb. végigfutásnál m á r csak n— 3, n — 4 stb. összehasonlítást kell végezni. í g y az összehasonlítások száma összesen ( w - l ) + (n-2)-:- . . . + 2 + l = { '

1

|

Ji.

1.5. Legyen [log 2 n\~-kJ-1. E k k o r n=2k + 7n, ahol A bizonyítandó azonosság bal oldalát á t a l a k í t j u k :

IsmsS',

(¿4-1)4- • • • + (í~+l) + £ + • • . + ¿ + ( ¿ - 1 ) + • • . + ( i - l ) + . . . 2A~1-szer

m-szev ...4-24-2+1 =

2' t_2 -szer

= w(í-rl)-{-fc2*-» 4 - ( / t - l ) 2 , f - 2 + . . . + 2 - 2 1 + 1-2° = = :n\k 1) + (1 ~ 2 + . . . + 2 ' [ " 1 ) + (2 + 4 + . . . +2*"*)+ . . . + -i- (2k~2 4 2k~1) — 2'' - 1 = m(k + 1) + (2* — 1) + (2k — 2) + . . . + + ( 2 Í ; - 2 M ) +- (2k — 2k) =m(k + 1) + (& + 1)2* — ( 2 m — 1) = = 4 1 o g , /¿l-v!^'-"'! -;-1. 1.6. Teljes indukciót használunk. Legyen pl. n = 2m (a páratlan m esete hasonlóan tárgyalható). E k k o r az első és második m elem sorbarakásához, az indukciós feltevés szerint, 2(w;log 2

W i]-2f'

0 am

s l

+

1)

összehasonlítás kell, m a j d az összefésüléshez még 2>n — 1 lépés. Ez összegen 2m\\og2 m] - 2 rit ^ 2 + 2m - 1 = ÍI0 2 m = 2wf log 2 2m] - 2 8 ' + 1. 1.7. Minden j á t s z m á b a n egyetlenegy játékos esik ki. 1.8. Legyenek az elemek Hasonlítsuk össze Xj-et és x2-t \ Az általánosság megszorítása nélkül feltehetjük, hogy az eredmény x1~=x2. U t á n a hasonlítsuk össze a^-at rr 4 -gyel! Fel t e h e t j ü k , hogy az e r e d m é n y x3

GJMdxAGJ

alakot. i: Algoritmusok

177

Másik lehetőség: fejezzük ki a logikai műveleteket az alapműveletekkel. Legyen 0 a hamis, 1 az igaz érték megfelelője. E k k o r ~jx=l-x,

x,\y = xy,

xVy = x +

y-xy.

E z u t á n alkalmazzuk Brent tételét!

4. fejezet 4.1. Vegyük sorra a számokat 2-től [Vx]-ig, és mindegyikkel osszuk el x-et. H a x valamelyikkel osztható, álljunk meg és írjuk ki: f(x)= 1. Ellenkező esetben, [j/x]-szel való osztás után, írjuk ki: f(x) = 0. 4.2. Vegyünk két gépet, T 1 -et és T 2 -t, melyek közül T 2 kétszer lassabban dolgozik, mint amíg Tj két lépést h a j t végre, addig Tj egyet. Indítsuk egyszerre Ti-et és T 2 -t ugyanazzal a P programmal és x 1 lemenő adatokkal, és T 2 minden (azaz T 1 minden második) lépése u t á n ellenőrizzük, nines-e a két gép azonos állapotban? Tj és T2 azonos állapotban van, ha 1. minden i-re az i-edik regiszter t a r t a l m a ugyanaz a gépen, mint T 2 -n, 2. és T2 a P program ugyanazon utasításának végrehajtásánál t a r t . (Vegyük észre, hogy az ]. feltétel ellenőrzéséhez nem kell végtelen sok regisztert végignézni, csak annyit, amennyi eddig már felhasználásra került.) A P program az x adatok mellett akkor és esak akkor vezet ciklushoz, ha valamelyik lépésnél Tx és T2 azonos állapotba kerül. 4.3. Mint a megállási feladat definíciója előtti apróbetűs részből következik, v a n egy olyan PT program, hogy a T gép a PT programmal ugyanazt számolja ki a Q + x sorozatból, mint a Q programmal az x-ből. E z é r t a megállási feladat így is fogalm a z h a t ó : Döntsük el, hogy a T gép a (rögzített) PT program, és az y adatszalag mellett megáll-e? Ez a feladat most csak az y sorozat tulajdonságának eldöntését kívánja. H a megoldható volna, akkor az eldöntő eljárás azokban az esetekben is működne, amikor y = Q - | - x . 4.4. Legyen S2, . . . a négyzeteknek egy korlátlanul növekvő sorozata, amelyben része $ i + 1 -nek. H a minden $,-nek van egy lefedése, akkor ¿íj-nek van olyan Lí lefedése is, amely minden i > l - r e kiterjeszthető Si lefedésévé. Ez abból következik, hogy S, bármely lefedése ¿> r nek is szolgáltatja egy lefedését, és S^-nek esak véges számú különböző lefedése lehet. Ezek valame-

178

lyike tehát végtelen sok (és ezért minden) S,- lefedésévé kiterjeszthető. Továbbmenve, v a n *S2-nek olyan L2 lefedése is, mely Lx kiterjesztése, és minden ¿=>2-re kiterjeszthető lefedésévé stb. Az így k a p o t t Lt, L2, . . . sorozat a sík lefedését a d j a . 4.5. Tegyük fel, hogy minden készlet vagy olyan, hogy vele a síkot nem lehet lefedni, vagy olyan, hogy vele a sík periodikusan lefedhető. Megmutatjuk, hogy ekkor a dominóproblémára volna megoldó algoritmus. H a a K készlettel a síkot nem lehet befedni, akkor (az előző feladat miatt) előbb-utóbb található olyan nagy négyzet, amelyet nem lehet lefedni. H a a síkot periodikusan le lehet fedni, akkor viszont előbb-utóbb találnánk egy nagy négyzetet, ami úgy fedhető le, hogy ez a lefedés periodikusan folytatható. Ezért, ha más eset nem volna lehetséges, akkor elég állhatatos keresés bármely készlet esetén eldönthetné, hogy a két eset közül melyik áll fenn. 4.6. A fenti bizonyítást csak annyiban kell módosítani, hogy máshogyan szabályozzuk, hogy mikor t é r j e n vissza gépünk a P(m) algoritmusra. Ehhez azt az egyszerű számelméleti t é n y t használjuk fel, hogy minden t természetes szám egyértelműen felbontható egy négyzetszám és egy négyzetmentes szám szorzatára (négyzetmentesnek nevezzük az olyan számot, mely nem osztható 1-től különböző természetes szám négyzetével). Szabályunk mármost az, hogy a gép a í-edik lépésben P(m) működését szimulálja, ha t fenti felbontásában a négyzetszám-tényező m2, vagyis ha t egy négyzetmentes szám m 2 -szerese. Egyszerű számelméleti meggondolásokkal megmutatható, hogy iV-ig legalább N/ám2 ilyen szám van, amiből az állítás következik. Hasonló konstrukció volna elvégezhető 2m ill. m2 helyett minden olyan f('in) függvényre, melyre lf(m) konvergens.

179 j

Műszaki vezető: Hegedűs K m ő Műszaki szerkesztő: Mózer István Borító- és k ö t é s t e r v : Sebes J á n o s A. könyv ábráit r a j z o l t a : Herczegh J á n o s A k ö n y v f o r m á t u m a : A/5 — I v t e r j e d e l e m : 11,25 (A,'5) Aljrák száina: 24 — P é l d á n y s z á m : 5100 P a p í r minősége : S0 g ofszet Betűcsalád és -méret: T-es nionó, trm/trm Azonossági szám: 60 $25 — 31Ü: 2Ő61-1—78*1 Ké-züli az MISZ 5 0 0 1 - 5 9 és 5002 — 55 s/.erin-

%

Tí-.i^U5 E g y e t e m i X y o m d a . Budapest Velelös rczetii: Sürneglu Zoltán igazgató

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF