Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Divide and conquer
- 1. lépés (Brute force)
- Nem az egész divide and conquer dolog kell, csak a flatmapből csinálni parmapet
- A fv argumentumait becsomagolom egy listába -> azon végig mapelek egy functiont
- [Sub1, Sub2] = SubResults = [ dcsfib (x) || x<- SubProblems]
- (Ez a [Sub1, Sub2] = SubResults = map(fun dcsfib/1, SubProblems))
- E helyett lehetne egy parmepet bevezetni, de ez már meg van írva
- Utána a végén az eredeti műveletet is végre kell hajtani.
- Megkeresem hány db rekurzív hívás van,
- Argumntumokat kigyűjtöm listába,
- A lista elemeire meghívom az eredeti fv-t,
- Aztán az eredeti műveletet végrehajtom.
- 2. lépés
- De ez nagyon sok!
- Őrfeltételeket kell bevezetni, pl process számláló, mikor az elért egy számot, akkor átvált a szekvenciális megoldásra.
- dcsfib(0, _c)->
- 1;
- dcsfib(1,_c) ->
- 1;
- dcsfib(N,C) when N>1, C > 0 ->
- SubProblems = [N-1, N-2],
- %[Sub1, Sub2] = SubResults = parmap(fun dcsfib/1, SubProblems), -> ez kevésbé jó a counterhez
- [Sub1, Sub2] = SubResults = [ dcsfib (x, (C-2) div 2) || x<- SubProblems], %%Páruzamosítva ez!! a már ismert módon
- Sub2 + Sub2.
- dcsfib(N,C) -> % Ha tulléptem a proceszt visszaváltok a szekvenciálisra
- sfib(N). %Ehhez majd le kell másolni az eredeti függvényt!!
- Másik megoldás:
- dcsfib(N,C) -> % Ha tulléptem a proceszt visszaváltok a szekvenciálisra
- SubProblems = [N-1, N-2],
- [Sub1, Sub2] = SubResults = [ dcsfib (x, C) || x<- SubProblems] % simán nem párhuzamosítva, itt már mindegy a counter, mert amúgy is túlléptük
- Sub1 + Sub2.
- Ez emacsba : rename function szerűen berakni, hogy ne mark legyen. Az input maga a függvény
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement