6. Elemi algoritmusok¶
Rendezési reláció
Egy olyan bináris rendezésről van szó, amely
reflexív,
tranzitív,
antiszimmetrikus.
Jellemzően teljes rendezést szoktunk vizsgálni, melyre teljesül a linearitás is.
A sorozatokról megköveteljük, hogy bármely két eleme összehasonlítható legyen.
Figyelem
Az, hogy egy sorozat elemein értelmezve van egy rendezési reláció, hogy vagy a sorozat rendezett, az két külön fogalom.
Jelölje
Általános bináris művelet jelölése
Az algoritmusok egy részében egy konkrét bináris művelet helyett egy általánosat adunk meg, amelyet egy
Null elem
Főként inicializálásnál hasznos, hogy ha az adott művelethez meg tudjuk adni a null elemet, amelyre teljesül, hogy
Például:
esetén . esetén . esetében (üres sztring, ).
Elemi algoritmusok¶
Sorozatszámítás¶
A sorozat értékeit egy értékben „összesíti”.
Szokás még aggregációnak, redukciónak is nevezni.
Eldöntés¶
Egy sorozat elemeit vizsgáljuk meg, hogy teljesül-e rájuk valamilyen
tulajdonság.Tulajdonképpen 2 algoritmusról van szó, amelyeket együtt érdemes említeni.
Létezik a sorozatban
A sorozat minden eleme
Kiválasztás¶
Egy
tulajdonságú elemet keres meg a sorozatban.Az elem értékét, vagy indexét is visszaadhatja. (Az index esetünkben informatívabb, ezért itt most azt fogjuk visszaadni.)
Feltételezzük, hogy biztosan van
tulajdonságú elem a sorozatban.
Lineáris keresés¶
Az elem létezésének vizsgálatát és indexének a keresését kombinálja.
Megszámlálás¶
A sorozatban a
tulajdonságú elemek számát adja vissza.
Maximum kiválasztás¶
Feltételezzük, hogy a sorozat elemein értelmezve van egy teljes rendezés.
A maximális értékű elem indexével térünk vissza.
Feltételezzük, hogy a sorozatnak legalább egy eleme van.
Másolás¶
A bemeneti sorozatot transzformálást követően egy kimeneti sorozatba másolja át.
A transzformációt egy
függvény formájában adhatjuk meg.
Kiválogatás¶
A bemeneti sorozatból kigyűjtjük a
tulajdonságú elemeket a kimeneti sorozatba.
Szétválogatás¶
A
és nem tulajdonságú elemeket külön sorozatokba gyűjti.
Metszet¶
A két bemeneti sorozatról feltételezzük, hogy azokban csak különböző elemek vannak.
Tulajdonképpen a halmaz sorozat implementációját használjuk.
A bemenetként adott halmazok metszetét adjuk meg kimenetként.
Egyesítés¶
A két bemeneti sorozatról feltételezzük, hogy azokban csak különböző elemek vannak.
Tulajdonképpen a halmaz sorozat implementációját használjuk.
A bemenetként adott halmazok unióját adjuk meg kimenetként.
Összefuttatás¶
Két szigorúan monoton növekvő sorozatot egy harmadik rendezett sorozatba futtatunk/fűzünk össze.
Iteráció és rekurzió¶
Amennyiben egy problémát vissza tudunk vezetni egy azonos jellegű, de kisebb méretű problémára, akkor használhatunk rekurziót.
Faktoriális számítása¶
Rekurzív változat:
Fibonacci számsorozat¶
A Fibonacci sorozat
-edik elemét szeretnénk kiszámolni.
Rekurzív változat:
Bináris keresés¶
Feltételezzük, hogy van egy rendezett sorozatunk.
A lineáris kereséshez hasonlóan egy elemet szeretnénk megkeresni a sorozatban.
Kérdések¶
Hogyan írható fel a halmaz különbség, mint algoritmus?
Hogyan írható fel a szimmetrikus differencia képzés, mint algoritmus?
Hogyan írható fel a faktoriális számítása iteratív alakban?
Hogyan írható fel az
Fibonacci szám kiszámítása iteratív alakban?Hogyan írható fel a bináris keresés iteratív alakban?
Feladatok¶
Pszeudókód, folyamatábra¶
A következő feladatokat oldjuk meg a pszeudókód felírásával és a folyamatábra felrajzolásával! (Minden esetben egy-egy procedúrát adjunk meg!)
Cseréljük ki két változó értékét!
Számoljuk meg egy sorozatban a páros számok darabszámát!
Számoljuk ki egy sorozatban a páratlan számok összegét!
Határozzuk meg a negatív számok maximumát!
Vizsgáljuk meg, hogy egy sorozat tartalmaz-e egy bizonyos elemet!
Vizsgáljuk meg, hogy egy sorozat rendezett-e!
Ellenőrizzük, hogy egy sorozat minden eleme egyedi!
Egy sorozatból gyűjtsük ki azon elemeket, amelyek megegyeznek az indexükkel!
Számoljuk meg, hogy egy bináris vektorban mennyi 0 és 1 érték van!
Két azonos hosszúságú bemeneti sorozatot fűzzünk össze úgy, hogy az első sorozat elemei a páratlan, a második sorozat elemei a páros indexekre kerüljenek.
Rekurzív függvények, procedúrák¶
Adottak a következő függvények!
Számítsuk ki az
Számítsuk ki az
értékét!
Használjuk fel hozzá a következő rekurzív összefüggést!
Adjuk meg a procedúra pszeudó kódját, folyamatábráját! Ábrázoljuk a rekurzív hívási fát!