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
- Regola dei fattori costanti:
per ogni costante positiva , - Regola della somme:
se è allora è - Regola del prodotto
se è e è , allora è - se è e è , allora è
- per ogni costante , è
- per , è
- un polinomio di grado è
Classi di complessità
Le classi di complessità sono le seguenti:
costante, logaritmica, lineare, , quadratica, cubica, polinomiale, esponenziale, esponenziale .