Advertisement
Guest User

Untitled

a guest
Nov 7th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.65 KB | None | 0 0
  1. Divide and conquer
  2. 1. lépés (Brute force)
  3. Nem az egész divide and conquer dolog kell, csak a flatmapből csinálni parmapet
  4.  
  5. A fv argumentumait becsomagolom egy listába -> azon végig mapelek egy functiont
  6. [Sub1, Sub2] = SubResults = [ dcsfib (x) || x<- SubProblems]
  7. (Ez a [Sub1, Sub2] = SubResults = map(fun dcsfib/1, SubProblems))
  8.  
  9. E helyett lehetne egy parmepet bevezetni, de ez már meg van írva
  10.  
  11. Utána a végén az eredeti műveletet is végre kell hajtani.
  12.  
  13. Megkeresem hány db rekurzív hívás van,
  14. Argumntumokat kigyűjtöm listába,
  15. A lista elemeire meghívom az eredeti fv-t,
  16. Aztán az eredeti műveletet végrehajtom.
  17.  
  18. 2. lépés
  19. De ez nagyon sok!
  20. Őrfeltételeket kell bevezetni, pl process számláló, mikor az elért egy számot, akkor átvált a szekvenciális megoldásra.
  21.  
  22. dcsfib(0, _c)->
  23.     1;
  24. dcsfib(1,_c) ->
  25.     1;
  26. dcsfib(N,C) when N>1, C > 0 ->
  27.     SubProblems = [N-1, N-2],
  28.     %[Sub1, Sub2] = SubResults = parmap(fun dcsfib/1, SubProblems), -> ez kevésbé jó a counterhez
  29.     [Sub1, Sub2] = SubResults = [ dcsfib (x, (C-2) div 2) || x<- SubProblems], %%Páruzamosítva ez!! a már ismert módon
  30.     Sub2 + Sub2.
  31.  
  32. dcsfib(N,C) -> % Ha tulléptem a proceszt visszaváltok a szekvenciálisra
  33.     sfib(N). %Ehhez majd le kell másolni az eredeti függvényt!!
  34.  
  35. Másik megoldás:
  36. dcsfib(N,C) -> % Ha tulléptem a proceszt visszaváltok a szekvenciálisra
  37.     SubProblems = [N-1, N-2],
  38.     [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
  39.     Sub1 + Sub2.
  40.    
  41. 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