Dato un algoritmo (corretto) per la soluzione di un problema, una domanda importante da porci è quanto spazio occuperà durante l'esecuzione e quanto tempo richiederà prima di fornire la risposta. Ovviamente, se per risolvere il nostro problema l'algoritmo impiegasse diversi anni, oppure richiedesse una quantità eccessiva di RAM per poter essere eseguito, allora difficilmente sarà di qualche utilità pratica.
Fortunatamente, gli informatici si sono preoccupati di determinare dei metodi per poter calcolare il tempo e lo spazio richiesti per l'esecuzione degli algoritmi, etichettando questo campo con il nome di complessità computazionale.
Per i nostri scopi, è sufficiente sapere che si possono calcolare delle funzioni dei dati in ingresso, che ci forniscono una stima teorica di quanta sarà la massima occupazione di memoria durante il calcolo (complessità nello spazio), o il massimo tempo impiegato (complessità temporale). Quando si calcolano queste funzioni, si fa riferimento a macchine teoriche, per cui lo spazio e il tempo saranno funzioni proporzionali al vero spazio occupato e al vero tempo di esecuzione su un computer reale. Per poter compiere questi calcoli si operano le seguenti approssimazioni:
Come abbiamo detto, la complessità computazionale che si calcola (nel tempo e nello spazio), è definita come funzione della dimensione dei dati in ingresso. Per cui, questo tiene conto del fatto che se eseguiamo un algoritmo per la ricerca di una persona all'interno di una rubrica con 10 nomi, oppure con 1000 nomi (i dati in ingresso), il tempo sará differente e funzione del numero di persone.
Ovviamente anche l'ordine dei dati, cambierà gli effettivi tempi di esecuzione, per cui si può calcolare una funzione come tempo medio di esecuizione oppure tempo nel caso peggiore. Di solito il caso peggiore è quello più facile da calcolare ed è il solo che verrà considerato in queste note (in alcuni casi i due valori coincidono).
La notazione che utilizzeremo è la seguente: diciamo che un algoritmo ha una complessità computazionale se la funzione che calcolo per l'algoritmo è (tempo o spazio calcolati) e si ha che