Advertisement
Jerkiller

2.2 (esercitazione 2 esercizio 2)

Dec 3rd, 2014
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.04 KB | None | 0 0
  1. char * lastin(Queue q){
  2.     char * x;
  3.     char * ris;
  4.     x=dequeue(q);
  5.     if(queueEmpty(q)){enqueue(q,x); return x;}
  6.     else {
  7.         ris=lastin(q);
  8.         enqueue(q,x);
  9.         return ris;
  10.     }
  11. }
  12.  
  13. void inverti(Queue q){ if(!queueEmpty(q))lastin(q); }
  14.  
  15.  
  16. /*
  17.  
  18. Mia spiegazione della complessità:
  19.  
  20. Ammettiamo che tutte le funzioni sulle code siano di complessità costante (come da esercizio 1).
  21. La funzione "inverti" ha la complessità della funzione ausiliaria "lastin".
  22. In caso la coda q abbia uno e un solo elemento, questa funzione ha complessità costante: T(1)=k.
  23. Se invece ha n elementi (n>1) ricadiamo nel secondo if-branch in cui si invoca ricorsivamente lastin su q. Il numero di elementi di q è stato decrementato di 1, inoltre vengono fatte delle operazioni costanti.
  24. Per cui la complessità ricorsiva della funzione è T(n)=T(n-1)+k.
  25.  
  26. Risolvo tale ricorsione mediante la tecnica dello srotolamento:
  27. T(n)=T(n-1)+k
  28. T(n-1)=T(n-2)+k
  29. ...
  30. T(2)=T(1)+k
  31. T(1)=k
  32.  
  33. Da cui, sostituendo ricorsivamente, possiamo affermare che:
  34. T(n) = T(1)+(n-1)k = nk = θ(n).
  35.  
  36. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement