Upload
buidang
View
223
Download
1
Embed Size (px)
Citation preview
Problemi, Algoritmi e Programmi1 Fondamenti di Informatica 1
Fondamenti di Informatica 1
Alfonso Miola
Problemi, Algoritmi e Programmi
Dispensa 2Gennaio 2001
Problemi, Algoritmi e Programmi2 Fondamenti di Informatica 1
Contenuti
• Cosa è un problema• Esempio di problema: il MCD• Cosa è un algoritmo• L’algoritmo di Euclide• Problemi decidibili e non• Esempio del prodotto di interi• Correttezza ed efficienza• Programmazione strutturata
Problemi, Algoritmi e Programmi3 Fondamenti di Informatica 1
Premessa
• Vengono introdotti alcuni concetti basedell’Informatica: Problema, Algoritmo,Programma, Processo
• In modo sintetico, attraverso semplici esempi,sono presentati i contenuti principali del corsoche verranno poi ripresi in maniera più estesa
• In particolare ci si concentra su aspetti dicorrettezza e di efficienza della soluzioneautomatica di problemi, anche attraverso l’usodi metodi di programmazione strutturata
Problemi, Algoritmi e Programmi4 Fondamenti di Informatica 1
Problema
• Problemi di interesse sono quelli per cui è possibile unaprecisa formalizzazione, in un qualche formalismoespressivo, ad esempio quello offerto dalla matematica.
• Esistono problemi che sono tanto ben esprimibili ecomprensibili da poterne definire una strategia disoluzione basata sull’applicazione sistematica di benprecise regole operative che consente di ottenere irisultati attesi a partire dai dati disponibili.
• In molti di questi casi è possibile affidare l’applicazionedelle regole di soluzione ad un esecutore specializzato ingrado di svolgere (più o meno) rapidamente i compitiaffidatigli.
Problemi, Algoritmi e Programmi5 Fondamenti di Informatica 1
Un esempio
“Determinare il Massimo Comun Divisoredi due numeri interi positivi”
Enunciato informale del problema in linguaggionaturale
Problemi, Algoritmi e Programmi6 Fondamenti di Informatica 1
Un esempio . . .
Determinare z = MCD (x , y)
dove x, y, z ∈∈∈∈ N+ , x > y
Formalizzazione del problema in linguaggio naturale ematematico, in cui compaiono i simboli x, y, e z dainterpretare come oggetti appartenenti al dominio N+ deinumeri naturali positivi e il simbolo MCD da interpretarecome la funzione matematica Massimo Comun Divisore
Problemi, Algoritmi e Programmi7 Fondamenti di Informatica 1
Massimo Comun Divisore
MCD (x , y) = max ( D(x) ∩ ∩ ∩ ∩ D(y) )
D(x) = { d ∈ Ν∈ Ν∈ Ν∈ Ν++++ | ∃∃∃∃ q ∈ Ν , ∈ Ν , ∈ Ν , ∈ Ν , x = d . q }D(y) = { d ∈ Ν∈ Ν∈ Ν∈ Ν++++ | ∃∃∃∃ q ∈ Ν ,∈ Ν ,∈ Ν ,∈ Ν , y = d . q }
Definizione matematica del MCD
Problemi, Algoritmi e Programmi8 Fondamenti di Informatica 1
Massimo Comun Divisore . . .
Soluzione 1Applico la definizione matematica:• calcolo i due insiemi Dx e Dy dei divisori
di x e di y, rispettivamente• costruisco l’insieme intersezione di Dx e
Dy• determino il valore massimo dell’insieme
intersezione
Problemi, Algoritmi e Programmi9 Fondamenti di Informatica 1
Oppure . . .
Soluzione 2• Individuo il valore m minimo tra x e y• Verifico se m divide sia x sia y; se sì
allora m è il MCD(x,y), e ho finito• Decremento m di 1 e ripeto il passo
precedente, al più fino al valore m = 1Devo quindi eseguire un numero di divisioni
al più pari a 2m
Problemi, Algoritmi e Programmi10 Fondamenti di Informatica 1
Oppure . . .
Soluzione 3Cerco altre proprietà del MCD . . .
Siano x, y, r ∈ Ν∈ Ν∈ Ν∈ Ν++++, q ∈ Ν. ∈ Ν. ∈ Ν. ∈ Ν. Se x = q . y + r allora
D(x) ∩ ∩ ∩ ∩ D(y) = D(y) ∩ ∩ ∩ ∩ D(r)
Teorema (Proprietà) del MCD
Problemi, Algoritmi e Programmi11 Fondamenti di Informatica 1
Massimo Comun Divisore ...
Sulla base di questa proprietà si può definire lasequenza di regole da applicare per ottenere ilMCD di due qualsiasi numeri naturali positivix e y:
• r = Mod (x , y) (Mod è la divisione con resto)
• se r = 0 allora y è il MCD(x, y), altrimentiil problema si riconduce al più sempliceproblema che è quello di ottenereMCD(y, r)
Problemi, Algoritmi e Programmi12 Fondamenti di Informatica 1
Massimo Comun Divisore ...
Tale sequenza di regole rappresenta unmetodo risolutivo del problema posto,detto Algoritmo, nel caso specifico questoè noto come Algoritmo di Euclide (AE)
Ad esempio il calcolo di MCD (187,34) = 17procede così:
187 = 5 34 + 17 (17 = Mod (187,34) )34 = 2 17 + 0 (0 = Mod (34,17) )
Problemi, Algoritmi e Programmi13 Fondamenti di Informatica 1
Rappresentazione e interpretazione
Si noti che le regole dell’algoritmo AE sonoin effetti applicate su possibilirappresentazioni X, Y, e Z dei numeriinteri x, y e z (oggetti astratti) che sono leloro interpretazioni rispettive
Una rappresentazione è ovviamente quellanel sistema di numerazione arabodecimale, come nell’esempio
Problemi, Algoritmi e Programmi14 Fondamenti di Informatica 1
X = R(x) , Y = R(y) , Z = R(z)x = I (X) , y = I (Y) , z = I (Z)
x,y zMCD
RRRR IIII IIII RRRR
AE
X,Y Z
Cioè . . .
Problemi, Algoritmi e Programmi15 Fondamenti di Informatica 1
AE ( R(x) , R(y) ) = R ( MCD (x , y) )I ( AE (X , Y) ) = MCD (I(X) , I(Y) )
x,y zMCD
RRRR IIII IIII RRRR
AE
X,Y Z
Cioè ancora . . .
Problemi, Algoritmi e Programmi16 Fondamenti di Informatica 1
Algoritmo
Procedimento risolutivo di un problemaInsieme di regole che, eseguite
ordinatamente, permettono di ottenere irisultati del problema a partire dai dati adisposizione
Perché un insieme di regole possaconsiderarsi un algoritmo deve rispettarealcune proprietà . . .
Problemi, Algoritmi e Programmi17 Fondamenti di Informatica 1
Proprietà di un algoritmo
Non ambiguità - Le istruzioni devono essereunivocamente interpretabili dall'esecutoredell'algoritmo (nel seguito l'esecutore saràl'elaboratore, ma il problema si pone anche peresecutori umani)
Eseguibilità - L'esecutore deve essere in grado,con le risorse a disposizione, di eseguire ogniistruzione, ed in tempo finito
Finitezza - L'esecuzione dell'algoritmo deveterminare in un tempo finito per ogni insiemedi valori di ingresso
Problemi, Algoritmi e Programmi18 Fondamenti di Informatica 1
Problemi decidibili
• Dati 2 numeri, calcolarne la somma• Dati n numeri, calcolarne la somma• Dato un elenco nomi/numeri telefonico,
trovare il numero telefonico di una datapersona
• Consultare una carta geografica• Progettare una rete elettrica / un ponte
Problemi, Algoritmi e Programmi19 Fondamenti di Informatica 1
Problemi non decidibili
• Decidere se f(x) è una funzione costante
• Determinare il cambio Euro / Dollaro al1/1/2020
Problemi, Algoritmi e Programmi20 Fondamenti di Informatica 1
Efficienza temporale
Problema:“Ricerca il valore massimo in un insieme
numerico”{ a1, a2, ............., an }
Definizione matematica:
Esiste un indice i tale che ai > aj , per j= 1,2,.....,n
Problemi, Algoritmi e Programmi21 Fondamenti di Informatica 1
Efficienza temporale . . .
Soluzione 1• Applico la definizione matematica e
verifico la proprietà per ogni valore di ida 1 a n
• Devo quindi eseguire un numero diconfronti pari a
(n-1)2 = O(n2)cioè dell’ordine di n2
Problemi, Algoritmi e Programmi22 Fondamenti di Informatica 1
Efficienza temporale . . .
Soluzione 2• Assumo a1 come massimo (provvisorio)• Confronto con il successivo e decido il
nuovo massimo (provvisorio); e così viadi seguito . . .
• Devo quindi eseguire un numero diconfronti pari a
n - 1 = O(n)cioè dell’ordine di n
Problemi, Algoritmi e Programmi23 Fondamenti di Informatica 1
Efficienza spaziale
Supponiamo di avere una matrice di n x n numeriinteri, di cui solo k sono non nulli,
a11 a12 . . . a1n
a21 a22 . . . a2n
. . . . . . . . . . .an1 an2 . . . ann
Vogliamo memorizzarla in modo efficiente
Problemi, Algoritmi e Programmi24 Fondamenti di Informatica 1
Efficienza spaziale . . .
Soluzione 1Memorizziamo tutti gli elementi, uno dopo l’altro,
riga dopo riga, occupando così n2 celle dimemoria
Soluzione 2
Memorizziamo le dimensioni della matrice e ilvalore dominante; quindi memorizziamo solo ivalori dei k elementi non nulli con le rispettiveposizioni di riga e colonna, occupando quindi3(k + 1) celle di memoria
Problemi, Algoritmi e Programmi25 Fondamenti di Informatica 1
Soluzioni effettive
ATTENZIONE !!!
Esistono dei problemi che, pur rientrandonel mondo del decidibile, per i qualiquindi è possibile individuare unalgoritmo risolutivo, ammettono soluzioninon effettive cioè con un costo temporalee/o spaziale insostenibile in pratica
Problemi, Algoritmi e Programmi26 Fondamenti di Informatica 1
Un esempio
Supponiamo di dover assemblare in orbita un apparatocostituito da n parti componenti a1, a2, ............., an dipeso rispettivo p1, p2, ............., pn , potendo usufruire dimissili con portata massima P
Supponendo che pi < P e che ΣΣΣΣ pi >> P, si tratta diminimizzare il numero di missioni da compiere
Prendiamo il caso n = 50, dobbiamo verificare il pesototale trasportabile in una missione sommando i pesidelle parti componenti a due a due, a tre a tre, e così via
Compiamo quindi 250 operazioni di confronto con P e seciascuna costa un ms il tempo totale sarà di 40.000 anni
COSTO ESPONENZIALE
Problemi, Algoritmi e Programmi27 Fondamenti di Informatica 1
Riassumendo
Per delegare ad un esecutore (automatico) lasoluzione di un problema, a partire dallastruttura astratta di appartenenza degli oggettida trattare (manipolare), si deve perciò:
• individuare una rappresentazione dellastruttura: degli oggetti e delle operazioni
• individuare una descrizione dell'algoritmo,come sequenza di passi elementari
Problemi, Algoritmi e Programmi28 Fondamenti di Informatica 1
Rappresentazione
Per tali rappresentazioni si fa uso di unopportuno linguaggio
Nel caso di un esecutore automatico (elaboratore)si fa uso di un adeguato linguaggio diprogrammazione composto di regolecomprensibili sia per noi che per l'elaboratore
Problemi, Algoritmi e Programmi29 Fondamenti di Informatica 1
Definizioni
• dati di ingresso (INPUT) - le rappresentazioni (forniteall'elaboratore) delle informazioni a disposizione
• programma - la rappresentazione dell'algoritmo nellinguaggio di programmazione scelto (un programmasarà costituito da un insieme di istruzioni)
• dati di uscita (OUTPUT) - le rappresentazioni fornitedall'elaboratore al termine della esecuzione delprogramma
PROBLEMA ALGORITMO
ALGORITMO PROGRAMMA
Problemi, Algoritmi e Programmi30 Fondamenti di Informatica 1
Elaboratore
• L’elaboratore è un esecutore di operazioni insequenza che trasformano input in output
• Funziona secondo regole precise e conosce unnumero (molto) limitato di comandi
• Esegue ciascun comando in modo univoco e intempo finito
• Esegue azioni elementari (in numero limitato)su dati (che sono rappresentazioni di oggettiastratti) eseguendo istruzioni
• Le azioni procurano effetti di cambiamento distato
Problemi, Algoritmi e Programmi31 Fondamenti di Informatica 1
Programma e processo
• Un programma è una sequenza diistruzioni
• Un processo (di esecuzione di unprogramma) è una sequenza di azioni(che sono l’esecuzione delle istruzioni delprogramma)
• Un processo fa passare l’elaboratore dauno stato iniziale ad uno stato finale
Problemi, Algoritmi e Programmi32 Fondamenti di Informatica 1
Sommatore
+13
51
64
13
51
64
13
51
64z
y
x
Problemi, Algoritmi e Programmi33 Fondamenti di Informatica 1
Diagramma a blocchi
input(x,y)
z := x + y
output(z)
Problemi, Algoritmi e Programmi34 Fondamenti di Informatica 1
Cosa è una variabile
Dal punto di vista logico una variabile è unsimbolo che identifica la rappresentazione diun oggetto di interesse (di tipo fissato)
Dal punto di vista fisico una variabile può essereintesa come un contenitore per valori di unoggetto di interesse (di tipo fissato)
Alle variabili assegno quindi valori costanti
alfa = 137
oppure i valori di un’altra variabile
beta = alfa
Problemi, Algoritmi e Programmi35 Fondamenti di Informatica 1
Un altro problema
Determinare il prodotto di due numeriinteri positivi
Enunciato informale in linguaggio naturale
Determinare Z = X•Y, dove X, Y, Z ∈ Ν∈ Ν∈ Ν∈ Ν++++
Formalizzazione in linguaggio naturale e matematico
Problemi, Algoritmi e Programmi36 Fondamenti di Informatica 1
Un altro problema . . .
Se l’esecutore scelto per la soluzione del problemaopera sulla seguente rappresentazione dellastruttura matematica degli oggetti da trattare:
NATNATNATNAT = < Ν= < Ν= < Ν= < Ν10 10 10 10 , + , , + , , + , , + , −−−− , ∗ , < , = , 0 , 1 >, ∗ , < , = , 0 , 1 >, ∗ , < , = , 0 , 1 >, ∗ , < , = , 0 , 1 >allora il problema e’ risolto dall’esecuzione della
seguente istruzionez = x * y
x = Rapp (X) , y = Rapp (Y) , z = Rapp (Z)
Problemi, Algoritmi e Programmi37 Fondamenti di Informatica 1
Un altro problema . . .
Qualora invece l’esecutore scelto per la soluzionedel problema operi su una diversa (menoespressiva e potente) rappresentazione dellastruttura degli oggetti da trattare, quale:
NATNATNATNAT = < Ν= < Ν= < Ν= < Ν10 10 10 10 , + , , + , , + , , + , −−−− , < , = , 0 , 1 >, < , = , 0 , 1 >, < , = , 0 , 1 >, < , = , 0 , 1 >allora e’ necessario definire un algoritmo
risolutivo basato sull’applicazione di unaopportuna sequenza di operazioni elementaritra quelle possibili (eseguibili dall’esecutore)
Problemi, Algoritmi e Programmi38 Fondamenti di Informatica 1
Un altro problema . . .
Teorema:
Siano x, y ∈ Ν∈ Ν∈ Ν∈ Ν++++
Se y = 1 allora x •••• y = xAltrimenti x •••• y = x + ( x •••• (y - 1) )
Cioè per avere il valore z del prodotto di x e yposso sommare x a sé stesso tante voltequanto il valore di y
Problemi, Algoritmi e Programmi39 Fondamenti di Informatica 1
In pratica . . .
Inizialmente il valore di z è 0, quindi,verificando passo dopo passo che il valoredi y resti diverso da 0, ripeto queste dueoperazioni
• incremento il valore corrente di z con x• decremento di 1 il valore di y
Problemi, Algoritmi e Programmi40 Fondamenti di Informatica 1
Algoritmo per il prodotto
1. z = 0
2. mentre y > > > > 02.1. incrementa z di x2.2. decrementa y di 1
Descrizione dell’algoritmo
Problemi, Algoritmi e Programmi41 Fondamenti di Informatica 1
Pseudo-programma per il prodotto
Programma: ProdottoVariabili: integer x, y;Istruzioni: input (x, y);
z := 0;while (y > 0) {
z := z + x;y := y - 1;
}output (z);
Descrizione dell’algoritmo in un linguaggio (di programmazione)
Problemi, Algoritmi e Programmi42 Fondamenti di Informatica 1
Diagramma a blocchi
input (x,y)
z := 0
z := z + x
y := y - 1
output(z)y > 0No
Si
Problemi, Algoritmi e Programmi43 Fondamenti di Informatica 1
Traccia del programma
X Y Z
1. 17 32. 17 3 0
3. 17 3 0
4. 17 3 175. 17 2 17
3. 17 2 17
4. 17 2 345. 17 1 34
3. 17 1 34
4. 17 1 515. 17 0 51
3. 17 0 51
6. 17 0 51
Problemi, Algoritmi e Programmi44 Fondamenti di Informatica 1
Una prima riflessione
Si dovrebbe poter verificare se il risultato ècorretto, cioè se il valore finale di z sia omeno effettivamente il prodotto dei valoridi x e di y
Al termine dell’elaborazione tuttavia ilvalore di y è nullo, si è cioè perduto il suovalore iniziale, determinando unaimpossibilità di verifica del risultato
Si può ovviare a questa carenza !!!
Problemi, Algoritmi e Programmi45 Fondamenti di Informatica 1
Diagramma a blocchi
input (x,y)
z := 0; m := x; n := y;
z := z + m
n := n - 1
output(z)n > 0No
Si
Problemi, Algoritmi e Programmi46 Fondamenti di Informatica 1
Correttezza
Prodottointeger x, y, m, n;input (x, y);m := x;n := y;z := 0;while (n > 0) {
z := z + m;n := n - 1:
}output (z);
Problemi, Algoritmi e Programmi47 Fondamenti di Informatica 1
Correttezza . . .
X Y M N Z
1. 17 3 17 32. 17 3 17 3 0 x*y = z+m*n
3. 17 3 17 3 0
4. 17 3 17 3 175. 17 3 17 2 17 x*y = z+m*n
3. 17 3 17 2 17
4. 17 3 17 2 345. 17 3 17 1 34 x*y = z+m*n
3. 17 3 17 1 34
4. 17 3 17 1 515. 17 3 17 0 51 x*y = z+m*n
3. 17 3 17 0 51
6. 17 3 17 0 51 x*y = z+m*n
Problemi, Algoritmi e Programmi48 Fondamenti di Informatica 1
Un’altra riflessione
In questo caso il problema della correttezzapuò essere gestito tenendo anche contodella possibilità di determinare la validitàdella seguente proprietà durantel’esecuzione del programma
x * y = z + m* nQuesto tipo di proprietà è detto
invariante di ciclo
Problemi, Algoritmi e Programmi49 Fondamenti di Informatica 1
Efficienza
Ragioniamo ora sugli aspetti di efficienzadella soluzione fin qui adottata
Il numero di addizioni complessive chevengono eseguite è pari ad y
Pensiamo allora al caso di moltiplicare 3per 17 utilizzando il nostro programma
Forse dobbiamo fare delle modifiche . . .
Problemi, Algoritmi e Programmi50 Fondamenti di Informatica 1
Diagramma a blocchi
input (x,y)
z := 0
m := x
n := y
m := y
x > y
n := x
Si No
Problemi, Algoritmi e Programmi51 Fondamenti di Informatica 1
. . . Continua
z := z + x
y := y - 1
output(z)y > 0No
Si
Problemi, Algoritmi e Programmi52 Fondamenti di Informatica 1
Efficienza
Prodottointeger x, y, m, n;input (x, y);if (x > y) {
m := x; n := y;} else {
m := y; n := x;};z := 0;while (n > 0) {
z := z + m;n := n - 1;
}output (z);
Problemi, Algoritmi e Programmi53 Fondamenti di Informatica 1
Tipi di istruzioni
• Input / Output
• Assegnazione
• Operazioni aritmetiche e logiche
• Controllo
a) Sequenza (Composizione)
b) Selezione (Alternativa )
c) Iterazione (Ciclo o Ripetizione)
Problemi, Algoritmi e Programmi54 Fondamenti di Informatica 1
Esempio prodottoProdotto
integer x, y, m, n;input (x, y);if ( x > y ) {
m := x; n := y;} else {
m := y; n := x;};z := 0;while ( n > 0 ) {
z := z + m;n := n - 1;
}output (z);
intestazione dichiarazioni input/output assegnazioneoper.arit. oper.log. selezione interazione
Problemi, Algoritmi e Programmi55 Fondamenti di Informatica 1
Strutture di controllo
Le strutture di controllo utilizzate nelnostro programma per il calcolo delprodotto di due numeri interi positivisono
• Sequenza• Alternativa• IterazioneRivediamole analiticamente attraverso
degli schemi diagrammatici
Problemi, Algoritmi e Programmi56 Fondamenti di Informatica 1
Sequenza
A
B
C
D
Problemi, Algoritmi e Programmi57 Fondamenti di Informatica 1
Alternativa
A B
PSi No
if condizione P istruzione A else istruzione B
Problemi, Algoritmi e Programmi58 Fondamenti di Informatica 1
Iterazione
A
PNo
Si
while condizione P istruzione A
Problemi, Algoritmi e Programmi59 Fondamenti di Informatica 1
Programmazione strutturata
Ciascuna delle strutture di controllo precedentigode della fondamentale proprietà di avere unflusso con una sola entrata ed una sola uscita;possiamo quindi concatenarle tra loro ancheannidandole a vari livelli
Qualsiasi programma può essere costruitoutilizzando esclusivamente questi tre tipi distrutture di controllo
Ovviamente c’è un teorema su tutto questoTeorema di Bohm-Iacopini
Problemi, Algoritmi e Programmi60 Fondamenti di Informatica 1
Riassumendo
Gli esempi introdotti sono stati volutamentesemplici ma ci consentono di trarre delleconclusioni generali
• Per ogni problema (decidibile) posso costruire,cioè sintetizzare, diversi algoritmi tra i qualisceglierò sulla base della loro efficienza
• Per ogni algoritmo posso sintetizzare diversiprogrammi tra i quali sceglierò sulla base dellaloro efficienza avendone evidentementeverificata la correttezza
Vedremo meglio cosa significa tutto questo esoprattutto come si fa
Problemi, Algoritmi e Programmi61 Fondamenti di Informatica 1
E ancora . . .
• Le soluzioni dei problemi le posso costruire(attraverso algoritmi e programmi) astraendoda ciò che conosco, ad esempio risolvo ilproblema del prodotto mediante l’iterazionedella somma
• Similmente posso risolvo il problemadell’elevamento a potenza intera mediantel’iterazione del prodotto
Attenzione !!!• Non è quasi mai vero che la prima soluzione sia
la migliore e soprattutto non pensiamo diautomatizzare ciò che faremmo a mano
Problemi, Algoritmi e Programmi62 Fondamenti di Informatica 1
E ancora . . .
Riflettiamo su questo problemaDati 100 numeri interi positivi di 4 cifre
ciascuno, è più semplice (più rapido)calcolare la loro somma oppuredeterminare tra loro il valore massimo?
E ancora . . .Se per verificare come stanno le cose mi
rivolgo ad un esecutore umano o ad unelaboratore ottengo la stessa risposta?