730 likes | 859 Views
Algoritmikus kalandok J. Hromkovič könyvéről. Benczúr András ELTE IK Juraj Hromkovič: ” Algorithmic Adventures (From Knowledge to Magic)” Springer-Verlag Berlin Heidelberg 2009. Készült az „Önálló lépések a tudomány területén” projekt támogatásával: ELTE TÁMOP-4.2.2/B-10/1-2010-0030.
E N D
Algoritmikus kalandok J. Hromkovič könyvéről Benczúr András ELTE IK Juraj Hromkovič: ” Algorithmic Adventures (From Knowledge to Magic)” Springer-Verlag Berlin Heidelberg 2009. Készült az „Önálló lépések a tudomány területén” projekt támogatásával: ELTE TÁMOP-4.2.2/B-10/1-2010-0030 1
Előszó – motiváció A számítástudomány mindennapi képének kritikája: Azonosítják az ECDL-lel. Középiskolások nem veszik komolyan – nem tekintik tudományos diszciplínának, csupán számítógép-használati készségek. Csak azért kell, mert mindenki használ számítógépet, A szoftver ipar szűklátókörű: saját termékeik használatát akarják tanítani. 3
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? 1.1. Áttekintés: Mit fejezünk fel a fejezetben? A számítástudomány (CS) megalapozásának, mint önálló kutatási diszciplínának története, érthető, szórakoztató módon. Benyomás arról, hogyan fejlődik a tudomány, milyenek a számítástudomány építőkövei. A számítástudomány néhány alapkutatási kérdése, átfedései más tudományterületekkel. Áttekintés a többi fejezetről. 4
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? 1.2. Ingatag alapokon áll-e a tudomány épülete? Hogyan mutatható be egy tudományos diszciplína? Rossz mód: eredmények gyűjteménye, mindennapi alkalmazások bemutatása (Példa: fizika) A számítógépet kivéve, a berendezések, eszközök használatát soha nem tekintettük tudománynak. Miért gyakoriak az alábbi felfogások? CS = speciális szoftverek használatának képessége CS oktatás (közismereti)=ICT készségek oktatása, jó ez? A félreértelmezést a számítógépek relatíve (más eszközhöz) magas bonyolultsága okozza? Nagy a tömeges használat – mint autóvezetőké. 5
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? Közfelfogás félreértése a CS lényegéről. Egyre több tapasztalat igazolja, hogy a számítógépek használatának oktatása nem igényel új, speciális tantárgyat. Alapkérdés: Mi a CS? Nem arról szól, hogyan használjuk a számítógépeket. Nem meta tudomány, nem természettudomány, nem műszaki tudomány. Szoftver – mérnöki jelleg elméleti alapok – matematikai jelleg Zavaros a közismereti kép. Viták, tisztázás; l. Dennig: mit mondtunk a kiszámításról? Mi a matematika? 6
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? Hogyan alapozható meg tudományos diszciplína? Melyek alapvető építőkövei? Tudományok belső nyelvezetei, fogalmai – hosszú fejlődés eredménye. Példák: „valószínűség”, végtelen”, „energia”, „anyag”, „Élet” Konkrétan: definiáljuk a „szék” fogalmát. Fogalmak alkotása- tudomány alapvető tárgya. A „számítástudomány” mihez kötődik: az „algoritmus” fogalmához. 7
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? A tudomány axiómáiról „Az axiómák a tudomány alap-komponensei. Olyan fogalmak, meghatározások és tények, amelyek érvényességéről és igazságáról határozottan meg vagyunk győződve, jóllehet nincs semmilyen lehetőségünk, hogy bebizonyítsuk korrektségüket.” Egyik ilyen axióma: korrektül gondolkozunk, érvelésünk megbízható. A „gondolkodás axiómája: Ha A implikálja B-t igaz, és A is igaz (teljesül) akkor B is igaz (teljesül).” Esik az eső – nedves a mező – boldog a szalamandra. Direkt és indirekt bizonyítás. Pl.: a nem racionális. 8
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? Ez az axióma a korrekt érvelés axiómája, az implikáció formális fogalma a formális gondolkodásban. Axiómák revíziója: jobbal helyettesíti a régit. Axiómák felett épül a tudomány épülete, korrekt építéssel. Matematika – legerősebb ebben az értelemben. A helyes axiómákból való levezetés helyessége implikálja a levezetett eredmény helyességét. 9
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? 1.3. A számítástudomány eredete, mint egy eufória vége XIX. Század vége – tudomány, technika nagy vívmányai – ok és okozat láncokkal minden megmutatható. „Az ember a természet minden törvényét fel tudja fedezni.” Ember ugyan nem lenne képes a sok részecske együttes viselkedését kezelni; fizikusok „démon” kísérlete, aki meghatározná a jövőt. Elvetették; káosz és kvantumjelenségek – a véletlen. A számítástudomány keletkezése Hilbert hitének cáfolatához kötődik: „létezik egy módszer minden matematikai probléma megoldásához”. 10
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? Hilbert illúziója pontosabban megfogalmazva: Mindenféle matematika létrehozható véges sok axióma gyűjteményéből kiindulva. Az így létrehozott matematika teljes abban az értelemben, hogy a matematika nyelvén kifejezett minden állítás vagy igazolható, vagy cáfolható. És létezik egy módszer, amely eldönti egy állítás korrektségét. Kulcskérdésünk: mi a „módszer” (metódus, eljárás, METHOD) ? Mit értettek abban az időben alatta? „Egy probléma (feladat) megoldására szolgáló módszer (method) egy hatékony lépéssorozat leírása, amely elvezet a probléma megoldásához. A leírásnak olyan utasításokból kell állnia, amit bárki elvégezhet. ( Még ha nem is matematikus.)” 11
1. A számítástudomány fejlődésének rövid története, avagy a számítástudomány miért nem számítógép-vezetői jogosítvány? Példa: másodfokú egyenlet megoldó eljárások. (Legelső ilyen példáink: összeadás, kivonás, szorzás, osztás írásban) Ezeket al-Khwarizmi után „algoritmusnak” nevezzük. Hilbert törekvése: „algoritmizálni” a teljes matematikát. (Automatikus bizonyítások) 12
1931. Kurt Gödel: Nem létezik semmilyen (értelmes) teljes matematikai elmélet. Minden korrekt és elég „nagy” matematikai elméletben (pl. Peano aritmetika) megfogalmazható olyan állítás, melynek igazsága nem bizonyítható az elméleten belül. Teljesülésének bizonyításához újabb axiómák kellenek, építeni kell nagyobb elméletet. Nem létezik metódus (algoritmus) matematikai tételek bizonyítására. Negatív: eldönthetetlenségi tulajdonság, nem teljesség Pozitív: végtelen sokáig bővíthető A tétel hatása a tudományra: ez váltotta ki a számítástudomány kialakulását. Miért? A metódust (algoritmust ) formálisan definiálni kell. A nemlétezés igazolásához ez elengedhetetlen. 13
1936. Alan Turing: Az első, formális definíció az algoritmus fogalmára: A Turing- gép (a-gépnek nevezte): véges állapotú automata írható-olvasható szalaggal. Turing-kiszámítás, Turing-algoritmussal megoldható feladatok definíciója. (Egy Turing-kiszámítást bárki elvégezhetne, csak idő, ceruza és papír kell elegendő.) Church-tézis: minden egyéb definíció ugyanazt adja az algoritmikusan megoldható feladatokra. (Nem bizonyított.) Turing definíciója- az algoritmus axiómája; a számítástudomány első axiómája. Még a kvantum-számítások sem lépnek ki belőle. A könyv itt tudatosan nem adja meg a pontos definíciót. Inkább egy egész fejezetet szentel annak, hogy felépítse az algoritmus és program fogalmának helyes megértését. 14
1.4. A számítástudomány története és a könyv felfogása A számítástudomány alapkérdése: „Vannak-e problémák (feladatok), amelyeket nem lehet automatikusan (algoritmussal) megoldani? Ha igen, milyen feladatok oldhatók meg, és milyenek nem?” Nem válaszolja meg közvetlenül, történetileg viszi végig, bárki számára érthetően. Nehéz fogalom, (egyetemi első két évben egyik legnehezebb), három fejezetet szentel rá. A könyv itt tudatosan nem adja meg a pontos definíciót. Inkább egy egész fejezetet szentel annak, hogy felépítse az algoritmus és program fogalmának helyes megértését. Fejezetek rövid bemutatása: 2. Fejezet: „Algoritmika, avagy mi a közös tevékenysége a programozásnak és a sütésnek?” Sütés lépései – számítógép lépései – végtelen sok feladatpéldány Algoritmus és program fogalma, eltérései 15
3. Fejezet: „A végtelen nem egyenlő a végtelennel, avagy miért végtelenül fontos a végtelen a számítógéptudósok számára” Miért van véges világunkban szükség a végtelenre, a tetszőlegesen nagyra? Hogyan függ össze az automatikus megoldhatóság határaival? Matematikai fogalmak, hogyan használható a végtelen. 4. Fejezet: „Kiszámíthatóság, avagy miért léteznek olyan feladatok amelyeket nem lehet megoldani semmilyen számítógéppel vezérelt programmal? Hogyan bizonyítható ilyenek léte? A visszavezetés módszere negatív állítás bizonyítására. Algoritmikusan megoldhatatlan probléma létezésének bizonyítása. 5. Fejezet: „Bonyolultságelmélet, avagy Mit tegyünk, ha az egész Univerzum összes energiája sem elég egy kiszámítás elvégzésére? Komplexitás – munkamennyiség /lépésszám, erőforrások használata/ Feladatok osztályozása – „majdnem megoldások” – lehetőségek a következő fejezetekben 16
1.4. A számítástudomány története és a könyv felfogása 6. Fejezet: „A véletlen szerepe a természetben, avagy a véletlen, mint algoritmusok hatékonyságának forrása” „Pénzfeldobás” használata algoritmusban Csak nagy valószínűséggel jó eredmény szemben a biztos jó eredménnyel, amit gép hiba miatt nem kapunk meg (időben). . 7. Fejezet: „Kriptográfia, avagy hogyan változtassunk gyenge pontokat előnyössé? Megbízható - nehezen feltörhető titkos kódok. Nyilvános – titkos kódpár. Protokollok. 8. Fejezet: „DNA számítás, avagy biokomputer a láthatáron?” Probléma vetítése DNA szekvenciákra, kémiai számítás A,T,C,G „jelek”. Bázispárok. Kérdés: lesz-e biokomputer? 17
1.4. A számítástudomány története és a könyv felfogása 9. Fejezet: „Kvantumszámítás, avagy kiszámítás a részecskék varázsvilágában.” Számolás q-bitekkel – igen gyors lehet. Nem tud többet, mint a Turing-gép. 10. Fejezet: „Hogyan jussunk jó döntésre ismeretlen jövőre nézve, avagy hogyan járjunk túl egy ravasz ellenfél eszén?” On-line stratégiák, véletlenítés. 1.5. Összegzés A bevezetett alapfogalmak listája, A számítástudomány feladata: nehéz feladatokhoz megoldás. 18
2. Algoritmika (algoritmusok), avagy mi a közös a sütésben és a programozásban? 2.1. Áttekintés: Mit találunk majd a fejezetben? Fontos kezdet: az alapnyelv megadása; a technika nyelve. Az algoritmusok intuitív fogalma formális matematika nélkül, mi az és mi nem az? Recept –mennyire algoritmus? Számítógép és programozás – algoritmus érthető reprezentálása számítógép számára. Gépi kódú programozásról alapelképzelés. Algoritmikus probléma – végtelen sok problémapéldányra működjön, véges lépésben. 19
2. Algoritmika (algoritmusok), avagy mi a közös a sütésben és a programozásban? 2.1. Algoritmikus sütés Algoritmus meghatározása felé: „Egy algoritmus nem más, mint egy tevékenység könnyen érthető leírása, ami egy cél eléréséhez vezet.” „Az algoritmus (metódus) egyszerű, egyértelmű tanács, hogyan haladjunk lépésről lépésre célunk eléréséhez.” Milyen értelemben tekinthető egy recept algoritmusnak? Példa: 26 cm-es barackos lepény receptje, 11. lépés. Követelmény algoritmusra nézve: „Legyen egzakt leírása a soron következő tevékenységnek, úgy, hogy aki semmit nem tud arról, hogyan vezet a lépés a kívánt célhoz, az is sikeresen végre tudja hajtani. Legyen független a végrehajtás interpretációitól, minden alkalmazása ugyanahhoz az eredményhez vezessen.” . 20
2. Algoritmika (algoritmusok), avagy mi a közös a sütésben és a programozásban? 2.2. Algoritmikus sütés Mi kell még a sütési „algoritmushoz”: „egyetértés az (elemi műveletek) utasítások listájában, amire minden utasítás bárki által elvégezhető, aki főzni vagy sütni akar.” (főzd, amíg fehár tojáshabbá válik, vagy elég kemény lesz főzés során – ciklus is lehet rá) Finomítja a receptet, folyamatábra. Már majdnem egyértelmű lett. . 21
2. Algoritmika (algoritmusok), avagy mi a közös a sütésben és a programozásban? 2.3. Mi a helyzet a számítógépes algoritmusokkal? Mi a különbség az algoritmusos főzés és az algoritmusos számítás között? Mi is pontosan egy számítógép-algoritmus ,egy számítógép-program és mi nem az? Rögzíteni kell: mit tud (milyen utasításokat, műveleteket ) egy számítógép kétségen kívül végrehajtani. (tipikus műveletek) Mint lépések sorrendje – főzés és számítógépes algoritmus hasonló. Eltérés: főzés - alapanyagból étel lesz – számítógépes: végtelen sok feladatpéldány, Az algoritmus definíciójának második követelménye: . 22
2. Algoritmika (algoritmusok), avagy mi a közös a sütésben és a programozásban? 2.3. Mi a helyzet a számítógépes algoritmusokkal? Az algoritmus definíciójának második követelménye: „Egy problémát megoldó algoritmusnak biztosítania kell, hogy a probléma minden előfordulására korrektül működjön. A korrekt működés azt jelenti, hogy minden inputra véges időben befejezi működését, és a korrekt eredményt biztosítja.” Példa : másodfokú egyenlet megoldása, négyzetgyökvonás megengedett lépésként. Programot kell rá írni: számítógépes utasítások szekvenciája; program. Számítógép érti. Kiszámításos szemantikája lesz. Programozás: algoritmus átírása programmá., számítógépes nyelvre. Ez egyben bizonyítja, hogy a természetes nyelven leírt algoritmus automatikusan végrehajtható. Részletes példák a „TRANSPARENT” egyszerű gépre. . 23
2. Algoritmika (algoritmusok), avagy mi a közös a sütésben és a programozásban? 2.4. Soha nem ér véget (szándék nélkül)? Kiszámítási algoritmus – véges lépésben fejeződjön be. Megállás halting probléma: „Algoritmus A megáll x-en; A mindig megáll.” Végtelen ciklusba futó program készülhet. .Példa: 100 C˚ -ig melegítés 10s-onként, 3000m magasan. Egyszerű programok végtelen ciklusra: ciklus, feltétel soha nem lesz nulla. Ismeretlen hosszú szekvencia (számok sorozata) beolvasása. Direkt címzéssel: „végtelen” hosszú program. Indirekt címzéssel: kifut a memóriából. 24
2. Algoritmika (algoritmusok), avagy mi a közös a sütésben és a programozásban? 2.5. Összegzés Elvárások algoritmusra: Általános-egyszerű aktivitások listája. Minden probléma-példányra adjon eredményt Minden példányra véges lépésben adjon eredményt. Záró: Egy algoritmus implementálható egy programozási nyelven írt programként. Egy program olyan algoritmus-reprezentáció, amely megérthető egy számítógép számára. A program nem az algoritmus szinonimája, csupán utasítások szekvenciája számítógép számára. Utasítások szekvenciája nem vezet feltétlenül értelmes megoldáshoz. (Értelmes válasz, véges időben.) 25
3. A végtelen nem egyenlő a végtelennel, avagy miért végtelenül fontos a végtelen a számítástudományban? 3.1. Miért van szükségünk a végtelenre? Nem csak matematikai játék? Szükséges véges világunk vizsgálatához. Tipikus végtelenek: természetes számok, egyenes pontjai. Nem láthatunk aktuális végtelent. Végtelen kis mennyiségek felé. Fizika. Számítástudományban: végtelen sok lehetőség végtelen sok program, lehet végtelen futás Algoritmusok , garantált véges futással Végtelen sok feladat, végtelen sok feladatpéldánnyal 26
3.1. Miért van szükségünk a végtelenre? Kérdés: csak egy végtelen van? Több algoritmikus feladat van, mint program. Nem lehet mindent automatizálni. Léteznek feladatok, amelyekhez nem létezik algoritmus, nem lehet semmilyen számítógéppel megoldani. 3.2. Cantor elve végtelenek összehasonlítására. Halmaz fogalma – páronként elkülönülő elemekből áll. Juhász módszer fekete és fehér bárányokra. (nem kell megszámlálás) Párosítás (matching) definíciója: A, B halmazok, az (a,b) párok halmaza párosítás, ha a ϵ A és b ϵ B A minden eleme pontosan egy pár első eleme. B minden eleme pontosan egy pár második eleme. Ha van párosítás, akkor A és B ugyanakkora: |A| = |B|. Végtelen halmaz A, ha létezik valódi része B, hogy |A| = |B|. 27
Példák: Hotel Hilbert, Z(0), Z(1), …, Z(i), … szobákkal N, Q, R : az természetes számok, racionális számok, valós számok halmaza Műveletek a végtelennel (A Föld és az univerzum pontjainak száma azonos) |N| = |Q| |Nk| = |N| Ha |A| = |N| ,akkor egy párosítás az A halmaz elemei beszámozza. 3.3.Vannak különböző végtelen méretek, avagy miért van több valós szám, mint természetes szám? Ki tudjuk-e mutatni, hogy nincs párosítás N és R+ között? A nemlétezés bizonyítása általában nehéz. Cantor-féle átlós módszer 28
4. A kiszámíthatóság határai, avagy miért léteznek feladatok, amelyeket nem lehet automatikusan megoldani számítógéppel? 4.1. Cél Vannak különböző végtelenek, ha egy halmaz „elég nagy” nem lehet beszámozni. Kiszámítási feladatok száma > algoritmusok száma. Lehet érdektelen. Van-e gyakorlatban is fontos megoldhatatlan feladat? Ez a legnehezebb fejezet! Alapvető, érteni kell, pontosan kell interpretálni, szemléltetni. 30
4.2. Hány program létezik? Első válasz: végtelen sok. (programhossz érv) Célkitűzés: bizonyítani, hogy számosságuk |N| . Véges jelhalmaz (alfabéta, ÁBC) felett megadható véges szövegekre tipikus felsorolás: hossz, azon belül lexikografikus sorrend. Minden program – szöveg egy ábécé felett. (Értelmetlen , szintaktikusan hibás szövegeket kizárjuk.) Kompájler „szintaktikailag” ellenőrzi, azt nem tudja ellenőrizni, hogy „szemantikusan” hogy algoritmus-e? Tehát: programok száma: |N| . Miért fontos? A lehetséges kiszámítási feladatok száma ennél nagyobb. (A legkisebb számosság |N| .) A programok felsorolása: P1 , P2 , P3 ,…, Pi ,… Problem(c): Input: természetes szám, n; Output: a c valós szám első n decimális jegye. A feladathalmaz számossága: |R| . Tehát nincs mindhez program. 31
4.2. Hány program létezik? „Azok a valós számok, amelyeknek van véges reprezentációja, pontosan az algoritmusok által generálható számok. Vannak olyan valós számok, amelyek nem rendelkeznek véges leírhatósággal, tehát nem kiszámíthatók. (Majdnem mind ilyen.) Ez érdekes, de az algoritmusok szempontjából nem fontos kérdés. Ezek a faladatok nem írhatók le végesen. Van-e végesen leírható, és algoritmussal megoldhatatlan feladat,? 4.3. YES vagy NO, az itt a kérdés, avagy a diagonalizálás újabb alkalmazása Döntési feladat: amire az egyértelmű és helyes válasz „YES” vagy”NO”. A legegyszerűbb ilyen döntési feladat: Az (N , M) ,döntési probléma, ahol M az N részhalmaza. Input: egy természetes szám, n ϵ N Output: „YES”, ha n ϵM, „NO”, ha nem. Kérdés: az (N , M) ,döntési problémák száma? 32
. 4.3. YES vagy NO, az itt a kérdés, avagy a diagonalizálás újabb alkalmazása Kérdés: az (N , M) ,döntési problémák száma? Az A algoritmus felismeri M-et, másként megoldja az (N , M) döntési problémát, ha minden n ϵ N -re véges időben a megfelelő választ adja. Ekkor a probléma eldönthető. Cél: konkrét, végesen definiálható eldönthetetlen feladat találása. Nézzük a bővebb lehetőséget: a programok világát. Minden algoritmushoz van program, de nem minden program algoritmus. Legyen M az N egy részhalmaza, és P egy program. a P program elfogadja M-et, ha (i) kiírja „YES”-t, ha n ϵM, (ii) outputja „NO”, vagy végtelen sokáig fut, ha nem teljesül n ϵM. A P programhoz M(P) jelöli az általa elfogadott halmazt. Bináris reprezentálás- végtelen 0-1 sorozattal: az i-edik bit 1, ha elfogadja, 0, ha nem (lehet végtelen futás!) Hipotetikus táblázat! Programok felsorolása- két dimenziós végtelen táblázat., 0-1 értékekkel kitöltve. Átlót komplementáljuk – amit kaptunk: DIAG halmaz, lehet-e programja? 33
. 4.3. YES vagy NO, az itt a kérdés, avagy a diagonalizálás újabb alkalmazása Átlót komplementáljuk – amit kaptunk: DIAG halmaz, lehet-e programja? Programja, PDIAG , úgy viselkedne, hogy i-hez az ellenkezőjét végezné, mint Pi . M(DIAG)-hoz nem létezhet program, nem eldönthető. Megjegyzés: HA lenne hozzá program, sorszáma legyen n, de akkor n-re az ellenkezőjét végezné, mint saját maga. (Másik értelmezés: Pn az n helyen nincs értelmezve. Ez a parciális rekurzív függvények univerzális függvényére így működik.) Miért hipotetikus ez? Mert ha P nem áll meg az i bemenetre, akkor nem tudjuk megvárni, mi lenne a bit értéke. Vagyis, ilyenkor bizonytalan, mi lenne DIAG értéke. Nem lehet DIAG-ot algoritmussal előállítani. Majd erre visszatérünk a HALT problémánál. . 4.4. A redukciós (visszavezetéses) módszer, avagy hogyan lehet negatív eredmények elérésére használni egy problémák megoldásában sikeres módszert? „Nem nehezebb mint”, „könnyebb vagy ugyanolyan nehéz” viszonyok problémák között: Ha U2 algoritmusos megoldhatósága garantálja U1 algoritmussal való megoldhatóságát. Jelölés: 35
. .4.4. A redukciós (visszavezetéses) módszer, A visszavezetés sémája: Input y A1 algoritmus az U1 probléma megoldására A1 algoritmus az U1 probléma megoldására Algoritmus B x A megoldja U -t Az x példányra A2 Algoritmus C 36
Két fontos probléma: UNIV, az univerzális probléma: Input: egy P program és egy i ϵ N inputja. Output: YES, ha i ϵ M(P), azaz P elfogadja i-t, NO, ha P nem fogadja el i-t, azaz megáll és NO-t ír ki, vagy végtelen futása van. Megjegyzés: kitölthető lenne a „hipotetikus” táblázatunk, ha ez algoritmussal megoldható. Szerepe: a program tesztelése, korrekt választ ad-e? HALT, a megállási probléma: Input: egy P program és egy i ϵ N inputja. Output: YES, ha P megáll i-n, azaz YES vagy NO kiírást készít, NO, ha P nem áll meg i-n. Szerepe: a program tesztelése, algoritmus-e? 38
Egyforma nehezek: : Bizonyítása: visszavezetéssel: HALT algoritmusa megnézi, megáll-e P az i inputon. -Ha megáll, véges lépésben P megadja a helyes YES vagy NO választ, ez lesz UNIV válasza is. -Ha HALT szerint P nem áll meg, vagyis HALT válasza NO, akkor UNIV is a NO válasz adja. Visszavezetés: Ötlet: a P program az „output” lépéseket a befejezéskor hajtja végre. Írjuk át a programkódban az „output NO” lépést „output YES” lépéssé, kapjuk a P’ programot. A P’ programra és i bemenetre az UNIV algoritmusa akkor és csak akkor ad YES választ, ha P véges lépésben ad választ. Tehát HALT is ennek megfelelően válaszol. 39
Az M(DIAG) probléma: Állítás: Visszavezetés: konstruálunk ADIAG algortimust Készítsünk algoritmust, (Agen ), amely generálja sorban az első, második, és így tovább programot. (Kódhossz, lexikografikus sorrend, szintaktikus elfogadás szerint ez lehetséges.) Az i-edik Pi . Az AUNIV algoritmus véges lépésben eldönti, hogy Pi elfogadja-e i-t. Ha YES lesz AUNIV válasza, akkor ADIAG válasza legyen NO, Ha NO lesz AUNIV válasza, akkor ADIAG válasza legyen YES. Tehát, ha van AUNIV algoritmus, akkor van Adiag algoritmus is, vagyis (N,M(DIAG)) eldönthető . DE úgy láttuk, (N,M(DIAG))-hoz program sem létezhet , tehát algoritmus sem. Megjegyzés: A könyv bizonyítottnak tekintette korábban a hipotetikus táblázat alapján (N,M(DIAG)) eldönthetetlenségét. Nincs erre szükség, másként is ellentmondásra jutunk: Ha AUNIV algoritmus, akkor a konstruált is ADIAG az. Akkor van hozzá program, a felsorolásban szerepelnie kell, legyen Pi . Mi lesz Pi válasza az i bemenetre? 40
Az M(DIAG) probléma: Példa: Legyen M0 azoknak a P programoknak halmaza, amelyekre M(P) az üres halmaz, vagyis P vagy NO-t válaszol, vagy nem áll meg. Algoritmussal nem dönthető el, hogy egy program benne van-e M0 -ban. Általános állítás: „Minden szintaktikus kérdés, hogy egy szöveg programkód-e, algoritmussal eldönthető. Algoritmussal meg tudjuk konstruálni az i-edik programot. A program jelentésére vonatkozó bármely szemantikus kérdés vagy probléma algoritmikusan eldönthetetlen.” Megjegyzés: Függ-e az egész tárgyalás a program (nyelv) megválasztási lehetőségektől? Válasz: Church tézis; a Turing-gépre vonatkozó axióma! 42
5. Bonyolultságelmélet, avagy mit tegyünk, ha az Univerzum összes energiája sem elegendő egy kiszámítás elvégzéséhez? 5.1. Bevezetés a bonyolultságelmélethez A „megoldható-e” kérdést az 1960-as évektől felváltotta a „hogyan oldható meg” kérdés. (teljesítmények növekedése, egyre nagyobb feladatok optimalizálás, szimuláció) Kérdés: meddig fog dolgozni egy algoritmus, van-e hatékonyabb algoritmus? „Azért nem vagyunk képesek egy probléma megoldására hatékony megoldást találni, mert az algoritmusokban túl szegények ismereteink? Vagy léteznek olyan algoritmussal megoldhatatlan feladatok, amelyek nem tesznek lehetővé semmilyen hatékony algoritmusos megoldást (azaz léteznek –e praktikusan megoldhatatlan problémák annak ellenére, hogy algoritmussal megoldhatók?)” 43
5.1. Bevezetés a bonyolultságelmélethez Ez vezetett a bonyolultságelmélet kibontakozásához. Bebizonyosodott, hogy rendkívül nagy számítási igényű feladatok is vannak. „Algoritmikus megoldhatóság nem jelent a kezelhetőséget ( praktikus megoldhatóságot.)” Technikailag nehéz terület. Az alapfogalmakat, az építkezés elemeit mutatja be. 44
5.2. Hogyan mérjük a kiszámítási bonyolultságot? Bonyolultság – központi fogalom a számítástudományban, ugyanúgy, mint az algoritmus fogalma. Matematikai precizitással: Algoritmus matematikai modellje (pl. Turing-gép) Bonyolultság mérése: a számítógép (automata) modell végrehajtott utasításainak száma, felhasznált „adattár” mérete. Egyszerűsített tárgyalás: Az A algoritmus megoldja az U feladatot, „Az A bonyolultsága az I feladatpéldányon a kiszámításához számítógép-utasítások száma. Ez A időbonyolultsága I -n. Az A tár/tér-bonyolultsága az I feladatpéldányon a programban használt változók száma, és ezáltal a gép regisztereinek (memóriaegységeinek ) száma, amit A-nak I-n való kiszámításához fel kell használni.” 45
5.2. Hogyan mérjük a kiszámítási bonyolultságot? Konkrét példák, számolások mérésekhez. Másodfokú polinom kiértékelése, polinom kiértékelése, Hatványozás: x16 , x32 , x45 Növekvő számok: x értéke 16 bit, 32 bit, … Egyszerűsítő feltevés: számok mérete rögzített. Ettől még a feladat nőhet. Példa: n-ed fokú polinom, méretparaméter: fokszám, n. Időbonyolultsága: 2n+1 szorzás és n összeadás. (Horner) „Egy A algoritmus TimeA időbonyolultsága az input méretének fügvénye, TimeA(n), amely méri azoknak a műveleteknek a számát, amelyek szükségesek és elégségesek bármely n méretű feladat A felhasználásával történő megoldásához.” A legnehezebb példány bonyolultságát mérjük. 46
5.3. Miért hasznos a bonyolultsági mérték? Időbonyolultság – megbecsülhetővé teszi a szükséges végrehajtási időt. Összehasonlítható két algoritmus hatékonysága. Példák függvények növekedésére. A domináló növekedés – nagy méretnél csak ez számít. Lineáris, négyzetes, exponenciális,- Összehasonlítások. 47
5.4. A kezelhetőség határai Cél: a nehézség mérhetősége, általánosan Melyek a kezelhető, gyakorlatilag megoldható algoritmikus problémák? Első javaslat definícióra: „Egy U probléma bonyolultsága a legjobb (idő-optimális) algoritmus bonyolultsága, amely U-t megoldja.” Nem jó, nincs is mindig „legjobb” algoritmus. Ezért alsó és felső bonyolultsági határt kell definiálni: Definíció:„Legyen U egy feladat, és A egy tetszőleges megoldó algoritmusa. Ekkor TimeA(n) az U feladat felső korlátja. Az f(n) függvény U időbonyolultságának alsó korlátja, ha nem létezik U-ra olyan B megoldó algoritmus, amire (véges sok n kivételével) TimeB(n) ≤ f(n).” 48
5.4. A kezelhetőség határai Ezzel sok minden kimutatható. Léteznek tetszőleges nagy bonyolultságú (nehéz) feladatok: Pl. : (Megjegyzés: a kiszámítható növekedésnek van felső határa, de az már nem kiszámítható.) A felső korlát általában könnyebben meghatározható. Alsó korlát, igen nehéz lehet: nem létezést kell bizonyítani. A szakadék c*n és 2n között sok problémára még nem ismert. Kérdés: „Melyek az algoritmussal megoldható problémák közül a gyakorlatban megoldhatók?” Általános megegyezés: a polinom időbonyolultságúak. A „nagy” n-re megoldhatóság határa függ a teljesítménytől. Moore-törvény; amíg exponenciális a teljesítmény növekedése, a mai „túl nagy” n pár év múlva kezelhető lesz.. 49
5.4. A kezelhetőség határai A P osztály (polinom időbonyolultság, PTIME). Gyakorlati érv: Kísérleti tapasztalatok. Nagy kitevő esetén csak kis n reális. Plinom-algoritmus találása egy-egy problémához a probléma jobb megértéséhez vezetett. A P osztályt nem tekintjük túl nagynak. 2. Elméleti érv: A P osztályba tartozás nem függ a kiszámítási modelltől (Church tézisre utalás!); nem lehet programozási nyelv, kiszámítási modell segítségével behozni egy feladatot a P osztályba. A P-beliség vagy nem P-beliség általános érvényű. 50