Complessità degli algoritmi (R)

La complessità in tempo asintotica si distingue dalla complessità in tempo perché si occupa del comportamento dell'algoritmo per n "molto" grande / trascura costanti e combinazioni lineari scegliendo una sola funzione rappresentativa / descrive chiaramente l'ordine di grandezza del tempo d'esecuzione

Associa alla complessità asintotica corrispondente

  1. T(n) = 20n --> O(n)

  2. T(n) = 3n2 --> O(n2)

  3. T(n) = 300 --> O(1)

  4. T(n) = 3n2 + 2000n --> O(n2)

  5. T(n) = 25log2n + 300 --> O(log2n)

  6. T(n) = 25log2n + n2 --> O(n2)

L’algoritmo di ricerca sequenziale con sentinella ha, rispetto a quello normale,

  1. almeno un vantaggio: è più veloce perché nel while()do ci sono due operazioni elementari in meno
  2. e almeno uno svantaggio: è meno comprensibile / necessità di una locazione in più

Individua (e commenta…) la complessità asintotica del miglior algoritmo risolutivo per ciascuno dei seguenti problemi

  1. Fusione di 4 vettori ordinati --> O(n): come per la fusione di due vettori
  2. Ricerca su un vettore ordinato --> O(log2n): uso la ricerca binaria
  3. Ricerca su un vettore non ordinato --> O(n): uso la ricerca sequenziale
  4. Calcolo della media su una matrice quadrata --> O(n2): se n è la dimensione della matrice sono necessari n2 passi per sommare n2 elementi
  5. Input da tastiera di un carattere --> O(1): si può considerare un'operazione "elementare"

Nel calcolo della complessità di un algoritmo si considera come più significativo il caso medio perché descrive meglio il comportamento dell'algoritmo rispetto ai casi ottimo e pessimo che sono poco realistici / frequenti

- ApPuNtIdIuNiNfOrMaTiCo