uni
La complessità in algoritmi si divide in complessità spaziale e complessità temporale. Siccome la complessità spaziale ha poche soluzioni in ambito software e più in ambito hardware, noi parleremo solo di complessità temporale.
Dato un algoritmo A la complessità viene determinata contando il numero di operazioni aritmetiche e logiche, accesso ai file, letture e scritture in memoria, etc.
Quindi è il tempo impiegato proporzionale al numero di operazioni eseguite (ciascuna a costo unitario).
Definizione del Corso:
La complessità di un algoritmo è una funzione (sempre positiva) che associa alla dimensione del problema il costo della sua risoluzione.
La complessità è diversa dal profiling (tecnica di analisi di un programma basato sulla misurazione di indici di prestazione a runtime) poiché questo dipende dall’ambiente di esecuzione.
Si indica normalmente come con numero di dati.
Definiamo l’insieme delle funzioni di ordine .
è quindi l’insieme delle funzioni della forma
è quindi l’insieme delle funzioni della forma
Regole:
se è e è allora è
per ogni costante , è
per , è
un polinomio di grado è
Quando valuto due algoritmi li valuto in maniera asintotica, quindi per esempio.

Notazioni

In generale una funzione si indica con solo
Quindi diventa .
sinonimi:
1. è di ordine
2. è
3.
4. =
è l’insieme delle funzioni di ordine

Notazione O Grande: Limite Asintotico Superiore

è di ordine se esistono un intero ed una costante tali che . Quindi oltre una certa è minore di
Classi di Complessità:
= costante; = logaritmica; = lineare; ; = quadratica ; = cubica; = polinomiale ; e = esponenziale.

Notazione theta grande: Limite Asintotico Stretto

è se è e è
Quindi è quando e hanno lo stesso ordine di complessità.

Notazione Omega Grande: Limite Asintotico Inferiore

è se esistono un intero ed una costante tali che

Regole

  1. Regola dei fattori costanti:
    per ogni costante positiva ,
  2. Regola della somme:
    se è allora è
  3. Regola del prodotto
    se è e è , allora è
  4. se è e è , allora è
  5. per ogni costante , è
  6. per , è
  7. un polinomio di grado è

Classi di complessità

Le classi di complessità sono le seguenti:
costante, logaritmica, lineare, , quadratica, cubica, polinomiale, esponenziale, esponenziale .