Slide 1 - Home di homes.di.unimi.it

annuncio pubblicitario
Corsi di Laurea in Biotecnologie
(primo anno interfacoltà)
Corso integrato di Matematica,
Informatica e Statistica
Informatica di base
Linea 1
Daniela Besozzi
Dipartimento di Informatica e Comunicazione
Università degli Studi di Milano
Seconda lezione:
I linguaggi di programmazione
e gli algoritmi
(capitoli 7 e 8)
Informatica di base – Linea 1
2
Prima Parte:
A che punto siamo arrivati?
“La lezione di settimana scorsa è stata
pesantissima: non mi ricordo nulla!”
Informatica di base – Linea 1
3
La volta scorsa
• Come funziona un computer?
– processore
– memoria
– programmi:
• serie di istruzioni elementari
• vengono eseguiti dal computer in linguaggio macchina
(istruzioni binarie)
Informatica di base – Linea 1
4
Seconda parte:
Come si scrivono i programmi?
“Non vorrà mica farci scrivere dei programmi
questa qua, vero?!”
Informatica di base – Linea 1
5
Linguaggio macchina
• Un programma è una serie di istruzioni
elementari codificate in linguaggio macchina
– la serie è molto lunga (anche milioni di righe di
codice) che prende il nome di oggetto binario
– ricordiamoci: un’istruzione è composta da 4 byte:
10011111 00101000 00000011 01110100
• Scrivere un programma direttamente in
linguaggio macchina è un processo:
– lungo e soggetto ad errori
– praticamente impossibile per programmi complessi!
Informatica di base – Linea 1
6
Assembly
• E’ possibile scrivere istruzioni più semplici:
ADD 2000 2040 2080
 usiamo lettere e numeri invece che bit
• Ognuna di queste istruzioni viene poi
trasformata in un’istruzione in linguaggio
macchina:
– il programma che effettua la trasformazione in
linguaggio macchina si chiama assembler
– il linguaggio si chiama assembly
Informatica di base – Linea 1
7
“Questo l’ho capito!”
• “Voi informatici siete degli
scansafatiche e, al posto che
scrivere direttamente in
linguaggio macchina (che è
l’unica cosa che i computer
possono eseguire), scrivete in
assembly (che è un po’ più
semplice) e poi chiedete
all’assembler di trasformarlo in
linguaggio macchina.”
Informatica di base – Linea 1
8
Tutto in assembly?
• Abbiamo detto:
– l’assembler trasforma un’istruzione scritta in
assembly in una istruzione scritta in linguaggio
macchina
– l’oggetto binario (l’insieme delle istruzioni di un
programma) è lungo anche milioni di istruzioni
• Quindi, per scrivere un programma, dovremmo
scrivere migliaia (anche milioni) di istruzioni in
assembly…
– E’ ancora troppo difficile!
Informatica di base – Linea 1
9
Linguaggi di programmazione di
alto livello
• I linguaggi di programmazione di alto livello
permettono di specificare istruzioni in
linguaggi più semplici per l’uomo:
– istruzioni più complesse rispetto alle istruzioni
elementari eseguite dal processore
– il compilatore trasforma ogni istruzione di un
programma di alto livello in una o più (spesso
molte di più!) istruzioni elementari
Informatica di base – Linea 1
10
Codifica del software
Informatica di base – Linea 1
11
Quanta automazione?
• Il passaggio dal codice di alto livello al codice
in linguaggio macchina è automatico
• E’ possibile semplificare ulteriormente la
creazione di codice?
– in parte sì (ad esempio, riutilizzo del codice)
– in buona parte no: è un’operazione che deve
essere svolta manualmente dai programmatori
Informatica di base – Linea 1
12
Quanto è difficile?
• E’ difficile scrivere codice di alto livello?
– molto meno che scrivere il codice in linguaggio
macchina 
– semplici programmi sono facili da scrivere
• un corso universitario è sufficiente per imparare le basi
– programmi complessi e/o di grandi dimensioni sono
più difficili da scrivere
• spesso contengono errori
Informatica di base – Linea 1
13
Errori dei programmi
Informatica di base – Linea 1
14
Errori dei programmi (2)
Informatica di base – Linea 1
15
Errori dei programmi (3)
Informatica di base – Linea 1
16
Terza Parte:
Cosa sono gli algoritmi
Non c’entrano nulla con i “logaritmi”!
Informatica di base – Linea 1
17
Gli “algoritmi” che conoscete già
• Serie di istruzioni finalizzate a conseguire uno
scopo:
– come si cucina una torta?
– come si fa una somma in colonna?
– come si monta un mobiletto?
• Queste sono procedure, non algoritmi, ora
scopriamo la differenza...
Informatica di base – Linea 1
18
Cos’è un algoritmo
• Procedimento che permette di risolvere un
dato problema attraverso una serie di passi
eseguiti in una sequenza specificata:
– assume in input delle informazioni
– produce in output delle informazioni
Problema
Input
Algoritmo
Informatica di base – Linea 1
Output
19
Algoritmo: 5 proprietà fondamentali
• Input specificato:
– bisogna specificare cosa l’algoritmo assume in
input
• Output specificato:
– quali risultati può generare l’algoritmo
• Determinatezza
• Efficacia
• Terminazione
Informatica di base – Linea 1
20
Determinatezza
• L’algoritmo specifica precisamente la sequenza
di operazioni
• Ogni operazione deve avere una sola
interpretazione possibile
• Esempio:
– “eseguire i passi necessari”  “eseguire i passi 1,
2, 5”
– “aggiungete un po’ di sale”  “aggiungete 4g di
sale”
Informatica di base – Linea 1
21
Efficacia (o calcolabilità)
• L’algoritmo deve poter essere eseguito in
modo meccanico
• Deve essere possibile calcolare ogni
operazione
• Ad ogni passo si ha la conoscenza:
– degli input dell’algoritmo
– dei risultati calcolati nei passi precedenti
Informatica di base – Linea 1
22
Terminazione
• Come potrebbe non terminare una
procedura?
– alcune operazioni possono essere ripetute
– se fossero ripetute all’infinito, la procedura
potrebbe non terminare
Informatica di base – Linea 1
23
Programmi e algoritmi
• Un programma è un algoritmo espresso in un
particolare linguaggio di programmazione:
– un programma implementa un algoritmo
– un algoritmo può essere implementato in diversi
modi
• Gli informatici studiano principalmente gli
algoritmi
– ma anche come possono essere implementati
Informatica di base – Linea 1
24
Programmi e algoritmi
Problema
possono esistere più algoritmi
per risolvere lo stesso problema
Input
Algoritmo
Output
un algoritmo può essere
implementato con linguaggi diversi
Programma
Informatica di base – Linea 1
25
Dal problema al programma
Espressi in
linguaggio
naturale
Problema
lavoro umano
Espressi in
linguaggi formali
Algoritmo
implementazione
(fatta dall’uomo)
Codice di
alto livello
Compilazione e
assemblamento
Codice
oggetto
26
Linguaggi naturali vs formali
• Linguaggi naturali:
– es: italiano, inglese, etc...
– sono soggetti ad interpretazioni
• Linguaggi formali:
– es: assembly, C++, Java (2 linguaggi di alto livello)
– sono univocamente interpretabili
Informatica di base – Linea 1
27
Terza Parte:
Pensiamo in modo algoritmico!
“Mmm, qua diventa difficile....”
Informatica di base – Linea 1
28
Prendiamo un problema reale
• Abbiamo dei CD in una scaffalatura
– uno spazio per ogni CD
• Ogni CD ha un prezzo
• Vogliamo mettere il CD con il prezzo minore
all’inizio della scaffalatura (a sinistra)
• Definiamo l’algoritmo MEAS (=Metti
Economico A Sinistra)
– MEAS è un nome inventato solo per questa
lezione!
Informatica di base – Linea 1
29
Input e Output
• Input: una sequenza di CD che riempie
completamente una scaffalatura orizzontale.
• Es:
5 2 4 1
• Output: al termine, i CD in input sono in un
ordine tale che il CD con il prezzo minore è
nella prima posizione a sinistra dello scaffale.
• Es:
1 5 4 2
Informatica di base – Linea 1
30
Procedura MEAS
1. Sia alfa la prima posizione a sinistra
2. Sia beta la posizione appena a destra di alfa
3. Se il CD in posizione beta costa meno del CD
in posizione alfa, allora scambia il CD in
posizione alfa con il CD in posizione beta
4. Se c’è almeno una posizione a destra di beta,
sposta beta a destra di una posizione e torna
al passo 3, altrimenti termina
Informatica di base – Linea 1
31
Esempio
5
• Input:
• Passo 1: 5
2
2
4
4
1
1
• Passo 2: 5
2
4
1
• Passo 3: 2
5
4
1
• Passo 4: 2
5
4
1 + torna al passo 3
alfa
alfa beta
alfa beta
alfa
beta
32
Esempio (cont.)
• Passo 3: 2
5
• Passo 4: 2
• Passo 3: 1
alfa
alfa
alfa
4
1
5
4
1 + torna al passo 3
5
4
beta
beta
2
beta
• Passo 4: termina.
Informatica di base – Linea 1
33
La procedura MEAS è un
algoritmo?
•
•
•
•
Input e un output sono definiti
Ogni istruzione è deterministica
Ogni istruzione può essere calcolata
L’algoritmo termina:
– perché ad ogni iterazione del ciclo (istruzioni 3 e
4) beta indica una posizione sempre più a destra e
le posizioni sono finite
• Dunque la procedura MEAS è un algoritmo
Informatica di base – Linea 1
34
Diagramma di flusso
• Serve per rappresentare in forma grafica i
passi di un algoritmo
– permette di visualizzare i blocchi di istruzioni, le
scelte, le iterazioni, …
• Serve ai programmatori, non ai computer…
Informatica di base – Linea 1
35
Diagramma di flusso
Inizio
Beta è la posizione
successiva
CD in pos.
beta costa
meno CD in
pos. alfa?
Alfa è la prima
posizione a sinistra
sì
Scambia CD in pos
alfa e beta
no
Sposta beta a
destra di una
posizione
sì
C’è almeno
una
posizione
dopo beta?
no
Termina
36
Informatica di base – Linea 1
37
Ordinamento dei CD
• Consideriamo un nuovo problema:
– vogliamo ordinare tutti i CD in base al loro prezzo
• Possiamo:
– trovare un metodo completamente nuovo
oppure
– estendere il metodo precedente
Informatica di base – Linea 1
38
Input e Output
• Input: una sequenza di CD che riempie
completamente una scaffalatura orizzontale.
• Es:
5 2 4 1
• Output: al termine tutti i CD in input sono
ordinati a seconda del loro prezzo, da sinistra
(il più basso) a destra (il più alto).
• Es:
1 2 4 5
Informatica di base – Linea 1
39
Idea!
• Eseguo MEAS una volta e
metto il CD più economico a sinistra
• Poi eseguo MEAS un’altra volta, considerando
tutte le posizioni tranne la prima (il più
economico è già nella prima posizione)
– metto il secondo più economico al secondo posto
• Continuo fino a quando non l’ho fatto per
tutti!
Informatica di base – Linea 1
40
Esempio
• Applico MEAS a 5
– ottengo:
1
2
5
4
4
1
2
• Nella prima posizione c’è il CD giusto
• Applico MEAS a
5 4 2
– ottengo:
2
5
4
• Nella seconda posizione c’è il CD giusto
• Applico MEAS a
5 4
– ottengo:
4
5
• Nella 3° e 4° posizione ci sono i CD giusti
Informatica di base – Linea 1
41
MEAS
Procedura OrdinaCD
1. Sia alfa la prima posizione a sinistra
2. Sia beta la posizione appena a destra di alfa
3. Se il CD in posizione beta costa meno del CD in
posizione alfa, allora scambia il CD il posizione alfa
con il CD in posizione beta
4. Se c’è almeno una posizione a destra di beta, sposta
beta a destra di una posizione e torna al passo 3
5. Se ci sono almeno due posizioni a destra di alfa,
sposta alfa alla posizione appena a destra di alfa e
torna al passo 2
6. Termina
Informatica di base – Linea 1
42
Per capire meglio
• Alfa è la posizione in cui vogliamo mettere il CD più
economico rimasto tra quelli da considerare
– all’inizio è la prima posizione, poi si sposta verso destra
• Ogni volta che cambio il valore di alfa, beta
“scorre” tutti quelli successivi alla ricerca del CD
più economico rimasto
Informatica di base – Linea 1
43
Prova tu!
• Inventati qualche input e prova ad “eseguire a
mano” l’algoritmo OrdinaCD:
– esempio:
7
2
9
3
4
• Prova a disegnare il diagramma di flusso di
OrdinaCD:
– parti dal diagramma di flusso di MEAS e
modificalo
Informatica di base – Linea 1
44
OrdinaCD è un algoritmo?
•
•
•
•
Input e un output sono definiti
Ogni istruzione è deterministica
Ogni istruzione può essere calcolata
L’algoritmo termina:
– perché beta indica una posizione sempre più
spostata a destra (e le posizioni sono finite!)
– ogni volta che beta arriva all’ultima posizione, alfa
viene spostato a destra (e le posizioni sono finite!)
• Dunque la procedura OrdinaCD è un algoritmo
Informatica di base – Linea 1
45
Quarta parte:
La complessità computazionale
“Ahi, se si chiama “complessità”,
tanto facile non deve essere…”
Informatica di base – Linea 1
46
Avremmo potuto usare un
algoritmo diverso?
• Certo, esistono diversi algoritmi diversi per
ordinare
• “Ma allora qual è il migliore?”
• Quello che utilizza meglio le risorse del
computer:
– tempo di calcolo
– spazio di memoria
Informatica di base – Linea 1
47
“Qua stai barando!”
• “Mi hai appena detto che un
algoritmo è una cosa teorica,
indipendente da come viene implementata ed
eseguita su un computer!”
• “Non mi puoi mica venire a dire che per
confrontare due algoritmi vai a guardare
quanto tempo ci mettono le loro
implementazioni (cioè i programmi) ad essere
eseguite su un computer!”
Informatica di base – Linea 1
48
La complessità computazionale
• E’ possibile misurare la complessità di un
algoritmo, indipendentemente dalla sua
implementazione o dal computer sul quale
viene eseguito
• Il tempo non è misurato in termini di secondi
ma in termini di altri parametri:
– nell’esempio dei CD, potremmo scegliere il
numero di scambi che dobbiamo fare
Informatica di base – Linea 1
49
Esempio: la complessità di MEAS
• Assumiamo che il nostro input sia composto
da n CD: quante volte eseguiamo il ciclo per
confrontare il prezzo di due CD?
• Soluzione: “circa” n
– “circa”: non ci interessa il risultato esatto (es: n-1
o 2n), ci interessa il comportamento asintotico
• Il tempo di calcolo di MEAS è lineare nella
dimensione dell’input:
– se raddoppia l’input (il numero di CD), raddoppia il
tempo necessario per calcolare l’output
Informatica di base – Linea 1
50
Esempio: la complessità di OrdinaCD
• Vai a rivedere i due algoritmi: quale sarà la
complessità di OrdinaCD?
• Per spostare alfa a destra di una posizione
bisogna eseguire MEAS una volta
– alfa deve essere spostato a destra n volte
• Soluzione: la complessità di ordinaCD è di n2
– se raddoppia il numero di CD in input, il tempo
necessario per completare l’algoritmo è di 4 volte
tanto
Informatica di base – Linea 1
51
“Non mi sembra così importante”
• “I computer sono così veloci, cosa vuoi che mi
interessi se un algoritmo risolve un problema
un po’ più velocemente di un altro?”
– esistono problemi così “difficili” che, se non si
trovano algoritmi efficienti, la loro
implementazione (cioè il programma) potrebbe
richiedere anni di esecuzione (anche migliaia di
anni!) prima di trovare la soluzione
Informatica di base – Linea 1
52
Un esempio (di bioinformatica)
• Problema: determinare l’avvolgimento di una
proteina a partire dalla sequenza di amino
acidi (protein folding)
• E’ un problema tanto difficile che non sono
noti algoritmi efficienti per risolverlo
– “perché è così difficile?”
– “a cosa ci serve sapere che è difficile?”
 l’analisi della complessità di un algoritmo vi
permette di rispondere a queste domande
Informatica di base – Linea 1
53
Un altro esempio: la ricerca (1)
• Problema: ricercare un valore in un elenco di
n elementi
• Soluzione semplice:
– scorro tutti i valori fino a quando non trovo quello
che mi serve
– complessità computazione: n (lineare)
• Soluzione avanzata (richede che l’elenco sia
ordinato)
– complessità computazionale: log2 n (logaritmica)
Informatica di base – Linea 1
54
Un altro esempio: la ricerca (2)
• Per elenchi piccoli, quasi non fa differenza
– ma per elenchi lunghi, la differenza è enorme!
• Esempio: n = 1012 = 1 000 000 000 000
– soluzione semplice: 1 000 000 000 000 di
confronti
– soluzione avanzata: log2 1012 ≈ 40
• Esempio: se Google usasse la soluzione semplice ci
metterebbe anni per effettuare una sola ricerca...
invece ci mette pochi millisecondi!
Informatica di base – Linea 1
55
Quinta parte:
Riepilogo
Informatica di base – Linea 1
56
Gli algoritmi
• Cos’è un algoritmo
• Quali sono le proprietà di un algoritmo:
– Input definito
– Output definito
– Determinatezza
– Efficacia
– Terminazione
Informatica di base – Linea 1
57
Come si ragiona in modo
algoritmico?
• Capacità che dovete acquisire:
– come si può trovare un algoritmo che risolva un
(semplice) problema?
– dato un algoritmo, sono in grado di capire cosa fa?
• I diagrammi di flusso possono aiutarvi a capire
meglio un algoritmo
Informatica di base – Linea 1
58
Dove studiamo?
• Sul libro di testo (Snyder, “Fluency”):
– Capitolo 7, sezione “Software” e
“Programmazione avanzata”
– Capitolo 8
Informatica di base – Linea 1
59
Esercizi
• Vi è richiesto di acquisire la
capacità di generare degli algoritmi che
risolvano dei semplici problemi
• Negli esercizi che seguono:
– trovate l’algoritmo che risolve il problema
– disegnate il diagramma di flusso corrispondente
• se vi risulta più semplice, partite dal diagramma di
flusso e POI trovate l’algoritmo
– eseguite qualche prova per verificare che il vostro
algoritmo sia corretto
Informatica di base – Linea 1
60
Esercizi
1. Dato uno scaffale pieno di CD,
si calcoli il numero dei CD
2. Dato uno scaffale pieno di CD, si calcoli il
prezzo medio dei CD
3. Dato un numero intero positivo n, si dica se n
è primo:
– Un numero n è primo se non può essere diviso per
nessun altro numero intero ad eccezione di 1 e di
n
Informatica di base – Linea 1
61
Esercizi
4. Si descriva l’algoritmo per
effettuare una somma “in
colonna” di due numeri, entrambi di due cifre
– iniziate con: sia a1 la cifra più a destra del primo
numero, a2 la cifra più a sinistra....
5. Si modifichi l’algoritmo OrdinaCD in modo tale
che, se ci fossero degli spazi vuoti nello
scaffale, questi vengano ordinati tutti sulla
destra
Informatica di base – Linea 1
62
Scarica