Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.01 KB | None | 0 0
  1. /*
  2. Algorimi si metode programare
  3. -----------------------------------
  4. [1] metoda backtraking
  5. [2] metoda greedy
  6. [3] metoda divide et impera
  7. -----------------------------------
  8. [4] metoda programarii dinamice
  9.  
  10. - 4.1 programare dinamica "inainte"
  11.  
  12. Descriere :
  13. In general orice enunt de tip PD este un enunt de optim
  14. ( se solicita o selectie a unui subset dintr-un set dat astfel incat
  15. sa fie indeplinit un anumit criteriu )
  16. La o abordare de tip PD se rezolva problema pentru subseturi
  17. ale setului dat indentificand modul de compunere a raspunsurilor
  18. obtinute pe masura ce crestem dimensiunea datelor de intrare
  19. pana la dimensiunea setului precizat in enunt
  20. In cazul in care compunerea se realizeaza pe baza unor rezultate
  21. obtinute la pasii k+1... n spuneam ca avem PD inainte
  22. ( pas curent il consideram k pas final - ce ia in calcul ultimul element din
  23. setul dat il consideram n )
  24. Altfel spus pana la obtinerea raspunsului la problema formulata
  25. se executa un sir de prelucrari ale datelor de intrare pentru a
  26. obtine datele de iesire. In timp acestor prelucrari datele trec
  27. in urma unor decizii prin diferite stari
  28.  
  29. datele de intrare=S1 --> S2 --> ....--> Sk --> .....-> Sn= datele de iesire
  30. D1 D2 Dk Dk+1 Dn-1
  31.  
  32. Daca forma datelor in starea Sk depinde
  33. ( compunere ) de formele datelor din starile Sk+1 ... Sn
  34. avem :
  35. PD inainte ( programare dinamica cazul inainte )
  36. Caz clasic ( PD inainte )
  37. Problema celui mai lung subsir crescator care se poate forma
  38. luand de pe locuri in ordine valori dintr-un sir dat
  39. exemplu :
  40. n=8 M={6,3,2,7,23,7,32,3}
  41. lungime maxima in conditiile din enunt este 4
  42. S1={2,7,23,32}
  43. S2={3,7,7,32}
  44. S3={6,7,23,32}
  45. S4={3,7,23,32}
  46. S5={2,7,7,32}
  47. S6={6,7,7,32}
  48. lungimea maxima a unei solutii este 4
  49. La orice abordare de tip PD este necesara o structura auxiliara
  50. ce memoreaza raspunsurile starilor deja parcurse
  51. Pentru problema subsir crescator de lungime maxima
  52. utilizez un vector
  53.  
  54. L[i]= lugimea cel mai lung subsir care se poate forma incepand
  55. cu elementul i din sirul dat
  56. initial L[n]=1;
  57. rezolvarea presupune completarea continutului lui L
  58. si apoi cautarea maximului in interiorul L.
  59.  
  60. completarea o execut pentru locuri n-1 .... 1 astfel :
  61.  
  62. L[i]=1+max { L[j]/ V[j]>=V[i] }
  63.  
  64. Deci :
  65. 1. orice PD utilizeaza o structura auxiliara ( vector, matrice )
  66. 2. in structura auxliara aleasa execut o initializare
  67. 3. in functie de modul de completare a structurii
  68. avem :
  69. - PD inainte ( subsir crescator de lungime maxima )
  70. - PD inapoi ( problema numarului Fibonacci )
  71.  
  72. | x daca x=0
  73. F(x)=| 1 daca x=1
  74. | F(x-2)+F(X-1) daca x>1
  75.  
  76. 0 1 1 2 3 5 8 13 ...
  77.  
  78. Cerinta :
  79. Pentru x dat sa se calculeze valoarea F(x)
  80.  
  81. La o abordare de tip PD utilizez ca structura auxiliara un vector
  82. in care memorez toate raspusurile la problemele formulate
  83. initializez V
  84. V[0]=0
  85. V[1]=1
  86. index curent=2 , pentru toti indecsii pana la valoarea lui x
  87.  
  88. completez valoare curenta in V invocand valori deja calculate
  89. de pe pozitii precedente astfel
  90.  
  91. V[k]=V[k-1]+V[k-2]
  92.  
  93. */
  94. #include<iostream>
  95. using namespace std;
  96. int x;
  97. int V[100];
  98.  
  99. int main()
  100. {
  101. cout<<"x=";cin>>x;
  102. V[0]=0;
  103. V[1]=1;
  104. int index=2;
  105. while (index<=x)
  106. {V[index]=V[index-1]+V[index-2];
  107. index++;
  108. }
  109. cout<<"F("<<x<<")="<<V[index-1];
  110. }
  111.  
  112. /*
  113. La abordarile de tip PD se pot eventual practica optimizari
  114. Acestea sunt posibile daca se observa ca in modul de compunere
  115. a rezultatului curent cu rezultatele anterior calculate nu este nevoie
  116. de o parcurgere a intregii structuri anterior calculate.
  117. Concluzie :
  118. Optimizarile intr-un PD daca sunt posibile vizeaza memorarea eficienta
  119. doar a unui context si nu a intregului ansamblu
  120.  
  121. In cazul functiei Fibonacci observam ca compunerile vizeaza
  122. doar ultimele doua rezultate obtinute
  123. Putem optimiza neintretinand intreg vectorul ci doar doua
  124. variabile auxiliare ( ultima si penultima valoare calculata )
  125. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement