I. bevezető példa
Adott irányú támaszegyenes meghatározása
 

Tétel: Legyen S kompakt ponthalmaz a síkon és e egy irányított egyenes. Ekkor pontosan egy olyan f egyenes van, amely

Megjegyzés: A fenti egyenest a ponthalmaz támaszegyenesének nevezzük.

Bizonyítás: Unicitás: Tegyük fel, hogy van egy f és egy f' azonos állású támaszegyenes. f-nek jobb oldalára esik P összes pontja. Speciálisan az is, amelyen f' áthalad. Így egész f' f jobb oldalán halad. f' és f különböző, így az egész f' az f egyenes szigoruan jobb oldalában halad. Ekkor f azon pontja ami P-nek is eleme az f' egyenesnek szigorú bal oldalára esik, ami ellentmond annak, hogy f' támaszegyenes.

Exisztencia: Legyen g egy olyan irányított egyenes, amelynek jobb oldalára esik teljes ponthalmazunk. Ilyen létezik, hiszen P korlátos, azaz egy körbe belefoglalható. Kör esetén a megfelelő irányított egyenes létezik (szemlélet, vagy könnyű gondolatmenet alapján).

Definiáljuk a ponthalmaz elemein értelmezett függvényt, ami minden ponthoz hozzárendeli f-től vett távolságát. Ez egy kompakt halmazon értelmezett folytonos függvény, így felveszi minimumát. Legyen A egy olyan pont P-ből, amelyre a fenti függvény értéke a minimális érték.

Legyen f az adott állású A-n áthaladó irányított egyenes. Ez ponthalmazunk támászegyenese lesz. Valóban, csak annak ellenőrzése okozhat problémát, hogy P az f irányított egyenes jobb oldalára esik. Ez abból következik, hogy f szigorú baloldalára eső pontok a g jobb oldali pontjai közül pontosan azok, amelyek távolsága g-től szigorúan kisebb mint A távolsága g-től. Azaz A választása miatt ilyen pont nem lehet P-nek eleme.

Megjegyzés: Az exisztencia bizonyítás egyszerűsíthető. Nem szükséges olyan g-ből kiindulni, amely jobb oldalára esik a teljes P halmaz. Tetszőleges g-t vehetünk,például az állást definiáló e egyenessel is dolgozhatunk. Ekkor azonban nem távolság függvényt kell néznünk, hanem előjeles távolságot. Egy A pontnak egy e irányított egyenestől vett előjeles távolsága a következő: Ha A az e jobb oldalára esik, akkor ez az A-nak távolsága e-től. Ha A az e bal oldalára esik, akkor ez az ellentetje az A-nak e-től vett távolságának.


A fenti geometriai tétel egy bizonyos egyenes létezését állítja. Ezek a támaszegyenesek geometriai szempontból fontosak. Így nem meglepő, hogy konkrét esetekben a tétel által biztosított gyenest szeretnénk konkrétan meghatározni. Ezzel eljutottunk egy algoritmikus problémához:

Adott egy kompakt ponthalmaz a síkon és egy irámyított egyenes. Határozzuk meg az adott egyenessel azonos állású támaszegyenest.

Ami a számítógép számára adott, azaz amit közölnünk kell a géppel az úgynevezett input. Tehát az inputnak a számítógép számára érthetőnek kell lenni. Ez azt jelenti, hogy az input egy véges jelsorozat, amley elemei egy véges halmazból kerülnek ki (ez a szimbolumhalmazt ábc-nek nevezzük). Azt mondjuk, hogy a jelsorozat az input egy kódolása.

Példa: A természetes számok kódolására több lehetőség is van. A ``hatodik természetes szám" lehetséges kódolásai: öt, five, 5, 101_2, V, IIIII.

Amit az algoritmus (számítógép) kiszámít - az idegen szóval - az output. Az output is kódolva van, tehát mi egy jelsorozatot kapunk a géptől, ami egy megállapodás (az ezt leíró függvény a kódolás) szerint értelmezhető számunkra.

Igazából az input és output fenti értelemben vett definíciója is része a számítási probléma matematikailag pontos definíciójának.

Példa: Legnagyobb köözs osztó problémája:
Input = két természetes szám, tízes számrendszerben felírva.
Output = egy természetes szám, tízes számrendszerben felírva, amely az inputban rejlő két szám legnagyobb közös osztója.

Most nézzük mi is a mi problémánk pontosan megfogalmazva. A sík tetszőleges kompakt ponthalmazai túl sokan vannak (több mint megszámlálható a számosságuk), így nem azonosíthatók egy véges halmazból képezhető véges jelsorozatok halmazával. A továbbiakban mindig ha egy ponthalmazt kell közölnünk a géppel, akkor egy véges ponthalmazra gondolunk.

Tehát egy új (ebben a pillanatban egy nem teljesen jól leírt) számítási problémával állunk szemben: Adott véges ponthalmaz a síkon és egy irámyított egyenes. Határozzuk meg az adott egyenessel azonos állású támaszegyenest.

Hogy lehet egy ponthalmazt, vagy csak egy pontot kódolni?

Koordinátázással a pont kódja lehet egy valós számpár vagy egy komplex szám.

Példa: Euklideszi koordinátarendszer.

Példa: Polár koordinátarendszer.

Megjegyzés: A valós számoknak nem létezik véges kódolásuk (számossági okok). Mindig feltesszük, hogy a koordináták racionálisok, vagy egészek.

Ezekután elérkeztünk ahhoz a pillanathoz, hogy megfogalmazzuk a támaszegyenes meghatározásának problémáját.

Példa: Támaszegyenes meghatározása
Input = 2n darab természetes szám tízes számrendszerben felírva, kezdő zárójel és csukózárójel, illetve vessző segítségével n darab számpárként vannak felsorolva (az input eddigi része n darab pontot írt le egy K koordinátarendszerben), illetve egy újabb számpár, amely az előzőektől (mondjuk) pontosvesszővel van elválasztva (ez a számpár egy vektort, azaz egy irányítottegyenes állását írja le).
Output = Támaszegyenes egyenletének felírása a K koordinátarendszerben.

Példa: (1213,2312), (7765,4013), (26402,3640), (1326,4032), (8750,17501), (43750,1436), (7501,3946), (50134,6501), (3946,7509), (1347,50139), (47501,9347), (50913,4750), (9134,7509), (1347,5091), (34750,9143), (7509,12650), (42363,17520), (3465,7093), (4650,3146), (50134,67510), (37510,3567), (10345,4610), (3465,13065), (12065,71304), (6501,346510), (36501,3650), (134650,136501), 346501,34650), (13465,40367), (14650,8134), (65013,6501), (3465,9013), (46501,34650), 13650,13650), (13650,136501), (64501,36501), (36540,13675), (9015,9013), (46501,63450), (3165,40324), (6750,43275), (10347,50134), (6501,36501), (34650,13465),  (9013,46501), (3465,90136), (5031,46503), (14650,13624), (5032,64501), (3650,160561), (30561,9065), (9016,50136),  (5401,3265),  (4013,60561),  (3056,13056), (9017,52854), (2754,71257), (13751,43475), (13273,12751), (3751,35717); (35234,32542).

A szemlélet nem használható. Esetleg a miliméter papír sem segíthet. Arra kell gondolnunk milyen lépésekkel (jól leírható, ``számítógép számára is elmagyarázható '') lépéssorozat vezethet el válasz kiszámolásához.


Elérkeztünk az algoritmus elmélet egy újabb fontos alapfogalmához. Definiálnunk kellene az algoritmust. Ez egy nagyon nehéz (az 1930-as években elvégzett) feladat, amely több matematikus munkásságának lényeges része. A talán egyik legelfogadottab definíció Alan Turing által definiált úgy nevezett Turing-gép. Ennek definíciója nem szükséges számunkra.

A továbbiakban egy jóval egyszerűbb módszert követünk. A vizsgált problémától függően definiálunk elemi lépéseket, és minden eljárásunkat ezekből az elemi lépésekből építjük fel.

Először is megjegyezzük, hogy minden általunk vizsgált problémában az input "szétszethető " lesz számokra. Számunkra az elemi lépések az inputban rejlő számokkal és konstansokkal történő alapműveletek (összeadás, kivonás, szorzás, osztás) és összehasonlítások lesznek.

Hogyan írható le egy ilyen algoritmus? Amig számolunk egyszerű a dolgunk. Minden elemi lépésünket felsoroljuk. A leírás kezdete egy körbe írt START-tal kezdődhet. Innen egy lefelé mutató nyíl vezethet az első lépéshez, amiről most feltesszük, hogy számítási lépés. Ezt egy téglalapba írjuk fel. Tehát ebbe a téglalapba felírjuk első alapműveletünket, az eredmény elnevezésével például y=x1y2. Majd egy nyíl vezet lefelé a következő téglalapba, a következő számítási lépeshez, például z=x2y1. És így tovább, például a következő lépés lehet m=y-z. Az eljárás az összehasonlítási lépéseknél lesz bonyolultabb. Az ilyen lépéseket például rombuszokba írhatjuk. Ha például m előjeléra van szükségünk,a kkor m és 0 összehasonlítását kell elvégeznünk, amit m?0 módon jelzünk. Az eredménytől függően eljárásunk szétágazik. A fentieknek megfelelően kódolhatjuk eljárásunk további részét is. Az így kapott diagram egy faszerű strutúra lesz, amely szétágázasait az összehasonlító lépések adják, esetleges hosszú, szétágazás nélküli részein pedig számítások történnek. A fa alján - mondjuk alapjukon álló háromszögekben - az aktuális számítási ág végét jelezzük. A háromszög tartalma az output.

A fentiekben leírt számítási modell neve algbrai döntési fa. Egy konkrét input esetén az algebrai döntési fában egy a tetejéről induló, aljában véget érő, folyamatosan lefelé haladó utat járunk be. Ezt az adott inputhoz tartozó számítási útnak nevezzük. Különböző inputokhoz tartozhat különböző számítási út, de tartozhat azonos is. Persze azonos számítási út esetén az outputok szükségszerűen megegyeznek.

Megjegyzés: A fenti számítási modell leírását nem szakítottuk meg egy technikai kérdés tisztázásával. Ezt tettük annak reményében, hogy ezzel a tárgyalás átláthatóbb lesz. Most azonban kitérünk rá. Mi lesz egy összehasonlítás eredménye? Két lehetőség is van ennek tisztázására: az egyik szerint egy a?b összehasonlítás eredménye a-b előjele, illetve 0 volta. Azaz egy összehasonlításnak három kimenetele lehetséges: a < b, a=b vagy a > b. Egy másik lehetőség szerint az összehasonlítás csak egy tesz ami eldönti, hogy a>b teljesül-e. Azaz az összehasonlításnak két kimenetele lehetséges a>b vagy a<=b. Ennek megfelelően rombuszunkból kettő vagy három felé ágazik szét a számítás. A két lehetőséget talán jobban megvilágítja a következő sport hasonlat. A három kimeneteles összehasonlítás egy futball meccsre hasonlít: eredménye lehet döntetlen (=), illetve valamelyik csapat győzelme. Egy két kimeneteles összehasonlítás esetén gondolhatunk egy két személyes súlyemelő versenyre (tudomásom szerint ilyen nem létezik). Kimentele lehet ``a nyer'' (a>b, a többet emelt), illetve ``b nyer'' (a<= b, b vagy többet emelt mint, vagy azonosat és könnyebb súlya révén nyert). Egy fontos szempont az algoritmus megtervezésénél, hogy két kimeneteles összehasonlítás esetén az a?b, illetve b?a kérdések nem ugyanazok. Három kimeneteles összehasonlítások esetén a két fajta kérdés közt nincs különbség.


Az alábiakban az alapfogalmakat az első példa kidolgozásával világítjuk meg. Ebben a pillanatban az alapfogalmakról elegendő, ha csak egy szemléletes képünk van. Ez és a további példák a szemléletes fogalmakat mélyítik el.

A példa kidolgozása két eset vizsgálatával történik. Az első eset egyszerűbb, de a lényegre koncentrál. A lényeg már a támaszegyenes létezésének biazonyításánál kiderült: egy távolság függvényt kell minimalizálni. Esetünkben n szám közül kell kiválasztani a legkisebbet. A második eset tárgyalása csak alátámasztja korábbi megállapításunkat: az első eset tartalmazza a lényeget.

 
 
1. eset:
A pontok Descartes-féle koordinátarendszerben kódoltak, amely y tengelye párhuzamos az adott irányított egyenessel és az egyenes iránya lefelé mutat.
 

Ekkor az adott ponthalmazunkhoz tartozó pontok x koordinátáik közül kell a minimálisat meghatározni. Természetesen ez a minimális érték csak egy szám (mondjuk a), de ebből a keersett támaszegyenes egyenlete könnyen felírható: ``x=a ''.

Igazából számunkra egy kissé módosított változat lesz hasznos: nem a minimális x koordináta értéket határozzuk meg, hanem egy olyan i indexet, hogy xi értéke ez a minimum legyen. A geometriai interpretációja ennek a módosításnak, hogy nem a támaszegyenest határozzuk meg, hanem ponthalmazunk egy olyan pontját, ami ``megtámasztja '' egyenesünket.

A módosítás új kérdéseket vet fel. Ha a minimum nem csak egy x koordinátánál vevődik fel, akkor mi legyen az output? Kérdésünkre több válasz is adható.

Az olvasót arra kérjük, hogy a továbbiakban gondoljon a legszabadabb probléma kitűzésre. Ha azonban ezt jól átlátja akkor gondolja végig mit kell tennie az ``igényesebb'' output kiszámításához. Mi egy megjegyzésben térünk vissza erre a kérdésre.

Probléma: Adott n valós szám. Melyik (az egyik) minimális közülük?

Megjegyzés: Az eredmény csak az input elemei közötti rendezésen múlik. Összehasonlításokkal megoldható a probléma.

Definíció: Döntési fa fogalma: Az algebrai döntési fa fogalmának egy speciális esete: az elemi lépések között csak az összehasonlítás szerepel. Természetesen tisztázni kell, hogy az összehasonlítások két kimenetelűek vagy három kimenetelűek. Mi a szegényebb modellt vizsgáljuk, azaz két kimenetelű összehasonlításokat engedünk meg.

Megjegyzés: Analógia egy mérési feladattal. Analógia egy teniszversennyel.

Példa: n=4 eset. A megfelelő döntési fa lerajzolása.

Lemma: n-1 összehasonlítással megoldható a probléma.

Megjegyzés: Az algoritmus terevezésénél nagyon nagy szabadsági fokunk van: Csak arra kell ügyelnünk, hogy egyik összehasonlításnál se szerepeljen ``vesztes'' elem.

Lemma: n-1-nél kevesebb összehasonlítással nem oldható meg a probléma.

1. Bizonyítás: Tegyük fel, hogy n-2 összehasonlítást végzünk és tudjuk az eredményt. Definiálunk egy gráfot: csúcsok az input számai, élek az összehasonlított párok. Ismert, hogy egy n pontú n-2 élű gráf nem lehet összefüggő. A legnagyobb elemként az algoritmus által kihirdetett elem valamelyik komponensből jön, a másik komponenssel nincs összehasonlítva. Ellentmondás.

2. Bizonyítás: n-2 mérközés: n-2 vesztes. Azaz hatékony verseny végén lenne legalább két veretlen versenyző is. A versenyeredmény nem lehet fair.

Megjegyzés: A maximum meghatározás történhet duális módon.

Megjegyzés: Mi van, ha a minimális indexű minimális értékű xi-t keressük. Ugyan ez a megoldás működik, de az összehasonlítások feltvésénél erre figyelnünk kell. Ha az összes minimális értékű x koordináta indexét megszeretnénk határozni, akkor egy kicsit bonyolultabb a helyzet. három kimenetelű összehasonlítások esetén tehetjük azt, hogy ***

 
 
2. eset:
Az általános eset
 
A pontok kódolását átírhatjuk olyanná, hogy a korábbi módszerek alkalmazhatók legyenek. Tehát az új algoritmus:
 
 
Koordináta transzformációk
 

Az első bevezető példa általános esetének analízise.

 
 
Nagy ordó jelölés
 

Definíció: Az f és g a természetes számokon értelmezett nem negatív függvények. g= O(f), ha van olyan c szám, hogy g(n)< c. f(n) teljesül elég nagy n-re.

 
 
Módosított 1. alapfeladat
 
Adott egy P véges ponthalmaz és egy félegyenes. Kezdjük el forgatni a félegyenest pozitív irányban és addig forgassuk, amíg P egy pontját nem tartalmazza. Módosított alapfeladatunk annak a helyzetnek a meghatározása, ahol a forgatott egyenes megáll.