A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre. Hány teniszmérkőzésre van szükség, hogy játékos közül kiválasszuk a legjobbat? Kétkarú mérleg segítségével, db tárgy közül hány méréssel tudjuk kiválasztani a második legnehezebbet? Ezek a kérdések a számítógép-tudomány egyik legfontosabb fejezetének, a rendezések elméletének alapproblémái. A válaszadáshoz algoritmust, tehát tervet kell készítenünk a mérések végrehajtására, s ha az optimális algoritmust akarjuk megtalálni, arra is képesnek kell lennünk, hogy bebizonyítsuk: nincs jobb. A programozás elmélete általában a következő modellt alkalmazza. Adva van adat, , , , amelyek valamilyen sorrendben rendezve vannak. Ez a sorrend számunkra ismeretlen, de akármikor összehasonlíthatunk bármely két adatot, ezáltal megkapva egymáshoz viszonyított elhelyezkedésüket. Cél a legnagyobb, második legnagyobb stb. elem meghatározása, a lehető legkevesebb összehasonlítással. Logikus lenne feltenni, hogy adataink valós, vagy akár természetes számok, például sportbeli megfogalmazásokban pontszámok. Ezt általában mégsem teszik fel, ugyanis az összehasonlításokból csak a sorrendre következtethetünk, a számok értékére nem. (Szigorúan véve, csak annyit tudunk, hogy adataink között van egy ismeretlen reláció, ami rendelkezik a "kisebb'' reláció szokásos tulajdonságaival, vagyis tranzitív és trichotóm.) A következő leírásokban időnként használni fogjuk a sportélet természetesen adódó kifejezéseit.
1. tétel. adat közül összehasonlítással ki lehet választani a legnagyobbat.
2. tétel. adat közül a legnagyobb kiválasztásához mindig legalább összehasonlításra van szükség.
Az 1. tétel bizonyítása. Két módszert is megadunk. Az elsőben (1. ábra), először -et és -t hasonlítjuk össze, majd a "nyertes''-t -mal, és így tovább. Ez az úgynevezett "kihívásos'' módszer, amikor az egymás utáni mérkőzések során mindig a nyertes marad a (pingpong, sakk stb.) asztalnál.
1. ábra
2. ábra A másik módszer fordulók rendezése (2. ábra). A játszmaszám itt is , hiszen (ugyanúgy, mint az előbb) bármelyik résztvevő egyetlen vesztes játszma után kiesik, és a legjobbat kivéve mindenki kiesik. (A játszmák számának közvetlen, szintenkénti összeszámolása kissé nehezebb: Jelöljük -szel a szükséges játszmaszámot. Nyilván . Ha természetes szám, és , akkor a legalsó szinten játszma van, a fölötte levő szinteken pedig játékos játszik kieséses játékokat. Tehát , és ebből indukcióval könnyen igazolhatjuk -et.)
A 2. tétel bizonyítása. Az eddig elmondottak után ez már igen egyszerű: a nyertesen kívüli játékos mindegyikének vesztenie kell valamikor (különben nem tudhatnánk biztosan, hogy nem ő a legjobb), s minden mérkőzésnek egy vesztese van. A továbbiakhoz jelöljük -rel azt a természetes számot, amire teljesül. Ekkor a 2. ábra -fordulós rendszert ad, amiben a győztes éppen -szer játszik.
3. tétel. adat közül a második legnagyobb összehasonlítással megtalálható.
Bizonyítás. A 2. ábra szerinti módszerrel összehasonlítással megtaláljuk a legnagyobb elemet. Minden ettől különböző elem "kikapott'' valamelyiktől. A második legnagyobb csak a legnagyobbtól kaphatott ki, ő tehát a legnagyobb által közvetlenül legyőzött elem valamelyike. Ezek közül kell tehát a legnagyobbat megtalálnunk, amit az 1. tétel bármelyik módszerével összehasonlítással megtehetünk. Ez összesen összehasonlítás.
4. tétel. Nincs olyan algoritmus, amely minden esetben -nél kevesebb összehasonlítással megtalálná a második legnagyobb elemet.
Bizonyítás. Itt már nem igaz, mint a 2. tételben, hogy minden esetben legalább ennyi összehasonlítás kellene. Ha szerencsénk van, az 1. ábra módszerével összehasonlítás is elég lehet (ha mindig erősebb és erősebb új játékos jön). Tételezzük fel, hogy valamilyen eljárással, bizonyos számú összehasonlítás után meghatároztuk az -mel jelölt második legnagyobb elemet. Biztosan tudjuk tehát, hogy nem a legnagyobb, tehát valamelyik összehasonlításban "veszített''. De csak a (mondjuk -lel jelölt) legnagyobb elemmel szemben veszíthetett, így és mindenképpen összehasonlításra került. Így valahogyan meggyőztük magunkat, hogy a második legnagyobb, és -et is tudjuk, tehát mindenképpen tudjuk, hogy a legnagyobb. Kaptuk tehát, hogy a második legnagyobb elem meghatározásához meg kell találnunk a legnagyobb elemet is, így a 2. tétel szerint mindenképpen legalább összehasonlítást tennünk kellett. Jelölje azon összehasonlítások számát, amelyekben részt vett. Így van elem, ami -től kikapott, közöttük van . Az -től különböző elemről biztosan tudjuk, hogy nem a második legjobbak. Ez csak úgy lehet, hogy ezek még valami mástól is kikaptak. Összesen tehát van olyan elem, ami legalább egyszer, és további elem, ami legalább kétszer kikapott; így a vesztesek, tehát a játszmák száma legalább . Ha valahogy garantálni tudnánk -et, készen lennénk. Belátjuk, hogy minden algoritmusnak van olyan lehetséges kimenetele, amiben és ezzel a bizonyítás kész. Egy algoritmus minden lépése egy összehasonlítás, és hogy mi az és a , az az előző lépésektől függhet. Hogy a fentiek szerinti kívánatos kimenetelt meghatározhassuk, meg kell adnunk az összehasonlítások eredményeit. Mivel azt akarjuk, hogy a leendő nyertes lehetőleg minél több összehasonlításban vegyen részt, célszerű két játékos közül azt nyertesnek nyilvánítani, aki addig többször játszott. A szabály tehát ez: ha és is veretlen, győzzön az, aki eddig többször játszott; ha egyforma sokat játszottak, győzzön bármelyik. Ha veretlen, de már kikapott, nevezzük ki -t győztesnek, ha pedig már mindkét résztvevőnek van veresége, mindegy, hogy kit kiáltunk ki győztesnek. Önkényes kijelöléseinkkel bajba kerülhetünk, ha olyan párost kell összehasonlítani, amelyről az előző játszmák alapján tudjuk például, hogy . Algoritmusunkról azonban feltehetjük, hogy ilyen (új információt nem adó) lépéseket nem tesz. Be kell még látnunk, hogy e választások garantálják -et. Tegyük fel, hogy a mérkőzéssorozat elkezdése előtt minden játékos felírja egy cédulára a nevét, és első veresége alkalmából átadja a nála összegyűlt cédulákat legyőzőjének. így a torna alatt a cédulák ide-oda vándorolnak, minden pillanatban, valamilyen eloszlásban, a pillanatnyi veretlenek kezeiben vannak. A végén, minden cédula a győztes, kezében lesz. Igazoljuk, hogy a torna folyamán mindig igaz lesz a következő állítás: Ha az veretlen játékos eddig -szer játszott, akkor nála legfeljebb cédula van. Ezt -re vonatkozó indukcióval látjuk be; -ra igaz, hiszen csak a saját cédulája lehet nála. Ha -vel játszik, a nála levő cédula-kollekciót csak úgy bővítheti, ha legyőzi az addig veretlen játékost. Ha addig -szor játszott, akkor -nak kell teljesülnie előírásaink szerint. Így (az indukció miatt) legfeljebb cédulát adhat át, így , aki -szer játszott, most legfeljebb cédulát birtokolhat. Állításunkat így indukcióval bizonyítottuk. A torna végén minden cédula a győztes, kezében lesz, így fenti állításunk szerint , azaz adódik, s ezt akartuk belátni. Még egy olyan érdekes eset van, amikor az optimális összehasonlítás-számot ismerjük. Legyen az a természetes szám, amire teljesül.
5. tétel. adat közül összehasonlítással meghatározhatjuk a legnagyobbat és a legkisebbet is.
Bizonyítás. A 2. ábra módszerével összehasonlítás elég a legnagyobb meghatározására. A legkisebb adat nem lehet az 1. forduló nyertesei között, így a többi elem valamelyike. Közülük az 1. tétel módszerével méréssel megkaphatjuk a legkisebb elemet.
6. tétel. Nincs olyan algoritmus, amely minden esetben -nél kevesebb összehasonlítással határozná meg egyidejűleg a legkisebb és a legnagyobb elemet.
Bizonyítás. A 4. tétel bizonyításához hasonlóan azt látjuk be, hogy bármelyik algoritmusnak tudjuk olyan megtörténését konstruálni, ami legalább összehasonlítást használ. Az algoritmus, illetve a mérkőzéssorozat minden fázisához rendeljük hozzá az pontszámot, ahol jelöli az adott pillanatban azon játékosok számát, akik már veszítettek, de még nem nyertek játékot, vagy fordítva: nyertek, de még nem vesztettek, pedig azok számát jelöli, akik veszítettek is, nyertek is. Kezdetben ez a pontszám nyilván . A játéksorozat végén tudjuk, ki a legjobb, ez csak úgy lehet, ha egy játékos kivételével mindegyik vesztett valamikor. Tudjuk ki a legrosszabb, azaz egy (másik) kivételével mindegyik nyert valamikor. Innen adódik, hogy a pontszám . Ha el tudjuk érni, hogy minden játszmánál legfeljebb eggyel nőjön ez a pontszám, akkor a játszmák száma legalább lesz. -re ez , -re pedig , azaz a játékok száma legalább . A kívánt feltétel teljesíthetősége esetszétválasztással könnyen ellenőrizhető. Az érdekes esetek azok, amikor két veretlen, két nyeretlen, illetve két olyan játékos találkozik, akik még nem játszottak. Ilyenkor a pontszám eggyel nő. Befejezésül szeretném felhívni az érdeklődő olvasók figyelmét Gács Péter és Lovász László Algoritmusok című könyvecskéjére (Műszaki Kiadó, 1978, második kiadás: Tankönyvkiadó, 1987), amely számos, a fentiekhez hasonló problémát, megoldási módszert ismertet, igen olvasmányosan. Cikkünk témakörének igen alapos elméleti, történeti elemzését adja, számos általánosítást, kiterjesztést is ismertet D. E. Knuth: A számítógép-programozás művészete 3. Keresés és rendezés című monográfiája (Műszaki Kiadó, 1988), a 226‐238. oldal között.
Megjegyzések. 1. A 3. és 4. tétel állítása szerepel Bartha G. és mások: Matematikai feladatok gyűjteménye I. Tankönyvkiadó 1988. feladatgyűjteményben, a 317/b feladatban, 410. oldal. Mivel a feladat megoldása nem nyilvánvaló, úgy éreztük a bizonyítást részletezni kell. E célból jelent meg ez a cikk. 2. Az 5. tétel -ről -re történő indukcióval is bizonyítható. |