Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
Costo di un algoritmo
● Spazio → Memoria richiesta
● Tempo → Necessario all’esecuzione
Definizione di complessità
Una funziona f(n) ha ordine 0(g(n)) sse:
● Esistono due costanti positive c e m tali che |f (n)|≤ c|g( n)| ∀ n> m
Un algoritmo ha una complessità 0(g(n)) sse:
● Il tempo di calcolo t(n), sufficiente per eseguire l’algoritmo con ogni istanza di
dimensione n, ha ordine 0(g(n))
Analisi asintotica
Per n abbastanza grande, a meno di una costante moltiplicativa, f(n) non supera in modulo
g(n).
Comportamento dell’algoritmo al limite, per dimensione delle istanze m
Complessità intrinseca
Limite inferiore di complessità di un problema
Una funzione f(n) è Ω(g(n)) sse
● Esistono due costanti positive c e m tali che |f(n)| ≥ c|g(n)| ∀ n > m
Un problema ha una delimitazione inferiore alla complessità Ω(g(n)) sse
● Per ogni algoritmo risolutore esiste una istanza per cui il tempo di calcolo t(n) è
Ω(g(n))
Algoritmo ottimale
Algoritmo che risolve un problema P, con costo di esecuzione 0(g(n)) e delimitazione
inferiore Ω(g(n))
es. di algoritmo ottimale → ricerca binaria
Algoritmi di ordinamento
Per ricerca binaria è necessario avere dati ordinati
Algoritmi di ordinamento più semplici hanno complessità n2
Algoritmi di ordinamento divide et impera → Complessità n ∙ log 2 n
Bubble Sort
● Gli elementi maggiori salgono rapidamente, come bollicine di champagne
● Caso peggiore: lista rovesciata
○ Numero di confronti e scambi: n2 /2
● Anche in media, circa stessi valori
Selection Sort
● Ad ogni ciclo principale, si seleziona il valore minore della parte non ordinata
Insertion Sort
● Si prende il primo valore alla destra della parte ordinata, e si capisce dove va
inserito, aumentando la parte ordinata di 1
● Caso peggiore → 0(n2)
● In media si scorre solo ½ della prima parte
● Ottimizzazioni → Ricerca binaria in parte ordinata, inserimento a coppie o gruppi
Quick Sort
● Dato un insieme, sceglie un valore pivot, e crea due sottoinsiemi, <= pivot, > pivot
● Stesso algoritmo sui 2 insiemi(ricorsione)
● Caso medio → n ⋅ log 2 n
Merge Sort
● Simile a QuickSort ma non si sceglie pivot
● La fusione ha complessità lineare
● Caso peggiore, caso medio n ⋅log 2 n
● Spazio: la fusione richiede altra memoria: n
○ Si può evitare il costo con spostamenti in place
○ Aumenta però complessità(necessari più scambi)
● Accessi sequenziali, buon uso cache
Classi di complessità
● Costante → Numero di operazioni non dipendente da n
● Sotto-lineare → n k , k <1 ; log n → Ricerca binaria
● Lineare → Numero operazioni n → Ricerca lineare
● Sovra-lineare → n ⋅log n
● Polinomiale → n k , k ≥2
Algoritmo efficiente → Fino a classe polinomiale
Problema trattabile → Esiste un algoritmo efficiente
Complessità esponenziale: k n
Complessità super-esponenziale: n!, n n
Problemi intrattabili
● Non esiste algoritmo efficiente
● Soluzioni non esatte/ottime
● Ma minimi locali
Problemi P ed NP
Problemi P → Esiste algoritmo deterministico polinomiale
Problemi NP → Esiste algoritmo non-deterministico polinomiale
● Su macchine deterministiche: non noto algoritmo polinomiale per la ricerca di unas
oluzione
● Ma algoritmo polinomiale per la verifica di una soluzione
Esempio NP: Knapsack
Esiste una combinazione di elementi che realizza utilità >=V, con peso <=W
Millenium Problem
● Sappiamo che N ⊆ NP(DTM caso particolare di NTM)
● Ma non è dimostrato che P ≠ NP , né che P=NP
○ Se P=NP, risolvere un rompicapo o verificarlo
● Problemi di classe EXP → Risolti in tempo esponenziale da DTM
○ Sappiamo che NP⊆ exp
○ P ⊆NP ⊆exp