Complessità computazionale

Si cerca di catalogare dal punto di vista computazionale i problemi intrattabili, ovvero problemi risolvibili ma non in modo efficiente (ovvero in tempo polinomiale). In alcuni casi si pensa che non esista una soluzione ma non si hanno dimostrazioni in merito, mentre in altri casi è addirittura dimostrato. Abbiamo quindi delle categorie informali per i problemi:

Andiamo a definire alcuni concetti che utilizzeremo:

Definizione: Problema Computazionale: è composto da un input, da un output, e dalla relazione che c’è tra di essi.

Esempio classico: problema dell’ordinamento

Definizione: Algoritmo: Una procedura composta da un numero finito di operazioni concrete e generali tale che se applicata a un’istanza, calcola un output corretto del problema in un tempo finito (per tutte le possibili istanze).

Problema: Arco Minimo

Problema: Raggiungibilità

Problema: TSP (Travelling Salesman Problem)

Classificazione degli algoritmi

Definiamo un algoritmo come una sequenza di istruzioni elementari (supportate dal calcolatore) che, eseguite in sequenza, mi portano alla soluzione di un problema. Si ha quindi che un algoritmo $A$ risolve un problema $\Pi$ se per ogni possibile istanza di $\Pi$ l’algoritmo $A$ mi da la risposta corretta.

Distinguiamo però: