240 likes | 538 Views
Algoritmusok. Muhammad Ibn Musa Al'Khwarizmi taskenti bölcs (a XII. században élt) tanítása szerint a célok elérésének legjobb útja az algoritmus. Erről "Algorithm" címmel könyvet írt, amely az élet praktikáit tárgyalja.
E N D
Algoritmusok Muhammad Ibn Musa Al'Khwarizmi taskenti bölcs (a XII. században élt) tanítása szerint a célok elérésének legjobb útja az algoritmus. Erről "Algorithm" címmel könyvet írt, amely az élet praktikáit tárgyalja. Alan Mathison Turing (1912-1954) 1937-ben megalkotta az algoritmus matematikailag pontos fogalmát. Elkészített egy absztrakt (elméleti) gépet, aminek segítségével algoritmuselméleti problémák szimbolikusan kezelhetők, ebben a témakörben tételek mondhatók ki és bizonyíthatók. A modern algoritmuselmélet atyjának tekintjük.
Az algoritmus legáltalánosabb értelemben nem más, mint tervszerűség. Ha egy elvégzendő cselekvéssorozatot lépésről lépésre előre átgondolunk, megtervezünk, úgy is mondhatjuk, hogy algoritmust adunk egy adott cél elérésére. • Azon instrukciók halmazát, melyek egy feladat megoldásához vezetnek, algoritmusnak nevezzük. • Pontos szabályok szerint elvégzett elemi műveletekből álló műveletsor, ahol az intuíciónak nincs szerepe. • Az algoritmus egy olyan előírás, amely alapján egy adott feladat véges számú lépésben megoldható. • Az algoritmus egy út a felvetődött probléma megoldásához. • A feladat megoldásában segítséget nyújtó ötletek, egyértelmű és precíz utasításokként megfogalmazva: ez az algoritmus.
Példák az életből vett algoritmusokra Telefonálás fülkéből (problémamentesen): • bemegyek a fülkébe; • bedugom a kártyát; • felveszem a kagylót; • tárcsázom a számot; • cseng, várok; • felveszik; • beszélünk; • leteszem a kagylót; • kiveszem a kártyát; • kijövök a fülkéből.
Paprikáskrumpli készítése: • elkészítem a lábast, a fedőt és a fakanalat; • összeszedem és előkészítem az "alkatrészeket" (hagyma, krumpli, kolbász, olaj, paprika, só, víz); • a lábasba beteszem az olajat és a hagymát; • felteszem a tűzhelyre és a fakanállal kavargatva megpirítom a hagymát; • megszórom paprikával; • beleteszem a krumplit és a kolbászt; • kevés vízzel felöntöm és lefedem; • főzöm, néha megkavarom; • kész, leveszem a tűzhelyről.
Példák a tudományokból vett algoritmusokra Két tízes számrendszerbeli szám összeadása: • az egyik elemi művelet az, hogy két egyjegyű számot adunk össze: ezeket az összegeket "kívülről" tudjuk; • a másik elemi művelet egy szám eggyel való növelése; • ezek után az összeadás az iskolai szabályok szerint végezhető: ha az egyesek helyén álló számok összege egyjegyű, akkor a következő helyi értéket vesszük, ha "marad" 1, akkor azt "átvisszük". Figyeljük meg, hogy a szabályok száma véges, mégis akármekkora számot képesek vagyunk összeadni.
Kémiai analízis: Tegyük fel, tudjuk, hogy egyetlen fajta só vizes oldata van birtokunkban. Elemi műveletek egész sorát ismerjük: valamilyen reagenst hozzáöntünk, és megfigyeljük, hogy milyen színűvé válik az oldat. Rendelkezésünkre áll egy pontos táblázat, melyből meghatározhatjuk, hogy adott eredmények után melyik reagenst kell használni.A táblázat úgy van megalkotva, hogy sok-sok lépés után végül egyértelműen meg tudjuk állapítani, melyik só oldata a kérdéses. Látszik, hogy intuíciónkra nem támaszkodhatunk.
Számítógépes könyvtári katalógus: Ki kell keresni az M. Lewinsky által írt könyveket. Tegyük fel az egyszerűség kedvéért, hogy a könyvek szerzők szerint betűrendben vannak felsorolva. Egy lehetséges algoritmus a következő: Az elejétől kezdve hasonlítsuk össze a Lewinsky nevet minden szerző nevével. Előbb-utóbb elérkezünk a megfelelő helyre, tehát az algoritmus eredményes lesz.
Nézzünk egy másik algoritmust: Megnézzük a keresett szó első betűjét, az L-et. A műveletek sorrendjében kijelöljük az L betűvel kezdődő szerzőjű művek halmazának az elejét és a végét. Ezek után ismételjük meg ugyanezt a második, majd a harmadik stb. betűvel. Látható, hogy a második algoritmus gyorsabb. Az első akkor lenne hatékonyabb, ha pl. Aachs nevet keresnénk.
Az algoritmusok fajtái Lehet egy algoritmus néhány elemi tevékenység egymás után végrehajtandó (szekvenciális) sorozata. Telefonálás otthonról (lineáris algoritmus): Felveszem a kagylót - tárcsázok - cseng, várok - felveszik - beszélgetünk - leteszem a kagylót.
Lehet, hogy a megoldás bizonyos pontokon nem látható előre és feltételektől függően más és más megoldást kell választanunk (szelektálunk). Telefonálás otthonról (feltételes algoritmus): Felveszem a kagylót - tárcsázok - cseng, várok - az üzenetrögzítő "veszi fel" - hagyjak üzenetet? -nem: leteszem a kagylót; -igen: elmondom az üzenetet - leteszem a kagylót.
Előfordulhat, hogy a megoldás érdekében valamely tevékenységet többször is végre kell hajtani, vagy ismételni (iterálni) kell. Lehet, hogy az iterációk számát előre tudjuk, lehet, hogy az ismételt végrehajtásnak feltétele van. Telefonálás otthonról (ciklikus algoritmus): ::Felveszem a kagylót - tárcsázok - foglalt - leteszem a kagylót:: - cseng, várok - felveszik - beszélünk - leteszem a kagylót.
Az algoritmus struktúráját tehát szekvenciák, szelekciók, illetve iterációk adják, amelyeket tetszőleges mélységben egymásba lehet ágyazni. Az algoritmus tulajdonságai: egyértelmű, determinisztikus, véges, redundáns lépéseket nem tartalmaz.
A fenti, általunk jól ismert számos példa alapján értjük, hogy mi az algoritmus, de az eddig megadott definíciók nem alkalmasak arra, hogy matematikailag pontos állításokat tegyünk, sőt bizonyítsunk. Turing angol matematikus még a számítógépek elterjedése előtt hozott létre egy modellt az emberi gondolkozás leírására. Ezt a modellt hívjuk Turing-gépnek.
A Turing-gép ismertetéséhez előbb a véges automata fogalmára van szükség: Gondoljunk egy véges sok alkatrészből álló berendezésre, ami véges sokféle jelet képes "befogadni", és véges sokféle jelet tud "kiadni". Ilyen pl. egy jegykiadó automata. A bemenő jelek a bedobott érmék, a kimenő jelek pedig a kiadott jegyek. Ami nagyon fontos: bármilyen sok alkatrésze is van ennek az automatának, a belső állapotainak a száma véges.
A Turing-gép áll egy mindkét irányban végtelen szalagból, ami kis négyzetekre van osztva, és egy véges automatából, aminek író-olvasó feje a szalagon fut. Az automata egy kiinduló állapotból indul, elolvassa a jelet, amit lát. A belső állapotának és az olvasott jelnek a függvényében kiír egy új jelet a régi helyére, az olvasófejet vagy balra, vagy jobbra elmozdítja, vagy helybenhagyja, és a belső állapotát is átviszi egy új állapotba. Ezek után megismétli ugyanezt, már az új belső állapot és az új olvasott jel alapján, és így tovább, egészen addig, míg egy olyan belső állapotba kerül, amit végállapotnak nevezünk. Ekkor a gép megáll. Ami a szalagra eredetileg volt írva, az a bemenő sorozat (input), ami megállás után áll a szalagon, az az eredmény (output).
0 1 1 0 0 1 VÉGES AUTOMATA
Végezzük el két szám összeadását Turing-géppel: Legyenek a szalagra írható jelek az egyjegyű számok, meg egy "üres jel". A szalagon számolás előtt a két összeadandó szám áll, közöttük egy üres jel, a számok előtt és után üres jelek állnak a végtelenségig. A véges automatában pedig benne vannak az elemi műveletek, az "átvivés", és annak leírása, hogy a fejet ide-oda kell mozgatni a két szám között. A megállás után a két összeadandót követő üres jel után fog állni az eredmény.
Az 1936-ban Alonzo Church amerikai logikus bizonyította be, hogy van olyan feladat, amely algoritmussal nem oldható meg. De le lehet-e írni minden algoritmust Turing-géppel? A tapasztalat azt mutatja, hogy igen. Eddig még senki nem tudott olyan algoritmust adni, amit nem lehet Turing-géppel utánozni. A Church-tézis szerint minden algoritmikus feladat elvégezhető Turing-géppel.
Az algoritmusok áttekinthető formában történő leírására szolgáló eszközök Folyamatábra: Alapelveit Neumann dolgozta ki. Az egyes szerkezeti elemek között nyilakkal jelöljük a végrehajtási sorrendet. Alakzatai: téglalap - értékadó utasítás vagy eljárás; rombusz - elágazás; paralelogramma - adatáramlás; kör - vezérlő utasítás.
START STOP 5 5
Struktogram: Gépfüggetlen, nyelvfüggetlen algoritmus leíró nyelv. Az egyes szerkezeti elemeket különböző téglalapba foglalható ábrákkal jelöljük. Az utasítások egyforma sorokként jelennek meg a téglalap belsejében, a be- és kivitelt rövidítés, a nem elemi lépést megvastagított keret jelzi. A szerkezetek egymásba ágyazhatók, de vonalaik nem keresztezhetik egymást. (Az így megtervezett programok nem használnak ugró utasítást, az egyes nagyobb szerkezeti elemek eljárásokban és függvényhívásokban valósulnak meg.)
Tevékenység1 Tevékenység2 Feltétel Feltétel1 Feltétel2 Egyébként Tevékenység Tevékenység Tevékenység
Mondatszerű leírás: Az anyanyelvi megfogalmazáshoz hasonló, de annál tömörebb leírási mód. Az algoritmust mondatok sorozatával adjuk meg. Annyiban tér el a folyamatos írástól, hogy bizonyos szabályokat be kell tartanunk, a struktúrák képzésére megállapodás szerinti formákat és szavakat használunk.
Be- és kivitel: Be: ... felsorolás ... [megszorítások] Ki: ... felsorolás ... [kiírási formák] Szekvencia: Tevékenység1 Tevékenység2 Tevékenység3 Szelekció: Ha Feltétel akkor Ha Feltétel akkor Tevékenység(ek) Tevékenység(ek)1 Elágazás vége egyébként Tevékenység(ek)2 Elágazás vége