DAL PROBLEMA ALL’ALGORITMO - Prof. Nicola BRUNO - … 6.pdf · ... non “pensa un numero ......

43
Informatica – Prof. Nicola BRUNO Qualunque problema che ci troviamo a dover risolvere genera delle domande a cui dobbiamo trovare una risposta. Per la risoluzione di un problema si devono affrontare alcune fasi: DAL PROBLEMA ALL’ALGORITMO - dati iniziali (dati di input) sui quali basare la soluzione del problema; essi non devono essere né sovrabbondanti né troppo ridotti; - dati intermedi (variabili di lavoro), usati esclusivamente durante le elaborazioni del problema; - dati finali per definire i risultati che si vogliono ottenere (dati di output). 1. la prima fase consiste nell’individuare con precisione la domanda a cui rispondere e le risposte da ottenere (dati del problema); 2. la seconda consiste nella costruzione di uno schema che tenga conto solo degli aspetti importanti al fine della risoluzione del problema (modello del problema); 3. la terza è quella più creativa e consiste nell’individuare le operazioni da compiere per raggiungere il risultato stabilito del problema (algoritmo). 1) Dati – Nella descrizione del problema occorre anzitutto definire diversi tipi di dati:

Transcript of DAL PROBLEMA ALL’ALGORITMO - Prof. Nicola BRUNO - … 6.pdf · ... non “pensa un numero ......

Informatica – Prof. Nicola BRUNO

Qualunque problema che ci troviamo a dover risolvere genera delle domande a cui dobbiamo trovare una risposta. Per la risoluzione di un problema si devono affrontare alcune fasi:

DAL PROBLEMA ALL’ALGORITMO

- dati iniziali (dati di input) sui quali basare la soluzione del problema; essi non devono essere né sovrabbondanti né troppo ridotti;- dati intermedi (variabili di lavoro), usati esclusivamente durante le elaborazioni del problema;- dati finali per definire i risultati che si vogliono ottenere (dati di output).

1. la prima fase consiste nell’individuare con precisione la domanda a cui rispondere e le risposte da ottenere (dati del problema);

2. la seconda consiste nella costruzione di uno schema che tenga conto solo degli aspetti importanti al fine della risoluzione del problema (modello del problema);

3. la terza è quella più creativa e consiste nell’individuare le operazioni da compiere per raggiungere il risultato stabilito del problema (algoritmo).

1) Dati – Nella descrizione del problema occorre anzitutto definire diversi tipi di dati:

Informatica – Prof. Nicola BRUNO

Le azioni rappresentano le attività effettuate in un intervallo di tempo finito e che, mettendo i dati in relazione tra loro, consentono di ottenere il risultato del problema.

Definizioni

Possono essere operazioni di tipo aritmetico quali i calcoli (somma, IVA 20%, ecc.) o di tipo logico (confronto tra due valori A>B, controllo per stabilire se è stata raggiunta la fine di un elenco EOF, ecc.).

Per descrivere le azioni è necessario disporre di un linguaggio; le descrizioni delle azioni sono dette istruzioni.

Informatica – Prof. Nicola BRUNO

Definizioni

2) Modello: è una forma semplificata di rappresentazione della realtà che tiene conto di tutti e solo gli elementi determinanti per la risoluzione di un problema (per esempio, la carta stradale per la risoluzione del problema della determinazione del percorso più breve tra varie città).

3) Algoritmo: successione ordinata e finita di tutte le operazioni che devono essere eseguite per raggiungere il risultato del problema definito in precedenza, a partire da certi dati.

Per implementazione di un problema si intende il suo trasferimento su un sistema di elaborazione.

Il risolutore è colui che progetta prima il percorso di risoluzione di un problema, e successivamente l’algoritmo.

L’esecutore è l’entità che esegue automaticamente le azioni, secondo le istruzioni dell’algoritmo.

Informatica – Prof. Nicola BRUNO

ALGORITMO

Il concetto di algoritmo rappresenta il concetto centrale dell’informatica, come procedimento per la trasformazione delle informazioni.

Lo studio degli algoritmi può essere svolto indipendentemente dagli strumenti fisici utilizzati per la manipolazione dell’informazione tramite computer; infatti,la sua nascita ha preceduto di molti secoli quella dei computer.

Nota storica

La parola algoritmo ha origine nel Medio Oriente. Essa proviene dall'ultima parte del nome dello studioso persiano Abu Jàfar Mohammed Ibn Musa Al-Khowarizmi, il cui testo di aritmetica (825 d.C. circa) esercitò una profonda influenza nei secoli successivi.

In realtà, la nozione di algoritmo non riguarda esclusivamente l’informatica e il trattamento delle informazioni, ma riguarda qualunque campo in cui si possono scrivere sequenze di operazioni finalizzate alla risoluzione di un problema qualsiasi. Ad esempio, una ricetta di cucina è un algoritmo che può essere eseguito da un cuoco, ecc.

Informatica – Prof. Nicola BRUNO

REQUISITI

1) deve essere COMPLETO ed esaustivo, ovvero deve contemplare tutti i casi possibili che si possono verificare durante l’esecuzione;le istruzioni devono essere in grado di risolvere qualunque problema di quel tipo (per esempio, le istruzioni per la ricerca delle radici di una equazione di secondo grado che, se generali, risolvono il problema in qualunque caso: due soluzioni reali e distinte, due soluzioni coincidenti, due soluzioni immaginarie).

2) deve contenere un numero FINITO di istruzioni, necessariamente con un punto di inizio e uno di arrivo, nel quale si interrompe l’esecuzione delle istruzioni.

3) deve essere RIPRODUCIBILE, ovvero le istruzioni non devono produrre casi di ambiguità; ogni esecuzione con i medesimi dati iniziali, deve produrre sempre lo stesso risultato.

Dal punto di vista formale, un algoritmo deve rispettare i seguenti requisiti:

Informatica – Prof. Nicola BRUNO

ISTRUZIONI

1) devono essere elementari, cioè non complesse e non ulteriormente scomponibili: per esempio, non x←←←←media(a,b,c)ma s←←←←a+b+c e x←←←←s/3;

2) concretamente realizzabili dall’esecutore che esegue l’algoritmo: per esempio, non “calcola la radice quadrata di un numero con approssimazione ad una certa cifra decimale…), ma x←←←←a*b;

3) devono essere precise e non ambigue, cioè non devono creare incertezze e dubbi di interpretazione: per esempio, non “applica uno sconto”, ma x←←←←prezzo*20%;

Le istruzioni che costituiscono un algoritmo devono avere le seguenti caratteristiche fondamentali:

Informatica – Prof. Nicola BRUNO

Istruzioni

4) devono avere una durata limitata nel tempo, cioè devono avere un punto di arresto, indipendentemente dal tempo impiegato, e non possono effettuare calcoli all’infinito: per esempio, non “calcola tutte le cifre decimali di ππππ”, ma “somma x 100.000 volte con se stesso”;

5) devono produrre, alla fine dell’esecuzione, un risultato effettivamente osservabile: per esempio, non “pensa un numero”, ma “se x > y allora…”;

6) devono essere deterministiche, cioè devono produrre in modo univoco sempre lo stesso risultato, se eseguite con gli stessi dati iniziali: non “lancia una moneta”, ma s←←←←a+b.

Informatica – Prof. Nicola BRUNO

L'ALGORITMO COME FUNZIONE

Un algoritmo definisce implicitamente una funzione dall'insieme dei dati di ingresso all'insieme dei dati in uscita, ed al tempo stesso indica un procedimento effettivo che permette di determinare, per ogni possibile configurazione in ingresso, i corrispondenti valori in uscita.

Dato un algoritmo A, indicheremo con fA la funzione che associa ad ogni valore in ingresso il corrispondente valore in uscita fA(x).

Definizione: Un problema è una funzione P: DI →→→→ DSdefinita su un insieme DI di elementi denominati istanze, ed a valori su un insieme DS di soluzioni.

Diciamo che un algoritmo A risolve un problema P se P(x) = fA(x) per ogni istanza x.

Informatica – Prof. Nicola BRUNO

RAPPRESENTAZIONE DEGLI ALGORITMIUn algoritmo può essere descritto utilizzando termini e parole del linguaggio comune, con modalità e regole precise. Non si tratta di un vero linguaggio di programmazione, ma solo di un linguaggio sintetico, detto pseudocodifica o pseudolinguaggio.

In generale, possiamo dividere la sua rappresentazione in tre parti:1. riga di intestazione: la prima riga contenente il nome che il risolutore

decide di dare all’algoritmo per ricordare l’obiettivo del problema (Algoritmo Media, Algoritmo Ordina, ecc.);

2. sezione dichiarativa: una o più righe contenente la descrizione degli oggetti che vengono usati dall’algoritmo, cioè nome e tipo di dati (base, altezza: numeri reali; pigreco:costante 3,14; ecc.);

3. sezione esecutiva: inizia con la parola begin (o inizio) e termina con end (o fine), e contiene l’elenco ordinato delle istruzioni dell’algoritmo che l’esecutore deve eseguire.

Informatica – Prof. Nicola BRUNO

Istruzioni fondamentaliDato un algoritmo qualsiasi, l’esecutore associato deve essere in grado di:

- eseguire le quattro operazioni aritmetiche,

- memorizzare i dati in alcune variabili di memoria identificate da un nome,

- eseguire le sei istruzioni fondamentali che possiamo ritrovare in tutti i linguaggi di programmazione “imperativi/procedurali”.

1. assegna: consente di attribuire ad una variabile un valore costante, il valore memorizzato in un’altra variabile o il risultato di un’espressione aritmetica tra valori costanti o valori contenuti in altre variabili (x←←←←a+b);

2. leggi: consente all’esecutore di acquisire dall’esterno un’informazione e di memorizzarla in una variabile di memoria (leggi a);

3. scrivi: consente all’esecutore di visualizzare/stampare all’esterno un dato costante, un valore memorizzato in una variabile o il risultato di un’espressione aritmetica che coinvolga valori costanti o variabili(scrivi “Sì”, scrivi x);

Informatica – Prof. Nicola BRUNO

Istruzioni fondamentali

4. se... allora... altrimenti: consente all’esecutore di valutare un’espressionebooleana il cui valore può essere solo “vero” o “falso”; in base al risultato della valutazione della condizione, vengono eseguite delle istruzioni oppure, in caso contrario, delle altre (se x > 0 allora x←←←←x+1 altrimenti x←←←←x-1);

5. vai al passo ...: consente di saltare ad una specifica istruzione dell’algoritmo anziché eseguire l’istruzione successiva nella sequenza naturale;

6. stop: termina l’esecuzione dell’algoritmo.

Ad ognuna delle istruzioni elementari corrisponde un simbolo concui è possibile costruire una rappresentazione graficadell’algoritmo, ossia un diagramma di flusso (flow chart).Ogni diagramma di flusso ha un unico punto di inizio (start) ed un unico punto terminale (stop).

Informatica – Prof. Nicola BRUNO

Diagramma di flusso

Per rappresentare in modo efficace un algoritmo, si può utilizzare un modello grafico (diagramma di flusso) che associa alle istruzione dell’algoritmo i seguenti simboli grafici:

Informatica – Prof. Nicola BRUNO

Programmazione strutturata

Le strutture algoritmiche con cui si possono costruire i diagrammi di flusso sono soltanto tre, così come previsto dalle regole della programmazione strutturata:

1. la struttura sequenziale, in cui le istruzioni si susseguono una dopo l’altra senza alcuna variazione al flusso dell’algoritmo;

2. la struttura iterativa, in cui una sequenza di istruzioni viene ripetuta più volte fintanto che risulta verificata una determinata condizione; la condizione può essere valutata all’inizio della sequenza di istruzioni da ripetere (while … do), oppure al termine della sequenza (repeat … until), a seconda dei casi e delle necessità; quando la condizione risulta falsa, il flusso dell’algoritmo prosegue con la prima istruzione esterna alla sequenza da ripetere.

3. la struttura condizionale (o alternativa), in cui a fronte di una condizione il flusso dell’algoritmo si biforca per poi ricongiungersi più avanti;

Informatica – Prof. Nicola BRUNO

TEOREMA DI JACOPINI E BÖHM

Teorema fondamentale della programmazione strutturata: ogni programma può essere codificato utilizzando esclusivamente le tre strutture fondamentali:

Informatica – Prof. Nicola BRUNO

Le tre strutture possono essere concatenate una di seguito all’altra, oppure nidificate una dentro l’altra, ma non possono

essere intrecciate o accavallate tra loro.

Teorema di Jacopini e Böhm

Informatica – Prof. Nicola BRUNO

Esempio 1Problema: Stampare i primi 10 multipli di x.Soluzione: un solo dato in input: x; una costante del problema: il numero di multipli da stampare, 10.

Iniziando dal numero x letto in input, per 10 volte verrà calcolato e stampato il multiplo di x, moltiplicando x per una variabile i il cui valore verrà

incrementato di una unità ad ogni passo, da 1 fino a 10.

Algoritmo “multipli”;x: variabile input;i: variabile intermedia (contatore);y: variabile output (risultato);

1. leggi (x);2. i ←←←← 1 (assegna il valore 1 alla variabile i);3. y ←←←← x * i;4. stampa (y);5. i ←←←← i + 1 (calcola i+1);6. se i � 10 allora vai al passo 3 altrimenti prosegui;7. Stop.

Informatica – Prof. Nicola BRUNO

Tabella di simulazioneL’esecuzione di un algoritmo può essere simulata mediante una tabella di simulazione

contenente i valori assunti dalle variabili, man mano che l’algoritmo procede; ogni nuova attribuzione cancella quella precedente.

Problema: Calcolare il punteggio totale attribuito da una giuria di 10 elementi ad un iscritto ad una gara.

Algoritmo SOMMA;variabili

i,s,x: numeri interi;begini � 1;s � 0;

repeatleggi (x);s � s + N;i � i + 1;

until i <= 10scrivi (s)

end

5309T4

..

4

3

2

1

i

....T5…

216T3

157T2

88T1

0T0

sxTempoTabella di simulazione

Informatica – Prof. Nicola BRUNO

Test 1

Problema: Letti in input 2 numeri, stampare il massimo.

Informatica – Prof. Nicola BRUNO

Test 2

Problema: Letti in input 3 numeri, stampare il massimo.

Informatica – Prof. Nicola BRUNO

Algoritmo di EuclideEsempio di algoritmo in ambito matematico: Calcolare il massimo

comun divisore tra due interi positivi (Algoritmo di Euclide).

Algoritmo MCDvariabili: x, y, r1) leggi (x, y)2) r ←←←← resto della divisione di x per y3) se r ≠≠≠≠ 0 allora

x ←←←← yy ←←←← rvai al passo 2

altrimenti prosegui4) scrivi (y)5) stop

2r

T2

T1

68T0

yxTempo

Tabella di simulazione

26 02

Informatica – Prof. Nicola BRUNO

Algoritmo di Euclide

Flow chart

Start

leggi (x,y)

r ←←←← resto (x/y)

r ≠≠≠≠ 0 x ←←←← yy ←←←← r

No Siscrivi (y)

Stop

Informatica – Prof. Nicola BRUNO

EsempioProblema: Dato un numero intero input, scrivi il precedente e il successivo fino a quando leggi il numero 0.

input (x)while x � 0 dobegin

p ���� x – 1s ���� x + 1output (p,s)input (x)

end

Start

input (x)

x = 0p ←←←← x - 1s ←←←← x + 1

No

Si

Stopoutput (p,s)

input (x)

Informatica – Prof. Nicola BRUNO

Test 1

Scrivi l’algoritmo (pseudocodifica,flow-chart e tabella di simulazione) del

seguente problema:dati in input due numeri qualsiasi,

calcolare il prodotto e visualizzare in output il messaggio “Errore” se il risultato è uguale a 0; il risultato

stesso altrimenti.

Algoritmo PRODOTTOdati input: x, ydati output: p, “Errore”1. leggi (x,y)2. p ←←←← x * y3. se p = 0 allora scrivi (“Errore”)

altrimenti scrivi (p)

Start

leggi (x,y)

p = 0

p ←←←← x * y

NoSi

Stop

Scrivi(“Errore”)

Scrivi(p)

Informatica – Prof. Nicola BRUNO

Test 2

Scrivi l’algoritmo (pseudocodifica, flow-chart e tabella di simulazione) del seguente problema:

dati in input due numeri qualsiasi, calcolare la somma e visualizzare in output il messaggio “Errore” se la somma è <100;

il messaggio “Esatto” altrimenti.

Informatica – Prof. Nicola BRUNO

Test 3

Scrivi l’algoritmo (pseudocodifica, flow-chart e tabella di simulazione) del seguente problema:

dati in input due numeri qualsiasi, calcolare e visualizzare in output il loro prodotto e la loro divisione.

Informatica – Prof. Nicola BRUNO

ISTRUZIONI1. La sequenza è la più semplice fra le strutture di controllo ed indica l’ordine in cui devono essere eseguite determinate istruzioni.

Sintassi:begin

istruzione_1istruzione_2…….istruzione_n

end

Informatica – Prof. Nicola BRUNO

2. La selezione può essere di due tipi.a) La selezione binaria consente di effettuare una scelta fra due possibilitàalternative. Se le istruzioni da eseguire sono più di una, allora è necessario racchiudere tali istruzioni tra le parolebegin-end.

SELEZIONE

Sintassi 1:

if condizione then istruzione_1else istruzione_2

endif

Sintassi 2:

if condizione then begin

istruzione_1….istruzione_n

endelse

beginistruzione_1….istruzione_nend

endif

Informatica – Prof. Nicola BRUNO

b) La selezione multipla consente di effettuare una scelta fra piùpossibilità alternative.Se le istruzioni da eseguire sono piùdi una, allora è necessario racchiudere tali istruzioni tra le parole begin-end.Se nessuna condizione 1..n viene soddisfatta, si può decidere di effettuare in alternativa alla istruzione_m.Se questa parte viene omessa, e nessuna condizione 1..n viene soddisfatta, si passa invece alla istruzione_k.

Selezione multipla

Sintassi:do casecase condizione_1;

istruzione_1case condizione_2;

istruzione_2….case condizione_n;

istruzione_notherwise

istruzione_mendcase

istruzione_k

Informatica – Prof. Nicola BRUNO

Esempio

Problema: Assegnare un giudizio differente in base al seguente punteggio:

Punteggio Pmaggiore o uguale a 10uguale a 9uguale a 8minore o uguale a 7

GiudizioOttimoBuonoSufficiente Insufficiente

do casecase P � 10; output (“Ottimo”)case P = 9; output (“Buono”)case P = 8; output (“Sufficiente”)otherwise

output (“Insufficiente”)endcase

Informatica – Prof. Nicola BRUNO

ITERAZIONE3) L’iterazione viene utilizzata quando un gruppo di istruzioni deve essere ripetuto più volte, fino a quando non si verifica una determinata condizione.

Vi sono tre tipi di iterazione.

a) L’iterazione enumerativa consente la ripetizione di un gruppo di istruzioni un numero prefissato di volte.

Sintassi:

for variabile � valore_iniziale tovalore_finale dobegin

istruzione_1………istruzione_n

end

Esempio:Somma i primi 10 numeri interi a partire da 1.

s � 0for i � 1 to 10 do

begins � s + i

end

Informatica – Prof. Nicola BRUNO

Iterazione per falsob) L’iterazione per falso consente la ripetizione ciclica di un gruppo di istruzioni comprese tra le parole repeat-until finché la condizione è falsa; si esce dal ciclo appena la condizione diventa vera.A differenza della iterazione enumerativa, non si sa a priori quante volte vengono eseguite le istruzioni del ciclo.

Sintassi:

repeatistruzione_1…istruzione_n

until condizione

Esempio:Leggi la variabile numerica x fino a quando x è maggiore di zero.

repeatinput(x)

until x > 0

// leggi fino a quando x � 0, ed esci dal ciclo quando x > 0

Informatica – Prof. Nicola BRUNO

Iterazione per veroc) L’iterazione per vero consente la ripetizione ciclica di un gruppo di istruzioni comprese tra le parole begin-end finché la condizione è vera; si esce dal ciclo appena la condizione diventa falsa.Anche in questo caso, non si sa a priori quante volte vengono eseguite le istruzioni del ciclo.

Sintassi:

while condizione dobegin

istruzione_1………istruzione_n

end

Esempio.Somma tutti i numeri input, fino a quando viene immesso come dato il numero zero.

s � 0input (x)while x � 0 dobegin

s � s + xinput(x)

endoutput (s)

// leggi fino a quando x�0, ed esci dal ciclo quando x=0

Informatica – Prof. Nicola BRUNO

COMPLESSITÀ COMPUTAZIONALE

Risolvere un problema non significa semplicemente trovare la soluzione, ma definire un metodo di risoluzione da applicare ripetutamente, al variare dei dati del problema.

Non esiste un metodo universale che sia in grado di risolvere qualsiasi problema.

I metodi di risoluzione devono essere di natura algoritmica, cioè devono operare entro un insieme strutturato di regoleformalmente definite, in modo da arrivare alla soluzione automaticamente.

Ogni algoritmo, per risolvere il problema associato, richiede risorse di tempo e di spazio il cui ammontare prende il nome di complessità computazionale dell'algoritmo o, più semplicemente, complessità.

Informatica – Prof. Nicola BRUNO

Teoria della complessità computazionale

La teoria della complessità computazionale si occupa della valutazione della complessità di un algoritmo.

In generale, la complessità non è dovuta alle caratteristiche peculiari di un certo algoritmo, ma alle caratteristiche intrinseche al problema per cui l’algoritmo è progettato. Si parla allora di complessità computazionale di un problema.

Informatica – Prof. Nicola BRUNO

Un algoritmo può essere definito, in generale, come una particolare funzione che trasforma dati di ingresso, in dati di uscita.

La trasformazione deve avvenire secondo un schema prefissato di operazioni tratte da un insieme finito e codificato, come avviene con un algoritmo.

Nel modello sequenziale di algoritmo le operazioni vengono eseguite una alla volta. Un algoritmo deve necessariamente terminare, cioèrichiede un numero finito di operazioni, per ogni possibile insieme di dati di ingresso.

Complessità

La qualità di un algoritmo si valuta in base alla sua complessità, ovvero analizzando le risorse utilizzate dall’algoritmo per risolvere un problema, in funzione della dimensione e del tipo dei dati input.

Informatica – Prof. Nicola BRUNO

1) TempoIl tempo di esecuzione dell'algoritmo rappresenta il tempo impiegato per completare l’algoritmo e giungere alla soluzione del problema, ovvero il numero di operazioni eseguite dall’inizio della lettura dei dati di ingresso, alla fine della scrittura dei dati di uscita.

Risorse

2) SpazioLo spazio usato durante l’esecuzione dall'algoritmo, rappresenta la massima quantità di memoria interna richiesta per immagazzinare i risultati parziali (variabili utilizzate).Quando le variabili non servono più, possono essere cancellate e la memoria resa nuovamente disponibile. Per convenzione, non si tiene conto dello spazio necessario ai dati di ingresso e di uscita, che rappresentano la memoria esterna.

Si assume la definizione di tempo unitario per ogni operazione (secondo una unità di misura che non è importante specificare).

Informatica – Prof. Nicola BRUNO

1) TempoIndichiamo con T(i) il tempo di esecuzione dell'algoritmo, con dati di ingresso i.

Efficienza

2) SpazioIndichiamo con S(i) lo spazio usato in esecuzione dall'algoritmo, con dati di ingresso i.

Siccome ogni operazione di scrittura sulla memoria interna rappresenta di fatto una operazione dell’algoritmo, allora si

ha:

T(i) ≥≥≥≥ S(i)Ovviamente, per elaborare una quantità maggiore di dati, un

algoritmo richiede maggiori risorse.La nozione di efficienza di un algoritmo viene quindi misurata

facendo riferimento al modo in cui crescono T(i) e S(i) al crescere di i.

Informatica – Prof. Nicola BRUNO

1) Caso peggiore.La misura del caso peggiore tiene conto del peggior comportamento dell’algoritmo, limitatamente a input di lunghezza fissata n.Questo tipo di misura sull’algoritmo fornisce una garanzia di qualitàperché per definizione non potrà mai avvenire che l’algoritmo richieda tempo superiore a T(n) oppure spazio superiore a S(n).In generale, se un algoritmo deve essere ripetuto molte volte, si fa riferimento alla misura di caso medio.

Casi

La misura più importante, e quindi quella a cui si fa normalmente riferimento, è quella di caso peggiore.

2) Caso migliore.La misura di caso migliore tiene conto del miglior comportamento dell’algoritmo, limitatamente a input di lunghezza fissata n.Questa misura è meno importante della prima, ma serve per capire quali differenze un algoritmo può presentare di fronte a dati diversi di input.

Informatica – Prof. Nicola BRUNO

Classi di Complessità

In base alla loro complessità temporale, gli algoritmi vengono divisi in due grandi classi.

1) un algoritmo si dice polinomiale se esiste un polinomio p da associare alla complessità, che si indica con O(p);2) si dice non polinomiale, altrimenti.

Gli algoritmi polinomiali si possono classificare ulteriormente nelle seguenti classi di complessità, per ogni input di lunghezza fissata n:

1. Costanti O(1) per ogni n;2. Logaritmici O(log n);3. Lineari O(n);4. Quadratici O(n2);5. Esponenziali O(2nC), C costante;

6. Illimitati O(∞∞∞∞).

Informatica – Prof. Nicola BRUNO

Considerazione praticaLa complessità di un algoritmo rappresenta la più piccola classe di complessità a cui appartiene, con riferimento alla risorsa tempo.La distinzione operata fra algoritmi polinomiali e non polinomialiformalizza il concetto di algoritmo efficiente.

In generale, una limitazione polinomiale nel tempo èsinonimo di efficienza.Ad esempio, se n = 10.000, un algoritmo di complessitàO(n5) non è utilizzabile, mentre un altro di complessitàO(20,01 n) non crea problemi.

Esiste una grande differenza fra O(log n) e O(n5).

Considerazione pratica: algoritmi polinomiali con gradi molto elevati (ad es. 20) non sono stati probabilmente mai proposti; la maggior parte degli algoritmi polinomiali di uso corrente ha un grado non superiore a tre.

Informatica – Prof. Nicola BRUNO

VelocizzazioneDomanda: perché perdere tempo nello studio di algoritmi (software) sempre più efficienti (veloci) e non dedicarsi invece a migliorare (velocizzare) la tecnologia (hardware)?Altra considerazione pratica: l’impatto sulle prestazioni di un algoritmo dovuto ad un miglioramento tecnologico che acceleri di un fattore (ad esempio 1.000) l'esecuzione di un’operazione.

Nello stesso intervallo di tempo, si risolvono problemi 1.000 volte più grandi con un algoritmo lineare, 32 volte più grandi con uno quadratico(322=1.024), e 10 volte più grandi con uno cubico.

Però se l’algoritmo ha una complessità O(2n), aumentare del fattore 1000 significa passare a 1000*2n, ovvero a 210*2n ovvero a 2n+10 ovvero si passa da n a n+10, con un semplice fattore additivo anziché moltiplicativo.In altre parole, la tecnologia non sarà mai d’aiuto per rendere accettabile un algoritmo con elevata complessità temporale.

Informatica – Prof. Nicola BRUNO

Esempi di problemi:

Ricerca di un nome all’interno di un elenco non ordinato, contenente n nominativi.

4Bianchin…

3Verdi2Bruni1Rossi Complessità di tempo:

Caso migliore: O(1)

Caso peggiore: O(n)

Informatica – Prof. Nicola BRUNO

Esempi di problemi:

Ricerca di un nome all’interno di un elenco ordinato, contenente nnominativi.

4Verdin…

3Rossi2Bruni1Bianchi Complessità di tempo:

Caso migliore: O(1)

Caso peggiore: O(log n)Esempio: n=16

1) Confronta il nome con l’indice 8;

2) Confronta con l’indice 4;

3) Confronta con l’indice 2;

4) Confronta con l’indice 1. Stop

Caso peggiore: 4 confronti, ovvero log 16 (24=16)