INFORMATIKAI ALGORITMUSOK I. Iványi Antal alkotó szerkesztő ELTE Informatikai Kar, Budapest, 2009 A könyv elektronikus megjelenítése az Oktatási Minisztérium támogatásával, a Felsőoktatási Tankönyv– és Szakkönyvtámogatási Pályázat keretében történt. Alkotó szerkesztő: Iványi Antal Szerzők: Kása Zoltán (1.), Járai Antal és Kovács Attila (2.), Jörg Rothe (3. és 4.), Gyires Tibor (5.), Iványi Antal és Claudia Leopold (6.), Eberhard Zehendner (7.), Szidarovszky Ferenc (8.), Vizvári Béla (9.), Ulrich Tamm (10.), Balogh Ádám és Iványi Antal (11.), Demetrovics János és Sali Attila (12.), Miklós István (13.), Ingo Althöfer és Stefan Schwarz (14.), SzirmayKalos László (15.), Elek István és Sidló Csaba (16.), Galántai Aurél és Jeney András (17.) Szakmai lektorok: Recski András (1.), Ivanyos Gábor (2.), Gonda János (3.), Rónyai Lajos (4.), Lakatos László (5.), Sima Dezső (6. és 7.), Mayer János (8.), Csirik János (9.), Fridli Sándor (10.), Varga László (11.), Kiss Attila (12.), Katsányi István (13.), Szántai Tamás (14.), Vida János (15.), Meskó Attila (16.), Szántai Tamás (17.) Nyelvi lektor: Biró Gabriella Fordítók: Láng Zsuzsa (3.), Sidló Csaba (4.), Roszik János és Sztrik János (5.), Szakács Laura (7.), Pintér Miklós (8.), Sike Sándor (10.), Belényesi Viktor és Nikovits Tibor (14.) A könyv címoldalán – a Szépművészeti Múzeum engedélyével és az ELTE Informatikai Karának támogatásával – Vasarely Victor Dirac című festménye látható. A borítóhoz felhasznált filmet a GOMA RT. bocsátotta rendelkezésünkre. A borítót Iványi Antal tervezte. © Ingo Althöfer, Balogh Ádám, Belényesi Viktor, Biró Gabriella, Csirik János, Demetrovics János, Elek István, Fridli Sándor, Galántai Aurél, Gonda János, Gyires Tibor, Iványi Anna, Iványi Antal, Ivanyos Gábor, Járai Antal, Jeney András, Katsányi István, Kása Zoltán, Kovács Attila, Láng Zsuzsa, Claudia Leopold, Locher Kornél, Mayer János, Meskó Attila, Miklós István, Nikovits Tibor, Pintér Miklós, Recski András, Roszik János, Rónyai Lajos, Jörg Rothe, Sali Attila, Stefan Schwarz, Sidló Csaba, Sima Dezső, Sike Sándor, Szakács Laura, Szántai Tamás, Szidarovszky Ferenc, Szirmay-Kalos László, Sztrik János, Ulrich Tamm, Varga László, Vida János, Vizvári Béla, Eberhard Zehendner, 2005 Kiadja az ELTE Informatikai Kara 1117 Budapest, Pázmány Péter sétány 1/C. Telefon: 381-2139, Fax: 381-2140 Honlap: http://www.inf.elte.hu/ Elektronikus cím: itcs@inf.elte.hu Felelős kiadó: Kozma László Előszó Az informatikai algoritmusok magyar nyelvű szakirodalma az utóbbi huszonöt évben alakult ki. Az első szakkönyvet Lovász László és Gács Péter [300] írta 1978-ban. Ezt a könyvet fordítások követték: 1982-ben Aho, Hopcroft és Ullman [5] könyve, 1987-ben Knuth háromkötetes [259] [260] [261] monográfiája, majd 1987-ben Cormen, Leiserson és Rivest [89] műve. 1999-ben újra hazai szerzők következtek – Rónyai Lajos, Ivanyos Gábor és Szabó Réka [407] – majd 2002-ben megjelent Lynch [306] Osztott algoritmusok című monográfiája. Ezt 2003 tavaszán Iványi Antal [227] Párhuzamos algoritmusok című könyve, majd 2003 őszén – Új algoritmusok címmel – Cormen, Leiserson, Rivest és Stein tankönyvének [90] fordítása követte. A magyar informatikus hallgatók és gyakorlati szakemberek nagy érdeklődéssel fogadták az Új algoritmusokat – néhány hónap alatt a kiadott 2000 példány fele gazdára talált. Ez ösztönözte ennek a könyvnek a hazai szerzőit, hogy – külföldi kollégáik segítségével – további 31 informatikai terület algoritmusait is összefoglalják. Az összegyüjtött anyagot nyomtatott formában az ELTE Eötvös Kiadó adta ki, két kötetben: az első 2004 októberében, a második 2005 áprilisában jelent meg. Az első kötetbe azok a fejezetek kerültek, amelyek szeptemberig elkészültek. A könyv tartalmát hat részre osztottuk: Alapok, Hálózatok, Diszkrét optimalizálás, Folytonos optimalizálás, Adatbázisok és Alkalmazások. Az első kötetbe azok a fejezetek került, amelyek szeptemberig elkészültek. Minden fejezet bemutat egy alkalmazási vagy elméleti szempontból lényeges területet és azokhoz kapcsolódó algoritmusokat. Az algoritmusok többségét szóban és olyan pszeudokóddal is megadjuk, amely a programozási tapasztalattal rendelkező olvasók számára könnyen érthető. Az első kötet 247 ábrát, 157 pszeudokódot és 133 példát tartalmaz, amelyek elősegítik a tárgyalt algoritmusok működésének megértését. Az önálló tanulást az alfejezetek végén lévő gyakorlatok (összesen 269), az egyes témákban való elmélyülést pedig a fejezetek végén lévő (összesen 66) feladatok segítik. A fejezetek anyagával kapcsolatos friss és kiegészítő ismeretekre való utalások találhatók a fejezetek végén lévő Megjegyzések a fejezethez című részben. Az irodalomjegyzékben megadjuk egyrészt a felhasznált szakirodalom bibliográfiai adatait, másrészt – teljességre törekedve – felsoroljuk a magyar nyelvű forrásokat. Az algoritmusok bemutatása az igényelt erőforrások – elsősorban futási idő és memória – elemzését is magában foglalja. A szakirodalomban szokásos módon felső korlátokat adunk meg a legrosszabb esetre jellemző erőforrásigényre, és esetenként a megoldandó probléma erőforrásigényére jellemző alsó korlátot is levezetünk. A könyv kéziratát HLaTeX és HHeRMeS kiadványszerkesztő eszközök segítségével készítettük, melyeket az elmúlt nyolc év során Belényesi Viktorral és Locher Kornéllal fejlesztettünk ki, és korábban már öt könyv kéziratának előállítására használtunk. Az ábrák többségét Locher Kornél rajzolta. Az irodalomjegyzéket Iványi Anna tette élővé. Garey és Johnson klasszikus művét [150] követve mindazon algoritmusok futási idejét exponenciálisnak nevezzük, amelyekre nem adható polinomiális felső korlát. Az Új algoritmusok példáját követve tizedespontot használunk. Mindig különös gondot fordítunk könyveink külsejére. Az adott esetben olyan megoldást kerestünk, amely tükrözi a könyv tartalmi gazdagságát (az első kötet 17 és a második kötet hasonló számú fejezetét) és az alkotók szoros kötődését mind Magyarországhoz, mind pedig Európához. Úgy gondoljuk, hogy a pécsi születésű Vásárhelyi Viktor – aki francia festőként Victor Vasarely néven vált világhírűvé – képeire jellemző a formák és színek gazdagsága, életútja pedig tükrözi kultúránk európai kötődését. A budapesti és pécsi múzeumokban összesen közel 500 Vasarely-alkotás van. Ezek a művész ajándékai – a szülőföld iránti hála és tisztelet szimbólumai. Vasarely gazdag életművéből a könyv alkotói és majdani Olvasói segítségével választottunk. A szavazók a Dirac, Kubtuz, Rikka, Sixa és a Tupa-fond című képeket emelték ki. Közülük két olyan képet – a Dirac és a Kubtuz című festményeket – választottuk, amelyeken szakaszokból kör alakul ki – szemléltetve az informatika azon alapvető tulajdonságát, hogy a folytonos valós világot diszkrét objektumokkal (bitekkel) írja le. Közismert, hogy az elmúlt évszázadban nemcsak művészeink, hanem sok kiváló tudósunk is külföldön ért fel a csúcsra. Nagy részükre azonban folyamatosan számíthat a hazai oktatás és tudományos élet. A hálózati szimulációs fejezet szerzője Gyires Tibor (Illinois Egyetem), a játékelméleti fejezetet pedig Szidarovszky Ferenc (Arizonai Műszaki Egyetem) írta. A második kötetben a megbízhatóságról szóló fejezetet Gács Péter (Bostoni Egyetem) írta, a belsőpontos módszerekről szóló fejezet egyik szerzője pedig Terlaky Tamás (McMaster Egyetem). Ma mind a négy szerző az adott terület vezető kutatója, amerikai egyetemek professzora – egykor magyar egyetemen tanultak, majd tanítottak. Az első kötetben lévő rekurziós fejezet, valamint a második kötetben automatákkal és formális nyelvekkel foglalkozó fejezet szerzője Kása Zoltán (Babe¸sBolyai Tudományegyetem), a szisztolikus rendszerekről szóló fejezetet Szakács Laura (Babe¸s-Bolyai Tudományegyetem) fordította németről magyarra. Részvételük a könyv megszületésében a határainkon túli magyar nyelvű oktatással való szoros kapcsolatunk része. Könyvünk tartalmi gazdagsága jó külföldi – elsősorban német – kapcsolatainknak is köszönhető. Az első kötet kriptográfiai és bonyolultságelméleti fejezetét Jörg Rothe (Düsseldorfi Egyetem), szisztolikus rendszerekkel foglalkozó fejezetét Eberhard Zehendner (Friedrich Schiller Egyetem) írta. Az adattömörítési fejezet szerzője Ulrich Tamm (Chemnitzi Egyetem), a párhuzamos programozásról szóló fejezet egyik szerzője Claudia Leopold (Kasseli Egyetem), az ember-gép kapcsolatokkal foglalkozó fejezet szerzői Ingo Althöfer és Stefan Schwarz (Friedrich Schiller Egyetem). A második kötet Osztott algoritmusok című fejezetének szerzői Burkhard Englert (Californiai Állami Egyetem), Dariusz Kowalski Max Planck Intézet (Saarbrücken), Grzegorz Malewicz (Alabamai Egyetem), Alexander Shvartsman (Connecticuti Egyetem). A fejezet szerzőinek életútja alapján mondhatjuk, hogy ez a fejezet a lengyel-magyar barátság eredménye. Az alkotók (szerzők, lektorok, fordítók és segítőtársaik) többsége a hazai informatikai felsőoktatás meghatározó intézményeinek – Budapesti Corvinus Egyetem, Budapesti Műszaki és Gazdaságtudományi Egyetem, Budapesti Műszaki Főiskola, Debreceni Egyetem, Eötvös Loránd Tudományegyetem, Miskolci Egyetem, Pécsi Tudományegyetem, Szegedi Tudományegyetem – oktatója. Az Oktatási Minisztérium támogatásának köszönhetően a nyomtatott tankönyv mindkét kötete nagyon kedvező áron juthat el az Olvasókhoz. Az internet széleskörű elterjedésével együtt nő a digitalizált formában elérhető – olvasható, letölthető, nyomtatható – oktatási segédanyagok jelentősége. Magyarországon körülbelül a kilencvenes évek közepétől vált egyre gyakoribbá, hogy – például a BME, DE, ELTE, SZTE lelkes oktatói – előadásaik anyagát, feladatsorokat hallgatóik számára digitális formában is hozzáférhetővé tettek. Ezek közül az ismertebbeknek a listája megtalálható mind nyomtatott [227], mind pedig elektronikus [223] formában. A Magyar Elektronikus Könyvtár [363] és a debreceni Mobidiák Könyvtár szervezetten készíti és gyűjti a digitalizált informatikai anyagot. Az OM 2004-es pályázatának segítségével jelenleg közel 100 digitalizált tankönyv található a Kempelen Farkas Digitális Felsőoktatási Tankönyvtárban [193], melyek közül körülbelül tíz könyv informatikával vagy matematikával foglalkozik. Érdemes megemlíteni az elsősorban szépirodalmi művek digitalizált változatait készítő Neumann Házat [351]is.Ebbe a folyamatba illeszkedik az informatika háromszögesítésére [40] [222]irányuló programunk, melyet 2003-ban indítottunk útjára. Ennek lényege, hogy az informatikai ismeretanyagot fokozatosan olyan háromszögekkel fedjük le, melyek A típusú csúcsa egy olcsó nyomtatott tankönyv, B típusú csúcsa a nyomtatott tankönyv ingyenes elektronikus változata, C típusú csúcsa pedig egy DVD-n közreadott ingyenes könyvtár (ez a csúcs közös több háromszög számára). Ennek a programnak a kibontakozásához nagy segítséget jelent, hogy az OM az 1997 óta minden évben meghirdetett tankönyvtámogatási pályázatát 2004ben kibővítette a digitális tartalmak előállításának támogatásával. A Párhuzamos algoritmusok háromszög A csúcsa 2003-ban [227] jelent meg, B csúcsa [223] pedig 2005-ben. Az Informatikai algoritmusok 1 háromszög A csúcsa 2004-ben, B csúcsa pedig 2005-ben jelent meg. Az OM mind a négy csúcs létrehozását támogatta. A Bevezetés a programozásba háromszög A [144] és B [143] csúcsa is közel van a megvalósításhoz – várhatóan 2005-ben mindkettő megjelenik. Az A csúcs létrehozását az ELTE IK, a B csúcs létrehozását az OM támogatja. Az Informatikai algoritmusok 2 háromszög A csúcsának megjelenése 2005. áprilisában várható – az OM támogatásával. A B típusú csúcsok az ELTE IK http://Elek.inf.elte.hu című könyvtárában HTML, PDF és PS formában is szabadon hozzáférhetők – mind teljes könyvként, mind pedig fejezetenként. Nyomtatásra a PS, képernyőn hiperszövegként való olvasásra (szövegen belüli és a más honlapokra való ugráshoz) a PDF és HTML, keresésre a PDF és a HTML formát ajánljuk. A PS például a Ghostview, a PDF az Acrobat Reader, a HTML pedig az Internet Explorer vagy Mozilla Firefox felhasználásával jeleníthető meg. Valamennyi ajánlott program szabadon letölthető. A teljes elektronikus könyv a Kempelen Farkas Digitális Felsőoktatási Tankönyvtárban is elérhető. Az elektronikus változat tartalmilag is gazdagabb a nyomtatottnál: névmutatót, bizonyos gyakorlatok megoldását, a kötetben előforduló szakkifejezések angol– magyar és magyar-angol szótárát is tartalmazza. Ugyanakkor az elektronikus változat azt is tükrözi, hogy ez az első komoly kísérletünk sokszerzős elektronikus tankönyv közreadására: az ,,egyszerű” képleteket a HHermes nevű LaTeX2HTML fordító állította elő, míg a ,,bonyolultakat” a DVI2PDF fordítóval és Acrobat Readerrel előállított GIF formában illesztettük be a kéziratba. A HHermesnek komoly gondot jelentenek a betűközök. Igyekeztünk kézzel segíteni, de a figyelmes Olvasó valószínűleg talál mind hiányzó, mint felesleges betűközt. A könyv megszületése részben a Hermes-projekt vezetőjének, Romeo AnghelacheÚrnak (Max Planck Intézet, Golm) köszönhető: tanácsaival folyamatosan segíti a HHermes fejlesztését. A B típusú csúcsok teljes könyvként a http://www.hik.hu/index.asp?r=90,261 címen lévő Kempelen Farkas Felsőoktatási Digitális Tankönyvtárban is elérhetők. Az első C típusú csúcsot – kísérleti jelleggel CD-n – 2005 tavaszán készítjük el. A tapasztalatokat hasznosítva 2005 őszére tervezzük az első DVD elkészítését (a DVD-ket a nyomtatott könyvekbe téve fogjuk terjeszteni). Az informatika háromszögesítésére irányuló törekvésünk sikere több, előre nehezen látható körülménytől is függ (például a nyomtatott és elektronikus változatok együttes felhasználása, az Olvasók és a kiadók érdekeinek különbözősége, a színvonalas elektronikus kiadványok elkészítésének nagy munkaigénye). Ezért munkánkban nagy segítséget jelentenek az ELTE Informatikai Karának azon hallgatói, akik egy-egy – szakmai érdeklődésüknek megfelelő – fejezet lektorálása mellett folyamatosan véleményezik a munka eredményeit, segítenek a tervek alakításában: Burcsi Péter (Komputeralgebra), Dévai Gergely (Bonyolultságelmélet), Szabados Kristóf (Párhuzamos számítások), Szendrei Rudolf (Adattömörítés), Benyó Tamás (Memóriagazdálkodás), Bánsághy Anna (Bioinformatika), Germán László (Számelmélet), Hevér Andrea (Fordítóprogramok, Részben strukturált adatbázisok), Szabó Gábor (Osztott algoritmusok), Sleinitz István (Petri-hálók) Az alábbi kollégáknak köszönjük, hogy a tervezett könyv mindkét formáját támogatták: Fazekas Gábor egyetemi docens (Debreceni Egyetem Informatikai Karának dékánhelyettese), Imreh Balázs egyetemi docens (Szegedi Egyetem), Kása Zoltán egyetemi tanár (BBTE Matematikai és Informatikai Karának dékánhelyettese), Kozma László egyetemi docens (ELTE Informatikai Karának dékánja), Jörg Rothe egyetemi tanár (Heinrich Heine Universit¨at, Düsseldorf ), Sima Dezső főiskolai tanár (Budapesti Műszaki Főiskola Neumann János Informatikai Karának főigazgatója), Sidló Csaba PhD hallgató (ELTE Informatikai Doktori Iskola), Szeidl László egyetemi tanár (Pécsi Tudományegyetem Matematikai és Informatikai Intézet igazgatója), Szidarovszky Ferenc egyetemi tanár (Arizonai Műszaki Egyetem), Szirmay-Kalos László egyetemi tanár (BME Villamosmérnöki és Informatikai Kara), Terlaky Tamás egyetemi tanár (McMaster Egyetem, Hamilton). Ugyancsak köszönjük azoknak a kollégáinknak a segítőkészségét, akiknek a véleményét csatolni tudtuk a pályázathoz: Fekete István egyetemi docens (Rekurziók című fejezet), Fridli Sándor egyetemi docens (Adattömörítés), Gonda János egyetemi docens (Kriptográfia), Hunyadvári László egyetemi docens és Katsányi István PhD hallgató (Bioinformatika), Kiss Attila egyetemi docens (Relációs adatbázisok tervezése), Tőke Pál egyetemi docens (Hálózatok szimulációja), Vida János egyetemi docens (Grafika).Köszönet illeti azokat – Bánsághi Anna programtervező matematikus hallgató (ELTE), Benyó Tamás programtervező matematikus hallgató (ELTE), Biró Gabriella (programtervező matematikus), Csörnyei Zoltán egyetemi docens, (ELTE), Gyires Tibor egyetemi tanár (Illinois Egyetem), Imrényi Katalin tanszéki előadó (ELTE), Iványi Anna program koordinátor (CEEWEB), Iványi Antal (villamosmérnök), Kása Zoltán egyetemi tanár (BBTE), Kurucz Miklós programtervező matematikus hallgató (ELTE), Locher Kornél programtervező matematikus hallgató (ELTE), Rét Anna szerkesztő (Műszaki Könyvkiadó), Rónyai Lajos egyetemi tanár (BME), Sima Dezső főiskolai tanár (BMF), Szabados Kristóf programtervező matematikus hallgató (ELTE), Szendrei Rudolf programtervező matematikus hallgató (ELTE), Szidarovszky Ferenc egyetemi tanár (Arizonai Műszaki Egyetem), Szirmay-Kalos László egyetemi tanár (BME), Takács Dániel programtervező matematikus hallgató (ELTE) – akik észrevételeikkel segítettek a könyvünk alapjául szolgáló mű, az Informatikai algoritmusok I első kiadásának javításában. A későbbiekben szeretnénk mind az első nyomtatott kiadás, mind az elektronikus kiadás hibáit kijavítani. Ezért kérjük a könyv Olvasóit, hogy javaslataikat, észrevételeiket küldjék el a tony@inf.elte.hu címre – levelükben lehetőleg pontosan megjelölve a hiba előfordulási helyét, és megadva a javasolt szöveget. Olvasóink javaslataikkal, kérdéseikkel megkereshetik a könyv alkotóit is (címük megtalálható a kolofonoldalon). Budapest, 2005. április 10. Iványi Antalalkotó szerkesztő I. ALAPOK Bevezetés Ebben az alapozó részben négy témakört tárgyalunk. Az informatikai algoritmusok elemzése során gyakran előfordul, hogy például felismerjük az n és n+1 méretű feladatok megoldási ideje közötti kapcsolatot – és ennek az úgynevezett rekurzív egyenletnek a felhasználásával szeretnénk közvetlenül felírni az n méretű bemenethez tartozó futási időt. Az első fejezet a rekurzív egyenletek leggyakrabban előforduló típusainak megoldási módszereit mutatja be. A mai számítógépek sebessége és tárolókapacitása, valamint az elméleti eredmények számos olyan feladat kényelmes (mechanikus) megoldását lehetővé teszik, melyeket korábban nem, vagy csak nagy nehézségek árán tudtunk kezelni. Ezek egy része – mint a formális differenciálás és integrálás – a második fejezetben tárgyalt komputeralgebrához tartozik. Az elektronikus kommunikáció hatalmas iramú terjedésével együtt nő a kommunikáció biztonságának jelentősége. Ezért a mai informatika egyik kulcsfontosságú területe a kriptográfia, mellyel a könyv harmadik fejezete foglalkozik. Az algoritmusok elemzésének hagyományosan fontos része az erőforrásigény legrosszabb esetre vonatkozó felső korlátjának megadása. Az csak az utóbbi 15 évben vált természetessé, hogy az erőforrásigényre vonatkozó – a probléma és a megengedett algoritmusok tulajdonságain alapuló – alsó korlátokat is megadnak. Például Donald Knuth The Art of Computer Programming című monográfiájának 1968-ban megjelent első kötetében szerepelt az aszimptotikus felső korlátok jellemzésére használt O-jelölés (nagy ordo) definíciója – ugyanakkor még nem szerepelt az alsó korlátok jellemzésére alkalmas Ω-jelölés, valamint a pontos nagyságrend megadására alkalmas Θ-jelölés. Az Introduction to Algorithms 1990-ben megjelent első kiadásában, a Distributed Algorithms 1996-ban megjelent első kiadásában, valamint Knuth könyvének 1997-ben megjelent harmadik kiadásában már az Ω-jelölés és a Θ-jelölés definíciója is szerepel. A negyedik fejezet szerint a bonyolultságelmélet fontos feladata, hogy a problémákhoz és számítási modellekhez minél pontosabb alsó korlátokat adjon meg – ezzel is segítve a problémák erőforrásigény szerinti osztályozását. A második kötetben fog megjelenni az algebra, az automaták és a formális nyelvek, a fordítóprogramok, a megbízható számítások és a számelmélet algoritmusait bemutató fejezet. 1. Rekurzív egyenletek (Kása Zoltán) Közismert a Fibonacci-számok rekurzív definíciója: ha Fn jelöli az n -edik Fibonacci-számot, akkor F0=0,F1=1,Fn+2=Fn+1+Fn, ha n0. Szeretnénk explicit formában megadni Fn értékét tetszőleges n-re. A feladat tulajdonképpen olyan egyenlet megoldását kéri, amelyben az ismeretlen rekurzív módon van megadva, ezért rekurzív egyenletnek hívjuk. Itt a megoldás felfogható úgy, mint természetes számokon értelmezett függvény, mivel Fn minden n-re értelmezett. Az ilyen rekurzív egyenletet szokás még differenciaegyenletnek is nevezni, de nevezhetnénk akár diszkrét differenciálegyenletnek is. 1.1. definíció. A kadrendű rekurzív egyenlet (k1) egy f(xn,xn+1,...,,xn+k)=0,n0(1.1) alakú egyenlet, ahol xn-et kell explicit formában megadnunk. Ahhoz, hogy egyértelműen meghatározhassuk xn-et, meg kell adnunk k kezdőértéket, ezek általában x0,x1,...,xk1. Ezek az értékadások kezdeti feltételeknek tekinthetők. Mivel a Fibonacci-számokat definiáló egyenlet másodrendű rekurzív egyenlet, ezért ott két kezdeti értéket adunk meg. Az (1.1) egyenletet és annak adott kezdeti feltételeit kielégítő xn=g(n) sorozatot az adott egyenlet partikuláris megoldásának nevezzük. Ha az xn=h(n,C1,C2,...,Ck) sorozatból – a C1,C2,...,Ck állandók alkalmas megválasztásával – az (1.1) egyenlet minden partikuláris megoldása előállítható, akkor a sorozatot az egyenlet általános megoldásának nevezzük. A rekurzív egyenletek megoldása általában nem egyszerű. A következőkben sajátos esetekben alkalmazható módszereket ismertetünk. Az írásmódban függvény helyett inkább sorozatot használunk (ami tulajdonképpen természetes számokon értelmezett függvény). Így a jelölés egyszerűbb lesz, x(n) helyett mindenhol xn-et írunk. A fejezet három részből áll. Az 1.1. alfejezetben a lineáris rekurzív egyenletek megoldásával, a 1.2. alfejezetben a generátorfüggvények felhasználásával, az 1.3. alfejezetben pedig lineáris rekurzív egyenletek numerikus megoldásával foglalkozunk. 1.1. Lineáris rekurzív egyenletek Ha a rekurzív egyenlet f0(n)xn+f1(n)xn+1++fk(n)xn+k=f(n),n0 alakú, ahol f,f0,f1,...,fk természetes számokon értelmezett függvények, f0,fk0, és xn-et kell explicit módon megadnunk, akkor lineáris rekurzív egyenletről beszélünk. Ha f azonosan nulla, akkor az egyenlet homogén, és különben inhomogén. Amennyiben az f0,f1,...,fk függvények mindegyike állandó, akkor állandó együtthatós lineáris rekurzív egyenletről van szó. 1.1.1. Állandó együtthatós homogén lineáris rekurzív egyenletek Legyen a0xn+a1xn+1++akxn+k=0,nk,(1.2) ahol a0,a1,...,ak valós állandók, a0,ak0,k1. Amennyiben adva van k kezdeti érték – leggyakrabban x0,x1,...,xk1 – az egyenlet megoldása egyértelműen meghatározható. A megoldás érdekében rendeljük hozzá az egyenlethez a karakterisztikus egyenletét:a0+a1r++ak1rk1+akrk=0,(1.3) amely valós együtthatós egyenlet. Ennek az egyenletnek k gyöke van a komplex számok körében. Behelyettesítéssel ellenőrizhető, hogy ha r0 valós megoldása a karakterisztikus egyenletnek, akkor C0r0n megoldása az (1.2) egyenletnek, ahol C0 tetszőleges állandó. Az (1.2) egyenlet általános megoldása xn=C1xn(1)+C2xn(2)++Ckxn(k), ahol xn(i) ( i=1,2,...,k ) az (1.2) egyenlet lineárisan független megoldásai. A kezdeti feltételekből mindig meghatározhatók a C1,C2,...,Ck állandók egy k egyenletből álló egyenletrendszer megoldásával. A lineárisan független megoldásokat a karakterisztikus egyenlet gyökei szolgáltatják a következők szerint. Minden gyökhöz hozzárendelhető egy fundamentálisnak nevezett megoldás. Különböző valós gyökök Legyenek r1,r2,...,rp a karakterisztikus egyenlet egymástól különböző valós gyökei. Ekkor r1n,r2n,...,rpn megoldásai az (1.2) rekurzív egyenletnek, és C1r1n+C2r2n++Cprpn(1.4) is az, tetszőleges C1,C2,...,Cp állandókra. Ha p=k, akkor (1.4) a rekurzív egyenlet általános megoldása. 1.1. példa. Oldjuk meg az xn+2=xn+1+xn,x0=0,x1=1 rekurzív egyenletet. A karakterisztikus egyenlet r2r1=0, amelynek gyökei r1=1+252,r2=1252. Ezek valósak és egymástól különböznek, tehát az egyenlet általános megoldása xn=C1(1+252)n+C2(1252)n. A C1 és C2 meghatározhatók a kezdeti feltételekből. Ha figyelembe vesszük, hogy x0=0,x1=1, a következő egyenletrendszerhez jutunk: C1+C2=0,C11+252+C21252=1. Az egyenletrendszer megoldása C1=1/25,C2=1/25. Így az általános megoldás xn=125(1+252)n125(1252)n, amely éppen Fn, az n -edik Fibonacci-szám. Többszörös valós gyökök Legyen r egy p-szeres gyöke a karakterisztikus egyenletnek. Ekkor rn,nrn,n2rn,...,np1rn megoldásai az (1.2) rekurzív egyenletnek (az r többszörös gyökhöz tartozó fundamentális megoldások), és (C0+C1n+C2n2++Cp1np1)rn(1.5) is megoldás, tetszőleges C0 , C1,...,Cp1 állandókra. Ha a karakterisztikus egyenletnek nincs más gyöke, akkor (1.5) a rekurzív egyenlet általános megoldása. 1.2. példa. Oldjuk meg az xn+2=4xn+14xn,x0=1,x1=3 rekurzív egyenletet. A karakterisztikus egyenlet r24r+4=0, amelynek r=2 kétszeres gyöke. Ekkor xn=(C0+C1n)2n megoldása az egyenletnek. A kezdeti feltételekből C0=1,2C0+2C1=3. Innen C0=1 , C1=1/2 , azaz az általános megoldás xn=(1+12n)2n vagy xn=(n+2)2n1. Egyszeres komplex gyökök Ha a trigonometrikus alakban felírt a(cosb+isinb) komplex szám gyöke a karakterisztikus egyenletnek, akkor az a(cosbisinb) konjugált is az, mivel a karakterisztikus egyenlet valós együtthatós. Ekkor ancosbn és ansinbn megoldása az (1.2) rekurzív egyenletnek és C1ancosbn+C2ansinbn(1.6) is az, tetszőleges C1 és C2 állandókra. Ha a karakterisztikus egyenletnek nincsenek más gyökei, akkor (1.6) általános megoldás. 1.3. példa. Oldjuk meg az xn+2=2xn+12xn,x0=0,x1=1 rekurzív egyenletet. A karakterisztikus egyenlet r22r+2=0, amelynek gyökei 1+i és 1i , trigonometrikus alakban: 22(cos(π/4)+isin(π/4)) és 22(cos(π/4)isin(π/4)) . Ezért a rekurzív egyenletnek xn=C1(22)ncosnπ4+C2(22)nsinnπ4 megoldása. A kezdeti feltételekből C1=0,C122cosπ4+C222sinπ4=1. Innen azt kapjuk, hogy C1=0,C2=1 . Az általános megoldás tehát xn=(22)nsinnπ4. Többszörös komplex gyökök Ha a trigonometrikus alakban felírt a(cosb+isinb) komplex szám p -szeres gyöke a karakterisztikus egyenletnek, akkor az a(cosbisinb) konjugált is az. Ekkor az (1.2) rekurzív egyenletnek ancosbn,nancosbn,...,np1ancosbn és ansinbn,nansinbn,...,np1ansinbn megoldásai. Ekkor megoldás (C0+C1n++Cp1np1)ancosbn+(D0+D1n++Dp1np1)ansinbn is, ahol C0,C1,...,Cp1,D0,D1,...,Dp1 tetszőleges állandók, amelyek meghatározhatók a kezdeti feltételekből. Ez általános megoldás, ha a karakterisztikus egyenletnek nincsenek más gyökei. 1.4. példa. Oldjuk meg az xn+4+2xn+2+xn=0,x0=0,x1=1,x2=2,x3=3 rekurzív egyenletet. A karakterisztikus egyenlet r4+2r2+1=0, amely (r2+1)2=0 alakban is írható, és amelynek i és i kétszeres gyöke. Ezek trigonometrikus alakja i=cosπ2+isinπ2, valamint i=cosπ2isinπ2. Ezért az általános megoldás xn=(C0+C1n)cosnπ2+(D0+D1n)sinnπ2. A kezdeti feltételekből következik: C0=0,(C0+C1)cosπ2+(D0+D1)sinπ2=1,(C0+2C1)cosπ+(D0+2D1)sinπ=2,(C0+3C1)cos3π2+(D0+3D1)sin3π2=3, azaz C0=0,D0+D1=1,2C1=2,D03D1=3, és innen C0=0 , C1=1 , D0=3 és D1=2 . Az általános megoldás tehát xn=(32n)sinnπ2ncosnπ2. A most vizsgált négy eset segítségével bármilyen állandó együtthatós homogén egyenletet megoldhatunk. 1.5. példa. Oldjuk meg az xn+3=4xn+26xn+1+4xn,x0=0,x1=1,x2=1 rekurzív egyenletet. A karakterisztikus egyenlet r34r2+6r4=0, amelynek gyökei: 2, 1+i és 1i . Ezért az általános megoldás xn=C12n+C2(22)ncosnπ4+C3(22)nsinnπ4. Az állandók meghatározása után xn=2n1+(22)n2(cosnπ4+3sinnπ4). Általános megoldás Az (1.2) k-adrendű homogén lineáris rekurzív egyenlethez rendelt karakterisztikus egyenletnek összesen k gyöke van a komplex számok között, amelyek nem feltétlenül különbözők. Legyenek ezek a gyökök a következők: r1 valós, p1-szeres (p11), r2 valós, p2-szeres, (p21) , . . . rt valós, pt-szeres, (pt1), s1=a1(cosb1+isinb1) komplex, q1 -szeres (q11), s2=a2(cosb2+isinb2) komplex, q2 -szeres (q21), ) . . . sm=am(cosbm+isinbm) komplex, qm -szeres (qm1). Mivel összesen k gyök van, p1+p2++pt+2(q1+q2++qm)=k. Ekkor az (1.2) rekurzív egyenlet általános megoldása xn=j=1t(C0(j)+C1(j)n++Cpj1(j)npj1)rjn(1.7)+j=1m(D0(j)+D1(j)n++Dqj1(j)nqj1)ajncosbjn+j=1m(E0(j)+E1(j)n++Eqj1(j)nqj1)ajnsinbjn, ahol C0(j),C1(j),...,Cpj1(j),j=1,2,...,t,D0(l),E0(l),D1(l),E1(l),...,Dpl1(l),Epl1(l),l=1,2,...,m állandók, melyek a kezdeti feltételekből meghatározhatók. Az eddigiek a következő tételben foglalhatók össze. 1.2. tétel. Legyen k1 egész, a0,a1,...,ak valós számok, a0,ak0. Az (1.2) lineáris rekurzív egyenlet általános megoldása előállítható az (1.3) karakterisztikus egyenlet ri gyökeiből képezett njrin alakú tagok lineáris kombinációjaként, ahol a pi-szeres ri gyök esetében 0j<p és a lineáris kombináció együtthatói a kezdeti feltételektől függnek. A tétel bizonyítását az Olvasóra hagyjuk (lásd 1.1-5. gyakorlat). A megoldás lépéseit a következőképpen foglalhatjuk össze. 1.1.2. Állandó együtthatós inhomogén lineáris rekurzív egyenletek Az állandó együtthatós inhomogén lineáris rekurzív egyenlet általános alakja a0xn+a1xn+1++akxn+k=f(n),(1.8) ahol a0,a1,...,ak valós állandók, a0,ak0,k1 , és f(n) nem azonosan nulla. Az egyenlethez tartozó (1.2) homogén lineáris egyenletet az 1.2. tétel szerint meg tudjuk oldani. Ha ismerjük az (1.8) egyenlet egy partikuláris megoldását, akkor az (1.8) egyenlet általános megoldását is elő tudjuk állítani. 1.3. tétel. Legyen k1 egész, a0,a1,...,ak valós számok, a0,ak0. Ha xn(1) az (1.8) lineáris inhomogén rekurzív egyenlet egy partikuláris megoldása és xn(0) az (1.8) egyenlethez tartozó (1.2) homogén lineáris egyenlet általános megoldása, akkor xn=xn(0)+xn(1) általános megoldása az (1.8) egyenletnek. A tétel bizonyítását meghagyjuk az Olvasónak (lásd 1.1-6. gyakorlat). 1.6. példa. Oldjuk meg az xn+2+xn+12xn=2n,x0=0,x1=1 rekurzív egyenletet. Először megoldjuk az xn+2+xn+12xn=0 homogén egyenletet, amelynek általános megoldása xn(0)=C1(2)n+C2, mivel a karakterisztikus egyenlet gyökei 2 és 1. Könnyen ellenőrizhetjük, hogy xn(1)=2n2 megoldása az eredeti, inhomogén egyenletnek. Az inhomogén egyenlet általános megoldása tehát xn=C1(2)n+C2+2n2. A C1 és C2 állandókat meghatározhatjuk a kezdeti feltételekből. Ennek alapján az általános megoldás xn=14(2)n+2n2 vagy xn=2n(2)n4, azaz A partikuláris megoldás meghatározható a konstansok variálásának módszerével. Léteznek azonban olyan esetek, amikor a partikuláris megoldást könnyebben is megkaphatjuk. Az 1.1. ábrán olyan f(n) függvényeket adunk meg, amelyek esetében az xn(1) partikuláris megoldás a táblázatban megadott alakban kereshető. Az állandókat az egyenletbe való behelyettesítéssel kaphatjuk meg. f(n)xn(1)f(n)xn(1)npan(C0+C1n++Cpnp)anannpsinbn(C0+C1n++Cpnp)ansinbn+(D0+D1n++Dpnp)ancosbnannpcosbn(C0+C1n++Cpnp)ansinbn+(D0+D1n++Dpnp)ancosbn 1.1. ábra. A partikuláris megoldás alakja. Előző példánk esetében f(n)=2n, tehát az első esetet alkalmazzuk, amikor a=2,p=0, ezért a C02n -nel próbálkozunk. Behelyettesítés után azt kapjuk, hogy C0=1/4, tehát a partikuláris megoldás xn(1)=2n2. Gyakorlatok 1.1–1. Oldjuk meg az alábbi inhomogén lineáris rekurzív egyenletet: Hn=2Hn1+1, ha n1, és H0=0. (Hn itt a Hanoi-tornyai nevű feladat megoldásához szükséges – és egyben elégséges – lépések számát jelenti.) 1.1–2. Elemezzük a Hanoi-tornyaira vonatkozó feladatot abban az esetben, amikor úgy kell n korongot átrakni az A rúdról a C rúdra, hogy közben az A rúdról a C rúdra közvetlenül nem szabad korongot átrakni, és viszont Útmutatás. Mutassuk meg, hogy ha az optimális algoritmus lépéseinek száma Mn és n1, akkor Mn=3Mn1+2. 1.1–3. Oldjuk meg a következő rekurzív egyenletet: (n+1)Rn=2(2n1)Rn1, ha n1, és R0=1. 1.1–4. Oldjuk meg alábbi inhomogén lineáris rekurzív egyenletet: xn=2n2+2xn1, ha n2, és x1=0.Útmutatás. Keressük a partikuláris megoldást C1n2n+C2 alakban. 1.1–5. Bizonyítsuk be az 1.2. tételt. 1.1–6. Bizonyítsuk be az 1.3. tételt. 1.2. Generátorfüggvények és rekurzív egyenletek A generátorfüggvényeket, többek között, felhasználhatjuk rekurzív egyenletek megoldására, bizonyos objektumok (pl. bináris fák) megszámolására, azonosságok bizonyítására, partíciós problémák megoldására. Az objektumok megszámolása rekurzív egyenletek felállításával és megoldásával történik. Ezek a rekurzív egyenletek általában nem lineárisak, megoldásukban segíthetnek a generátorfüggvények. 1.2.1. Értelmezés és műveletek Egy (an)n0=a0,a1,a2,...,an,... végtelen számsorozathoz hozzárendelhetünk egy hatványsort a következőképpen: A(z)=a0+a1z+a2z2++anzn+=n0anzn, amelyet az (an)n0 számsorozat generátorfüggvényének nevezünk. Például a Fibonacci-számok esetében a generátorfüggvény a következő: F(z)=n0Fnzn=z+z2+2z3+3z4+5z5+8z6+13z7+. Ha mindkét oldalt megszorozzuk z-vel, majd z2-tel, a következőket kapjuk: F(z)=F0+F1z+F2z2+F3z3++Fnzn+,zF(z)=F0z+F1z2+F2z3++Fn1zn+,z2F(z)=F0z2+F1z3++Fn2zn+. Ha kivonjuk tagonként az első képletből a másodikat, majd a harmadikat, és figyelembe vesszük a Fibonacci-számokat definiáló képletet, a következőt kapjuk: F(z)(1zz2)=z, ahonnan F(z)=z1zz2.(1.9) A fenti számítások helyességét matematikailag igazolni lehet, de nem térünk ki erre. A generátorfüggvények segítségével, formális műveletek során kapott eredményeket a legtöbb esetben más módszerekkel is lehet igazolni. Tekintsük az A(z)=n0anzn és B(z)=n0bnzn generátorfüggvényeket. Az A(z) és B(z) generátorfüggvényeket akkor és csakis akkor mondjuk egyenlőnek, ha an=bn bármely n természetes számra. Ezután a következő, generátorfüggvényekkel végezhető műveleteket definiáljuk: összeadás és valós számmal való szorzás, eltolás, szorzás, deriválás, integrálás. Összeadás és valós számmal való szorzás α A ( z ) + β B ( z ) = n 0 ( α a n + β b n ) z n . Eltolás A zkA(z)=n0anzn+k=nkankzn generátorfüggvény a 0,0,...,0k,a0,a1,... számsorozatot jelképezi, míg az 1zk(A(z)a0a1za2z2ak1zk1)=nkanznk=n0ak+nzn generátorfüggvény az ak,ak+1,ak+2,... sorozatot. 1.7. példa. Legyen A(z)=1+z+z2+. Ekkor 1z(A(z)1)=A(z) és A(z)=11z. Szorzás Ha A(z) és B(z) generátorfüggvények, akkor A(z)B(z)=(a0+a1z++anzn+)(b0+b1z++bnzn+)=a0b0+(a0b1+a1b0)z+(a0b2+a1b1+a2b0)z2+=n0snzn, ahol sn=k=0nakbnk.Sajátos eset. Ha bn=1 bármely n természetes számra, akkor A(z)11z=n0(k=0nak)zn.(1.10) Ha még ezenkívül an=1 is igaz bármely n természetes számra, akkor 1(1z)2=n0(n+1)zn.(1.11) Deriválás A ( z ) = a 1 + 2 a 2 z + 3 a 3 z 2 + = n 0 ( n + 1 ) a n + 1 z n . 1.8. példa. Az A(z)=n0zn=11z generátorfüggvény mindkét oldalát deriválva azt kapjuk, hogy A(z)=n1nzn1=1(1z)2. Integrálás 0 z A ( t ) d t = a 0 z + 1 2 a 1 z 2 + 1 3 a 2 z 3 + = n 1 1 n a n 1 z n . 1.9. példa. Legyen 11z=1+z+z2+z3+ Mindkét oldalát integrálva azt kapjuk, hogy ln11z=z+12z2+13z3+=n11nzn. Ha a két fenti generátorfüggvényt összeszorozzuk, akkor 11zln11z=n1Hnzn, ahol Hn=1+12+13++1n(H0=0,H1=1) az ún. harmonikus számok . Argumentum cseréje Legyen A(z)=n0anzn, amely az a0,a1,a2,... sorozatot jelképezi, akkor A(cz)=n0cnanzn pedig az a0,ca1,c2a2,...cnan,... sorozatot. Igazak még a következők is: 12(A(z)+A(z))=a0+a2z2++a2nz2n+,12(A(z)A(z))=a1z+a3z3++a2n1z2n1+. 1.10. példa. Legyen A(z)=1+z+z2+z3+=11z. Ekkor 1+z2+z4+=12(A(z)+A(z))=12(11z+11+z)=11z2, amely megkapható úgyis, hogy z-t z2-tel helyettesítjük A(z)-ben. Hasonlóképpen, megkaphatjuk a páratlan kitevőjű tagok összegét: z+z3+z5+=12(A(z)A(z))=12(11z11+z)=z1z2. A generátorfüggvények segítségével érdekes képleteket kaphatunk. Legyen például A(z)=1/(1z)=1+z+z2+z3+ . Ekkor zA(z(1+z))=F(z) , vagyis éppen a Fibonacci-számok generátorfüggvénye. A fenti képletből zA(z(1+z))=z+z2(1+z)+z3(1+z)2+z4(1+z)3+. A zn+1 együtthatója a bal oldalon éppen Fn+1, vagyis az (n+1)-edik Fibonacciszám, míg a zn+1 jobb oldali együtthatója, a binomiális képlet alkalmazása után minden tagban k0(nkk). Innen Fn+1=k0(nkk)=k=0n+12(nkk).(1.12) Emlékeztetünk, hogy a binomiális képlet általánosítható tetszőleges valós r -re is, vagyis (1+z)r=n0(rn)zn, amely a binomiális együtthatók generátorfüggvénye. Itt (rn) a kombináció általánosítása valós r-re, vagyis A binomiális képlet fenti általánosításával (negatív r-re) egy, sok esetben hasznos képletet kapunk. Legyen 1(1z)m=(1z)m=k0(mk)(z)k. Mivel egyszerű számítással igazolható, hogy (mk)=(1)k(m+k1k), a következő képletet kapjuk: 1(1z)m+1=k0(m+kk)zk. Ekkor zm(1z)m+1=k0(m+kk)zm+k=k0(m+km)zm+k=k0(km)zk. Innen pedig k0(km)zk=zm(1z)m+1,(1.13) ahol m természetes szám. 1.2.2. Rekurzív egyenletek megoldása generátorfüggvényekkel Ha a megoldandó rekurzív egyenlet olyan, hogy a megoldás generátorfüggvénye sorba fejthető úgy, hogy az együtthatók zárt alakban felírhatók, akkor ez a módszer eredményre vezet. Legyen adott a következő rekurzív egyenlet: F(xn,xn1,...,xnk)=0.(1.14) A megoldáshoz tekintsük az X(z)=n0xnzn generátorfüggvényt. Ha (1.14) felírható G(X(z))=0 egyenletként, amelyet meg tudunk oldani X(z) -re, majd X(z) -t sorba lehet fejteni úgy, hogy xn zárt alakban felírható, akkor az (1.14) egyenletet sikerrel oldottuk meg. A következőkben általános módszert adunk az inhomogén lineáris egyenletek megoldására. Ezután három nemlineáris feladatra mutatunk példát. Két esetben bináris fák valamilyen halmazának az elemeit számoljuk meg, a harmadikban pedig a bináris fák leveleit. A három nemlineáris rekurzív egyenlet az (1.15), (1.17) és (1.18), amelyeket a generátorfüggvények segítségével oldunk meg. Állandó együtthatós inhomogén lineáris rekurzív egyenlet Szorozzuk be zn-nel az (1.8) egyenlet mindkét oldalát. Ekkor a0xnzn+a1xn+1zn++akxn+kzn=f(n)zn. Összegezzük tagonként a fenti egyenlet mindkét oldalát: a0n0xnzn+a1n0xn+1zn++akn0xn+kzn=n0f(n)zn. Innen átalakításokkal kapjuk, hogy a0n0xnzn+a1zn0xn+1zn+1++akzkn0xn+kzn+k=n0f(n)zn. Legyen X(z)=n0xnzn és F(z)=n0f(n)zn. Ekkor az egyenletünk így alakul: a0X(z)+a1z(X(z)x0)++akzk(X(z)x0x1zxk1zk1)=F(z). Ezt az egyenletet meg lehet oldani X(z) -ben. Ha az X(z) kifejezésében a jobb oldal racionális tört, akkor fel lehet bontani elemi (parciális) törtekre, majd azokat sorba fejtve meghatározhatjuk az eredeti egyenlet xn általános megoldását, figyelembe véve a kezdeti feltételeket. Akkor is megpróbálkozhatunk sorba fejtéssel, ha a jobb oldal nem racionális függvény. 1.11. példa. Oldjuk meg a fenti módszerrel a következő egyenletet: xn+12xn=2n+12, ha n0 és x0=0. Beszorzás és összegezés után 1zn0xn+1zn+12n0xnzn=2n02nzn2n0zn, innen pedig 1z(X(z)x0)2X(z)=212z+21z. Mivel x0=0, az egyenlet megoldása a következő, miután a jobb oldalt elemi törtekre bontottuk: X(z)=2z(12z)221z212z. Az 112z=n02nzn generátorfüggvény tagonkénti deriválásával a következőt kapjuk: 2(12z)2=n1n2nzn1. Ezért X(z)=n0n2nzn+2n0zn2n02nzn=n0((n2)2n+2)zn, ahonnan xn=(n2)2n+2. Bináris fák száma Jelöljük bn-nel az n csúcsú bináris fák számát. Ekkor b1=1,b2=2,b3=5 (lásd az 1.2. ábrát). Legyen b0=1. (Később látni fogjuk, hogy ez jó választás.) 1.2. ábra. Kétés háromcsúcsú bináris fák. Ha rögzítjük egy n csúcsú bináris fa gyökerét, akkor még n1 csúcs marad a bal és jobb részfában összesen. Ha k csúcs van a bal oldali, n1k pedig a jobb oldali részfában, akkor összesen bkbn1k ilyen bináris fa létezik. Összegezve k=0,1,...,n1 értékekre, pontosan bn-t kapjuk. Tehát tetszőleges n1 természetes számra a bn-ben megoldandó rekurzív egyenlet a következő: bn=b0bn1+b1bn2++bn1b0.(1.15) Ez még így is írható: bn=k=0n1bkbn1k. A fenti rekurzív egyenlet mindkét oldalát zn-nel szorozva, majd n szerint összegezve, a következőt kapjuk: n1bnzn=n1(k=0n1bkbn1k)zn.(1.16) Legyen B(z)=n0bnzn a bn számok generátorfüggvénye. Az (1.16) összefüggés bal oldala éppen B(z)1 (mivel b0=1). A jobb oldal nagyon hasonlít két generátorfüggvény szorzatához. Hogy észrevegyük, melyik két függvényről van szó, használjuk a következő jelölést: A(z)=zB(z)=n0bnzn+1=n1bn1zn. Ekkor az (1.16) jobb oldala éppen A(z)B(z), ami egyenlő zB2(z) -vel. Innen B(z)1=zB2(z),B(0)=1. Oldjuk meg ezt az egyenletet B(z) -re. Ekkor B(z)=1±214z2z. Mivel B(0)=1, csak a negatív jel megfelelő. Tehát B(z)=12z(1214z)=12z(1(14z)1/2)=12z(1n0(1/2n)(4z)n)=12z(1n0(1/2n)(1)n22nzn)=12z(1/20)20z02z+(1/21)22z2z(1/2n)(1)n22nzn2z+=(1/21)2(1/22)23z+(1/2n)(1)n22n1zn1+=n0(1/2n+1)(1)n22n+1zn=n01n+1(2nn)zn. Innen bn=1n+1(2nn). A bn számokat szokás még Catalan-számoknak is nevezni. Megjegyzés. Az utolsó átalakításnál felhasználtuk a következő, könnyen bizonyítható összefüggést: (1/2n+1)=(1)n22n+1(n+1)(2nn). Levelek száma n csúcsú bináris fák halmazában Számítsuk ki az az összes n csúcsú bináris fa leveleinek (azaz első fokú csúcsainak) számát. Jelöljük ezt a számot fn-nel. Megjegyezzük, hogy a gyökeret akkor sem tekintjük levélnek, ha a fokszáma 1. Könnyű belátni, hogy f2=2,f3=6. Válasszuk az f0=0 és f1=1 értékeket, a későbbiekben majd meglátjuk, hogy ez helyes választás. Ahogy a bináris fák megszámolásánál, tekintsük most is az olyan n csúcsú bináris fákat, amelyeknek bal oldala k csúcsot, a jobb oldala pedig nk1 csúcsot tartalmaz. Bal oldalon bk ilyen részfa van, jobb oldalon pedig bn1k. Ha rögzítünk egy ilyen bal oldali részfát, akkor az összes jobb oldali részfát figyelembe véve, ott fn1k levél van. Könnyen belátható tehát, hogy adott k -ra bn1kfk+bkfn1k levél van. Ekkor, összegzés után fn=k=0n1(fkbn1k+bkfn1k). Egyszerű számítással azt kapjuk, hogy fn=2(f0bn1+f1bn2++fn1b0),n2.(1.17) Ez a megoldandó rekurzív egyenlet, amelynek megoldása fn . Legyen F(z)=n0fnzn és B(z)=n0bnzn. Az (1.17) összefüggés mindkét oldalát zn -nel szorozva, majd n szerint összeadva n2fnzn=2n2(k=0n1fkbn1k)zn. De, mivel f0=0 és f1=1 , F(z)z=2zF(z)B(z). Innen F(z)=z12zB(z), de mivel B(z)=12z(1214z), következik, hogy F(z)=z214z=z(14z)1/2=zn0(1/2n)(4z)n. A számítások elvégzése után F(z)=n0(2nn)zn+1=n1(2n2n1)zn, innen pedig fn=(2n2n1) vagy fn+1=(2nn)=(n+1)bn. A kombináció általánosítása alapján f0 és f1 a konvenció alapján megadott értékekkel lesznek egyenlők. n csúcsú, k levelű bináris fák száma Egy kicsit nehezebb feladat: hány n csúcsú k levelű bináris fa létezik? Jelöljük ezek számát bn(k)-val. Könnyű belátni, hogy bn(k)=0, ha k>(n+1)/2. Egyszerű okoskodással ki lehet számítani a k=1 esetet. Ekkor bn(1)=2n1 tetszőleges n1 természetes számra. Legyen b0(0)=1, amelynek helyessége később igazolódik. Akárcsak az előző feladatoknál, itt is a bal és jobb oldali részfákat vizsgáljuk meg. Ha a bal oldali részfában i csúcs és j levél van, akkor a jobb oldaliban ni1 csúcs és kj levél van. A bi(j)bni1(kj) szorzat éppen ezeknek a fáknak a száma. Összegezve k és j szerint, a következő rekurzív képletet kapjuk: bn(k)=2bn1(k)+i=1n2j=1k1bi(j)bni1(kj).(1.18) Ennek a rekurzív egyenletnek a megoldására használjuk a következő generátorfüggvényt: B(k)(z)=n0bn(k)zn, ahol k1. Az (1.18) egyenlet mindkét oldalát zn-nel megszorozva, majd összeadva az n=0,1,2,... értékekre, a következőt kapjuk: n1bn(k)zn=2n1bn1(k)zn+n1(i=1n2j=1k1bi(j)bni1(kj))zn. Az összegezés sorrendjét felcserélve n1bn(k)zn=2n1bn1(k)zn+j=1k1n1(i=1n2bi(j)bni1(kj))zn. Innen B(k)(z)=2zB(k)(z)+z(j=1k1B(j)(z)B(kj)(z)) vagy B(k)(z)=z12z(j=1k1B(j)(z)B(kj)(z)).(1.19) Lépésről lépésre haladva, felírhatjuk a következőket. B(2)(z)=z12z(B(1)(z))2,B(3)(z)=2z2(12z)2(B(1)(z))3,B(4)(z)=5z3(12z)3(B(1)(z))4. Az általános megoldást megpróbáljuk a következő alakban keresni: B(k)(z)=ckzk1(12z)k1(B(1)(z))k, ahol, amint láttuk, c2=1,c3=2,c4=5. Az (1.19) képletbe behelyettesítve, a ck számokra egy rekurzív összefüggést kapunk: ck=i=1k1cicki. Ezt szintén a generátorfüggvények segítségével oldjuk meg. Ha k=2, akkor c2=c1c1, és innen c1=1. Legyen c0=1. Ha C(z)=n0cnzn a cn számok generátorfüggvénye, akkor – figyelembe véve a generátorfüggvények szorzási képletét – C(z)1z=(C(z)1)2 vagy C2(z)3C(z)+z+2=0, amelyet C(z) -re nézve megoldunk, és a C(z)=3214z2 képletet kapjuk, mivel C(0)=1 miatt csak a negatív előjel jó. Sorba fejtés után C(z)=3212(14z)1/2=3212n012n1(2nn)zn=32+n012(2n1)(2nn)zn=1+n112(2n1)(2nn)zn. Innen cn=12(2n1)(2nn),n1. Mivel bn(1)=2n1, ha n1, könnyen ellenőrizhető, hogy B(1)=z/(12z). Tehát B(k)(z)=12(2k1)(2kk)z2k1(12z)2k1. Mivel azonban 1(1z)m=n0(n+m1n)zn, a következő eredményhez jutunk: B(k)(z)=12(2k1)(2kk)n0(2k+n2n)2nz2k+n1=12(2k1)(2kk)n2k1(n1n2k+1)2n2k+1zn. Innen pedig bn(k)=12k1(2kk)(n12k2)2n2k vagy bn(k)=1n(2kk)(n2k1)2n2k. 1.2.3. A Z transzformáció módszere Ha generátorfüggvényekkel oldunk meg egy inhomogén lineáris rekurzív egyenletet, akkor a gyakorlatban többnyire egy racionális törtfüggvény sorba fejtése adja meg a megoldást. A Z-transzformáció módszerével ezt a sorba fejtést könnyebben elvégezhetjük. Legyen a racionális törtfüggvény P(z)/Q(z), ahol P(z) kisebb fokszámú, mint Q(z). Ha ismerjük a nevező gyökeit, a törtfüggvényt elemi (vagy parciális) törtfüggvények összegére bonthatjuk a határozatlan együtthatók módszerével. Nézzük meg először azt az esetet, amikor a nevezőnek csak egyszeres (azaz egymástól különböző) gyökei vannak, és legyenek ezek α1,α2,...,αk. Ekkor felírhatjuk, hogy P(z)Q(z)=A1zα1++Aizαi++Akzαk. Könnyen belátható, hogy Ai=limzαi(zαi)P(z)Q(z),i=1,2,...,k. Másfelől Aizαi=Aiαi(11αiz)=Aiβi1βiz, ahol βi=1/αi. Ha most ezt az elemi törtet sorba fejtjük, akkor a következőt kapjuk: Aiβi1βiz=Aiβi(1+βiz++βinzn+). Innen a zn együtthatója Aiβin+1, és jelöljük ezt Ci(n) -nel. Ekkor Ci(n)=Aiβin+1=βin+1limzαi(zαi)P(z)Q(z), vagy Ci(n)=βin+1limzαi(zαi)P(z)Q(z). Ha most elvégezzük a z1/z átalakítást, és figyelembe vesszük, hogy βi=1/αi, akkor Ci(n)=limzβi((zβi)zn1p(z)q(z)), ahol p(z)q(z)=P(1/z)Q(1/z). Ekkor az X(z)=P(z)Q(z) kifejtésében a zn együtthatója éppen C1(n)+C2(n)++Ck(n). Könnyen belátható, hogy ha α gyöke a Q(z) polinomnak, akkor β=1/α gyöke a q(z) polinomnak. Például, ha P(z)Q(z)=2zz(1z)(12z), akkor p(z)q(z)=2(z1)(z2). Amennyiben egy gyök többszörös, például βi p -szeres, akkor a neki megfelelő részeredmény Ci(n)=1(p1)!limzβidp1dzp1((zβi)pzn1p(z)q(z)). Itt dpdzpf(z) az f(z) függvény p-edrendű deriváltját jelenti. Az eddigiek a következő algoritmusban összegezhetők. Feltesszük, hogy az egyenlet együtthatóit az A, a megoldás állandóit pedig a C tömb tartalmazza. A módszer neve onnan ered, hogy ha egy generátorfüggvényben z helyébe 1/z-t helyettesítünk, akkor megkapjuk a Z-transzformáltját, amelyre hasonló műveletek léteznek, mint a generátorfüggvényekre, és amelyre alkalmazva a reziduum-tételt, a fenti eredményhez jutunk. 1.12. példa. Oldjuk meg az xn+12xn=2n+12, ha n0,x0=0 rekurzív egyenletet. zn -nel beszorozva és összegezve n0xn+1zn2n0xnzn=n02n+1znn02zn, azaz 1zX(z)2X(z)=212z21z, ahol X(z)=n0xnzn. Innen X(z)=2z2(1z)(12z)2. A z1/z helyettesítést elvégezve p(z)q(z)=2z(z1)(z2)2, ahol a nevező gyökei: 1 egyszeres, 2 kétszeres gyök. Ezért C1=limz12zn(z2)2=2 és C2=limz2ddz(2znz1)=2limz2nzn1(z1)zn(z1)2=2n(n2). Az általános megoldás tehát xn=2n(n2)+2,n0. 1.13. példa. Oldjuk meg az xn+2=2xn+12xn, ha n0,x0=0,x1=1 rekurzív egyenletet. zn -nel beszorozva és összegezve 1z2n0xn+2zn+2=2zn0xn+1zn+12n0xnzn, innen 1z2(F(z)z)=2zF(z)2F(z), azaz F(z)(1z22z+2)=1z. Ekkor F(1/z)=zz22z+2. A nevező gyökei 1+i és 1i. Kiszámítjuk C1(n)-t és C2(n)-t: C1(n)=limz1+izn+1z(1i)=i(1+i)n2 és C2(n)=limz1izn+1z(1+i)=i(1i)n2. Mivel 1+i=22(cosπ4+isinπ4),1i=22(cosπ4isinπ4), hatványozás után (1+i)n=(22)n(cosnπ4+isinnπ4),(1i)n=(22)n(cosnπ4isinnπ4),xn=C1(n)+C2(n)=(22)nsinnπ4. Gyakorlatok 1.2–1. Számítsuk ki, hány olyan n csúcsú bináris fa van, amelynek sem a bal, sem pedig a jobb oldali részfája nem üres. 1.2–2. Számítsuk ki, hány olyan n csúcsú bináris fa van, amelyben minden levéltől különböző csúcsnak pontosan két gyereke van. 1.2–3. Oldjuk meg generátorfüggvény segítségével az alábbi rekurzív egyenletet. Hn=2Hn1+1,H0=0. ( Hn itt a Hanoi-tornyai nevű feladat lépésszámát jelenti.) 1.2–4. Oldjuk meg Z-transzformáció segítségével az alábbi rekurzív egyenletet: Fn+2=Fn+1+Fn+1, ha n0, és F0=0,F1=1. 1.2–5. Oldjuk meg a következő egyenletrendszert: un=vn1+un2,vn=un+un1, ahol u0=1,u1=2,v0=1. 1.3. Numerikus megoldás Leírunk egy függvényeljárást, amellyel lineáris rekurzív egyenleteket oldhatunk meg numerikusan. Az egyenletet a szokásos módon, a következő formában adjuk meg: a0xn+a1xn+1++akxn+k=f(n), ahol a0,ak0,k1. Az a0,a1,...,ak együtthatókat az A, míg az x0,x1,...,xk1 kezdőértékeket az X vektor tartalmazza. Hogy kiszámítsuk xn értékét, sorra kiszámítjuk az xk,xk+1,...,xn értékeket, minden alkalommal az X vektor első k elemében (azaz a 0,1,...,k1 indexű elemekben) őrizve meg a sorozat előző k értékét. A 2–5. sorokban kiszámítjuk a következő xj(j=k,k+1,...,n) értékét (az előző k érték felhasználásával), ezt az értéket az algoritmusban v jelöli. A 7–9. sorokban, amennyiben még nem értük el az n-et, átmásoljuk az utolsó k értéket az X vektor első k elemébe. A 10. sor visszaadja az xn értékét. Könnyen belátható, hogy az algoritmus futási ideje Θ(kn), ha eltekintünk a függvény értékeinek kiszámításához szükséges időtől. Gyakorlatok 1.3–1. Hány összeadást, kivonást, szorzást, osztást és értékadást végez a REKURZÍV algoritmus, ha az 1.4. példában szereplő adatokkal kiszámítja x1000 értékét? Feladatok 1-1. Homogén egyenlet megoldhatósága generátorfüggvénnyel Bizonyítsuk be, hogy tetszőleges homogén lineáris rekurzív egyenlet generátorfüggvénnyel való megoldáskor csak akkor fordulhat elő olyan eset, hogy nem tudjuk alkalmazni a megadott módszert amiatt, hogy az X(z)=0 egyenlethez jutunk, ha az egyenlet megoldása xn=0 minden n-re. 1-2. Komplex gyökök Z-transzformáláskor Vizsgáljuk meg, mi történik, ha a Z-transzformáció módszere alkalmazásakor a nevező gyökei komplex számok. A rekurzív egyenlet megoldásának mindig valósnak kell lennie. Biztosítja-e ezt a módszer? Megjegyzések a fejezethez Elaydi [119], Flajolet és Sedgewick [425], Greene és Knuth [176], valamint Mickens [332] könyve részletesen tárgyalja a rekurzív egyenletek megoldását. Vannak a generátorfüggvényekkel foglalkozó, magyar nyelvű könyvek is – például Knuth [259], valamint Graham, Knuth és Patashnik [171]. Vilenkin műve [483] egyszerű módon tárgyal sok-sok feladatot – a könyv utolsó két fejezete rekurzív egyenletekkel és generátorfüggvényekkel foglalkozik. Lovász [301] kombinatorikai problémákat és feladatokat tartalmazó könyvében is vannak generátorfüggvényekre vonatkozó feladatok. Generátorfüggvényekkel kapcsolatban érdemes elolvasni Hajnal Péter [192], Katona Y. Gyula, Recski András és Szabó Csaba [250], valamint Szalkai István [448] könyvét is. A bináris fák megszámolása Knuth [259] könyvéből, az összes bináris fa leveleinek megszámolása, valamint az n csúcsú k levelű bináris fák megszámolása Kása Zoltán [248] könyvéből valók. 2. Komputeralgebra (Járai Antal és Kovács Attila) A különféle matematikai számítások elvégzésére képes informatikai eszközök nélkülözhetetlenek a modern tudományban és ipari technológiában. Képesek vagyunk kiszámolni bolygók, csillagok pályáját, vezérelni atomerőműveket, egyenletekkel leírni, modellezni a természet számos törvényét. Ezek a számítások alapvetően kétfélék lehetnek: numerikusak és szimbolikusak . Ámbár a numerikus számítások nemcsak elemi aritmetikai műveleteket foglalnak magukban, hanem olyan műveleteket is, mint matematikai függvények numerikus értékének, polinomok gyökeinek vagy mátrixok sajátértékének meghatározása, ezek a műveletek alapvetően számokon értelmezettek, és ezek a számok a legtöbb esetben nem pontosak, pontosságuk az adott számítógépes architektúra lebegőpontos ábrázolási módjától függ. A szimbolikus számításokat matematikai vagy informatikai objektumokat jelentő szimbólumokon értelmezzük. Ezek az objektumok lehetnek számok (egészek, racionális számok, valós és komplex számok, algebrai számok), de lehetnek polinomok, racionális és trigonometrikus függvények, egyenletek, egyenletrendszerek, algebrai struktúrák elemei, vagy éppen halmazok, listák, táblázatok. A szimbolikus számítások elvégzésére alkalmas számítógépes rendszereket (amelyek legtöbbször numerikus számításokra és az eredmények grafikus megjelenítésére egyaránt képesek) komputeralgebra-rendszereknek vagy szimbolikusalgebrai rendszereknek nevezzük. Az,,algebra” szó a szimbolikus objektumokkal végzett műveletek algebrai eredetére utal. A komputeralgebra-rendszerek mint számítógépes programok alapfeladata: (1) matematikai objektumok szimbolikus ábrázolása, (2) aritmetika ezekkel az objektumokkal.A komputeralgebra, mint tudományterület feladata pedig erre az aritmetikára épülő hatékony algoritmusok keresése, elemzése és megvalósítása tudományos kutatásokhoz és alkalmazásokhoz. Mivel a komputeralgebra-rendszerek szimbolikusan, (lényegében) tetszőleges pontossággal és hibamentesen képesek számolni, először tisztázni kell, milyen adatszerkezeteket lehet hozzárendelni a különféle objektumokhoz. A 2.1. alfejezet a matematikai objektumok ábrázolásának problémakörét taglalja. A továbbiakban a szimbolikus algoritmusok közül ismertetjük azokat, melyek az idők folyamán a mindennapi tudomány és technika elengedhetetlen részévé váltak. A természettudományok többsége jelenségeit, gondolatait matematikai egyenletekkel írja le. A lineáris egyenletek, egyenletrendszerek szimbolikus megoldásainak vizsgálata a jól ismert eliminációs módszereken alapul. A nemlineáris egyenletrendszerek megoldásainak megkeresésére először megvizsgáljuk az euklideszi algoritmus különféle változatait és a rezultánsmódszert. A hatvanas évek közepén Buchberger doktori dolgozatában egy hatékony módszert dolgozott ki többváltozós polinomegyenletek szimbolikus megoldásainak meghatározására, amit ma Gröbner-bázis elmélet néven ismerünk. Buchberger munkájára csak évekkel később kezdtek felfigyelni, azóta a terület a komputeralgebra egyik legnépszerűbb ága. Ezekről lesz szó a 2.2. és a 2.3. alfejezetekben. A következő bemutatandó terület a szimbolikus integrálás. Habár a probléma formális természete már több, mint 100 éve ismert (Liouville-elmélet), csak 1969-ben tudott Risch hatékony algoritmust adni annak eldöntésére, hogy ha adott egy valós elemi f függvény, akkor az f(x)dx integrál is elemi-e és ha igen, az algoritmus meg is adja az integrál értékét. A módszerrel a 2.4. alfejezetben foglalkozunk. A fejezet végén áttekintjük a szimbolikus algoritmusok elméleti és gyakorlati vonatkozásait (2.5. alfejezet), külön részt szánva napjaink komputeralgebrarendszereinek. 2.1. Adatábrázolás A komputeralgebrában a legkülönfélébb matematikai objektumok fordulnak elő. Ahhoz, hogy ezekkel az objektumokkal számolni lehessen, ábrázolni és tárolni kell őket a számítógép memóriájában. Ez elméleti és gyakorlati problémák egész sorát veti fel. Ebben az alfejezetben ezekről a kérdésekről lesz szó. Tekintsük az egészeket. Egyrészt matematikai tanulmányainkból tudjuk, hogy halmazuk megszámlálható számosságú, viszont informatikai szemszögből azzal is tisztában vagyunk, hogy számítógépünk csak véges sok egész tárolására képes. Az, hogy mekkora a legnagyobb egész, amit minden további erőfeszítés nélkül ábrázolni tudunk, attól függ, hogy számítógépes architektúránkban mekkora a gépi szó mérete. Ez tipikusan 16,32,48 vagy 64 bit. Az egy gépi szóban ábrázolható egészeket egyszeres pontosságú egészeknek nevezzük. Nem biztos, hogy egy tetszőleges egész szám elfér egy gépi szóban, vagyis olyan adatstruktúrára van szükség, ami több gépi szó felhasználásával tetszőlegesen nagy egész ábrázolására képes. Természetesen a,,tetszőlegesen nagy” nem jelent,,végtelen nagyot”, hiszen valamilyen tervezési igény vagy a memória mérete mindenképpen korlátot szab. Emellett olyan adatábrázolást kell megvalósítani, amelyre hatékony műveletek építhetők. Az egészek reprezentációjának alapvetően két útja van: helyiértékes (a hagyományos decimális számrendszerbeli ábrázolás általánosítása), amelyben egy n egészet i=0k1diBi alakban írunk fel, ahol a B alapszám akármilyen, egynél nagyobb egész lehet. A hatékonyság növelése miatt B -t úgy érdemes választani, hogy B1 beleférjen egy gépi szóba. A di jegyek (0ik1) vagy a kanonikus {0diB1} vagy a szimmetrikus {B/2<diB/2} jegyhalmazból való egyszeres pontosságú egészek. Az így leírható többszörös pontosságú egészek lineáris listás [d0,d1,...,dk1] ábrázolásának számítógépes megvalósítása történhet dinamikusan vagy statikusan, attól függően, hogy a lineáris listát láncolt listaként vagy tömbként implementáljuk. moduláris, amelyben az n egész megfelelő számú, egyszeres pontosságú, páronként relatív prím modulusokkal vett moduláris képeinek lineáris listájaként adható meg. A moduláris képekből n a kínai maradéktétel segítségével rekonstruálható. A moduláris alak gyorsabb az összeadás, kivonás és szorzás műveleteket tekintve, de lényegesen lassabb például oszthatósági vizsgálatoknál (amelyek sok esetben elkerülhetetlenek). Nyilvánvaló, hogy az adatstruktúra megválasztása erősen befolyásolja algoritmusaink sebességét. 2.1. példa. Az alábbi példában az egyszerűség kedvéért természetes számokkal dolgozunk. Tegyük fel, hogy olyan számítógép architektúránk van, ahol a gépi szó 32 bites, vagyis számítógépünk az I1=[0,2321]=[0,4294967295] intervallum egészeivel képes egész aritmetikát végezni. Erre az aritmetikára építve az architektúránkon valósítsunk meg olyan egész aritmetikát, amellyel az I2=[0,1050] intervallumban is számolni tudunk. A helyiértékes ábrázoláshoz legyen B=104, továbbá n1=123456789098765432101234567890,n2=2110. Ekkor n1=[7890,3456,1012,5432,9876,7890,3456,12],n2=[2110],n1+n2=[0,3457,1012,5432,9876,7890,3456,12],n1*n2=[7900,3824,6049,1733,9506,9983,3824,6049,2], ahol az összeadást és a szorzást helyiértékesen számoltuk. A moduláris ábrázoláshoz válasszunk páronként relatív prím számokat az I1 intervallumból úgy, hogy szorzatuk nagyobb legyen 1050-nél. Legyenek például m1=4294967291,m2=4294967279,m3=4294967231 és m4=4294967197,m5=4294967189,m6=4294967161 prímek, ahol i=16mi>1050. Egy I2 intervallumbeli egészet tehát az I1 intervallumból vett számhatossal ábrázolunk. Ekkor n12009436698(mod m1),n1961831343(mod m2),n14253639097(mod m3),n11549708(mod m4),n12459482973(mod m5),n13373507250(mod m6), valamint n22110(mboxmodmi),(1i6), vagyis n1+n2=[2009438808,961833453,4253641207,1551818,2459485083,3373509360],n1*n2=[778716563,2239578042,2991949111,3269883880,1188708718,1339711723], ahol az összeadás és a szorzás koordinátánként modulárisan elvégezve értendő. Általánosabban, a matematikai objektumok ábrázolásának három absztrakciós szintjét érdemes megkülönböztetni: 1. Az objektumok szintje. Ezen a szinten az objektumok formális matematikai objektumoknak tekinthetők. Például 2+2,3*35 és 4 ugyanazt az objektumot jelölik. Hasonlóan, az (x+1)2(x1) és x3+x2x1 polinomok az objektumok szintjén azonosnak tekinthetők.2. A forma szintje. Itt már megkülönböztetjük az objektumok eltérő ábrázolásait. Például az (x+1)2(x1) és x3+x2x1 polinomok ugyanannak a polinomnak különböző reprezentációi, hiszen az előbbi egy szorzat, utóbbi egy összeg. 3. Az adatstruktúra szintje. Itt a számítógép memóriájában eltérő ábrázolásokat tekintjük különbözőknek. Az x3+x2x1 polinomnak ezen a szinten többféle reprezentációja is lehet, a polinomot leírhatja például egy együtthatókból álló tömb: [1,1,1,1], egy láncolt lista: [1,0][1,1][1,2][1,3]. A különböző matematikai objektumok számítógépes ábrázolásához a komputeralgebrarendszerek tervezőinek dönteniük kell mind a forma, mind az adatstruktúra szintjén. A döntést olyan kérdések nehezítik, mint a reprezentáció memóriaigénye, olvashatósága, vagy az ábrázolás számítási ideje. Például az f(x)=(x1)2(x+1)3(2x+3)4=16x980x8+88x7+160x6359x5+x4+390x3162x2135x+81 polinom szorzat alakja kifejezőbb, mint az összeg alakja, de utóbbi előnyösebb, ha mondjuk az x5 -es tag együtthatójára vagyunk kíváncsiak. A forma szintjére vonatkozó döntési nehézségeket szemlélteti az alábbi példa: x10001 és (x1)(x999+x998++x+1), (x+1)1000 és x1000+1000x999++1000x+1. A matematikai objektumok minden igényt kielégítő ábrázolására tökéletes módszert nem ismerünk. A gyakorlatban az objektumoknak különböző reprezentációi is megengedettek. Ez azt a problémát veti fel, hogy ugyanazon objektum eltérő ábrázolása esetén meg kell tudnunk állapítani azok egyenlőségét, konvertálni kell tudnunk egyik alakból a másikba és az egyértelmű ábrázoláshoz egyszerűsítéseket kell tudnunk azokon végrehajtani. A forma szintjén például minden egész számot felírhatunk valamely B alapú számrendszerben, míg az adatstruktúra szintjén a forma szintjén kapott lineáris listát láncolt listaként vagy tömbként reprezentálhatjuk. A racionális számok egészek párjaiból, a számlálóból és a nevezőből állnak. Memória takarékosság érdekében, valamint két racionális szám könnyű összehasonlíthatósága miatt célszerű a számláló és a nevező legnagyobb közös osztójával egyszerűsített alakot ábrázolni. Mivel az egészek euklideszi gyűrűt alkotnak, a legnagyobb közös osztó euklideszi algoritmussal gyorsan számolható. Az ábrázolás egyértelműségéhez a nevezőt érdemes pozitívnak választani, a racionális szám előjele így a számláló előjele lesz. A többváltozós polinomok (az R[x1,x2,...,xn]n -változós polinomgyűrű elemei, ahol R gyűrű) a1xe1+a2xe2++anxen alakúak, ahol aiR\{0},ei=(ei1,...,ein) és xei -t írtunk x1ei1x2ei2...xnein helyett. A forma szintjén az alábbi reprezentációs lehetőségek adódnak. 1. Kiterjesztett vagy faktorizált ábrázolás, ahol a polinom összegként vagy szorzatként jelenik meg: x2yx2+y1, (x2+1)(y1). 2. Rekurzív vagy disztributív ábrázolás (csak többváltozós esetben). Például kétváltozós polinomgyűrűben f(x,y) tekinthető R[x,y] -belinek, (R[x])[y] belinek vagy (R[y])[x] -belinek: x2y2+x2+xy21, (x2+x)y2+x21, (y2+1)x2+y2x1. Az adatstruktúra szintjén ritka vagy teljes reprezentáció lehetséges, például a ritka x41 polinom teljes ábrázolása x4+0x3+0x2+0x1. A gyakorlatban a többváltozós polinomok ritka ábrázolása a célravezető. A i=0aixi alakú hatványsorok legegyszerűbb ábrázolása az, ha valamilyen véges rendig adjuk csak meg az együtthatók sorozatát, így lényegében egyváltozós polinomoknak tekintjük őket. Ezzel a megközelítéssel az a probléma, hogy különböző hatványsorokhoz tartozhat ugyanaz a reprezentáció. Ezt elkerülendő, a hatványsort az együtthatói sorozatát generáló függvénnyel szokás leírni. A generáló függvény egy olyan kiszámítható f függvény, amire f(i)=ai. A hatványsorokkal végzett műveletekhez ekkor elegendő azt ismerni, hogy hogyan kell az operandusok együtthatóiból előállítani a művelet eredményét reprezentáló sorozat együtthatóit. Például az f és g hatványsorok szorzatát jelölő h hatványsor együtthatóit a hi=k=0ifkgik függvény segítségével származtathatjuk. Ekkor a hi együtthatókat csak akkor kell ténylegesen kiszámolni, ha szükség van az értékükre. Ezt a komputeralgebrában is gyakran használt technikát késleltetett kiértékelésnek nevezzük. Mivel a komputeralgebra-rendszerek szimbolikusan számolnak, az algoritmusok műveletigényének vizsgálatán kívül mindig szükség van memóriaigényük vizsgálatára is, hiszen a memóriaigény befolyásolja a tényleges futási időt. (A futási időt mi a RAM-modellnek megfelelően műveletszámban mérjük. Ha Turing-gép modellt és konstans hosszú gépi szavakat használnánk, akkor ilyen probléma nem merülne fel, mert a tár mindig alsó korlátja az időnek.) Tekintsünk egyszerű példaként egy n ismeretlenes, n egyenletből álló lineáris egyenletrendszert, ahol minden egyes egész együttható elfér a számítógép ω hosszúságú rekeszében. Kizárólag egész aritmetikát és Gauss-eliminációt alkalmazva a redukció eredményeként kapott együtthatók egyenként 2n1ω tárhelyet igényelhetnek. Ha az együtthatók polinomok lennének és polinomaritmetikát használnánk, az eredmény polinomok együtthatóinak mérete, csakúgy mint a fokszámuk, exponenciális növekedést mutatna. A megfigyelt exponenciális növekedés ellenére a kapott végeredmény mégis,,normális” méretű, hiszen a Cramer-szabály miatt a megoldások determinánsok hányadosaiként is megkaphatók, amelyek pedig közelítőleg csak nω tárhelyet igényelnek. Ezt a jelenséget nevezzük köztes számítási tárrobbanásnak. Előfordulása gyakori a komputeralgebra algoritmusokban. 2.2. példa. Egész aritmetikát használva oldjuk meg az alábbi lineáris egyenletrendszert. 37x+22y+22z=1,31x14y25z=97,11x+13y+15z=86. Először a második egyenlet x változóját elimináljuk. Szorozzuk meg az első sort 31gyel, a másodikat 37 -tel és adjuk össze őket. Ha ezt a módszert alkalmazzuk a harmadik egyenlet x változójának eliminációjára, az eredmény az alábbi lesz: 37x+22y+22z=1,1200y+1607z=3558,723y+797z=3171. Most y eliminálásához a második sort 723-mal, a harmadikat 1200 -zal szorozzuk, majd összeadjuk őket. Az eredmény: 37x+22y+22z=1,1200y+1607z=3558,205461z=1232766. Tovább folytatva az eljárást és sorban eliminálva a változókat végül azt kapjuk, hogy 1874311479932400x=5622934439797200,246553200y=2712085200,205461z=1232766. Egyszerűsítés után x=3,y=11,z=6 adódik. Természetesen, ha a számítások közben a legnagyobb közös osztókkal egyszerűsítünk, az együtthatók nagysága kevésbé drasztikusan nő. A számítási tárrobbanás elkerülésére moduláris módszerek használatosak: ahelyett, hogy a számításainkat az R struktúra (pl. euklideszi gyűrű) egészeivel végeznénk, valamely faktorstruktúrában dolgozunk, majd az eredményt,,visszatranszformáljuk” R -be (2.1. ábra). A moduláris redukció és a moduláris számítások általában hatékonyan elvégezhetők, a rekonstrukciós lépés pedig valamilyen interpolációs stratégiával történhet. 2.1. ábra. A moduláris algoritmusok általános sémája. Megjegyezzük, hogy a moduláris algoritmusok nagyon gyakoriak a komputeralgebrában, de nem univerzálisak. 2.2. Polinomok közös gyökei Legyen R egy integritási tartomány, továbbá legyenek f(x)=f0+f1x++fm1xm1+fmxmR[x],fm0,(2.1)g(x)=g0+g1x++gn1xn1+gnxnR[x],gn0(2.2) tetszőleges polinomok, n,mN,n+m>0. Állapítsuk meg, hogy mi annak a szükséges és elégséges feltétele, hogy a két polinomnak legyen közös gyöke R -ben. 2.2.1. Klasszikus és bővített euklideszi algoritmus Ha T test, akkor T[x] euklideszi gyűrű. Emlékeztetőül, az R integritási tartományt euklideszi gyűrűnek nevezzük a φ:R\{0}N euklideszi függvénnyel, ha bármely a,bR(b0) esetén létezik olyan q,rR, hogy a=qb+r, ahol r=0 vagy φ(r)<φ(b), továbbá minden a,bR\{0} esetén φ(ab)φ(a). A q=a quo b elemet hányadosnak, az r=a rem b elemet maradéknak nevezzük. Ha egy R euklideszi gyűrűben dolgozunk, azt szeretnénk, ha a legnagyobb közös osztó egyértelműen meghatározható lenne. Ehhez az R gyűrű egységszorzók által meghatározott ekvivalencia-osztályainak mindegyikéből egyetlen elem kiválasztása szükséges. (Például az egészek {0},{1,1},{2,2},... osztályaiból mindig a nemnegatívat választjuk.) Így minden aR egyértelműen írható fel a= unit (a) normal (a) alakban, ahol normal (a) -t az a elem normálalakjának nevezzük. Tekintsünk egy T test feletti R=T[x] euklideszi gyűrűt. Ekkor az aR elem normálalakja legyen a megfelelő normált főpolinom, vagyis normal (a)=a/lc (a) , ahol lc (a) jelenti az a polinom főegyütthatóját. Foglaljuk össze a lényegesebb eseteket: ha R=Z, akkor unit (a)= sgn (a)(a0) és φ(a)= normal (a)=|a|, ha R=T[x] ( T test), akkor unit (a)= lc (a) (az a polinom főegyütthatója a unit (0)=1 megállapodással), normal (a)=a/lc (a) és φ(a)=dega. Az alábbi algoritmus tetszőleges euklideszi gyűrűben kiszámítja két elem legnagyobb közös osztóját. Megjegyezzük, hogy a világ egyik legősibb algoritmusáról van szó, amit Euklidész már i.e. 300 körül ismert. Az egészek gyűrűjében a 4. sor maradék képzése cc/d -t jelenti. Ha R=T[x], ahol T test, akkor a 4. sor maradék képzése az EGYHATÁROZATLANÚPOLINOMOK-MARADÉKOS-OSZTÁSA (c,d) algoritmussal számolható, melynek elemzését az 2.2-1. gyakorlatra hagyjuk. A 2.2. ábra a KLASSZIKUS-EUKLIDESZ működését mutatja Z -ben és Q[x] -ben. Megjegyezzük, hogy Z -ben a program a while ciklusba mindig nemnegatív számokkal lép be, a maradék képzés mindig nemnegatív számot eredményez, így a 7. sorban a normalizálás felesleges. A KLASSZIKUS-EUKLIDESZ algoritmus futási idejének vizsgálata előttannak egy bővített változatával foglalkozunk. iteráció rcd18 30 1 18 30 18 2 12 18 12 3 6 12 6 4 0 6 0 (a) KLASSZIKUS-EUKLIDESZ(-18,30) működése. iteráció rcdx4173x3+133x2233x+143x3203x2+7x21 4x2383x+203x3203x2+7x24x2383x+2032 234x+2364x2383x+203234x+2363 0 234x+2360 (b) KLASSZIKUS-EUKLIDESZ (12x468x3+52x292x+56,12x3+80x284x+24) működése. 2.2. ábra. A KLASSZIKUS-EUKLIDESZ algoritmus működésének bemutatása Z -ben és Q[x] -ben. Az (a) esetben a bemenő adatok a=18,b=30,a,bZ. A pszeudokód első két sora a bemenő számok abszolút értékét számolja ki. A harmadik sortól az hatodik sorig tartó ciklus négyszer fut le, a különböző iterációkban számolt r,c és d értékeket mutatja a táblázat. A KLASSZIKUS-EUKLIDESZ(-18,30) algoritmus eredményül a 6-ot szolgáltatja. A (b) esetben a bemenő paraméterek a=12x468x3+52x292x+56,b=12x3+80x284x+24Q[x]. A program első két sora a polinomok normálalakját eredményezi, majd a while ciklus háromszor fut le. Az algoritmus kimenete a normal (c)=x2/3 polinom. Ismert, hogy az R euklideszi gyűrűben az a,bR elemek legnagyobb közös osztója alkalmas u,vR elemekkel kifejezhető lnko (a,b)=au+bv alakban. De nem csak egy ilyen számpár létezik. Ha ugyanis u0,v0 megfelelők, akkor u1=u0+bt és v1=v0at is azok minden tR esetén: au1+bv1=a(u0+bt)+b(v0at)=au0+bv0= lnko (a,b). A KLASSZIKUS-EUKLIDESZ algoritmust úgy egészítettük ki, hogy eredményül ne csak a legnagyobb közös osztót szolgáltassa, hanem az iméntieknek megfelelően egy konkrét u,vR számpárt is megadjon. Legyen a,bR , ahol R euklideszi gyűrű a φ euklideszi függvénnyel. A BŐVÍTETT-EUKLIDESZ pszeudokód első két sora kezdeti értékadásainak megfelelően az r0=u0a+v0b és r1=u1a+v1b(2.3) egyenletek nyilván teljesülnek. Megmutatjuk, hogy a (2.3) egyenlőségek a pszeudokód while ciklusának transzformációira invariánsak. Tegyük fel, hogy a ciklus valamely iterációjának végrehajtása előtt a (2.3) feltételek teljesülnek. Ekkor a pszeudokód 4–5. sora szerint r=r0qr1=u0a+v0bq(au1+bv1)=a(u0qu1)+b(v0qv1), amiből a 6–7. sorok miatt r=a(u0qu1)+b(v0qv1)=au+bv. A 8–9. sorok olyan értékadásokat jelentenek, melyben u0,v0 felveszi u1 és v1, majd u1,v1 felveszi u és v értékeit, továbbá r0,r1 felveszi r1 és r értékét. Ezért (2.3) egyenlőségei a while ciklus kiértékelése után is teljesülnek. Mivel a ciklus újabb és újabb végrehajtásakor φ(r1)<φ(r0), így a 8–9. sorok értékadásai során keletkezett {φ(ri)} sorozat a természetes számok szigorúan monoton csökkenő sorozatát alkotja, ezért a vezérlés előbb utóbb kilép a while ciklusból. A legnagyobb közös osztó az algoritmus maradékos osztás sorozatának utolsó nem nulla maradéka, a 8–9. soroknak megfelelően r0. 2.3. példa. Vizsgáljuk meg a BŐVÍTETT-EUKLIDESZ algoritmus maradéksorozatát az a(x)=63x5+57x459x3+45x28,(2.4)b(x)=77x4+66x3+54x25x+99(2.5) polinomok esetében: r0=x5+1921x45963x3+57x2863,r1=x467x35477x2+577x97,r2=61854851x3+1016539x2+18941617x+943441,r3=771300096420796475x2+224465568420796475x+10065842738254225,r4=125209969836038125113868312759339264x3541728593586625101216278008301568,r5=471758016363569992743605121180322986033315115805436875. Az pszeudokód 10. sorának végrehajtása előtt az u0,v0 változók értékei: u0=113868312759339264125209969836038125x36626390528589783378565622481964993651506870820653125x21722144452624036901282056661901614930166575579027184375x+1451757987487069224981678954901614930166575579027184375,v0=113868312759339264125209969836038125x46506938160811183887881353681964993651506870820653125x3+17827050543462762675144607981964993651506870820653125x2+638085922305129542614635381964993651506870820653125x17981800118341313301244561781964993651506870820653125. A visszatérési értékek: lnko (a,b)=1,u=2580775248128467729710968369x33823697946464779549518280615x2271022094234832338648554841845x+7615669511954779549518280615,v=703847794944155909903656123x4+3072083769824779549518280615x3252497524726332338648554841845x2301255883677779549518280615x+254689355871592338648554841845. Láthatjuk, hogy az együtthatók drasztikus növekedést mutatnak. Felvetődik a kérdés: miért nem normalizálunk a while ciklus minden iterációjában? Ez az ötlet vezet el a polinomok euklideszi algoritmusa normalizált változatához. 2.4. példa. Nézzük meg a BŐVÍTETT-EUKLIDESZ-NORMALIZÁLT algoritmus során keletkezett maradéksorozatot és az e együtthatósorozatot a korábbi (2.4), (2.5) polinomokra: 2-k48b) A pszeudokód 14. sorának végrehajtásakor az lnko (a,b)=r0,u=u0,v=v0 változók értékei: lnko (a,b)=1,u=2580775248128467729710968369x33823697946464779549518280615x2271022094234832338648554841845x+7615669511954779549518280615,v=703847794944155909903656123x4+3072083769824779549518280615x3252497524726332338648554841845x2301255883677779549518280615x+254689355871592338648554841845. Q[x] -ben az együtthatók nagyságát tekintve az euklideszi algoritmus normalizált változatának előnye szembetűnő, de az együtthatók növekedését így sem kerültük el. A BŐVÍTETT-EUKLIDESZ-NORMALIZÁLT algoritmus gépi architektúra függő leírásához, elemzéséhez bevezetjük az alábbi jelölést. Legyen λ(a)=log2|a|/w+1, ha aZ\{0}, és λ(0)=0,λ(a)=max{λ(b),λ(c)}, ha a=b/cQ,b,cZ, lnko (b,c)=1,λ(a)=max{λ(b),λ(a0),...,λ(an)}, ha a=0inaixi/bQ[x],aiZ,bN+, lnko (b,a0,...,an)=1, ahol w a számítógépes architektúra szóhossza bitekben. Könnyű meggondolni, hogy ha a,bZ[x] és c,dQ, akkor λ(c+d)λ(c)+λ(d)+1,λ(a+b)max{λ(a),λ(b)}+1,λ(cd),λ(c/d)λ(c)+λ(d),λ(ab)λ(a)+λ(b)+λ(min{dega,degb}+1). Az alábbi tételeket bizonyítás nélkül közöljük. 2.1. tétel. Ha a,bZ és λ(a)=mn=λ(b), akkor a KLASSZIKUS-EUKLIDESZ és a BŐVÍTETT-EUKLIDESZ algoritmusok O(mn) gépi szóban mért elemi aritmetikai műveletet igényelnek. 2.2. tétel. Ha F test, a,b,F[x],deg(a)=mn=deg(b), akkor a KLASSZIKUS-EUKLIDESZ, a BŐVÍTETT-EUKLIDESZ és a BŐVÍTETT-EUKLIDESZ-NORMALIZÁLT algoritmusok O(mn)F -beli elemi aritmetikai műveletet igényelnek. Vajon az együtthatók imént látott növekedése pusztán csak a példaválasztásból fakad? Vizsgáljunk meg a BŐVÍTETT-EUKLIDESZ-NORMALIZÁLT algoritmusban egyetlen maradékos osztást. Legyen a=bq+e*r, ahol a=xm+1ci=0m1aixiQ[x],b=xn+1di=0n1bixiQ[x],rQ[x] főpolinomok, ai,biZ,e*Q,c,dN+, és tekintsük az n=m1 esetet. Ekkor q=x+am1dbn1ccd,(2.6)λ(q)λ(a)+λ(b)+1,e*r=aqb=acd2xbcd2(am1dbn1c)bdcd2,λ(e*r)λ(a)+2λ(b)+3. Vegyük észre, hogy a (2.6) becslés az r maradék polinom együtthatóira is érvényes, vagyis λ(r)λ(a)+2λ(b)+3. Így λ(a)λ(b) esetén maradékos osztásonként az együtthatók mérete legfeljebb kb. háromszorosára nőhet. Pszeudovéletlen polinomokra a becslés élesnek tűnik, a kísérletezni vágyó Olvasónak ajánljuk a 2-1. feladatot. A legrosszabb esetre kapott becslés azt sejteti, hogy λ(rl)=O(3lmax{λ(a),λ(b)}), ahol l jelöli a BŐVÍTETT-EUKLIDESZ-NORMALIZÁLT algoritmus futási idejét, vagyis lényegében azt, hogy a while ciklus hányszor hajtódik végre. Szerencsére, ez az exponenciális növekedés nem teljesül az algoritmus minden iterációjában, végeredményben pedig az együtthatók növekedése a bemenet függvényében polinomiálisan korlátos. A későbbiekben látni fogjuk, hogy moduláris technika alkalmazásával az együtthatók növekedése teljesen elkerülhető. Összefoglalva, az euklideszi algoritmus segítségével az f,gR[x] ( R test) polinomok legnagyobb közös osztóját kiszámítva f -nek és g -nek pontosan akkor van közös gyöke, ha a legnagyobb közös osztójuk nem konstans. Ha ugyanis lnko (f,g)=dR[x] nem konstans, akkor d gyökei f -nek és g -nek is gyökei, hiszen d osztója f -nek és g -nek is. Megfordítva, ha f -nek és g -nek van közös gyöke, akkor a legnagyobb közös osztójuk nem lehet konstans, mert a közös gyök ennek is gyöke. 2.2.2. Primitív euklideszi algoritmus Amennyiben R euklideszi gyűrű vagy alaptételes gyűrű (amelyben érvényes a számelmélet alaptételének megfelelő állítás, miszerint bármely nem nulla és nem egység elem sorrendtől és egységszorzóktól eltekintve egyértelműen bontható irreducibilis elemek szorzatára), akkor a helyzet bonyolultabb, hiszen R[x] -ben nem feltétlenül létezik euklideszi algoritmus. Szerencsére, mégis több módszer kínálkozik, melyek használhatóságának két oka van: (1) R[x] alaptételes gyűrű, (2) alaptételes gyűrűben két vagy több elem legnagyobb közös osztója mindig létezik. Az első kínálkozó módszer az, hogy a legnagyobb közös osztó számítását R hányadostestében végezzük el. A p(x)R[x] polinomot primitív polinomnak nevezzük, ha nincs olyan R -beli prím, ami p(x) összes együtthatóját osztaná. Gauss híres lemmája szerint primitív polinomok szorzata is primitív, melynek következménye, hogy f,g primitív polinomok esetén pontosan akkor lesz d= lnko (f,g)R[x], ha d= lnko (f,g)H[x], ahol H jelöli R hányadostestét. Vagyis az R[x] beli legnagyobb közös osztó számítás visszavezethető H[x] -belire. Sajnos, ez a megközelítés nem igazán hatékony, mert a H hányadostestben használt aritmetika lényegesen költségesebb, mint az R -beli. Második lehetőségként egy, az euklideszi algoritmushoz hasonló algoritmus segíthet: integritási tartomány feletti egyhatározatlanú polinomgyűrűben ún. pszeudo-maradékos osztást lehet definiálni. A (2.1), (2.2) polinomokat használva ha mn, akkor létezik olyan q,rR[x], hogy gnmn+1f=gq+r, ahol r=0 vagy degr<degg. A q polinomot az f és g polinomok pszeudohányadosának, az r polinomot pszeudo-maradékának nevezzük. Jelölésben q= pquo (f,g),r= prem (f,g). 2.5. példa. Legyen f(x)=12x468x3+52x292x+56Z[x],(2.7)g(x)=12x3+80x284x+24Z[x].(2.8) Ekkor pquo (f,g)=144(x+1), prem (f,g)=1152(6x219x+10). Másrészt egységszorzótól eltekintve minden f(x)R[x] polinom egyértelműen írható fel f(x)= cont (f) pp (f) alakban, ahol cont (f)R és pp (f)R[x] primitív polinom. Ekkor cont (f) -et f összetevőjének, pp (f) -et az f(x) polinom primitív részének nevezzük. A felírások egyértelműsége az egységek normalizálásával érhető el. Például Z -ben az egységek {1,1} halmazából mindig a pozitívat választjuk. Az alábbi algoritmus pszeudo-maradékos osztások sorozatát hajtja végre. Az algoritmus felhasználja a pszeudo-maradékot kiszámító prem () függvényt, feltételezi az R -beli legnagyobb közös osztó, valamint az R[x] -beli polinomok összetevőjének és primitív részének kiszámíthatóságát. Bemenete az a,bR[x] polinomok, ahol R alaptételes gyűrű. Az algoritmus eredménye a lnko (a,b)R[x] polinom. Az algoritmus működését a 2.3. ábra szemlélteti. A PRIMITÍV-EUKLIDESZ algoritmus futási idejének nagyságrendje megegyezik az euklideszi algoritmus korábban látott változatainak futási idejével. iteráció rcd3x417x3+13x223x+143x3+20x221x+61 108x2342x+1083x3+20x221x+66x219x+102 621x4146x219x+103x23 0 3x20 2.3. ábra. A PRIMITÍV-EUKLIDESZ algoritmus működésének bemutatása az a(x)=12x468x3+52x292x+56,b(x)=12x3+80x284x+24Z[x] bemenő adatok esetén. A program első két sora a bemeneti polinomok primitív részét számolja ki. A harmadik sortól a hatodik sorig tartó ciklus háromszor fut le, a különböző iterációkban számolt r,c és d értékeket mutatja a táblázat. A program 7. sorában a γ változó értéke lnko (4,4)=4. A PRIMITÍV-EUKLIDESZ (a,b) algoritmus eredményül 4(3x2) -t szolgáltat. PRIMITÍV-EUKLIDESZ algoritmus azért nagyon lényeges, mert az R test feletti többváltozós R[x1,x2,...xt] polinomgyűrű alaptételes gyűrű, így az algoritmust úgy alkalmazzuk, hogy kiszámoljuk a legnagyobb közös osztót mondjuk R[x2...,xt][x1] -ben, majd rekurzívan az R[x3,...,xt],...,R[xt] alaptételes gyűrűkben. Vagyis a többváltozós polinomgyűrűk rekurzív szemlélete természetes módon vezet a PRIMITÍV-EUKLIDESZ algoritmus rekurzív alkalmazásához. Észrevehetjük, hogy az algoritmus a korábban látottakhoz hasonlóan együttható növekedést mutat. Vizsgáljuk meg részletesebben a Z[x] alaptételes gyűrűt. A legnagyobb közös osztó együtthatóinak nagyságára vonatkozó becslést az alábbi, bizonyítás nélkül közölt tétel mutatja. 2.3. tétel (Landau–Mignotte). Legyen a(x)=i=0maixi , b(x)=i=0nbixiZ[x] , am0bn, továbbá b(x)|a(x). Ekkor i=1n|bi|2n|bnam|2i=0mai2. 2.4. következmény. Az előző tétel jelöléseivel az lnko (a,b)Z[x] polinom bármely együtthatója abszolút értékben kisebb, mint 2min{m,n} lnko (am,bn)min{1|am|2i=1mai2,1|bn|2i=1nbi2}. Bizonyítás. Az a és b polinomok legnagyobb közös osztója nyilván osztja a -t és b -t, a foka pedig legfeljebb az a és b polinomok fokainak minimuma. Továbbá a legnagyobb közös osztó főegyütthatója osztója am -nek és bn -nek is, így lnko (am,bn) -nek is. 2.6. példa. A 2.4. következmény szerint a (2.4), (2.5) polinomok legnagyobb közös osztója bármely együtthatójának abszolút értéke legfeljebb 32/923197=201 , a (2.7), (2.8) polinomok esetében pedig legfeljebb 322886=952. 2.2.3. A rezultáns Az alábbiakban ismertetendő módszer a legáltalánosabb keretek között tárgyalja az (2.1), (2.2) polinomok közös gyökeire vonatkozó szükséges és elégséges feltételeket. További előnye, hogy magasabb fokú algebrai egyenletrendszerek megoldására is alkalmazható. Legyen tehát R egy integritási tartomány és H a hányadosteste. Tekintsük H -nak azt a legszűkebb K bővítését, melyben a (2.1)-beli f(x) polinom és a (2.2)-beli g(x) polinom is lineáris faktorokra bomlik. Jelöljük az f(x) polinom ( K -beli) gyökeit α1,α2,...,αm -nel, a g(x) polinom gyökeit pedig β1,β2,...,βn nel. Készítsük el a következő szorzatot: res (f,g)=fmngnm(α1β1)(α1β2)(α1βn)(α2β1)(α2β2)(α2βn)(αmβ1)(αmβ2)(αmβn)=fmngnmmi=1nj=1(αiβj). Nyilvánvaló, hogy res (f,g) akkor és csak akkor lesz 0 , ha valamilyen i -re és j -re αi=βj , azaz ha f -nek és g -nek van közös gyöke. Ezt a res (f,g) szorzatot az f és g polinomok rezultánsának nevezzük. Vegyük észre, hogy a rezultáns értéke függ az f és g polinomok sorrendjétől, azonban a különböző sorrendben képzett rezultánsok legfeljebb csak előjelben térhetnek el egymástól: res (g,f)=gnmfmnnj=1mi=1(βjαi)=(1)mnfmngnmmi=1nj=1(αiβj)=(1)mn res (f,g). A rezultánsnak ez az alakja a gyakorlatban természetesen használhatatlan, mivel a gyökök ismeretét tételezi fel. Vizsgáljuk meg tehát a rezultáns különböző alakjait. Mivel f(x)=fm(xα1)(xα2)(xαm)(fm0),g(x)=gn(xβ1)(xβ2)(xβn)(gn0), ezért g(αi)=gn(αiβ1)(αiβ2)(αiβn)=gnnj=1(αiβj). Így res (f,g)=fmnmi=1(gnnj=1(αiβj))=fmnmi=1g(αi)=(1)mngnmnj=1f(βj). Ámbár ez az alak sokkal barátságosabb, még mindig feltételezi legalább az egyik polinom gyökeinek ismeretét. Az alábbiakban azt nézzük meg, hogyan lehetne a rezultánst pusztán csak a polinomok együtthatói segítségével kifejezni. Ez a vizsgálat vezet el a rezultáns Sylvester-féle alakjához. Tegyük fel, hogy a (2.1)-beli f és a (2.2)-beli g polinomoknak van közös gyöke. Ez azt jelenti, hogy van olyan αK szám, amelyre f(α)=fmαm+fm1αm1++f1α+f0=0,g(α)=gnαn+gn1αn1++g1α+g0=0. A két egyenletet szorozzuk meg rendre az αn1,αn2,...,α,1, illetve az αm1 , αm2,...,α,1 számokkal. Ekkor az első egyenletből n, a második egyenletből m újabb egyenletet nyerünk. Ezt az m+n egyenletet fogjuk úgy fel, mint egy m+n ismeretlenre vonatkozó homogén lineáris egyenletrendszert, melynek αm+n1,αm+n2,...,α,1 a megoldása. A megoldás nyilván nem-triviális, hiszen 1 is a gyökök között szerepel. Ismert, hogy az olyan homogén lineáris egyenletrendszernek, amely ugyanannyi egyenletből áll, mint ahány ismeretlent tartalmaz, csak abban az esetben van nemtriviális megoldása, ha a rendszer determinánsa zérus. Vagyis arra jutottunk, hogy f -nek és g -nek csak akkor lehet közös gyöke, ha a determináns nulla (a ki nem írt és nem pontozott helyeken mindenütt nullák állnak). A közös gyök létezésének tehát szükséges feltétele, hogy az (m+n) edrendű D determináns 0 legyen. Az alábbiakban bebizonyítjuk, hogy a D determináns megegyezik az f és g polinomok rezultánsával, amiből az következik, hogy D=0 a közös gyökök létezésének elégséges feltétele is. A () determinánst nevezzük az f és g polinomok rezultánsa Sylvester-féle alakjának. 2.5. tétel. A korábbi jelölésekkel D=fmnmi=1g(αi). Bizonyítás. m -re vonatkozó teljes indukcióval dolgozunk. m=0 -ra f=fm=f0, így a jobb oldal f0n. A bal oldalon D egy n -edrendű determináns, melynek a főátlójában csupa f0 áll, a többi helyen pedig nulla. Így D=f0n, az állítás tehát igaz. A továbbiakban tegyük fel, hogy m>0 és hogy a bizonyítandó állítás n1 -re igaz. Ha tehát f helyett az f*(x)=fm(xα1)(xαm1)=fm1*xm1+fm2*xm2++f1*x+f0* polinomot vesszük, akkor f* ra és g -re az állítás teljesül: Mivel f=f*(xαm), ezért f és f* együtthatói között az fm=fm1*,fm1=fm2*fm1*αm,...,f1=f0*f1*αm,f0=f0*αm összefüggések állnak fenn. Így A determinánst a következőképpen alakítjuk át: az első oszlop αm -szeresét hozzáadjuk a második oszlophoz, az új második oszlop αm -szeresét a harmadik oszlophoz stb., végig valamennyi oszlopon. Ezáltal az első n sorból eltűnnek az αm -ek, vagyis az átalakított D első n sora megegyezik a fenti D* első n sorával. Az utolsó m sorban az elsőből vonjuk ki a második αm -szeresét, majd hasonlóan mindegyikből a rákövetkező αm -szeresét. Végül D -ből az alábbi determináns lesz: Az utolsó oszlop szerint kifejtve, a D=D*g(αm) egyenlőséghez jutunk, amiből az indukciós feltevés alapján D=fmni=1mg(αi) következik. Azt kaptuk tehát, hogy D= res (f,g), vagyis az f és g polinomoknak akkor és csak akkor van közös gyökük K -ban, ha a D determináns eltűnik. Algoritmikus szempontból magasabb fokú polinomok esetén a rezultáns Sylvesterféle alakjának kiszámolása egy nagy determináns kiszámítását jelenti. Az alábbi tétel szerint a pszeudo-maradékos osztás egyszerűsítheti a számításokat. 2.6. tétel. A (2.1)-beli f és (2.2)-beli g polinomokra mn>0 esetén Bizonyítás. A (2.9) determináns első sorát szorozzuk meg gnmn+1 gyel. Legyenek q=qmnxmn++q0R[x] és r=rdxd++r0R[x] azok az egyértelműen meghatározott polinomok, melyekre gnmn+1(fmxm++f0)=(qmnxmn++q0)(gnxn++g0)+rdxd++r0,(2.9) ahol r= prem (f,g). Ekkor a rezultáns (n+1) -edik sorát qmn -nel, az (n+2) edik sorát qmn1 -gyel stb. szorozva, majd az első sorból kivonva a determinánst kapjuk. Itt rd az első sor (md+1) -edik oszlopában van, r0 pedig az első sor (m+1) -edik oszlopában. Hasonló módon folytatva szorozzuk meg a második sort gnmn+1 -gyel, majd szorozzuk meg az (n+2) -edik, (n+3) -adik, ... sort qmn -nel, qmn1 -gyel stb., és vonjuk ki őket a második sorból. Ugyanígy a harmadik, ...,n -edik sorra. Az eredmény: Sorcserék után azt kapjuk, hogy Vegyük észre, hogy ezért gnn(mn+1) res (f,g)=(1)mngnmd res (g,r), amiből gn(mn)(n1)+d res (f,g)=(1)mn res (g,r)(2.10) következik. A (2.10) egyenlet egy nagyon fontos kapcsolatot ír le. Ahelyett, hogy az esetleg óriási méretű res (f,g) determinánst számítanánk ki, pszeudo-maradékos osztások sorozatát végezzük el, majd minden lépésnél (2.10)-et alkalmazzuk. Csak akkor számoljuk ki a rezultánst, ha már több pszeudo-maradékos osztás nem végezhető el. A tétel fontos következménye az alábbi 2.7. következmény. Léteznek olyan u,vR[x] polinomok, melyre res (f,g)=fu+gv, ahol degu<degg,degv<degf. Bizonyítás. A rezultáns determináns alakjában az i-edik oszlopot szorozzuk meg xm+ni-vel és adjuk az utolsó oszlophoz minden i=1,...,(m+n1)-re. Az eredmény az alábbi lesz: A determinánst az utolsó oszlopa szerint kifejtve, majd f -et és g -t kiemelve kapjuk az állításban szereplő egyenlőséget a fokokra vonatkozó megszorításokkal. A rezultánsmódszer legfontosabb előnye a korábban látott módszerekhez képest, hogy a bemeneti polinomok szimbolikus együtthatókat is tartalmazhatnak. 2.7. példa. Legyen f(x)=2x3ξx2+x+3Q[x],g(x)=x25x+6Q[x]. Ekkor f és gQ -beli közös gyökeinek létezését az euklideszi algoritmus variánsai segítségével nem tudjuk eldönteni, míg a rezultánsmódszerrel igen: pontosan akkor van közös gyök, ha vagyis ha ξ=20/3, vagy ξ=21/4. A rezultáns jelentősége nemcsak abban áll, hogy segítségével két polinom közös gyökének létezése eldönthető, hanem abban is, hogy használatával algebrai egyenletrendszerek rekurzív módon visszavezethetők egyismeretlenes algebrai egyenletek megoldására. 2.8. példa. Legyen f(x,y)=x2+xy+2x+y1Z[x,y],(2.11)g(x,y)=x2+3xy2+2y1Z[x,y].(2.12) Értelmezzük az f és g polinomokat úgy, mint (Z[x])[y]-beli elemeket. Pontosan akkor létezik közös gyökük, ha Z -beli közös gyökök tehát az x{3,0,1} esetben létezhetnek. Minden x -hez (immáron Z[y] -ban) visszahelyettesítéssel megoldjuk a (2.11), (2.12) egyenleteket, amikor is azt kapjuk, hogy az egyenletek egész megoldásai a (3,1),(0,1),(1,1) számpárok. Megjegyezzük, hogy a rezultánsmódszer többváltozós polinomegyenlet-rendszerek megoldásainak megkeresésére is alkalmas, ámbár nem igazán hatékony. Az egyik probléma az, hogy a determináns kiszámítása során számítási tárrobbanás lép fel. Megfigyelhetjük, hogy az egyhatározatlanú m és n -edfokú polinomok rezultánsa determináns alakjának kiszámítása a szokásos Gauss-eliminációval O((m+n)3) -ös műveletigényű, míg az euklideszi algoritmus változatai kvadratikusak. A másik probléma, hogy a számítási bonyolultság erősen függ a határozatlanok sorrendjétől. Sokkal hatékonyabb, ha a polinomegyenlet-rendszer összes változóját egyszerre elimináljuk. Ez az út vezet el a többváltozós rezultánsok elméletéhez. 2.2.4. Moduláris legnagyobb közös osztó A polinomok közös gyökeinek létezésére és meghatározására szolgáló eddigi módszerek mindegyikére jellemző volt a számítási tárrobbanás. Ösztönösen vetődik fel a kérdés: van-e lehetőség moduláris módszerek alkalmazására? Az alábbiakban az a(x),b(x)Z[x] esetet vizsgáljuk (a,b0). Ekkor Zp[x] -ben a KLASSZIKUS-EUKLIDESZ algoritmus maradéksorozata az alábbi lesz: r0=11x5+5x4+6x3+6x2+5,r1=x4+x3+2x2+8x+8,r2=3x3+8x2+12x+1,r3=x2+10x+10,r4=7x,r5=10. Azt kapjuk tehát, hogy Zp[x] -ben az a és b polinomok relatív prímek. Az alábbi tétel a Z[x] -ben és Zp[x] -ben vett legnagyobb közös osztók közötti kapcsolatot írja le. 2.8. tétel. Legyen a,bZ[x],a,b0 . Legyen p olyan prím, amelyre p lc (a) és p lc (b) . Legyen továbbá c= lnko (a,b)Z[x] , ap=a rem p , bp=b rem p és cp=c rem p . Ekkor (1) deg( lnko (ap,bp))deg( lnko (a,b)), (2) ha p res (a/c,b/c) , akkor lnko (ap,bp)=cp. Bizonyítás. (1) bizonyítása: mivel cp|ap és cp|bp ezért cp|lnko (ap,bp). Így deg( lnko (ap,bp))deg( lnko (a,b)modp). Azonban a feltételek miatt p lc ( lnko (a,b)), ezért deg( lnko (a,b)modp)=deg( lnko (a,b)). (2) bizonyítása: mivel lnko (a/c,b/c)=1, valamint cp nemtriviális, ezért lnko (ap,bp)=cp lnko (ap/cp,bp/cp).(2.13) Ha lnko (ap,bp)cp , akkor (2.13) jobb oldala nemtriviális, így res (ap/cp,bp/cp)=0. De a rezultáns az együtthatók megfelelő szorzatainak összege, így p| res (a/c,b/c), ami ellentmondás. 2.9. következmény. Véges sok olyan p prím van, amire p lc (a) , p lc (b) és deg( lnko (ap,bp))>deg( lnko (a,b)). Amikor a 2.8. tétel (1) állításában egyenlőség teljesül, akkor azt mondjuk, hogy p egy,,szerencsés prím”. Máris körvonalazhatunk egy legnagyobb közös osztót kiszámoló moduláris algoritmust. Az algoritmus első sora a Landau–Mignotte-korlát kiszámítását kéri. A negyedik sor szerint olyan,,elég nagy” prímet kell választani, amely nem osztja sem a, sem b főegyütthatóját. Az ötödik sor (például a Zp[x] -beli KLASSZIKUS-EUKLIDESZ algoritmussal) kiszámolja az a és b polinomok legnagyobb közös osztóját modulo p. A kapott polinom együtthatóit szimmetrikus ábrázolással tároljuk. A hatodik sor cp|a és cp|b teljesülését vizsgálja, melynek igazsága esetén cp a keresett legnagyobb közös osztó. Ha ez nem teljesül, akkor p egy,,szerencsétlen prím”, így új prímet választunk. Mivel a 2.8. tétel szerint csak véges sok,,szerencsétlen prím” van, ezért az algoritmus előbb-utóbb véget ér. Amennyiben a prímeket megfelelő stratégia szerint választjuk, a H halmaz alkalmazása szükségtelen. A MODULÁRIS-LNKO-NAGYPRÍM hátránya, hogy a bemeneti polinomok fokszámának növekedtével a Landau–Mignotte-konstans exponenciálisan nő, így ez esetben nagy prímekkel kell számolni. Felmerül a kérdés, hogyan módosítsuk az algoritmust, hogy,,sok kis prímmel” számolhassunk? Mivel Zp[x] -ben a legnagyobb közös osztó az együtthatók konstanssal vett szorzata erejéig egyértelmű, ezért az új algoritmusban ügyelni kell a részpolinomok együtthatóira. Mielőtt tehát a kínai maradéktételt alkalmazzuk a különböző prímekkel vett moduláris legnagyobb közös osztók együtthatóira, minden lépésnél normalizálni kell az lnko (ap,bp) főegyütthatóját. Amennyiben am és bn az a és b polinomok főegyütthatói, akkor lnko (a,b) főegyütthatója osztja lnko (am,bn) -t. Primitív a és b polinomok esetén lnko (ap,bp) főegyütthatóját ezért lnko (am,bn)modp -re normalizáljuk, majd a legvégén vesszük az eredmény polinom primitív részét. Ahogy a MODULÁRIS-LNKO-NAGYPRÍM algoritmusnál, a moduláris számítások eredményét most is szimmetrikus ábrázolással tároljuk. Ezek a meggondolások vezetnek az alábbi, kis prímeket használó moduláris legnagyobb közös osztó algoritmushoz. Észrevehetjük, hogy a MODULÁRIS-LNKO-KISPRIMEK algoritmusban nincs szükség annyi kis prímre, mint amennyit a Landau–Mignotte-korlát meghatároz. Amennyiben a g polinom értéke néhány iteráción keresztül nem változik, a 13– 16. sorokban teszteljük, hogy g valóban a legnagyobb közös osztó-e. Ezen iterációk számát tárolja a hatodik sor n változója. Megjegyezzük, hogy n értékét a bemeneti polinomoktól függően változtatni is lehetne. Az algoritmusban használt prímeket célszerű egy olyan előre eltárolt listából választani, amely az architektúrának megfelelő gépi szóban elférő prémeket tartalmazza; ilyenkor a H halmaz használata szükségtelen. A 2.9. következmény miatt a MODULÁRIS-LNKO-KISPRÍMEK algoritmus befejeződik. Az EHÉPÍT algoritmus a bemeneti a,b polinomok azonos fokú tagjainak együtthatóira felírt, modulo m1 és m2 vett két lineáris kongruenciából álló egyenletrendszer megoldását számolja ki a kínai maradéktételnek megfelelően. Nagyon fontos, hogy az eredmény polinom együtthatóit szimmetrikus ábrázolással tároljuk. 2.9. példa. Először vizsgáljuk meg a MODULÁRIS-LNKOKISPRIMEK algoritmus működését a korábban is vizsgált (2.4), (2.5) polinomokra. A könnyebb érthetőség kedvéért kis prímekkel fogunk számolni. Emlékeztetőül, a(x)=63x5+57x459x3+45x28Z[x],b(x)=77x4+66x3+54x25x+99Z[x]. Az algoritmus első hat sorának végrehajtása után a p=5 választással d=7,cp=x2+3x+2 és gp=2x2+x1 lesznek. Mivel a 7. sor miatt a j változó értéke 1, ezért a 10–12. sorok végrehajtódnak. A gp polinom nem nulla, ezért g=2x2+x1,j=0, valamint P=5 lesznek a végrehajtás utáni változóértékek. A 13. sorban a feltétel értéke nem teljesül, így újabb prímet választunk. A p=7 rossz választás, a p=11 viszont megengedett. A 19–20. sorok szerint ekkor cp=1,gp=4. Mivel deggp<degg, ezért j=1 lesz és a 25–30. sorok nem hajtódnak végre. A gp polinom konstans, így a 11. sorban a visszatérési érték 1 lesz, jelezve, hogy az a és b polinomok relatív prímek. 2.10. példa. Második példánkban tekintsük a korábbi a(x)=12x468x3+52x292x+56Z[x],b(x)=12x3+80x284x+24Z[x], polinomokat. Legyen ismét p=5. Az algoritmus első hat sora után d=12,cp=x+1,gp=2x+2. A 10–12. sorok végrehajtása után P=5,g=2x+2 lesznek a változók értékei. A következő prím legyen p=7. Így az új értékek cp=x+4,gp=2x1. Mivel deggp=degg, ezért a 25–30. sorok után P=35 és g új értéke 12x8 lesz. Az i változó értéke továbbra is 1. A következő prímet válasszuk 11-nek. Ekkor cp=gp=x+3. A gp és g fokai megegyeznek, így g együtthatóit módosítjuk. Ekkor g1=12x8 és mivel g=g1, ezért i=2, valamint P=385 lesznek. Az új prím legyen 13. Ekkor cp=x+8,gp=x+5. A gp és g fokai továbbra is megegyeznek, ezért a 25–30 sorok végrehajtódnak, a változók értékei g=12x8,P=4654,i=3 lesznek. A 17–18. sorok végrehajtása után kiderül, hogy g|a és g|b ezért a legnagyobb közös osztó g=12x8. Az alábbi tételt bizonyítás nélkül közöljük. 2.10. tétel. A MODULÁRIS-LNKO-KISPRIMEK algoritmus megfelelően működik. Az algoritmus számítási bonyolultsága O(m3(logm+λ(K))2) gépi szóban mért művelet, ahol m=min{dega,degb},K pedig az a és b polinomok Landau– Mignotte-korlátja. Gyakorlatok 2.2–1. Legyen R egy kommutatív egységelemes gyűrű, a=i=0maixiR[x],b=i=0nbixiR[x], továbbá bn egység, mn0. Az alábbi algoritmus az a és b polinomokkal végzett maradékos osztás eredményeként előállítja azokat a q,rR[x] polinomokat, melyekre a=qb+r és degr<n vagy r=0. Bizonyítsuk be, hogy az algoritmus legfeljebb (2degb+1)(degq+1)=O(m2)R -beli műveletet igényel. 2.2–2. Mi a különbség Z -ben a BŐVÍTETT-EUKLIDESZ és a BŐVÍTETT-EUKLIDESZNORMALIZÁLT algoritmusok között? 2.2–3. Bizonyítsuk be, hogy res (fg,h)= res (f,h)res (g,h). 2.2– 4. Az f(x)R[x] polinom ( degf=m, lc (f)=fm ) diszkriminánsának a discr f=(1)m(m1)2fm res (f,f)R elemet nevezzük, ahol f az fx -beli deriváltját jelenti. Az f polinomnak nyilván akkor és csak akkor van többszörös gyöke, ha diszkriminánsa nulla. Számítsuk ki (discr f) -et általános másodés harmadfokú polinomok esetében. 2.3. Gröbner-bázis Legyen F test, R=F[x1,x2,...,xn] az F feletti n -határozatlanú polinomok gyűrűje, továbbá legyen f1,f2,...,fsR. Állapítsuk meg, hogy mi annak a szükséges és elégséges feltétele, hogy az f1,f2,...,fs polinomoknak legyen közös gyöke R -ben. Látható, hogy a probléma az előző alfejezet s=2 esetének bizonyos értelemben vett általánosítása. Jelölje I=f1,...,fs={1isqifi:qiR} az f1,...,fs polinomok által generált ideált. Ekkor az f1,...,fs polinomok az I ideál bázisát alkotják. Az I ideál varietásán a V(I)={uFn:f(u)=0 minden fI polinomra } halmazt értjük. A varietás ismerete természetesen az f1,...,fs polinomok közös megoldásainak ismeretét is jelenti. A varietásról, illetve az I ideálról feltehető legfontosabb kérdések: V(I)? V(I) ,,mekkora” ? Adott fR esetén fI ? I=R ? Az I ideál Gröbner-bázisa egy olyan bázis, ahol ezeket a kérdéseket könnyű megválaszolni. Mindenekelőtt vizsgáljuk meg az n=1 esetet. Mivel F[x] euklideszi gyűrű, ezért f1,...,fs= lnko (f1,...,fs).(2.14) Feltehetjük, hogy s=2 . Legyen f,gF[x] , és osszuk el maradékosan f et g -vel. Ekkor egyértelműen léteznek olyan q,rF[x] polinomok, melyekre f=qg+r, ahol degr<degg. Vagyis fgr=0, továbbá V(g)={u1,...,ud}, amennyiben xu1,...,xud a gF[x] polinom összes különböző lineáris faktora. Sajnos a (2.14) egyenlőség két vagy több határozatlan esetén már nem teljesül. Sőt, akármilyen test feletti többváltozós polinomgyűrű nem euklideszi gyűrű, így a maradékos osztás lehetőségét is újra kell gondolni. Ebben az irányban haladunk tovább. 2.3.1. Monomiális rendezés A ‘ Nn teljes rendezési relációt megengedettnek nevezzük, ha (i) (0,...,0)v minden vNn -re, (ii) minden v1,v2,vNn esetén v1v2v1+vv2+v. Nem nehéz bizonyítani, hogy Nn minden megengedett rendezése egyben jólrendezés is (vagyis bármely nemüres részhalmazának van legkisebb eleme). A korábbi jelöléseket figyelembe véve tekintsük a T={x1i1xnin} halmazt, melynek elemeit monomoknak nevezzük. Vegyük észre, hogy T zárt az F[x1,...,xn] -beli szorzásra, valamint a művelettel kommutatív monoidot alkot. Az NnT , (i1,...,in)x1i1xnin leképezés izomorfizmus, ezért egy T -beli megengedett teljes rendezésre (i) 1t minden tT -re, (ii) minden t1,t2,tT esetén t1t2t1tt2t. A T -beli megengedett rendezéseket monomiális rendezéseknek nevezzük. Tekintsünk néhány példát. Legyen α=x1i1xnin,β=x1j1xnjnT. Ekkor az alábbi rendezéseket szokás definiálni. Lexikografikus rendezés.αlexβ létezik olyan l{1,...,n} , hogy il<jl és il+1=jl+1,...,in=jn . Tiszta lexikografikus rendezés.αplexβ létezik olyan l{1,...,n} , hogy il<jl és i1=j1,...,il1=jl1 . Összfokszám szerint, majd lexikografikus rendezés.αgrlexβi1++in<j1++jn vagy ( i1++in=j1++jn és αlexβ ). Összfokszám szerint, majd fordított lexikografikus rendezés.αtdegβi1++in<j1++jn vagy ( i1++in=j1++jn és létezik olyan l{1,...,n} , melyre il>jl és il+1=jl+1,...,in=jn ). A tdeg monomiális rendezést némely szerzők grrevlex -nek jelölik (,,graded reverse lexicographic order”), hiszen a rendezés a monomok fokszámösszehasonlítás utáni lexikografikus rendezésének felel meg. 2.11. példa. Legyen =plex. Ekkor zyx esetén 1zz2yyzyz2y2y2zy2z2xxzxz2xyxy2x2. Legyen =tdeg. Ekkor zyx esetén 1zyxz2yzxzy2xyx2z3yz2xz2y2zxyzx2zy3xy2x2yx3. A továbbiakban mindig feltesszük, hogy valamilyen rögzített monomiális rendezés mellett dolgozunk. Legyen f=αNncαxαR egy nem nulla polinom, cαF és legyen adott egy monomiális rendezés. Ekkor cαxα(cα0) az f polinom tagjai, discr (f)=max{αNn:cα0} a polinom multifoka (a maximum a monomiális rendezés mellett értendő), lc (f)=c discr (f)F\{0} a polinom főegyütthatója, lm (f)=xdiscr (f)R a polinom főmonomja, lc (f)= lc (f)lm (f)R a polinom főtagja. Legyenek továbbá lc (0)= lc (0)= lm (0)=0 és discr (0)=. 2.12. példa. Tekintsük az f(x,y,z)=2xyz23x3+4y45xy2zQ[x,y,z] polinomot. Amennyiben =plex és zyx , akkor discr (f)=(3,0,0), lc (f)=3x3, lm (f)=x3, lc (f)=3, ha pedig =tdeg és zyx , akkor discr (f)=(0,4,0), lc (f)=4y4, lm (f)=y4, lc (f)=4. 2.3.2. Többváltozós polinomok maradékos osztása Ebben a pontban adott f,f1,...,fsR többváltozós polinomok és adott monomiális rendezés esetén olyan q1,...,qsR és rR polinomokat keresünk, melyekre f=q1f1++qsfs+r és r egyetlen monomja sem osztható lc (f1),..., lc (fs) egyikével sem. Az algoritmus helyes működése abból következik, hogy az 5–10. sorok while ciklusának minden iterációjában fennállnak az alábbi tulajdonságok: (i) discr (p) discr (f) és f=p+q1f1++gsfs+r, (ii) qi0 discr (qifi) discr (f) minden 1is esetén, (iii) r egyetlen tagja sem osztója egyik lc (fi) -nek sem. Algoritmusunknak van egy gyenge pontja: a többváltozós polinomok maradékos osztása nem egyértelmű. A 7. sorban a megfelelő i értékek közül tetszőlegesen választhatunk. 2.13. példa. Legyen f=x2y+xy2+y2Q[x,y],f1=xy1,f2=y21, a monomiális rendezés plex,yplexx, és a 7. sorban mindig a legkisebb indexű megfelelő i értéket válasszuk. Ekkor az algoritmus eredménye q1=x+y,q2=1,r=x+y+1. De ha f1 és f2 szerepét felcseréljük, vagyis f1=y21 és f2=xy1, akkor az algoritmus kimenete q1=x+1,q2=x és r=2x+1 lesz. Az iménti példában látott módon (nevezetesen, hogy a pszeudokód 7. sorában mindig a legkisebb megfelelő pozitív i értéket választjuk) az algoritmus determinisztikussá tehető. Ilyenkor a q1,...,qs hányadosok és az r maradék egyértelmű, amit úgy jelölünk, hogy r=f rem (f1,...,fs). Az s=1 esetben az algoritmus választ ad az ideál-tartalmazás problémájára: ff1 akkor és csak akkor, ha az f polinom f1 polinommal vett maradékos osztásakor a maradék nulla. Sajnos s2 esetén ez nem teljesül: a plex monomiális rendezéssel xy2x rem (xy+1,y21)=xy, a hányadosok pedig q1=y,q2=0. Másrészről viszont xy2x=x(y21)+0, ami azt mutatja, hogy xy2xxy+1,y21. 2.3.3. Monomiális ideálok és Hilbert-féle bázistétel További célunk tetszőleges polinomideálhoz olyan bázis keresése, hogy ezzel a bázissal vett maradékos osztáskor a maradék egyértelmű legyen, így választ tudjunk adni az ideál-tartalmazás problémára. Vajon ilyen bázis egyáltalán létezik? És ha igen, véges elemszámú? Az IR ideált monomiális ideálnak nevezzük, ha létezik olyan ANn, melyre I=xA={xαT:αA}, vagyis az ideált monomok generálják. 2.11. lemma. Legyen I=xAR egy monomiális ideál, és βNn. Ekkor xβIαAxα|xβ. Bizonyítás. A irány nyilvánvaló. Megfordítva, legyen α1,...,αsA és q1,...,qsR, melyekre xβ=iqixαi. Ekkor az összegnek legalább egy olyan qixαi tagja létezik, melyben xβ előfordul, így xαi|xβ. A lemma legfontosabb következménye, hogy monomiális ideálok pontosan akkor egyeznek meg, ha ugyanazokat a monomokat tartalmazzák. 2.12. lemma(Dickson-lemma). Minden monomiális ideál végesen generálható, vagyis minden ANn -hez létezik olyan BA véges halmaz, melyre xA=xB. 2.13. lemma. Legyen I egy ideál R=F[x1,...,xn] -ben. Ha GI egy olyan véges halmaz, melyre lc (G)=lc (I), akkor G=I. Bizonyítás. Legyen G={g1,...,gs}. Ha fI egy tetszőleges polinom, akkor G -vel vett maradékos osztás szerint f=q1g1++qsgs+r, ahol q1,...,qs,rR olyanok, hogy vagy r=0 , vagy r egyetlen tagja sem osztható egyetlen gi főtagjával sem. De ekkor r=fq1g1gsgsI, és így lc (r) lc (I)lc (g1),..., lc (gs). A (2.11) lemma miatt ezért r=0, vagyis fg1,...,gs=G. Amennyiben a Dickson-lemmát lc (I) -re alkalmazzuk, továbbá figyelembe vesszük, hogy a zérópolinom a 0 ideált generálja, az alábbi nevezetes eredményt kapjuk. 2.14. tétel (Hilbert-féle bázistétel). Minden IR=F[x1,...,xn] ideál végesen generálható, vagyis létezik olyan GI véges halmaz, melyre G=I és lc (G)=lc (I). 2.15. következmény (ideállánc-feltétel). Legyen I1I2R -beli ideálok egy növekvő lánca. Ekkor létezik olyan nN , melyre In=In+1= . Bizonyítás. Legyen I=j1Ij . Ekkor I ideál, ami a Hilbertféle bázistétel miatt végesen generálható. Legyen I=g1,...,gs . Az n=min{j1:g1,...,gsIj} választással azt kapjuk, hogy In=In+1==I . Azokat a gyűrűket, melyekben teljesül az ideál-lánc feltétel, Noethergyűrűknek nevezzük. Speciálisan, amennyiben F test, akkor F[x1,...,xn] Noether-gyűrű. Legyen egy monomiális rendezés R -en és IR egy ideál. A GI véges halmazt az I ideál rendezésre vonatkozó Gröbner-bázisának nevezzük, ha lc (G)=lc (I) . A Hilbert-féle bázistétel következménye az alábbi 2.16. következmény. R=F[x1,...,xn] minden I ideáljának van Gröbner-bázisa. Könnyű megmutatni, hogy egy G Gröbner-bázissal vett maradékos osztáskor a maradék nem függ a báziselemek sorrendjétől. Ilyenkor az f rem G=rR jelölés használatos. Az alábbi tétel szerint a Gröbner-bázis segítségével az ideáltartalmazás problémája egyszerűen megválaszolható. 2.17. tétel. Legyen G az IR ideál monomiális rendezésre vonatkozó Gröbner-bázisa és legyen fR. Ekkor fIf rem G=0. Bizonyítás. Bebizonyítjuk, hogy egyértelműen létezik olyan rR, amelyre (1) frI,(2) r egyetlen tagja sem osztható lc (G) egyetlen monomjával sem. Ilyen r létezése a maradékos osztásból következik. Az egyértelműséghez feltesszük, hogy f=h1+r1=h2+r2 valamilyen h1,h2I -re és r1 vagy r2 egyik tagja sem osztható lc (G) egyetlen monomjával sem. Ekkor r1r2=h2h1I , továbbá a 2.11. lemma miatt lc (r1r2) osztható lc (g) -vel valamely gG -re. Ez azt jelenti, hogy r1r2=0. Ha tehát G az R egy Gröbner-bázisa, akkor minden f,g,hR esetén g=f rem G és h=f rem Gg=h. 2.3.4. A Buchberger-algoritmus Észrevehetjük, hogy a Hilbert-féle bázistétel nem konstruktív: nem ad választ arra, hogyan konstruáljuk meg egy I ideál Gröbner-bázisát. Az alábbiakban úgy okoskodunk, hogy azt vizsgáljuk, egy véges halmaz mikor nem Gröbner-bázisa az I ideálnak. Legyenek g,hR nem nulla polinomok, α=(α1,...,αn)= discr (g),β=(β1,...,βn)= discr (h),γ=(max{α1,β1},...,max{αn,βn}). A g és h polinomok S-polinomján az S(g,h)=xγlc (g)gxγlc (h)hR polinomot értjük. Észrevehetjük, hogy S(g,h)=S(h,g), továbbá xγ/lc (g),xγ/lc (h)R így S(g,h)g,h. A most következő, bizonyítás nélkül közölt tétel egy egyszerű tesztet ad egy halmaz Gröbner-bázis mivoltára. 2.18. tétel. A G={g1,...,gs}R halmaz akkor és csak akkor lesz a G ideál Gröbner-bázisa, ha S(gi,gj)rem (g1,...,gs)=0 minden 1i<js esetén. Az S -polinomok segítségével könnyen adható Gröbner-bázist konstruáló algoritmus (Buchberger, 1965): adott f1,...,fsR=F[x1,...,xn] és adott monomiális rendezés mellett az alábbi algoritmus megadja az I=f1,...,fs ideál egy GR Gröbner-bázisát. Először megmutatjuk, hogy a Gröbner-bázis algoritmus helyesen működik. Az algoritmus futásának bármely pillanatában G az I ideál bázisa, hiszen kezdetben az, a továbbiakban pedig kizárólag olyan elemek kerülnek G -be, melyeket G elemeiből képzett S-polinomok G -vel vett maradékos osztásaként kapunk. Amennyiben az algoritmus befejeződik, az összes lehetséges képezhető S -polinom G vel vett maradéka nulla, így a (2.18) tétel miatt G egy Gröbner-bázis. Most bebizonyítjuk, hogy az algoritmus befejeződik. Legyenek G és G* a pszeudokód while ciklusa két egymást követő végrehajtásakor kapott halmazok. Nyilván GG*, továbbá lc (G)lc (G*) . De a (2.15) következmény miatt az egymást követő iterációk lc (G) ideállánca stabilizálódik, vagyis véges számú lépés után lc (G)=lc (G*) teljesül. Azt állítjuk, hogy ekkor G=G*. Legyen f,gG és r=S(f,g)rem G. Ekkor rG* és vagy r=0 vagy lc (r)lc (G*)=lc (G), amiből a maradék képzésének definíciója miatt r=0 következik. 2.14. példa. Legyen F=Q,=plex,zyx,f1=xyz,f2=x+yz2,f3=x2+y21. Ekkor a pszeudokód első sora miatt G={f1,f2,f3}, a második sorból pedig P={(f1,f2),(f1,f3),(f2,f3)}. A while ciklus első végrehajtása során válasszuk az (f1,f2) párt. Ekkor P={(f1,f3),(f2,f3)},S(f1,f2)=2yz+z2 és r=f4=S(f1,f2)rem G=2yz+z2. Ezért G={f1,f2,f3,f4} és P={(f1,f3),(f2,f3),(f1,f4),(f2,f4),(f3,f4)}. A ciklus második végrehajtásakor válasszuk az (f1,f3) párt. Ekkor P=P\{f1,f3},S(f1,f3)=xyxzy2+1,r=f5=S(f1,f3)rem G=1/2z41/2z2+1, így G={fi|1i5} és P={(f2,f3),(f1,f4),...,(f3,f4),(f1,f5),...,(f4,f5)}. A ciklus harmadik végrehajtása során válasszuk az (f2,f3) párt. Ekkor P=P\{(f2,f3)},S(f2,f3)=xyxz2y2+1 , r=S(f2,f3)rem G=0. A while ciklus negyedik végrehajtása során válasszuk az (f1,f4) párt. Ekkor P=P\{f1,f4},S(f1,f4)=2y2+2yz+xzxz2 , r=S(f1,f4)rem G=0. Hasonlóan, az összes fennmaradó pár S -polinomjának G -vel vett maradékos osztásakor a maradék 0, így a visszatérő érték G={xyz,x+yz2,x2+y21,2yz+z2,1/2z41/2z2+1} egy Gröbner-bázis. 2.3.5. Redukált Gröbner-bázis A Buchberger-algoritmus által eredményezett Gröbner-bázis általában nem minimális és nem egyértelmű. Szerencsére egy kis ravaszkodással mindkettő elérhető. 2.19. lemma. Ha G az IR ideál egy Gröbner-bázisa és lc (g)lc (G\{g}), akkor G\{g} is egy Gröbner-bázisa I nek. Azt mondjuk, hogy a GR halmaz az I=G ideál minimális Gröbner-bázisa, ha Gröbner-bázis és minden gG esetén lc (g)=1 , lc (g)lc (G\{g}). A G Gröbner-bázis egy gG eleme redukált a G -re nézve, ha g egyetlen monomja sincs az lc (G\{g}) ideálban. Egy minimális G Gröbner-bázis redukált, ha G -re vonatkozóan minden eleme redukált. 2.20. tétel. Minden ideálhoz egyértelműen létezik egy redukált Gröbner-bázis. 2.15. példa. A 2.14. példát alapul véve nemcsak G, hanem G={xyz,2yz+z2,1/2z41/2z2+1} is Gröbner-bázis. Nem nehéz megmutatni, hogy Gr={x1/2z21/2z,y1/2z21/2z,z4+z2z} redukált Gröbner-bázis. 2.3.6. A Gröbner-bázis számítási bonyolultsága A Gröbner-bázis elmélet kialakulása óta eltelt fél évszázad sem volt elég teljesen tisztázni az algoritmus számítási bonyolultságát. A tapasztalatok azt mutatják, hogy számítási tárrobbanással állunk szemben. De most, ellentétben az euklideszi algoritmus variánsainál látott számítási tárrobbanással, a növekedés ütemét nem lehet kordában tartani. A Gröbner-bázis számításnál fellépő számítási bonyolultságot szokás az EXPSPACEteljes osztályba sorolni. Legyenek f,f1,...,fsF[x1,...,xn] az F test feletti legfeljebb d -ed fokú polinomok (=tdeg). Ha ff1,f2,...fs, akkor f=f1g1++fsgs olyan g1,...,gsF[x1,...,xn] polinomokra, melyek fokai β=β(n,d)=(2d)2n -nel felülről korlátosak. Ez a duplán exponenciális korlát lényegében elkerülhetetlen, amit számos példa bizonyít. Sajnos, az F=Q esetben az ideáltartalmazás probléma ilyen. Szerencsére, speciális esetekben drasztikus redukció érhető el. Ha f=1 (a Hilbert-féle Nullstellensatz), akkor a d=2 esetben β=2n+1 , a d>2 esetben pedig β=dn. Márpedig a V(f1,...,fs) varietás pontosan akkor üres, ha 1f1,f2,...fs, vagyis a polinomegyenlet-rendszerek megoldhatósága PSPACE-beli probléma. Számos eredmény szól amellett, hogy bizonyos feltételek mellett az (általános) ideál-tartalmazás probléma is PSPACEbeli. Ilyen feltétel például, hogy f1,f2,...fs zéró-dimenziós. Ezen számítási bonyolultság ellenére a Gröbner-bázis elmélet komoly sikereket könyvelhet el: automatikus geometriai tételbizonyítás, robotok mozgásvezérlése és polinomegyenlet-rendszerek megoldása talán a legelterjedtebb alkalmazási területek. Az alábbiakban felsoroljuk azokat az területeket, ahol az elmélet sikeresen alkalmazható. Polinomegyenletek ekvivalenciája. Két polinomhalmaz pontosan akkor generálja ugyanazt az ideált, ha Gröbner-bázisuk megegyezik (tetszőleges monomiális rendezés mellett). Polinomegyenletek megoldhatósága. Az fi(x1,...,xn)=0,1is egyenletrendszer pontosan akkor oldható meg, ha az 1f1,...,fs. Polinomegyenletek megoldáshalmaza végessége. Az fi(x1,...,xn)=0,1is egyenletrendszernek pontosan akkor van véges számú megoldása, ha f1,...,fs -ben minden xi változóhoz van olyan polinom, hogy az adott monomiális rendezés melletti főtagja xi valamilyen hatványa. Polinomegyenletek véges megoldásai száma. Legyen az fi(x1,...,xn)=0,1is egyenletrendszernek véges sok megoldása. Ekkor multiplicitással számolva a polinomegyenlet megoldásszáma azon monomok halmazának számossága, melyek nem többszörösei a f1,...,fs Gröbnerbázisa elemei egyetlen főtagjának sem (tetszőleges monomiális rendezés mellett). Kifejezések egyszerűsítése. A legutóbbira példát is mutatunk. 2.16. példa. Legyenek a,b,cR olyanok, hogy a+b+c=3,a2+b2+c2=9,a3+b3+c3=24. Számítsuk ki a4+b4+c4 értékét. Legyenek tehát f1=a+b+c3,f2=a2+b2+c29 és a3+b3+c324 az R[a,b,c] elemei, továbbá legyen =plex , cba . Ekkor az f1,f2,f3 Gröbner-bázisa G={a+b+c3,b2+c23b3c+bc,13c2+c3}. Így a4+b4+c4 rem G=69 , ami a feladat megoldása. Gyakorlatok 2.3–1. Bizonyítsuk be, hogy a lex,plex,grlex és tdeg monomiális rendezések valóban megengedettek. 2.3–2. Legyen egy monomiális rendezés R -en, f,gR\{0}. Lássuk be az alábbiakat: a. discr (fg)= discr (f)+ discr (g),b. ha f+g0 , akkor discr (f+g)max{discr (f), discr (g)}, ahol discr (f)discr (g) esetén egyenlőség teljesül. 2.3–3. Legyen f=2x4y2z3x4yz2+4xy4z25xy2z4+6x2y4z7x2yz4Q[x,y,z].a. Rendezzük a polinom tagjait plex,grlex és tdeg monomiális rendezések esetén, ahol mindhárom esetben zyx.b. Mindhárom monomiális rendezés esetén határozzuk meg discr (f), lc (f), lm (f) és lc (f) -et. 2.3–4.* Bizonyítsuk be a Dickson-lemmát. 2.3–5. Számítsuk ki az I=x2+y1,xyxQ[x,y] ideál Gröbner-bázisát és redukált Gröbner-bázisát a =lex monomiális rendezés esetén, ahol yx. Határozzuk meg, hogy az alábbi polinomok közül melyik eleme az ideálnak: f1=x2+y2y,f2=3xy24xy+x+1. 2.4. Szimbolikus integrálás A határozatlan integrálás problémája egy adott f függvényhez olyan g függvényt találni, amelynek deriváltja f, azaz amelyre g(x)=f(x); ezen összefüggés jelölésére az f(x)dx=g(x) jelölést is használjuk. A bevezető analízis előadásokon a határozatlan integrálási problémák megoldására különböző módszerekkel próbálkozunk, amelyek között heurisztikus módon próbálunk választani: helyettesítések, trigonometrikus helyettesítések, parciális integrálás stb. Csak a racionális törtfüggvények integrálására szokás algoritmikus módszert használni. Megmutatható, hogy a határozatlan integrálás teljes általánosságban algoritmussal megoldhatatlan probléma. Tehát csak arra van lehetőségünk, hogy minél nagyobb algoritmussal megoldható részt keressünk. Az első lépés a probléma algebraizálása: teljesen elvonatkoztatunk minden analízisbeli fogalomtól, és a differenciálást úgy tekintjük, mint egy új (egyváltozós) algebrai műveletet, amely az összeadással és a szorzással adott kapcsolatban van, és ennek a műveletnek az,,inverzét” keressük. Ez a felfogás vezetett a differenciálalgebra fogalmának bevezetéséhez. A komputeralgebra rendszerek (például a MAPLE integráló rutinja, hasonlóan hozzánk, először néhány heurisztikus módszerrel próbálkozik. Polinomok (vagy kicsit általánosabban, véges Laurent-sorok) integrálja könnyen meghatározható. Ezután egy egyszerű táblázatban való keresés következik (a MAPLE esetén például 35 alapintegrál felhasználása). Lehet persze könyvekből bevitt integráltáblázatokat is használni. Ezután speciális eseteket kereshetünk, amelyre megfelelő módszerek ismertek. Például eax+bsin(cx+d)p(x) alakú integrálok esetén, ahol p polinom, parciális integrálás használható az integrál meghatározására. Ha a fenti módszerek sikertelenek, akkor helyettesítéssel próbálkozik az úgynevezett,,beosztás a deriválttal” módszer formájában: ha az integrandus összetett kifejezés, akkor minden f(x) részkifejezésére osztunk f deriváltjával, majd kipróbáljuk, hogy u=f(x) helyettesítés után a kapott kifejezésből eltűnik-e x. Ezek az egyszerű módszerek meglepően sok határozatlan integrál kiszámítására elegendőek. Nagy előnyük, hogy az egyszerű problémákat gyorsan oldják meg. Ha nem vezetnek célhoz, akkor próbálkozunk az algoritmikus módszerekkel. Ezek között az első a racionális törtfüggvények integrálása. Mint látni fogjuk, a komputeralgebra rendszerekben használt változat lényegesen eltér a kézi számolásra használt változattól, mert a cél az, hogy a futási idő még bonyolult esetekben is kicsi legyen, és az eredmény a lehető legegyszerűbb formában keletkezzen. Az elemi függvények integrálására használt Risch-algoritmus a racionális törtfüggvények integrálására használt algoritmusokon alapul. Ezt is ismertetjük, de nem tárgyaljuk teljes részletességgel. A bizonyításokra inkább csak utalunk. 2.4.1. Racionális függvények integrálása Ebben a pontban bevezetjük a differenciáltest és a differenciáltest bővítésének fogalmát, majd ismertetjük Hermite módszerét. Differenciáltest Legyen K egy nulla karakterisztikájú test, amelyen adott egy ff leképezése K -nak önmagába az alábbi két tulajdonsággal: (1) (f+g)=f+g (additivitás); (2) (fg)=fg+gf (Leibniz-szabály). Ekkor az ff leképezést differenciáloperátornak, differenciálásnak vagy deriválásnak, K -t pedig differenciáltestnek nevezzük. A C={cK:c=0} halmaz a konstansok részteste K -ban. Ha f=g, akkor azt is írjuk, hogy f=g. Nyilván bármely cC konstansra f+c=g. Egy 0fK elem logaritmikus deriváltjánf/f -et értjük. (Formálisan ez,, log(f) deriváltja”.) 2.21. tétel. Az előző definíció jelöléseivel, a deriválás szokásos tulajdonságai teljesülnek: (1) 0=1=(1)=0; (2) a differenciálás C -lineáris: (af+bg)=af+bg , ha f,gK , a,bC; (3) ha g0 , f tetszőleges, akkor (f/g)=(fggf)/g2; (4) (fn)=nffn1, ha 0fK és nZ; (5) fg=fggf, ha f,gK ( parciális integrálás ). 2.17. példa. (1) Az előző definíció jelöléseivel, az f0 leképezés K -n a triviális deriválás, erre C=K.(2) Legyen K=Q(x). Egyetlen olyan differenciálás van Q(x) -en, a szokásos, amelyre x=1. Erre a konstansok Q elemei. Valóban, indukcióval n=0, ha nN, és így Z illetve Q elemei is konstansok. Indukcióval adódik, hogy a hatványfüggvények deriváltja a szokásos, ahonnan a linearitás miatt a polinomoké is, így a hányados differenciálási szabálya szerint kapjuk az állítást. Nem nehéz kiszámolni, hogy a szokásos differenciálásra a konstansok Q elemei.(3) Ha K=C(x), ahol C tetszőleges nulla karakterisztikájú test, akkor egyetlen olyan differenciálás van K -n, a szokásos, amelyre a konstansok részteste C és x=1; az állítás hasonlóan adódik, mint az előző. Ha C tetszőleges nulla karakterisztikájú test és K=C(x) a szokásos differenciálással, akkor 1/x nem deriváltja semminek. (Az állítás bizonyítása nagyon hasonlít annak bizonyításához, hogy 22 irracionális, de kettővel való oszthatóság helyett az x polinommal való oszthatósággal kell dolgoznunk.) A példa azt mutatja, hogy 1/x és más hasonló függvények integrálásához a differenciáltestet bővíteni kell. A racionális törtfüggvények integrálásához elég lesz logaritmusokkal bővíteni. Differenciáltest bővítése Legyen L egy differenciáltest, KL pedig egy részteste L -nek. Ha a differenciálás nem vezet ki K -ból, akkor azt mondjuk, hogy K egy differenciálrészteste L -nek, illetve hogy L egy differenciálbővítése K -nak. Ha valamely f,gL -re f=g/g, azaz ha f deriváltja a g logaritmikus deriváltja, akkor azt írjuk, hogy f=logg. (Megjegyezzük, hogy log, ugyanúgy, mint , nem függvény, hanem reláció. Más szóval a log itt egy absztrakt fogalom, nem pedig egy meghatározott alapú logaritmus függvény.) Ha gK választható, akkor azt mondjuk, hogy f logaritmikus K felett. 2.18. példa. (1) Legyen g=xK=Q(x),L=Q(x,f), ahol f egy új határozatlan, és legyen f=g/g=1/x, azaz f=log(x). Ekkor 1/xdx=log(x). (2) Hasonlóan, 1x22=224log(x22)224log(x+22) a Q(22)(x,log(x22),log(x+22)) differenciáltestben van. (3) Mivel 1x3+x=log(x)12log(x+i)12log(xi)=log(x)12log(x2+1), az integrál tekinthető Q(x,log(x),log(x2+1)) elemének is és Q(i)(x,log(x),log(xi),log(x+i)) elemének is. Nyilván célszerűbb az első lehetőséget választani, mert ekkor az alaptest bővítésére nincs szükség. Hermite módszere Legyen K egy nulla karakterisztikájú test, f,gK[x] nemnulla és relatív prím polinomok. Az f/g integrál kiszámításához Hermite módszerével olyan a,b,c,dK[x] polinomokat találhatunk, amelyekre fg=cd+ab,(2.15) ahol dega<degb és b négyzetmentes főpolinom. A c/d racionális függvényt az integrál racionális részének, az a/b kifejezést pedig az integrál logaritmikus részének nevezzük. A módszer elkerüli g -nek a (felbontási testben vagy valamely még bővebb testben) lineáris tényezőkre való bontását, sőt, még a K felett irreducibilis tényezőkre való felbontást is. Nyilván feltehetjük, hogy g főpolinom. Maradékos osztással f=pg+h, ahol degh<degg, így f/g=p+h/g. A p polinomrész integrálása triviális. Határozzuk meg g négyzetmentes felbontását, azaz keressünk olyan g1,...,gmK[x] négyzetmentes és páronként relatív prím főpolinomokat, amelyekre gm1 és g=g1g22gmm. Bontsunk parciális törtekre (ez euklideszi algoritmussal megvalósítható): hg=i=1mj=1ihi,jgij, ahol minden hi,j foka kisebb, mint gi foka. A Hermite-redukció a következő lépés ismétlése: ha j>1 , akkor az hi,j/gij integrált egy racionális függvény és egy, az eredetihez hasonló alakú integrál összegére redukáljuk, amelyben j eggyel kisebb. Felhasználva, hogy gi négyzetmentes, azt kapjuk, hogy lnko (gi,gi)=1, így a bővített euklidészi algoritmussal kaphatunk olyan s,tK[x] polinomokat, amelyekre sgi+tgi=hi,j és degs,degt<deggi. Innen parciális integrálással hi,jgij=tgigij+sgij1=t(j1)gij1+t(j1)gij1+sgij1=t(j1)gij1+s+t/(j1)gij1. Megmutatható, hogy gyors algoritmusokat választva, ha degf,degg<n, akkor az eljárás O(M(n)logn) darab K testbeli műveletet igényel, ahol M(n) a legfeljebb n -ed fokú polinomok szorzásához szükséges műveletek számának korlátja. Hermite módszerének van olyan változata is, amely elkerüli h/g parciális törtekre bontását. Ha m=1, akkor g négyzetmentes. Ha m>1, akkor legyen g*=g1g22gm1m1=ggmm. Mivel lnko (gm,g*gm)=1, léteznek olyan s,tK[x] polinomok, amelyekre sgm+tg*gm=h. Mindkét oldalt osztva g=g*gmm -el és parciálisan integrálva hg=t(m1)gmm1+s+g*t/(m1)g*gmm1, így m -et eggyel csökkentettük. Megjegyezzük, hogy a és c a határozatlan együtthatók módszerével is meghatározhatók (Horowitz módszere). Osztás után feltehetjük, hogy degf<degg. Mint az algoritmusból látszik, d=g2g32gmm1 és b=g1g2gm választható. (2.15) differenciálásával az a polinom degb darab és a c polinom degd darab együtthatójára, tehát összesen n darab együtthatóra egy lineáris egyenletrendszert kapunk. Ez a módszer általában nem olyan gyors, mint Hermite módszere. Az alábbi algoritmus az x változó adott f/g racionális függvényére elvégzi a Hermite-redukciót. Ha valamely nulla karakterisztikájú K testre az a/b integrált akarjuk kiszámítani, ahol a,bK[x] nem nulla relatív prím polinomok, dega<degb , b négyzetmentes és főpolinom, akkor eljárhatunk úgy, hogy a b polinom L felbontási testében felírjuk b -t gyöktényezős alakban: b=k=1n(xk), majd L felett parciális törtekre bontunk: a/b=k=1nck/(xk), végül integrálunk: ab=k=1ncklog(xk)L(x,log(x1),...,log(xn)). Ennek az eljárásnak, mint az 1/(x3+x) függvény példáján láttuk, a hátránya, hogy az L testbővítés foka túl magas lehet. Előfordulhat az is, hogy L foka K felett n! , ami teljesen kezelhetetlen esetekhez vezet. Másrészt az sem világos, hogy kell-e az adott esetben az alaptestet bővíteni, például az 1/(x22) függvény esetében nem lehet-e az integrálást az alaptest bővítése nélkül elvégezni. A következő tétel lehetővé teszi, hogy L testbővítés fokát a lehető legkisebbre válasszuk. 2.22. tétel (Rothstein–Trager-féle integráló algoritmus). Legyen K nulla karakterisztikájú test, a,bK[x] nem nulla relatív prím polinomok, dega<degb,b négyzetmentes és főpolinom. Ha L algebrai bővítése K -nak, c1,...,ckL\K páronként különböző, v1,...,vkL[x]\L pedig négyzetmentes és páronként relatív prím főpolinomok, akkor az alábbiak ekvivalensek: ab=i=1k (2) Az r= res x(b,ayb)K[y] polinom L felett lineáris tényezőkre bomlik, c1,...,ck pontosan az r különböző gyökei, és vi= lnko (b,acib) , ha i=1,...,k. Itt res x az x határozatlanban vett rezultáns. 2.19. példa. Tekintsük ismét az 1/(x3+x)dx integrál kiszámításának problémáját. Ebben az esetben r= res x(x3+x,1y(3x2+1))=4z3+3y+1=(2y+1)2(y1), amelynek gyökei c1=1 és c2=1/2. Így v1= lnko (x3+x,1(3x2+1))=x,v2= lnko (x3+x,1+12(3x2+1))=x2+1. Az előző tétel alapján könnyen felírható integráló algoritmus kicsit javítható: vi= lnko (b,acib) -nek (az L test feletti számításokkal történő) kiszámítása helyett vi megkapható K feletti számítással is, a BŐVÍTETT-EUKLIDESZNORMALIZÁLT algoritmus segítségével. Ezt egymástól függetlenül Trager, illetve Lazard és Rioboo vette észre. Nem nehéz belátni, hogy az így adódó teljes integráló algoritmus futásideje O(nM(n)logn) , ha degf,degg<n. 2.23. tétel (Lazard–Rioboo–Trager-formula). Az előző tétel jelöléseivel, jelölje e a ci -nek mint az r= res x(b,ayb) polinom gyökének a multiplicitását. Ekkor (1) degvi=e; (2) ha w(x,y)K(y)[x] jelöli a b -re és ayb -re K(y)[x] -ben végrehajtott Bővített-Euklidesz-normalizált -algoritmus e -ed fokú maradékát, akkor vi=w(x,ci). Az alábbi algoritmus a Rothstein–Trager-módszer Lazard–Rioboo–Tragerféle javítása. Az x változó adott a/b racionális függvényére kiszámítjuk a/b-t, ahol b négyzetmentes főpolinom és dega<degb. 2.20. példa. Tekintsük ismét az 1/(x22)dx integrál kiszámításának problémáját. Ebben az esetben r= res x(x22,1y2x)=8y2+1. A polinom irreducibilis Q[x] -ben, így Q bővítése elkerülhetetlen. Az r gyökei ±1/28. A Q(y) feletti BŐVÍTETT-EUKLIDESZ-NORMALIZÁLT algoritmusból w1(x,y)=x1/(2y), így az integrál 1x22dx=128log(x22)128log(x+22). 2.4.2. Risch integráló algoritmusa Meglepő módon, a racionális függvények integrálására talált módszerek általánosíthatók a szokásos függvényeket ( sin , exp stb.) és inverzeiket tartalmazó kifejezések integrálására. A komputeralgebra rendszerek meglepően bonyolult kifejezések integrálását is elvégzik, néha azonban látszólag igen egyszerű esetekben sem adják meg az integrált, például az x/(1+ex)dx kifejezést kiértékeletlenül kapjuk vissza, vagy az eredmény nem elemi speciális függvényt tartalmaz, például az integrállogaritmus függvényt. Ez azért van, mert ezekben az esetekben az integrál nem is fejezhető ki,,zárt alakban”. Bár a,,zárt alakban” kifejezhető integrálokra vonatkozó alapvető eredményt Liouville 1833-ban találta, a megfelelő algoritmikus módszereket Risch csak 1968-ban fejlesztette ki. Elemi függvények A,,zárt alakban” megadható függvényeknek azokat a függvényeket szokás tekinteni, amelyek felépíthetők a racionális függvények, az exponenciális és logaritmus függvény, a trigonometrikus és hiperbolikus függvények és inverzeik, valamint gyökvonások, illetve sokkal általánosabban polinom függvények,,inverzei”, azaz egyenletek gyökeinek képzése segítségével, tehát ezen függvények egymásba helyettesítésével. Észrevehetjük, hogy míg az 1/(1+x2)dx integrált arctg (x) alakban szokás megadni, a racionális törtfüggvény integrálására megadott algoritmus az eredményt 11+x2dx=i2log(x+i)i2log(xi) alakban adja. Mivel C -ben a trigonometrikus és hiperbolikus függvények kifejezhetők az exponenciális függvény, inverzeik pedig a logaritmus függvény segítségével, csak az exponenciális és a logaritmus függvényre szorítkozhatunk. Meglepő módon kiderül, hogy az integrálok kifejezéséhez (algebrai számokkal való bővítések mellett) itt is csak logaritmusokkal való bővítésekre van szükség. Exponenciális elemek Legyen L a K differenciáltest differenciálbővítése. Ha egy θL elemhez van olyan uK, hogy θ/θ=u, azaz ha θ logaritmikus deriváltja K valamely elemének a deriváltja, akkor azt mondjuk, hogy θ exponenciális K felett, és azt írjuk θ= exp (u). Ha csak az teljesül, hogy a θL elemhez van olyan uK, hogy θ/θ=u, azaz, ha θ logaritmikus deriváltja K eleme, akkor azt mondjuk, hogy θ hiperexponenciális K felett. A K felett logaritmikus, exponenciális vagy hiperexponenciális elemek lehetnek algebraiak vagy transzcendensek K felett. Elemi kiterjesztések Legyen L a K differenciáltest differenciálbővítése. Ha L=K(θ1,θ2,...,θn), ahol j=1,2,...,n -re θj logaritmikus, exponenciális vagy algebrai Kj1=K(θ1,...,θj1) felett ( K0=K ), akkor azt mondjuk, hogy L a K elemi kiterjesztése. Ha j=1,2,...,n -re θj transzcendens és logaritmikus vagy transzcendens és exponenciális Kj1 felett, akkor azt mondjuk, hogy L a K transzcendens elemi kiterjesztése. Legyen C(x) a racionális függvények teste CC konstans testtel és a szokásos differenciálással. Ennek egy elemi kiterjesztését elemi függvénytestnek, transzcendens elemi kiterjesztését pedig transzcendens elemi függvénytestnek nevezzük. 2.21. példa. Az f= exp (x)+ exp (2x)+ exp (x/2) függvény f=θ1+θ2+θ3Q(x,θ1,θ2,θ3) alakban írható, ahol θ1= exp (x),θ2= exp (2x) , θ3= exp (x/2). Nyilván θ1 exponenciális Q(x) felett, θ2 exponenciális Q(x,θ1) felett és θ3 exponenciális Q(x,θ1,θ2) felett. Mivel θ2=θ12 , Q(x,θ1,θ2)=Q(θ1), így f az egyszerűbb f=θ1+θ12+θ3 alakba írható. A θ3 függvény nemcsak exponenciális Q(x,θ1) felett, hanem algebrai is, mivel θ32θ1=0 , azaz θ3=θ11/2. Így f=θ1+θ12+θ11/2Q(x,θ1,θ11/2). De f még ennél egyszerűbb alakban is felírható: f=θ32+θ34+θ3Q(x,θ3). 2.22. példa. Az f=2log(x2+3x+2)(log(x+1)+log(x+2)) függvény felírható f=θ4Q(x,θ1,θ2,θ3,θ4) alakban, ahol θ1=log(x2+3x+1) , θ2=log(x+1),θ3=log(x+2) , θ4 pedig a θ42θ1(θ2+θ3)=0 algebrai egyenletnek tesz eleget, de sokkal egyszerűbben f=θ1Q(x,θ1) alakban is. 2.23. példa. Az f= exp (log(x)/2) függvény felírható f=θ2Q(x,θ1,θ2) alakban, ahol θ1=log(x) és θ2= exp (θ1/2), így θ1 logaritmikus Q(x) felett, θ2 pedig exponenciális Q(x,θ1) felett. Azonban θ22x=0, így θ2 algebrai Q(x) felett, és f(x)=x1/2. Elemi függvények integrálása Tetszőleges elemi függvénytestek elemeinek integrálját, ha elemi függvény, a Liouville-elv teljesen jellemezni fogja. Mindazonáltal az algebrai kiterjesztési lépések – ha nem csak a konstansok testét terjesztjük ki – nagy nehézségeket okoznak. Itt csak a transzcendens elemi függvénytestek függvényeinek Risch-algoritmussal történő integrálásával foglalkozunk. A gyakorlatban egy Q(α1,...,αk)(x,θ1,...,θn) transzcendens elemi függvénytest valamely eleméről van szó, ahol α1,...,αk algebrai számok Q felett, az integrál pedig egy Q(α1,...,αk,...,αk+h)(x,θ1,...,θn,...,θn+m) elemi függvénytest eleme lesz. Elvileg legegyszerűbb lenne a konstansok testét C -nek választani, de mint a racionális függvények integrálásánál láttuk, ez nem lehetséges, mert csak bizonyos számtestekben, például algebrai számtestekben tudunk pontosan számolni, sőt, igyekeznünk kell az αk+1,...,αk+h algebrai számok számát és fokaikat a lehető legalacsonyabban tartani. Mindazonáltal a konstansok testének algebrai bővítéseit kezelhetjük dinamikusan, a szükségessé váló bővítésekről elképzelhetjük, hogy már előre elvégeztük őket, a gyakorlatban pedig mindig csak akkor hajtjuk végre a bővítést, ha szükségessé válik. Miután a trigonometrikus és hiperbolikus függvények exponenciálisra, inverzeiknek pedig logaritmusra való konverzióját elvégeztük, az integrandust mint egy elemi függvénytest elemét kapjuk meg. A 2.21. és 2.22. példák mutatják, hogy bár lehet, hogy a függvény,,első pillantásra” nem tűnik egy transzcendens elemi kiterjesztés elemének, mégis az, a 2.23. példa pedig azt, hogy lehet, hogy a függvény,,első pillantásra” transzcendens elemi kiterjesztés elemének tűnik, mégsem az. Az első lépés tehát az, hogy a különböző exponenciális és logaritmikus függvények közötti algebrai kapcsolatok vizsgálatával az integrandust mint transzcendens elemi függvénytest elemét állítjuk elő. Hogy ez hogyan lehetséges, azzal nem foglalkozunk. Hogy ez sikerült-e, az ellenőrizhető a Risch-től származó struktúratétel segítségével. A tétel bizonyítását elhagytuk. Szükségünk lesz egy definícióra. Egy θ elem monomiális a K differenciáltest felett, ha transzcendens K felett, exponenciális vagy logaritmikus K felett, valamint K -ban és K(θ) -ban ugyanazok a konstansok. 2.24. tétel (struktúra-tétel). Legyen K a konstansok teste és Kn=K(x,θ1,...,θn) egy differenciál-kiterjesztése K(x) -nek, amelyben a konstansok teste K . Tegyük fel, hogy minden θj vagy algebrai Kj1=K(x,θ1,...,θj1) felett, vagy θj=wj , ahol wj=log(uj) és ujKj1 , vagy θj=uj , ahol uj= exp (wj) és wjKj1. Ekkor 1. g=log(f) , ahol fKn\K , pontosan akkor monomiális Kn felett, ha nincs olyan fkujkj,k,kjZ,k0 szorzat, amely K -beli; 2. g= exp (f) , ahol fKn\K , pontosan akkor monomiális Kn felett, ha nincs olyan f+cjwj,cjQ lineáris kombináció, amely K -beli. A szorzatképzés, illetve összegzés csak a logaritmikus és exponenciális lépésekre történik. Az egész elmélet legfontosabb, klasszikus eredménye a következő tétel. 2.25. tétel (Liouville-elv). Legyen K egy differenciáltest a C konstans testtel. Legyen L egy elemi differenciálkiterjesztése K -nak ugyanazzal a C konstans testtel. Tegyük fel, hogy g=fK . Ekkor léteznek olyan c1,...,cmC konstansok és v0,v1,...,vmK elemek, hogy f=v0+j=1mcjvjvj, azaz hogy g=f=v0+j=1mcjlog(vj). Figyeljük meg, hogy a helyzet hasonló, mint a racionális függvények integrálásánál. A tételt nem bizonyítjuk. Bár a bizonyítás hosszadalmas, az ötlete könnyen elmondható. Először megmutatjuk, hogy egy transzcendens exponenciális bővítést differenciálással nem lehet,,kiküszöbölni”, azaz egy racionális függvényét deriválva, abból az új elem nem tűnik el. Ez azon múlik, hogy a transzcendens exponenciális bővítő elem egy polinomját deriválva, a derivált újra az elem egy polinomja lesz, a polinom foka nem változik, és a derivált nem osztható az eredeti polinommal, kivéve, ha az monom volt. Utána megmutatjuk, hogy algebrai bővítésre nincs szükség az integrál kifejezéséhez. Ez lényegében azon múlik, hogy az algebrai bővítő elemet a minimálpolinomjába beírva nullát kapunk, és ezt az egyenletet differenciálva, a kapott egyenletből kifejezhető a bővítő elem deriváltja, mint az elem racionális függvénye. Végül a transzcendens logaritmikus elemekkel való bővítéseket kell még megvizsgálnunk. Megmutatjuk, hogy egy ilyen bővítő elem differenciálással pontosan akkor küszöbölhető ki, ha egy konstans együtthatós elsőfokú polinomja szerepel. Ez azon múlik, hogy egy ilyen bővítő elem egy polinomját deriválva, annak egy polinomját kapjuk, aminek fokszáma vagy ugyanannyi, mint az eredetié, vagy eggyel kisebb, és ez utóbbi eset csak akkor fordulhat elő, ha a főegyüttható konstans. Risch-algoritmus Legyen K algebrai számtest Q felett, Kn=K(x,θ1,...,θn) pedig transzcendens elemi függvénytest. Az algoritmus rekurzív n -ben: θ=θn jelöléssel egy f(θ)/g(θ)Kn=Kn1(θ) függvényt fogunk integrálni, ahol Kn1=K(x,θ1,...,θn1). (Az n=0 eset a racionális függvények integrálása.) Feltehetjük, hogy f és g relatív prímek és g főpolinom. Az x szerinti differenciálás mellett használni fogjuk a θ szerinti deriválást is, ezt d/dθ -val jelöljük. A továbbiakban csak az algoritmusokat ismertetjük. Risch-algoritmus: logaritmikus eset Az előző pont jelöléseivel, először feltesszük, hogy θ transzcendens és logaritmikus, θ=u/u , uKn1. Maradékos osztással f(θ)=p(θ)g(θ)+h(θ), ahonnan f(θ)g(θ)=p(θ)+h(θ)g(θ). A racionális függvények integrálásával ellentétben, most a polinomrész integrálása a nehezebb. Ezért a racionális rész integrálásával kezdjük. Logaritmikus eset, racionális rész Legyen g(θ)=g1(θ)g22(θ)gmm(θ) a g(θ) négyzetmentes felbontása. Ekkor lnko (gj(θ),ddθgj(θ))=1 nyilván teljesül. Megmutatható, hogy a jóval erősebb lnko (gj(θ),gj(θ))=1 feltétel is teljesül. Parciális törtekre bontással h(θ)g(θ)=i=1mj=1ihi,j(θ)gi(θ)j. Hermite-redukciót fogunk használni: a bővített euklidészi algoritmussal kaphatunk olyan s(θ),t(θ)Kn1[θ] polinomokat, amelyekre s(θ)gi(θ)+t(θ)gi(θ)=hi,j(θ) és degs(θ),degt(θ)<deggi(θ). Innen parciális integrálással hi,j(θ)gij(θ)=t(θ)gi(θ)gi(θ)j+s(θ)gi(θ)j1=t(θ)(j1)gi(θ)j1+t(θ)(j1)gi(θ)j1+s(θ)gi(θ)j1=t(θ)(j1)gi(θ)j1+s(θ)+t(θ)/(j1)gi(θ)j1. Addig alkalmazva ezt az eljárást, amíg j>1, azt kapjuk, hogy h(θ)g(θ)=c(θ)d(θ)+a(θ)b(θ), ahol a(θ),b(θ),c(θ),d(θ)Kn1[θ] , dega(θ)<degb(θ) és b(θ) négyzetmentes főpolinom. Megmutatható, hogy az a(θ)/b(θ) integrál kiszámítására a Rothstein– Trager-módszer alkalmazható. Számítsuk ki az r(y)= res θ(b(θ),a(θ)yb(θ)) rezultánst. Megmutatható, hogy az integrál pontosan akkor elemi, ha r(y)=ør(y)s alakban írható, ahol ør(y)K[y] és sKn1 . Ha tehát kiszámítjuk r(y) primitív részét, ezt választjuk ør(y) -nak, és ør(y) bármelyik együtthatója nem konstans, akkor nem létezik elemi integrál. Egyébként legyenek c1,...,ck az ør(y) különböző gyökei annak felbontási testében és legyen vi(θ)= lnko (b(θ),a(θ)cib(θ))Kn1(c1,...,ck)[θ], ha i=1,...,k. Megmutatható, hogy a(θ)b(θ)=i=1kcilog(vi(θ)). Tekintsünk néhány példát. 2.24. példa. Az 1/log(x) integrál integrandusa 1/θQ(x,θ) , ahol θ=log(x). Mivel r(y)= res θ(θ,1y/x)=1y/xQ(x)[y] primitív polinom és van nem konstans együtthatója, az integrál nem elemi. 2.25. példa. Az 1/(xlog(x)) integrál integrandusa 1/(xθ)Q(x,θ), ahol θ=log(x). Itt r(y)= res θ(θ,1/xy/x)=1/xy/xQ(x)[y], aminek primitív része 1y. Ennek minden együtthatója konstans, így az integrál elemi, c1=1,v1(θ)= lnko (θ,1/x1/x)=θ, így 1xlog(x)=c1log(v1(θ))=log(log(x)). Logaritmikus eset, polinom rész Marad a p(θ)=pkθk+pk1θk1++p0Kn1[θ] polinomrész integrálásának problémája. A Liouville-elv szerint p(θ) pontosan akkor elemi, ha p(θ)=v0(θ)+j=1kcjvj(θ)vj(θ), ahol cjK és viKn1(θ) , ha j=0,1,...,m, továbbá KC a K valamely bővítése és Kn1=K(x,θ1,...,θn1). Meg fogjuk mutatni, hogy K lehet a K egy algebrai bővítése. Hasonlóan érvelve, mint a Liouville-elv bizonyításában, megmutatható, hogy v0(θ)Kn1[θ] és vj(θ)Kn1 (azaz független θ -tól), ha j=1,2,...,m. Így p(θ)=v0(θ)+j=1mcjvjvj. A Liouville-elv bizonyításánál használt érveléssel azt is megkapjuk, hogy v0(θ) foka legfeljebb k+1. így ha v0(θ)=qk+1θk+1+qkθk++q0, akkor pkθk+pk1θk1++p0=(qk+1θk+1+qkθk++q0)+j=1mcjvjvj. Innen a következő egyenletrendszert kapjuk: 0=qk+1,pk=(k+1)qk+1θ+qk,pk1=kqkθ+qk1,p1=2q2θ+q1,p0=q1θ+øq0, ahol az utolsó egyenletben øq0=q0+j=1mcjlog(vj). Az első egyenlet megoldása egyszerűen egy bk+1 konstans. Ezt visszahelyettesítve a következő egyenletbe és mindkét oldalt integrálva azt kapjuk, hogy pk=(k+1)bk+1θ+qk. Az integrálási eljárást rekurzív módon alkalmazva pkKn1 integrálja kiszámítható, azonban ez az egyenlet csak akkor oldható meg, ha az integrál elemi, és legfeljebb egy logaritmikus bővítést használ és az éppen θ=log(u) . Ha ez nem teljesül, akkor p(θ) nem lehet elemi. Ha ez teljesül, akkor pk=ckθ+dk valamely ckK és dkKn1 -gyel, ahonnan bk+1=ck+1/(k+1)K és qk=dk+bk egy tetszőleges bk integrációs konstanssal. Behelyettesítve qk -t a következő egyenletbe és átrendezve pk1kdkθ=kbkθ+qk1, vagyis mindkét oldalt integrálva (pk1kdkuu)=kbkθ+qk1 adódik. A jobb oldalon az integrandus Kn1 -beli, így az integrációs eljárást rekurzív módon hívhatjuk. Ugyanúgy mint fent, az egyenlet csak akkor oldható meg, ha az integrál elemi, és legfeljebb egy logaritmikus bővítést használ és az éppen θ=log(u) . Tegyük fel, hogy ez teljesül és (pk1kdkuu)=ck1θ+dk1, ahol ck1K és dk1Kn1. Ekkor a keresett megoldás bk=ck1/kK és qk1=dk1+bk1, ahol bk1 egy tetszőleges integrációs konstans. Az eljárást folytatva, az utolsó előtti egyenlet megoldása b2=c1/2K és q1=d1+b1 valamely b1 integrációs konstanssal. Behelyettesítve q1 -et az utolsó egyenletbe, átrendezve, majd integrálva (p0d1uu)=b1θ+øq0. Ez alkalommal csak az a feltétel, hogy az integrál elemi függvény legyen. Ha elemi függvény, mondjuk (p0d1uu)=d0Kn1, akkor b1K a θ=log(u) együtthatója d0 -ban és øq0=d0b1log(u), az eredmény pedig p(θ)=bk+1θk+1+qkθk++q1θ+øq0. Nézzünk néhány példát. 2.26. példa. Az log(x) integrál integrandusa θQ(x,θ), ahol θ=log(x). Ha az integrál elemi, akkor θ=b2θ2+q1θ+øq0 és 0=b2,1=2b2θ+q1,0=q1θ+øq0. Az ismeretlen b2 konstanssal a második egyenletből 1=2b2θ+q1. Mivel 1=x+b1 , azt kapjuk, hogy b2=0 , q1=x+b1. A harmadik egyenletből xθ=b1θ+øq0. Mivel θ=1/x, integrálva 1=b1θ+øq0, és 1=x, azt kapjuk, hogy b1=0,øq0=x, így log(x)=xlog(x)x. 2.27. példa. Az log(log(x)) integrál integrandusa θ2Q(x,θ1,θ2), ahol θ1=log(x) és θ2=log(θ1). Ha az integrál elemi, akkor θ2=b2θ22+q1θ2+øq0 és 0=b2,1=2b2θ2+q1,0=q1θ2+øq0. Az ismeretlen b2 konstanssal a második egyenletből 1=2b2θ+q1. Mivel 1=x+b1, azt kapjuk, hogy b2=0,q1=x+b1. A harmadik egyenletből xθ2=b1θ2+øq0. Mivel θ2=θ1/θ1=1/(xlog(x)), teljesülnie kell az 1log(x)=b1θ2+øq0 egyenlőségnek, azonban a 2.24. példából tudjuk, hogy a bal oldalon álló integrál nem elemi. Risch-algoritmus: exponenciális eset Most feltesszük, hogy θ transzcendens és exponenciális, θ/θ=u , uKn1 . Maradékos osztással f(θ)=q(θ)g(θ)+h(θ) , ahonnan f(θ)g(θ)=q(θ)+h(θ)g(θ). Tervünk az, hogy a racionális részre Hermite módszerét fogjuk alkalmazni. Kellemetlen meglepetés ér azonban bennünket, mert a négyzetmentes felbontásban szereplő gj(θ) függvényekre bár lnko (gj(θ),ddθgj(θ))=1 nyilván teljesül, a jóval erősebb lnko (gj(θ),gj(θ))=1 feltétel már nem. Például ha gj(θ)=θ , akkor lnko (gj(θ),gj(θ))= lnko (θ,uθ)=θ. Megmutatható azonban, hogy ez a kellemetlen jelenség nem lép fel, ha θgj(θ) , ekkor már lnko (gj(θ),gj(θ))=1 . Elég tehát, ha a θ tényezőt eltávolítjuk a nevezőből. Legyen g(θ)=θøg(θ) , ahol már θøg(θ) , és keressünk olyan øh(θ),s(θ)Kn1[θ] polinomokat, amelyekre øh(θ)θ+t(θ)øg(θ)=h(θ) , degøh(θ)<degøg(θ) és degs(θ)< . Mindkét oldalt osztva g(θ) -val azt kapjuk, hogy f(θ)g(θ)=q(θ)+t(θ)θl+h(θ)g(θ). A p(θ)=q(θ)+t(θ)/θl jelöléssel p(θ) véges Laurent-sor, ennek integrálása azonban semmivel sem lesz nehezebb, mint egy polinom integrálása. Ez nem meglepő, ha meggondoljuk, hogy θ1= exp (u) . Még így is, itt is a,,polinomrész” integrálása a nehezebb. A másikkal kezdjük. Exponenciális eset, racionális rész Legyen øg(θ)=g1(θ)g22(θ)gmm(θ) a øg(θ) négyzetmentes felbontása. Ekkor θgj(θ) miatt lnko (gj(θ),gj(θ))=1. Parciális törtekre bontással h(θ)g(θ)=i=1mj=1ihi,j(θ)gi(θ)j. A Hermite-redukció ugyanúgy megy, mint a logaritmikus résznél. Azt kapjuk, hogy h(θ)g(θ)=c(θ)d(θ)+a(θ)b(θ), ahol a(θ),b(θ),c(θ),d(θ)Kn1[θ] , dega(θ)<degb(θ) és b(θ) négyzetmentes főpolinom, θb(θ). Megmutatható, hogy az a(θ)/b(θ) integrál kiszámítására a Rothstein– Trager-módszer alkalmazható. Számítsuk ki a r(y)= res θ(b(θ),a(θ)yb(θ)) rezultánst. Megmutatható, hogy az integrál pontosan akkor elemi, ha r(y)=ør(y)s alakban írható, ahol ør(y)K[y] és sKn1. Ha tehát kiszámítjuk r(y) primitív részét, ezt választjuk ør(y) -nak, és ør(y) bármelyik együtthatója nem konstans, akkor nem létezik elemi integrál. Egyébként legyenek c1,...,ck az ør(y) különböző gyökei annak felbontási testében és legyen vi(θ)= lnko (b(θ),a(θ)cib(θ))Kn1(c1,...,ck)[θ], ha i=1,...,k. Megmutatható, hogy a(θ)b(θ)=((i=1kcidegvi(θ)))+i=1kcilog(vi(θ)). Nézzünk néhány példát. 2.28. példa. Az 1/(1+ exp (x)) integrál integrandusa 1/(1+θ)Q(x,θ), ahol θ= exp (x). Mivel r(y)= res θ(θ+1,1yθ)=1yQ(x)[y] primitív polinom és csak konstans együtthatói vannak, az integrál elemi, c1=1,v1(θ)= lnko (θ+1,1+θ)=1+θ, így 11+ exp (x)=c1xdegv1(θ)+c1log(v1(θ))=xlog( exp (x)+1). 2.29. példa. Az x/(1+exp (x)) integrál integrandusa x/(1+θ)Q(x,θ), ahol θ= exp (x). Mivel r(y)= res θ(θ+1,xyθ)=xyQ(x)[y] primitív polinom, amelynek van nem konstans együtthatója, az integrál nem elemi. Exponenciális eset, polinom rész Marad a p(θ)=i=kpiθiKn1(θ) ,,polinomrész” integrálásának problémája. A Liouville-elv szerint p(θ) pontosan akkor elemi, ha p(θ)=v0(θ)+j=1mcjvj(θ)vj(θ), ahol cjK és vjKn1(θ) , ha j=0,1,...,m, továbbá KC a K valamely bővítése és Kn1=K(x,θ1,...,θn1). Megmutatható, hogy K lehet a K egy algebrai bővítése. Hasonlóan érvelve, mint a Liouvilleelv bizonyításában, megmutatható, hogy az általánosság megszorítása nélkül feltehetjük: vj(θ) vagy Kn1 eleme (azaz független θ -tól) vagy pedig főpolinom és irreducibilis Kn1[θ] ban, ha j=1,2,...,m . Továbbá az is belátható, hogy v0(θ) nevezőjében nem lehet nem monom tényező, mivel egy ilyen tényező megmaradna a derivált nevezőjében is. Hasonlóan vj(θ) -nak (j=1,2,...,m) sem lehet nem monom tényezője. Így azt kapjuk, hogy vj(θ) vagy Kn1 eleme, vagy pedig vj(θ)=θ , mivel ez az egyetlen irreducibilis monom, amely főpolinom. Ha azonban vj(θ)=θ, akkor a megfelelő tag az összegben cjvj(θ)/vj(θ)=cju, ami beolvasztható v0(θ) -be. Ebből azt kapjuk, hogy ha p(θ) -nak van elemi integrálja, akkor p(θ)=((j=kqjθj))+j=1mcjvjvj, ahol qj,vjKn1 és cjK; az, hogy az összegzési határok az első összegben meg kell egyezzenek a p(θ) előállításában szereplő összegzési határokkal, következik abból, hogy (qjθj)=(qj+jugj)θj. Az együtthatók összehasonlításával a pj=qj+juqj,hajk,j0,p0=øq0, egyenletrendszert kapjuk, ahol øq0=q0+j=1mcjlog(vj). A p0=øq0 egyenlet megoldása egyszerűen øq0=p0; ha ez az integrál nem elemi, akkor p(θ) sem elemi, ha viszont elemi, akkor meghatároztuk øq0 -at. A j0 esetben egy differenciálegyenletet kell megoldanunk qj meghatározásához, az úgynevezett Risch-differenciálegyenletet. A differenciálegyenlet y+fy=g alakú, ahol az adott f,g függvények Kn1 elemei és Kn1 -beli megoldásokat keresünk. Első pillantásra úgy tűnik, hogy az integrálás problémáját egy nehezebb problémával helyettesítettük, azonban az, hogy az egyenletek lineárisak, a megoldásnak pedig Kn1 -ben kell lenni, sokat segít. Ha valamelyik Risch-differenciálegyenletnek nincs Kn1 -beli megoldása, akkor p(θ) nem elemi, egyébként p(θ)=j0qjθj+øq0. A Risch-differenciálegyenlet algoritmussal megoldható, ezt nem részletezzük. Tekintsünk néhány példát. 2.30. példa. Az exp (x2) integrál integrandusa θQ(x,θ) , ahol θ= exp (x2). Ha az integrál elemi, akkor θ=q1θ , ahol q1C(x). Nem nehéz belátni, hogy a differenciálegyenletnek nincs racionális megoldása, így exp (x2) nem elemi. 2.31. példa. Az xx integrál integrandusa exp (xlog(x))=θ2Q(x,θ1,θ2), ahol θ1=log(x) és θ2= exp (xθ1). Ha az integrál elemi, akkor θ2=q1θ2 , ahol q1C(x,θ1). Mindkét oldal differenciálva θ2=q1θ2+q1(θ1+1)θ2, ahonnan 1=q1+(θ1+1)q1. Mivel θ1 transzcendens C(x) felett, az együtthatók összehasonlításával 1=q1+q1 és 0=q1, aminek nincs megoldása. így xx nem elemi. 2.32. példa. Az (4x2+4x1)(exp (x2)+1)(exp (x2)1)(x+1)2 integrál integrandusa f(θ)=4x2+4x1(x+1)2(θ21)Q(x,θ), ahol θ= exp (x2). Ha az integrál elemi, akkor f(θ)=q2θ2+q0 alakú, ahol q2+4xq2=4x2+4x1(x+1)2,q0=4x2+4x1(x+1)2. A második egyenlet integrálható, és q0 elemi. Az első egyenletnek megoldása q2=1/(1+x). Innen f(θ)=1x+1 exp 2(x2)(2x+1)2x+1+4log(x+1). Gyakorlatok 2.4–1. Alkalmazzuk a Hermite-redukciót az alábbi f(x)Q(x) függvényre: f(x)=441x7+780x6286x5+4085x4+769x3+3713x243253x+245009x6+6x565x4+20x3+135x2154x+49. 2.4–2. Számítsuk ki az f integrált, ahol f(x)=36x6+126x5+183x4+13807/6x3407x23242/5x+3044/15(x2+7/6x+1/3)2(x2/5)3Q(x). 2.4–3. Alkalmazzuk a Risch-algoritmust az alábbi integrál kiszámítására: x(x+1){(x2e2x2log(x+1)2)+2xe3x2(x(2x3+2x2+x+1)log(x+1))}((x+1)log2(x+1)(x3+x2)e2x2)2dx. 2.5. Elmélet és gyakorlat A fejezet eddigi részében arra törekedtünk, hogy néhány lényeges szimbolikus algoritmus bemutatásán keresztül érzékeltessük a komputeralgebra tudományterületének algoritmustervezési problémáit. A következőkben az érdeklődő Olvasó áttekintést kaphat a szimbolikus algoritmusok kutatásának szélesebb világából. 2.5.1. Egyéb szimbolikus algoritmusok A fejezetben bemutatott rezultánsmódszer és a Gröbner-bázis elmélet mellett létezik algoritmus nemlineáris egyenletek és egyenlőtlenségek valós szimbolikus gyökeinek meghatározására is (Collins). Figyelemre méltó algoritmusok születtek differenciálegyenletek szimbolikus megoldásainak vizsgálata során. A Risch-algoritmushoz hasonló döntési eljárás létezik racionálisfüggvény-együtthatójú homogén másodrendű közönséges differenciálegyenletek zárt alakú megoldásainak kiszámítására. Magasabb rendű lineáris esetben az Abramov-eljárás a polinomegyütthatós egyenletek zárt racionális megoldásait, a Bronstein-algoritmus pedig az exp (f(x)dx) alakú megoldásokat határozza meg. Parciális differenciálegyenletek esetében a Lie-féle szimmetria-módszerek állnak rendelkezésre. Létezik algoritmus formális hatványsorok és racionális függvények feletti lineáris differenciáloperátorok faktorizálására is. A faktorizáláson alapuló eljárások komoly jelentőséggel bírnak a komputeralgebrai algoritmusok kutatásában. Olyannyira igaz ez a megállapítás, hogy sokan az egész tudományterület születését Berlekamp azon publikációjától számítják, amelyben hatékony algoritmust ad kis p karakterisztikájú véges testek feletti egyhatározatlanú polinomok faktorizációjára. Berlekamp eredményét később nagyobb p karakterisztikákra is kiterjesztette. Azért, hogy hasonlóan jó futási időt kapjon, az algoritmusába véletlen elemeket illesztett. A mai komputeralgebra rendszerek nagyobb véges testekre is rutinszerűen alkalmazzák Berlekamp eljárását talán anélkül, hogy a felhasználók többségének az algoritmus valószínűségi eredetéről tudomása lenne. A módszer könyvünk második kötetében kerül ismertetésre. Megjegyezzük, hogy véges testek feletti polinomok faktorizálására számos algoritmus létezik. Nem sokkal azután, hogy a véges testek feletti polinomfaktorizáció megoldódott, Zassenhaus – van der Waerden 1936-os Moderne Algebra könyvét alapul véve – a p -adikus számok aritmetikájának ún. Hensel-lemmáját alkalmazta a faktorok kiterjesztésére. A,,Hensel-lifting” – ahogy ma az eljárását nevezik – általános megközelítési módszer arra, hogyan rekonstruáljuk a faktorokat moduláris képeikből. Az interpolációval ellentétben, ami több képpont meglétét követeli meg, a Hensel-lifting kiindulásul csak egyetlen képpontot igényel. Az egész együtthatós polinomok faktorizációjára adott Berlekamp–Zassenhaus-féle algoritmus alapvető jelentőségű, mégis rejteget magában két csapdát. Az egyik, hogy bizonyos fajta polinomokra az algoritmus futási ideje exponenciális. Sajnos, az algebrai számtestekre épített polinomok faktorizációjánál sok ilyen,,rossz” polinom kerül elő. A második, hogy többváltozós polinomokra hasonló reprezentációs probléma lép fel, mint amilyet ritka mátrixok Gauss-eliminációjánál tapasztalunk. Az első problémát egy, a számok geometriáján alapuló diofantoszi optimalizálás, a Lenstra–Lenstra–Lovász nevével fémjelzett ún. rácsredukciós algoritmus oldotta meg, amit a Berlekampmódszerrel együtt használnak. Ezen polinomiális algoritmus mellé még egy olyan eljárás társul, amely arról gondoskodik, hogy a Hensel-lifting ,,jó” moduláris képről induljon és,,megfelelő időben” véget érjen. A többváltozós polinomfaktorizáció említett reprezentációs problémájára is születtek megoldások. Ez a második olyan terület, ahol a véletlenítés kritikus szerepet kap a hatékony algoritmusok tervezésében. Megjegyezzük, hogy a gyakorlatban a Berlekamp– Zassenhaus–Hensel-féle algoritmus hatékonyabban működik, mint a Lenstra– Lenstra–Lovász-féle eljárás. Összevetésképpen a polinomfaktorizálás problémája tehát polinomiális időben megoldható, míg az N egész faktorizálására a bizonyítottan legjobb algoritmikus korlát O~(N1/4) (Pollard és Strassen) a determinisztikus, és L(N)1+o(1) (Lenstra és Pomerance) a valószínűségi esetben, ahol L(N)=e2lnNlnlnN. Valójában a heurisztikus, valószínűségi módszereknek egy új elmélete van születőben a komputeralgebrában egyrészt az számítási tárrobbanás elkerülésére, másrészt a determinisztikusan nagy futási idejű algoritmusok hatékonyságának növelésére. A valószínűségi algoritmusok esetében a nem megfelelő működésnek is van pozitív valószínűsége, ami vagy az esetleges rossz válaszban nyilvánul meg (Monte Carlo csoport), vagy, habár sohasem kapunk rossz választ (Las Vegas csoport), elképzelhető, hogy polinomiális időben nem kapunk semmit. A már említetteken kívül heurisztikákkal szép eredményeket értek el többek között polinomazonosság tesztelésénél, polinomok irreducibilitásának vizsgálatánál, mátrixok normálformáinak (Frobenius, Hilbert, Smith) meghatározásánál. Szerepük minden valószínűség szerint a jövőben is növekedni fog. A fejezet eddigi részében a lényegesebb szimbolikus algoritmusokat tekintettük át. Már a bevezetőben említettük, hogy a komputeralgebra-rendszerek többsége képes numerikus számítások elvégzésére is: a hagyományostól eltérően a számítási pontosságot a felhasználó határozhatja meg. Gyakran előfordul, hogy a szimbolikus és numerikus számításokat együtt célszerű használni. Tekintsük például egy differenciálegyenlet szimbolikusan kiszámolt hatványsor megoldását. A csonkított hatványsort ezután bizonyos pontokban a szokásos lebegőpontos aritmetikával kiértékelve a differenciálegyenlet megoldásának numerikus approximációját kapjuk. Amennyiben a megoldandó probléma valamilyen valós fizikai probléma approximációja, a szimbolikus számítások vonzó lehetőségei gyakran érvényüket vesztik; egyszerűen mert túl bonyolultak vagy túl lassúak ahhoz, hogy hasznosak vagy szükségesek legyenek, hiszen a megoldást is numerikusan keressük. Más esetekben, ha a probléma szimbolikusan kezelhetetlen, az egyetlen lehetséges út a numerikus approximációs módszerek használata. Ilyen akkor fordulhat elő, ha a létező szimbolikus algoritmus nem talál zárt megoldást (pl. nem elemi függvények integrálja stb.), vagy nem létezik a problémát kezelni tudó szimbolikus algoritmus. Ámbár egyre több numerikus algoritmusnak létezik szimbolikus megfelelője, a numerikus eljárások nagyon fontosak a komputeralgebrában. Gondoljunk csak a differenciálés integrálszámítás területére: bizonyos esetekben a hagyományos algoritmusok – integráltranszformációk, hatványsor-approximációk, perturbációs módszerek – lehetnek a legcélravezetőbbek. A komputeralgebra algoritmusok tervezésénél a jövőben egyre nagyobb szerepet kapnak a párhuzamos architektúrájú számítógépek. Habár sok meglévő algoritmus,,ránézésre” párhuzamosítható, nem biztos, hogy a jó szekvenciális algoritmusok párhuzamos architektúrákon is a legjobbak lesznek: az optimum talán egy teljesen különböző eljárással érhető el. 2.5.2. A komputeralgebra-rendszerek áttekintése A komputeralgebra-rendszerek fejlődésének története szoros kapcsolatban áll az informatika és az algoritmikus matematika fejlődésével. A számítástechnika kezdeti időszakában a különböző tudományterületek művelői szimbolikus számítási igényeik megkönnyítése és felgyorsítása érdekében kezdték el fejleszteni az első komputeralgebra-rendszereket, amelyek átdolgozva, folyamatosan megújulva és a sokadik változatban napjainkban is jelen vannak. A hetvenes években jelentek meg az általános célú komputeralgebra-rendszerek, amelyeket beépített adatstruktúrák, matematikai függvények és algoritmusok széles tárháza jellemez, minél nagyobb felhasználói területet próbálva meg lefedni. A jelentős számítógépes erőforrásigény miatt robbanásszerű elterjedésük a nyolcvanas évek elejére, a mikroprocesszor alapú munkaállomások megjelenésének idejére tehető. A jobb hardver környezet, a hatékonyabb erőforrás-gazdálkodás, rendszerfüggetlen, magasszintű alapnyelv használata, és nem utolsósorban a társadalmi-gazdasági igények fokozatosan piaci termékké érlelték az általános célú komputeralgebra-rendszereket, ami viszont erős javulást hozott a felhasználói felület és dokumentumkészítés terén. Az alábbiakban a legismertebb általános és speciális célú komputeralgebra rendszereket, könyvtárakat soroljuk fel. 1. Általános célú komputeralgebra rendszerek: AXIOM, DERIVE, FORM, GNU-CALC, JACAL, MACSYMA, MAXIMA, MAPLE, DISTRIBUTED MAPLE, MATHCAD, MATLAB SYMBOLIC, MATH TOOLBOX, SCILAB, MAS, MATHEMATICA, MATHVIEW, MOCK-MMA, MuPAD, REDUCE, RISA. 2. Algebra és számelmélet: Bergman, CoCoA, Felix, Fermat, GRB, Kan, Macaulay, Magma, Numbers, Pari, Simath, Singular.3. Algebrai geometria: CASA, GANITH.4. Csoportelmélet: GAP, LiE, MAGMA, SCHUR.5. Tenzor analízis: CARTAN, FEYNCALC, GRG, GRTENSOR, MATHTENSOR, REDTEN, RICCI, TTC.6. Komputeralgebra könyvtárak: Apfloat, BigNum, GNU MP, Kant, LiDiA, NTL, Saclib, Ubasic, Weyl, Zen. Az általános célú komputeralgebra rendszerek többsége olyan tulajdonságokkal bír, mint 1. interaktivitás,2. matematikai tények ismerete,3. matematikai objektumok kezelésére képes deklaratív, magas szintű programozási nyelv funkcionális programozási lehetőségekkel (a deklaratív programozási nyelvek a kívánt eredményt specifikálják és nem a hozzájuk vezető utat, mint ahogy az imperatív nyelvek teszik), 4. az operációs rendszer és más programok felé való kiterjeszthetőség, 5. szimbolikus és numerikus számítások integrálása, 6. automatikus (optimalizált) C és Fortran kódszegmens generálása, 7. grafikus felhasználói környezet, 8. 2 és 3 dimenziós grafika, animáció, 9. szövegszerkesztési lehetőség és automatikus LA T E X konverzió, 10. on-line súgó.A komputeralgebra-rendszereket matematikai szakértői rendszereknek is nevezik. Napjainkban az általános célú komputeralgebra-rendszerek szédítő iramú fejlődésének lehetünk szemtanúi, elsősorban tudásuknak és széles körű alkalmazhatóságuknak köszönhetően. Mégis hiba volna alábecsülni a speciális rendszereket, amelyek egyrészt igen fontos szerepet játszanak sok tudományterületen, másrészt sok esetben könnyebben kezelhetők és hatékonyabbak, jelölésrendszerük és algoritmusaik alacsony szintű programnyelvi megvalósításaa miatt. Nagyon lényeges, hogy egy adott probléma megoldásához az arra legalkalmasabb komputeralgebrarendszert válasszuk ki. Feladatok 2-1. Maradékos osztás maradéksorozata együtthatói hosszának vizsgálata Generáljunk két (n=10) -ed fokú pszeudovéletlen polinomot Z[x] -ben l=10 decimális jegyből álló együtthatókkal. Hajtsunk végre egyetlen maradékos osztást ( Q[x] -ben) és számítsuk ki a maradék polinom és az eredeti polinom ( λ függvénnyel meghatározott) maximális együtthatóhosszának arányát. Ismételjük meg a számításokat (t=20) -szor és számítsunk átlagot. Mennyi lesz a kapott érték? Ismételjük meg a fenti kísérletet l=100,500,1000 esetén. 2-2. A MODULÁRIS-LNKO-KISPRIMEK algoritmus szimulációs vizsgálata Szimulációs vizsgálattal adjunk becslést a MODULÁRIS-LNKO-KISPRIMEK algoritmusban az n változó optimális értékére. Használjunk véletlen polinomokat különböző fokszám és együttható-nagyság esetén. 2-3. Módosított pszeudo-maradékos osztás Legyen f,gZ[x],degf=mn=degg. A pszeudo-maradékos osztást módosítsuk oly módon, hogy a gnsf=gq+r egyenletnél az s=mn+1 kitevő helyett a lehető legkisebb olyan sN érték szerepeljen, amellyel q,rZ[x]. Az így származtatott spquo () és sprem () eljárásokkal helyettesítve a Primitív-Euklidesz algoritmus pquo () és prem () eljárásait véletlen polinomokat alkalmazva vessük össze az algoritmusok tárigényét. 2-4. Redukált Gröbnerbázis konstrukciója Tervezzünk algoritmust, amely adott G Gröbner-bázisból redukált Gröbnerbázist állít elő. 2-5. A Hermite-redukció megvalósítása Valósítsuk meg a Hermite-redukciót valamilyen választott komputeralgebra nyelven. 2-6. Racionális törtfüggvény integrálása Írjunk programot a racionális törtfüggvények integrálására. Megjegyzések a fejezethez A KLASSZIKUS-EUKLIDESZ és BŐVÍTETT-EUKLIDESZ algoritmusok nemnegatív egész bemenet esetén működő változata megtalálható [90]-ben. A rezultánsok elméletének természetes folytatásaként juthatunk el a szubrezultánsokhoz, melynek segítségével a BŐVÍTETTEUKLIDESZ algoritmus során látott együttható-növekedés jól kordában tartható (lásd például [153] [154]). A Gröbner-bázisokat B. Buchberger vezette be 1965-ben [57]. Polinomideálok bázisaival több szerző is foglalkozott ezt megelőzően. A legismertebb talán Hironaka , aki 1964-ben C feletti szingularitások feloldására hatványsorok ideáljainak bázisát használta. Munkájáért Fields-érmet kapott. Azonban Hironaka módszere nem volt konstruktív. A Gröbner-bázisokat az utóbbi két évtizedben számos algebrai struktúrára általánosították. A differenciálalgebra alapjait J. F. Ritt fektette le 1948-ban [393]. A szimbolikus integrálás során használt négyzetmentes felbontás algoritmusa megtalálható például a [153] [154] könyvekben. A Hermite-redukcióban a testbővítés foka lehető legkisebbre választásának fontosságát igazolja a [154]-ben található 11.11. példa, amelyben a felbontási test rendkívül magas fokú, míg az integrál egy másodfokú testbővítésben felírható. A Rothstein–Trager-féle integráló algoritmus bizonyítása megtalálható [153]-ben (22.8. tétel). Megjegyezzük, hogy az algoritmust Rothstein és Trager egymástól függetlenül találták. A Lazard–Rioboo–Trager-formula helyességének bizonyítása, a Logaritmikus-rész-integrál algoritmus futási idejének elemzése, az algebrai kiterjesztési lépések nehézségének kezelésével kapcsolatos eljárások vázlatos ismertetése, a C(x) felett hiperexponenciális elem hiperexponenciális integráljának meghatározása (ha ilyen létezik), a Liouville-elv bizonyítása, a Risch-algoritmussal kapcsolatos állítások bizonyításai megtalálhatók a [153] könyvben. A komputeralgebráról és a kapcsolódó tudományterületekről számos publikáció és könyv született. Magyar nyelven [90], [171] és [265] érhető el. Angolul az érdeklődőknek az összefoglaló matematikai jellegű munkák közül felsorolunk néhányat: Caviness [71], Davenport és társai [100], von zur Gathen és társai [153], Geddes és társai [154], Knuth [259] [260] [261], Mignotte [333], Mishra [339], Pavelle és társai [368], Winkler [502]. A komputeralgebra informatikai oldaláról az érdeklődő Olvasó további információt találhat az alábbiakban: Christensen [75], Gonnet és Gruntz [165], Harper és társai [197], valamint a világhálón. Az alkalmazásokról könyvek és cikkek nagyon széles választéka áll rendelkezésre, pl. Akritas [7], Cohen és társai (ed.) [85] [86], Grossman (ed.) [180], Hearn (ed.) [201], Kovács [264] és Odlyzko [357]. A komputeralgebra-rendszerek oktatásban betöltött szerepéről lásd pl. Karian [244] és Uhl [477] munkáját. Konferencia kiadványok: AAECC, DISCO, EUROCAL, EUROSAM, ISSAAC és SYMSAC. Komputeralgebra folyóiratok: Journal of Symbolic Computation – Academic Press, Applicable Algebra in Engineering, Communication and Computing – Springer-Verlag, SIGSAM Bulletin – ACM Press. Az Eötvös Loránd Tudományegyetem Informatikai Karának Komputeralgebra Tanszéke az oktatásban a [154] [333] [153] [502] munkákat veszi alapul. 3. Kriptográfia (Jörg Rothe) Ebben a fejezetben a kriptográfiában használatos protokollokat, valamint alapvető problémákat és algoritmusokat mutatunk be. A kriptográfiában jellemző egyik alaphelyzetet láthatjuk a 3.1. ábrán. Aliz és Bob híreket cserélnek valamilyen nem biztonságos csatornán, például nyilvános telefonvonalon, vagy két hálózati kapcsolatban lévő számítógép közötti elektronikus posta segítségével. Erik megcsapolja a vezetéket, és lehallgatja a kommunikációt. Mivel Aliz és Bob tudják ezt, a küldeményeiket rejtjelezik. 3.1. ábra. A kriptográfiában tipikus alaphelyzet. A 3.1. alfejezetben olyan szimmetrikus kriptográfiai rendszereket mutatunk be, amelyek az illetéktelen rejtjelfejtést hivatottak akadályozni. Szimmetrikusnak akkor nevezünk egy kriptográfiai rendszert, ha ugyanaz a kulcs használható rejtjelezésre (sifrírozásra) és visszafejtésre (desifrírozásra) is. Vajon hogyan kell Aliznak és Bobnak egy közös kulcsban megegyeznie, ha csupán egy megbízhatatlan csatornán tudnak kommunikálni egymással? Ha például Aliz választ egy kulcsot és rejtjelezi (mondjuk egy szimmetrikus rejtjelrendszerrel), majd elküldi Bobnak, azonnal felmerül a kérdés, milyen kulcsot használjanak ezeknek a kulcsoknak a rejtjelezéséhez. Ez a paradoxnak tűnő kérdés – amely egy kicsit emlékeztet arra a másikra, hogy vajon a tojás, vagy a tyúk volt-e előbb