Fő tartalom
Számítástudomány
Tantárgy/kurzus: Számítástudomány > 1. témakör
8. lecke: Összefésülő rendezés- Oszd meg és uralkodj algoritmusok
- Az összefésülő rendezés áttekintése
- Feladat: Az összefésülő rendezés megvalósítása
- Lineáris időben futó összefésülés
- Feladat: az összefésülés megvalósítása
- Az összefésülő rendezés elemzése
© 2023 Khan AcademyFelhasználási feltételekAdatkezelési tájékoztatóSüti figyelmeztetés
Oszd meg és uralkodj algoritmusok
Az eddig látott két rendező algoritmus, a minimumkiválasztásos rendezés és a beszúró rendezés legrosszabb futási ideje \Theta, left parenthesis, n, squared, right parenthesis. Nagyméretű input tömb esetén ezeknek az algoritmusoknak hosszú lehet a futási idejük. Ebben és a következő fejezetben két másik rendezési algoritmust veszünk górcső alá, az összefésülő rendezést és a gyorsrendezést, amiknek jobb a futási idejük. Az összefésülő rendezés minden esetben \Theta, left parenthesis, n, \lg, n, right parenthesis idő alatt fut le, a gyorsrendezés futási ideje a legjobb esetben, valamint átlagosan \Theta, left parenthesis, n, \lg, n, right parenthesis, viszont a legrosszabb esetben \Theta, left parenthesis, n, squared, right parenthesis. Az alábbi táblázatban összefoglaltuk e négy rendezési algoritmus futási idejét a legjobb, az átlagos és a legrosszabb esetben:
Algoritmus | Legrosszabb futási idő | Legjobb futási idő | Átlagos futási idő |
---|---|---|---|
Minimumkiválasztásos rendezés | \Theta, left parenthesis, n, squared, right parenthesis | \Theta, left parenthesis, n, squared, right parenthesis | \Theta, left parenthesis, n, squared, right parenthesis |
Beszúró rendezés | \Theta, left parenthesis, n, squared, right parenthesis | \Theta, left parenthesis, n, right parenthesis | \Theta, left parenthesis, n, squared, right parenthesis |
Összefésülő rendezés | \Theta, left parenthesis, n, \lg, n, right parenthesis | \Theta, left parenthesis, n, \lg, n, right parenthesis | \Theta, left parenthesis, n, \lg, n, right parenthesis |
Gyorsrendezés | \Theta, left parenthesis, n, squared, right parenthesis | \Theta, left parenthesis, n, \lg, n, right parenthesis | \Theta, left parenthesis, n, \lg, n, right parenthesis |
Oszd meg és uralkodj!
Mind az összefésülő rendezés, mind a gyorsrendezés ugyanazt a rekurzión alapuló paradigmát használja fel az algoritmus során. Ez a paradigma az oszd meg és uralkodj elv, ami azon alapul, hogy a megoldandó feladatot az eredetihez hasonló részfeladatokra bontja, megoldja azokat, majd a megoldott részfeladatokat összefésüli. Mivel az oszd-meg-és-uralkodj folyamat során a részfeladatokat rekurzívan oldja meg, az egyes részfeladatoknak az eredetinél mindig kisebbnek kell lenniük, és léteznie kell a részfeladatok alapesetének is. Az oszd-meg-és-uralkodj algoritmus három összetevőből áll:
- Oszd a feladatot részfeladatokra, amik ugyanannak a feladatnak kisebb változatai.
- Uralkodj a részfeladatok felett úgy, hogy rekurzívan megoldod azokat. Ha a részfeladat megfelelően kicsi, akkor oldd meg azt az alapeset szerint.
- Fésüld össze a részfeladatok megoldásait az eredeti probléma megoldásává.
Az oszd meg és uralkodj algoritmusok egyes lépéseit az alábbi tevékenységek sorozataként jegyezd meg: oszd fel részproblémákra, urald a részproblémákat, fésüld össze az eredményeket. Egy adott lépést a következőképpen szemléltethetünk, feltéve, hogy a felosztás során mindig két részfeladatot képezünk (vannak olyan oszd meg és uralkodj algoritmusok, melyek kettőnél több részfeladatot képeznek):
Ha egy vagy több rekurzív lépést kibontunk, akkor ezt kapjuk:
Mivel az oszd meg és uralkodj legalább két részfeladatot képez, ezért az több rekurzív hívást eredményez.
Ez a fejezet a Dartmouth Computer Science két professzora, Thomas Cormen és Devin Balkcom, valamint a Khan Academy informatika tanmenetfejlesztő csapatának együttműködésében készült. A tartalom a CC-BY-NC-SA licenc alatt engedélyezett.
Szeretnél részt venni a beszélgetésben?
Még nincs hozzászólás.