Advertisement
daniele2013

COMPLESSITA' SERVER

May 5th, 2014
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.96 KB | None | 0 0
  1. int main() {
  2. struct PC *client=situazione_iniziale();
  3. menu(client);
  4. printf("\n\n\t\t\tProgramma terminato.\n");
  5. system("PAUSE");
  6. return 0;
  7. }
  8.  
  9. comp_0 MAIN:
  10. {
  11. tempo:
  12. Si inizializza la variabile client con l'algoritmo situazione_iniziale (complessità O(m^2)) e si chiama la funzione menu (complessità MAX*O(m)).
  13. La complessità totale è perciò O(m^2).
  14. spazio:
  15. Si usa la lista di n pc aventi ognuna una lista di m jobs, occupando al massimo, in termini asintotici un O(n+m).
  16. }
  17.  
  18.  
  19. comp_1 INSORDINE:
  20. {
  21. tempo:
  22. La complessità di tempo dipende dal numero di confronti da eseguire con gli elementi della lista esistente per inserire un nuovo elemento;
  23. si può andare da 0 confronti (lista vuota) a m confronti (l'elemento deve essere inserito alla fine), per cui essendo un algoritmo ricorsivo
  24. la complessità di tempo si riduce a O(m).
  25. spazio:
  26. L'algoritmo sfrutta la struttura dati di una lista concatenata, contenente i valori da confrontare con l'elemento da inserire in modo ordinato;
  27. per cui la complessità di spazio è O(m).
  28. }
  29.  
  30.  
  31. comp_2 STAMPA:
  32. {
  33. tempo:
  34. Si scorre la lista di n pc applicando l'algoritmo insStampa (complessità O(m)) ottenendo la complessità O(n*m) mentre alla fine si usa la funzione
  35. stampaggio (complessità O(m)). La complessità temporale totale è O(m*n).
  36. spazio:
  37. Si usa una lista di n elementi da cui si diramano m altri elementi, il che occupa in tutto uno spazio massimo pari ad un O(n+m).
  38. }
  39.  
  40.  
  41. comp_3 INSSTAMPA:
  42. {
  43. tempo:
  44. L'algoritmo inserisce nella coda elementi presenti nella lista di job di un pc evitando le ridondanze;
  45. se siamo all'inizio, la coda sarà vuota e quindi l'elemento non è già presente e sarà inserito, ma se non è vuota si scorre la lista
  46. costituita dalla coda finchè o non si trovano ridondanze, e quindi si inserisce l'elemento alla fine, oppure si continua a scorrere arrivando
  47. a non inserire l'elemento passato come parametro alla funzione.
  48. La complessità asintotica di tempo di questo algoritmo dipende da quanto confronti si eseguono, arrivando al massimo a m confronti
  49. (si scorre tutta la lista), per cui la complessità di tempo è data al massimo da O(m).
  50. spazio:
  51. L'algoritmo sfrutta la struttura dati di una lista concatenata, contenente i valori da confrontare con l'elemento da inserire;
  52. poichè essi sono al più m, la complessità di spazio è O(m).
  53. }
  54.  
  55.  
  56. comp_4 RANDOMIZE:
  57. {
  58. tempo:
  59. All'inizio con un ciclo while si scorre la lista di pc per ricavare il numero esatto di pc incrementando la variabile 'i', iterando n volte
  60. (complessità O(n));
  61. subito dopo si fa un controllo sul valore effettivo di questa variabile per effettuare una operazione aritmetica il cui valore va assegnato
  62. alla variabile 'inserimento' (complessità O(1) sia che si entri nel ramo if che si entri nel ramo else);
  63. subito dopo si entra in un ciclo while durante il quale si eseguono: un ciclo for che dura 100/n iterazioni a causa degli n pc (complessità O(n)),
  64. vari assegnamenti e stampe (complessità O(1)), un ciclo for che viene usato per inserire in ordine dei job nella lista dei jobs di un pc
  65. (sfruttando la funzione insOrdine che ha complessità di tempo O(m) per m elementi da inserire) e altri assegnamenti (complessità O(1)); dopo
  66. queste operazioni nel while si ha la complessità O(m) + O(n) + 1 e poichè m rappresenta il numero di inserimenti possibili nella lista dei jobs di
  67. un pc e poichè essi sono in numero esponenzialmente maggiore rispetto ai pc, allora tutto si riduce a O(m), facendo assumere a tutto il while
  68. una complessità di tempo di O(m*n).
  69. In definitiva, tutto l'algoritmo ha una complessità di tempo asintotica di O(n) + O(1) + O(n*m) che si riduce ad O(n*m).
  70. spazio:
  71. Nell'algoritmo si usa una struttura dati che presenta una lista di n elementi (i pc) che hanno a loro volta un numero massimo di m elementi
  72. nella lista dei propri jobs, richiedendo uno spazio massimo che tende ad un O(n+m).
  73. }
  74.  
  75.  
  76. comp_5 STAMPAGGIO:
  77. {
  78. tempo:
  79. L'algoritmo stampa in modo ricorsivo gli m jobs di uno specifico pc, arrivando ad ottenere una complessità asintotica di tempo di O(m).
  80. spazio:
  81. L'algoritmo manda in stampa m elementi occupando asintoticamente uno spazio di O(m).
  82. }
  83.  
  84.  
  85. comp_6 LISTA_PC:
  86. {
  87. tempo:
  88. L'algoritmo stampa gli ID di n pc scorrendo ricorsivamente n elementi, ottenendo una complessità asintoticamente di O(n).
  89. spazio:
  90. L'algoritmo stampa gli ID di n pc scorrendo ricorsivamente n elementi, che avendo loro m jobs, occupano asintoticamente uno spazio massimo
  91. di O(n+m).
  92. }
  93.  
  94.  
  95. comp_7 CERCA_PC:
  96. {
  97. tempo:
  98. L'algoritmo ricerca in una lista concatenata un elemento in base ad una chiave specifica; poichè ci sono n pc, asintoticamente la complessità
  99. arriva a O(n).
  100. spazio:
  101. Data la conformazione della struttura usata, l'algoritmo occupa uno spazio di O(n+m).
  102. }
  103.  
  104.  
  105. comp_8 CAMBIO_PRIORITA:
  106. {
  107. tempo:
  108. L'algoritmo ha lo scopo di cambiare la priorità di un pc cercandolo e spostandolo nella lista dei pc (se esso è presente).
  109. Prima usa un ciclo while per contare i pc (complessità O(n)), poi li si stampa per dare all'utente l'ordine di stampa prima del cambio priorità
  110. (complessità O(n)), poi si riusa l'algoritmo cerca_pc per capire se un certo pc esiste ed assegnare un valore ad una variabile (complessità totale
  111. O(n)), poi tramite il ramo if di un'istruzione if-else si eseguono varie volte algoritmi con complessità O(n) che non sono mai annidati fra loro,
  112. e poi si stampa la lista com'è diventata (complessità O(n)), altrimenti, si stampa il fatto che non è stato possibile trovare il pc voluto.
  113. In definitiva, si ha una complessità di tempo asintotica di O(n).
  114. spazio:
  115. Nell'algoritmo si usa una lista di n pc con m jobs ciascuno, così si ha una complessità di O(n+m).
  116. }
  117.  
  118.  
  119. comp_9 NUOVA_LISTA_PC:
  120. {
  121. tempo:
  122. Con quest'algoritmo si crea una lista di n elementi (i pc) senza i relativi jobs, perciò si ha una complessità di O(n).
  123. spazio:
  124. Si crea una lista di n pc senza i relativi jobs, così la complessità spaziale asintotica è di O(n).
  125. }
  126.  
  127.  
  128. comp_10 PRINTALL:
  129. {
  130. tempo:
  131. L'algoritmo scorre gli n pc per stampare gli m jobs che hanno, ottenendo una complessità di tempo totale di O(n*m).
  132. spazio:
  133. Si usa una lista di n elementi da cui si diramano m altri elementi, occupando uno spazio massimo di O(n+m).
  134. }
  135.  
  136.  
  137. comp_11 NUMERO_PC:
  138. {
  139. tempo:
  140. L'algoritmo prende in input e lo restituisce il numero esatto di pc che poi sarà usato da altri algoritmi, ottenendo una complessità temporale
  141. asintotica di O(n), nel caso in cui si sbagli n volte l'inserimento del numero.
  142. spazio:
  143. La complessità spaziale dell'algoritmo è O(1) in quanto si acquisisce un semplice valore intero.
  144. }
  145.  
  146.  
  147. comp_12 DELETE_JOB:
  148. {
  149. tempo:
  150. C'è un'istruzione if-else che controlla se ci sono dei pc; nel caso in cui ci siano, si usa un while per scorrere la lista degli n pc
  151. per trovare quello che ci serve (complessità O(n)).
  152. Nel caso in cui esista, si procede con un ciclo while per cercare il job nella lista di m jobs del pc trovato;
  153. nel caso che si trovi si eseguono i semplici assegnamenti che permettono la cancellazione di un elemento da una lista (complessità O(1)).
  154. In definitiva la complessità temporale asintotica dell'algoritmo è O(n+m).
  155. spazio:
  156. Poichè si usa una struttura di n pc con m jobs, la complessità spaziale è O(n+m).
  157. }
  158.  
  159.  
  160. comp_13 NEW_JOB:
  161. {
  162. tempo:
  163. Nell'algoritmo si crea un semplice elemento, perciò la complessità è O(1).
  164. spazio:
  165. Per lo stesso motivo di prima, la complessità spaziale è O(1).
  166. }
  167.  
  168.  
  169. comp_14 INS_PC:
  170. {
  171. tempo:
  172. Nell'algoritmo si crea la lista degli n pc, così si ha una complessità di O(n).
  173. spazio:
  174. Nell'algoritmo si usa una lista di n elementi, perciò si occupa asintoticamente uno spazio pari a un O(n).
  175. }
  176.  
  177.  
  178. comp_15 DUMP:
  179. {
  180. tempo:
  181. Nell'algoritmo si scorre ricorsivamente la lista degli m jobs, conferendo all'algoritmo una complessità temporale di O(m).
  182. spazio:
  183. Nell'algoritmo si scorrono m elementi, perciò si occupa lo spazio di O(m).
  184. }
  185.  
  186.  
  187. comp_16 SHUTDOWN:
  188. {
  189. tempo:
  190. Nell'algoritmo si scorrono gli n pc per usare l'algoritmo dump sui suoi m jobs (complessità O(m)), per cui la complessità massima di tempo è O(n+m).
  191. spazio:
  192. Nell'algoritmo si usa una struttura di n elementi da cui se ne diramano altri m, per cui si occupa lo spazio asintotico pari a O(n+m).
  193. }
  194.  
  195.  
  196. comp_17 CHOICE:
  197. {
  198. tempo:
  199. La complessità è O(1).
  200. spazio:
  201. La complessità è O(1).
  202. }
  203.  
  204.  
  205. comp_18 SITUAZIONE:
  206. {
  207. tempo:
  208. Nell'algoritmo di eseguono le seguenti operazioni:
  209. si crea una nuova lista di n pc (complessità O(n));
  210. si prende in input un numero (complessità O(1));
  211. se il numero è 1, si usa l'algoritmo randomize (complessità O(n*m));
  212. se il numero è 2, si prende in input un numero (complessità O(1)), si stampano i pc che si hanno (complessità O(n)), si prende in input
  213. l'id di un pc e lo si cerca (complessità O(n)); se il risultato della ricerca è sia 1 che 2 si usa l'algoritmo new_job per creare il singolo job
  214. (complessità O(1)) e poi si usa l'algoritmo insOrdine (complessità O(m)), il tutto in un ciclo while che itera per m volte (numero di jobs che si
  215. è scelto di creare), ottenendo in totale una complessità di O(m^2).
  216. In definitiva la complessità è di O(m^2).
  217. spazio:
  218. Si usa una lista di n elementi aventi a loro volta liste di m altri elementi, che occupano in totale in termini asintotici uno spazio pari a O(n+m).
  219. }
  220.  
  221.  
  222. comp_19 MENU:
  223. {
  224. tempo:
  225. Nell'algoritmo si eseguono le seguenti operazioni:
  226. si prende in input un numero (complessità O(1));
  227. in base al numero inserito si attiva uno switch case.
  228. Caso 1:
  229. si prende in input un ID e si cerca se esiste già (complessità O(n)) in un do while, ottenendo una complessità O(n^2); alla fine lo si inserisce con l'algoritmo
  230. ins_pc (complessità O(n)). COMPLESSITA' CASO 1: O(n^2).
  231. Caso 2:
  232. si prende in input un id e lo si cerca (O(n^2) perchè potrebbe non essere inserito subito un numero giusto), e se esiste si crea un job e lo si inserisce
  233. nella lista dei job del pc trovato (complessità O(m)). COMPLESSITA' CASO 2: O(m) (m è un numero molto maggiore di n ed anche di n^2).
  234. Caso 3:
  235. si inseriscono il nome di un job e l'id di un pc e si usa l'algoritmo delete_job (complessità O(m)). COMPLESSITA' CASO 3: O(m).
  236. Caso 4:
  237. si usa semplicemente l'algoritmo di printALL (complessità O(n*m). COMPLESSITA' CASO 4: O(n*m).
  238. Caso 5:
  239. si usa l'algoritmo stampa (complessità O()) e si usa l'algoritmo shutdown (complessità O(n+m)). COMPLESSITA' CASO 5:
  240. Caso 6:
  241. si usa l'algoritmo cambio_priorita (complessità O(n)). COMPLESSITA' CASO 6: O(n).
  242. La complessità di tutto lo switch case, asintoticamente è O(m), e poichè avviene in un do-while potenzialmente infinito, la complessità
  243. di tutta la funzione menu è MAX*O(m) dove MAX è l'ipotetico limite massimo di volte in cui non si sceglie il numero 7 che fa finire tutto.
  244. spazio:
  245. Nel menù si usa la struttura di una lista di n pc che ha a sua volta delle liste di m jobs, occupando uno spazio asintotico O(n+m).
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement