Summary of Összefésülő rendezés (merge sort)
Összefésülő rendezés (Merge Sort): Teljes elemzés és példák
Összefésülő rendezés
Az összefésülő rendezés (Merge Sort) egy rendkívül hatékony rendezési algoritmus, amelyet John von Neumann fejlesztett ki 1945-ben. Képzeljük el, hogy van egy nagy pakli kártyánk, amelyet növekvő sorrendbe kell rendeznünk. Az összefésülő rendezés nem próbálja meg egyszerre az összes kártyát sorba rakni. Ehelyett inkább a paklit folyamatosan félbe osztja, amíg már csak egyetlen kártya marad minden kisebb pakliban (ami nyilvánvalóan rendezett). Ezután ezeket az egyetlen kártyából álló "rendezett" paklikat kezdi el páronként összerakni, úgy, hogy minden egyes összeillesztés után egy nagyobb, de még mindig rendezett paklit kapjon. Ezt addig ismétli, amíg az összes kártya egyetlen, teljesen rendezett paklivá nem áll össze.
Ez az "oszd meg és uralkodj" elven alapuló megközelítés teszi az összefésülő rendezést olyan megbízhatóvá és népszerűvé. Függetlenül attól, hogy a kártyáink mennyire vannak szétszórva kezdetben, az algoritmus mindig kiszámíthatóan és hatékonyan fog működni.
Az összefésülő rendezés egy összehasonlításon alapuló rendezési algoritmus, amely az "oszd meg és uralkodj" elvet követi egy lista rendezésére.
Az "Oszd meg és uralkodj" paradigmája
Ez egy általános stratégia a számítástechnikában, amellyel nagy problémákat kisebb, kezelhetőbb részekre bontunk. Három fő lépésből áll:
-
Felosztás (Divide): A rendezendő listát (vagy tömböt) két vagy több kisebb, hasonló típusú alproblémára bontjuk. Az összefésülő rendezésnél ez azt jelenti, hogy a listát a középpontjánál kettévágjuk két nagyjából egyenlő méretű részre.
-
Uralkodás (Conquer): Az alproblémákat rekurzívan oldjuk meg. Ez addig folytatódik, amíg az alproblémák olyan kicsik nem lesznek, hogy triviálisan megoldhatók. Az összefésülő rendezésben ez azt jelenti, hogy addig osztjuk a listákat, amíg egyelemű listákat nem kapunk, amelyek definíció szerint már rendezettek.
-
Összefésülés (Combine): Az alproblémák megoldásait egyesítjük, hogy megkapjuk az eredeti probléma megoldását. Az összefésülő rendezésben ez a kulcsfontosságú lépés: két rendezett al-listát egyetlen rendezett listává fésülünk össze.
Az összefésülő rendezés algoritmusa: Fázisok
Az algoritmus két fő részre bontható, amelyek egymásra épülnek:
1. Felosztási fázis (Rekurzió)
Ez a fázis felelős a lista kisebb részekre bontásáért. Képzeljünk el egy függvényt, amelyik kap egy listát és két indexet, a bal (kezdő) és a jobb (záró) indexet, amelyek kijelölik a lista aktuálisan vizsgált részét.
-
Alapeset: Ha a
balindex nagyobb vagy egyenlő, mint ajobbindex ($bal \ge jobb$), az azt jelenti, hogy a lista aktuális része egy vagy nulla elemet tartalmaz. Egy egyelemű lista már rendezett, így nincs további teendő, a rekurzió visszatér. -
Rekurzív lépés:
- Meghatározzuk a lista középső indexét: $közép = \lfloor(bal + jobb) / 2\rfloor$. Ez osztja két részre a listát: $A[bal \dots közép]$ és $A[közép+1 \dots jobb]$.
- Rekurzívan meghívjuk az összefésülő rendezést az első félre: $MergeSort(A, bal, közép)$.
- Rekurzívan meghívjuk az összefésülő rendezést a második félre: $MergeSort(A, közép+1, jobb)$.
Ez a folyamat addig ismétlődik, amíg minden al-lista egyeleművé nem válik. Ekkor a rekurzió elkezdi a visszatérést, és elindul az összefésülési fázis.
2. Összefésülési fázis (Merge)
Ez a fázis a rendezett al-listákból épít fel nagyobb rendezett listákat. Tegyük fel, hogy van két már rendezett al-listánk: $BalLista$ és $JobbLista$.
-
Létrehozunk egy ideiglenes segédtömböt, amelynek mérete megegyezik a két összefésülendő lista együttes méretével. Ez a segédtömb fogja tárolni az összefésült eredményt.
-
Két mutatót ($i$ és $j$) inicializálunk a $BalLista$ és $JobbLista$ elejére (azaz $0$-ra).
Already have an account? Sign in
Összefésülő rendezés alapjai
Klíčová slova: Összefésülő rendezés, Komplexitás elemzés, Összefésülő rendezés működése
Klíčové pojmy: Az összefésülő rendezés (Merge Sort) egy összehasonlításon alapuló, "oszd meg és uralkodj" elvű rendezési algoritmus., Az algoritmust John von Neumann fejlesztette ki 1945-ben., Az "oszd meg és uralkodj" paradigma három lépésből áll: Felosztás, Uralkodás (rekurzív megoldás), Összefésülés (eredmények egyesítése)., A felosztási fázis rekurzívan kettévágja a listát, amíg egyelemű al-listákat nem kapunk (ez az alapeset)., Az összefésülési fázis két rendezett al-listát fésül össze egyetlen rendezett listává egy segédtömb segítségével., A segédtömbben a két lista elemeit folyamatosan összehasonlítjuk, és a kisebbiket másoljuk az eredménybe., Az összefésülő rendezés $O(n)$ extra memóriaigénnyel rendelkezik a segédtömb miatt., Előnye a stabilitás, a kiszámítható $O(n \log n)$ időkomplexitás minden esetben, és hogy könnyen párhuzamosítható., Hátránya a magas memóriaigény és a kisebb adathalmazokon való lehetséges lassúság a rekurziós overhead miatt., Gyakori hibák közé tartozik az összefésülési logika, a memória kezelése és a rekurziós alapeset helytelen megvalósítása., Szimulációkban érdemes megfigyelni a felosztási és összefésülési fák vizuális megjelenítését.