Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
A.A. 2016/2017
Corsi di Laurea in Ing. Civile e Ing. per l’Ambiente e il Territorio
Un possibile algoritmo:
I assumere inizialmente che il numero maggiore sia il primo
della sequenza
I scorrere quindi la sequenza dal secondo all’ultimo elemento,
confrontare ciascun elemento con il valore più grande
osservato fino a quel momento, e aggiornare quest’ultimo se
risultasse inferiore all’elemento in esame
Notare che durante l’esecuzione dell’algoritmo l’esecutore dovrà
tener traccia solo del valore più grande tra quelli già osservati.
2. Massimo di una sequenza di numeri
MCD(36, 28)
I = MCD (28, 8)
I = MCD (20, 8)
I = MCD (12, 8)
I = MCD (8, 4)
I = MCD (4, 4) = 4
4. Minimo comune multiplo
(cont.)
I ogni algoritmo può essere espresso a diversi livelli di dettaglio,
ovvero in termini di operazioni più o meno elementari; il livello
di dettaglio adeguato corrisponde alle operazioni che
l’esecutore è in grado di eseguire
I nella maggior parte degli algoritmi (compresi gli esempi visti in
precedenza) ricorrono due schemi esecutivi, che per questo
motivo corrispondono a istruzioni presenti in tutti i linguaggi
di programmazione:
– scelta tra più alternative: se si verifica una certa condizione,
allora si esegua una certa sequenza di operazioni, altrimenti
se ne esegua un’altra (istruzione condizionale)
– ripetizione di una sequenza di operazioni per un certo numero
di volte, o su tutti gli elementi di un certo insieme, o finché
una certa condizione è vera (istruzione iterativa)
Proprietà degli algoritmi: correttezza
Il numero −34 è presente nella sequenza (52, −48, −34, 75, −80)?
I 52 è diverso a −34
I −48 è diverso da −34
I −34 è uguale a −34: si trascurano gli elementi successivi
della sequenza, e il risultato è sì (−34 è presente nella
sequenza considerata)
Algoritmo di ricerca sequenziale: efficienza
(cont.)
I secondo passo: si considerano gli ultimi N − 1 elementi
−80, 52, −34, −48, 58, 75, 22: scambio
−80, 52, −34, −48, 58, 22, 75: scambio
−80, 52, −34, −48, 22, 58, 75: nessuno scambio
−80, 52, −34, −48, 22, 58, 75: scambio
−80, 52, −48, −34, 22, 58, 75: scambio
−80, −48, 52, −34, 22, 58, 75
I terzo passo: si considerano gli ultimi N − 2 elementi
−80, −48, 52, −34, 22, 58, 75: nessuno scambio
−80, −48, 52, −34, 22, 58, 75: nessuno scambio
−80, −48, 52, −34, 22, 58, 75: nessuno scambio
−80, −48, 52, −34, 22, 58, 75: scambio
−80, −48, −34, 52, 22, 58, 75
(cont.)
Esempio
(cont.)
I quarto passo: si considerano gli ultimi N − 3 elementi
−80, −48, −34, 52, 22, 58, 75: nessuno scambio
−80, −48, −34, 52, 22, 58, 75: nessuno scambio
−80, −48, −34, 52, 22, 58, 75: scambio
−80, −48, −34, 22, 52, 58, 75
I quinto passo: si considerano gli ultimi N − 4 elementi
−80, −48, −34, 22, 52, 58, 75: nessuno scambio
−80, −48, −34, 22, 52, 58, 75: nessuno scambio
−80, −48, −34, 22, 52, 58, 75
I sesto passo: si considerano gli ultimi N − 5 (due) elementi
−80, −48, −34, 22, 52, 58, 75: nessuno scambio
Risultato: −80, −48, −34, 22, 52, 58, 75.
Ordinamento per inserimento
L’idea è la seguente:
I si assuma che gli elementi nelle prime M posizioni (per un
qualunque M ∈ {1, 2, . . . , N − 1}) formino una sottosequenza già
ordinata (anche se questa non fosse la loro posizione corretta
nell’intera sequenza ordinata)
I si può allora inserire nella posizione corretta di tale sottosequenza
l’elemento in posizione M + 1 (indicato con x ), attraverso una serie
di confronti con gli elementi in posizione M, M − 1, M − 2, . . . :
– se x è minore o uguale all’elemento con cui viene confrontato,
quest’ultimo deve essere spostato nella posizione successiva
della sequenza, e si procede poi con un altro confronto
– se x è maggiore dell’elemento con cui viene confrontato, x
deve essere inserito nella posizione successiva della sequenza,
e i confronti terminano
I si procede quindi nello stesso modo con gli elementi in posizione
M + 2, M + 3, . . . , N
Ordinamento per inserimento
(cont.)
I −48, −34, 52, 58, 75, −80, 22
gli elementi −48, . . . , 75 vengono spostati di una posizione
verso destra, −80 viene inserito nella prima posizione
I −80, −48, −34, 52, 58, 75, 22
gli elementi 52, 58, 75 vengono spostati di una posizione
verso destra, 22 viene inserito nella quarta posizione
I −80, −48, −34, 22, 52, 58, 75
Risultato: −80, −48, −34, 22, 52, 58, 75.
Algoritmi di ordinamento: efficienza