Oszd meg és hódítsd meg az algoritmust

Ebben az oktatóanyagban megtudhatja, hogyan működik az osztás és meghódítás algoritmus. Összehasonlítjuk a megosztási és a hódítási megközelítést a rekurzív probléma megoldásának más megközelítéseivel is.

A Divide and Conquer algoritmus egy nagy probléma megoldásának stratégiája

  1. a problémát kisebb részproblémákra bontva
  2. az alproblémák megoldása, és
  3. kombinálva őket a kívánt eredmény eléréséhez.

Az osztás és meghódítás algoritmus használatához rekurziót használunk. Tudjon meg többet a rekurzióról a különböző programozási nyelveken:

  • Rekurzió Java-ban
  • Rekurzió Pythonban
  • Rekurzió C ++ nyelven

Hogyan működnek az algoritmusok megosztása és meghódítása?

Itt vannak az érintett lépések:

  1. Osztás : Az adott problémát rekurzióval részproblémákra oszthatja.
  2. Hódítás : Rekurzív módon oldja meg a kisebb részfeladatokat. Ha az alprobléma elég kicsi, akkor oldja meg közvetlenül.
  3. Kombinálás: Kombinálja a rekurzív folyamat részét képező részproblémák megoldásait a tényleges probléma megoldásához.

Értsük meg ezt a koncepciót egy példa segítségével.

Itt rendezni fogunk egy tömböt a divide and conquer megközelítés (azaz egyesítés rendezés) segítségével.

  1. Legyen az adott tömb: Tömb az egyesítés rendezéséhez
  2. Osszuk a tömböt két félre. Osszuk el a tömböt két részre
    Ismét, osszuk meg az egyes részeket rekurzívan két félre, amíg meg nem kapjuk az egyes elemeket. Osszuk a tömböt kisebb részekre
  3. Most egyesítse az egyes elemeket rendezve. Itt a hódítás és a kombinálás lépései egymás mellett haladnak. Kombinálja az alrészeket

Az idő komplexitása

Az osztás és meghódítás algoritmus bonyolultságát a főtétel segítségével számítják ki.

T (n) = aT (n / b) + f (n), ahol, n = a bemenet mérete a = a rekurziós részproblémák száma n / b = az egyes részproblémák mérete. Feltételezzük, hogy az összes részprobléma azonos méretű. f (n) = a rekurzív híváson kívül végzett munka költsége, amely magában foglalja a probléma felosztásának költségét és a megoldások összevonásának költségeit

Vegyünk egy példát a rekurzív probléma időbeli összetettségének megállapítására.

Egyesítési fajta esetén az egyenlet a következőképpen írható fel:

 T (n) = aT (n / b) + f (n) = 2T (n / 2) + O (n) ahol a = 2 (minden alkalommal egy probléma 2 részproblémára oszlik) n / b = n / 2 (az egyes részfeladatok mérete a bemenet fele) f (n) = a probléma felosztásához és az alproblémák összevonásához szükséges idő T (n / 2) = O (n log n) (Ennek megértéséhez kérjük, olvassa el a törzstétel.) Most T (n) = 2T (n log n) + O (n) ≈ O (n log n) 

Divide and Conquer Vs Dynamic megközelítés

Az „oszd meg és hódítsd” megközelítés egy problémát kisebb részproblémákra oszt; ezek az alproblémák rekurzív módon tovább oldódnak. Az egyes részproblémák eredményét nem tároljuk későbbi felhasználás céljából, míg egy dinamikus megközelítésben az egyes részproblémák eredményét a későbbi hivatkozások céljából tároljuk.

Használja a divide and conquer megközelítést, ha ugyanaz a részprobléma nem oldódik meg többször. Használja a dinamikus megközelítést, ha egy részprobléma eredményét a jövőben többször kell használni.

Értsük meg ezt egy példával. Tegyük fel, hogy megpróbáljuk megtalálni a Fibonacci sorozatot. Azután,

Divide and Conquer megközelítés:

 fib (n) Ha n <2, adjon vissza 1-et, adjon vissza f (n - 1) + f (n -2) 

Dinamikus megközelítés:

 mem = () fib (n) Ha n a mem-ben: adja vissza a mem (n) else-t, Ha n <2, f = 1 else, f = f (n - 1) + f (n -2) mem (n) = f visszatérés f 

Dinamikus megközelítésben a mem tárolja az egyes részproblémák eredményét.

A Divide and Conquer Algorithm előnyei

  • Két mátrix naiv módszerrel történő szorzásának bonyolultsága O (n 3 ), míg az osztás és meghódítás megközelítést (azaz Strassen mátrix szorzását) O (n 2,8074 ). Ez a megközelítés más problémákat is leegyszerűsít, például a Hanoi-tornyot.
  • Ez a megközelítés alkalmas többprocesszoros rendszereknél.
  • Hatékonyan használja a memória gyorsítótárakat.

Divide and Conquer Applications

  • Bináris keresés
  • Egyesítés rendezés
  • Gyors rendezés
  • Strassen Matrix szorzata
  • Karatsuba algoritmus

érdekes cikkek...