























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti sugli algoritmi del corso di elementi di informatica di pelessoni
Tipologia: Appunti
1 / 31
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!
























UNIVERSITÀ DEGLI STUDI DI TRIESTE FACOLTÀ DI ECONOMIA
APPUNTI SUGLI ALGORITMI
ANNO ACCADEMICO 2007 - 2008
Renato Pelessoni
Un algoritmo è un insieme finito di istruzioni che consente di risolvere una classe di problemi.
Un algoritmo deve essere caratterizzato da
Complessità: “lavoro” eseguito da un algoritmo
Misura di complessità: n° di operazioni di base eseguite
La complessità di un algoritmo viene in generale espressa in funzione della dimensione dell’input.
Un algoritmo può inoltre richiedere dello spazio di memoria aggiuntivo oltre a quello richiesto per memorizzare l’input. L’algoritmo opera sul posto (in place) se lo spazio usato è costante rispetto alla dimensione dell’input.
Ricerca sequenziale
r variabile contenente l’elemento da cercare a vettore di n elementi
Alcune varianti dell’algoritmo:
i = 1 trovato = False Do While (Not trovato) And (i <= n) If a(i) = r Then trovato = True else i = i+ End If Loop ‘rende n+1 se non trova
i = 1 Do While (i <= n) And (a(i) <> r) i = i+ Loop ‘rende n+1 se non trova
i= 1 Do While (i<n) And (a(i)<>r) i=i+ Loop If a(i)<>r Then i=n+ End If ‘rende n+1 se non trova
Complessità della ricerca sequenziale i = 1 Do While (i <= n) And (a(i) <> r) i = i+ Loop If i > n Then i = n+1 EndIf Dimensione dell’input: n (numero elementi di a) Operazione di base: confronto a(i) <> r Caso peggiore: r è in posizione n o non compare W(n)=n
Ci insieme dei vettori di n elementi in cui r è in posizione i (i=1,…,n) M(Ci)=i Cn+1 insieme di vettori di n elementi in cui r non compare M(Cn+1)=n
=
n
i 1
A(n) p(Ci )M(Ci) p(Cn 1 )M(Cn 1 )
q i n n(1 q) q(n 1) 2 n(1 q)
n
i 1
=
Proprietà
La relazione Θ definita dalla
è una relazione di equivalenza le cui classi di equivalenza sono dette classi di complessità.
Qualunque funzione appartenente ad una classe di complessità può essere scelta per rappresentare la classe stessa. In particolare
Si ha
log(n)∈o(nα) ∀α> 0
nα∈o(kn) ∀α>0, k> 1
La preferenza andrà in generale ad algoritmi la cui complessità ha (appartiene a classi di) ordine inferiore.
Ricerca dei due elementi più piccoli in un vettore
a vettore di n (n≥2) elementi reali Problema: trovare i due valori più piccoli in a. Operazione di base: confronto tra valori
1° Algoritmo Idea: cercare il minimo del vettore e di seguito il minimo tra gli elementi rimanenti.
min1 = a(1) indmin = 1 ‘Inizializzazione di min1 e dell’indice For i = 2 To n ‘Determinazione del minimo del vettore If a(i) < min1 Then min1= a(i) indmin = i End If Next i ‘Segue inizializzazione della variabile min If indmin <> 1 Then min2 = a(1) Else min2 = a(2) EndIf For i = 2 To n ‘Determinazione del minimo tra i rimanenti If (i <> indmin) And (a(i) < min2) Then min2 = a(i) End If Next i
N° confronti: n-1 per determinare il minimo 1 per il test indmin <> 1 2(n-1) per il 2° valore più piccolo
Totale 3n-2 confronti
2° Algoritmo
Idea: modificare la seconda parte del 1° algoritmo spostando il minimo al primo posto nel vettore.
min1= a(1) ‘Inizializzazione della variabile min indmin = 1 ‘Inizializzazione dell’indice del minimo For i = 2 To n ‘Determinazione del minimo del vettore If a(i) < min1 Then min1 = a(i) indmin = i End If Next i
comodo = a(1) ‘Spostamento del minimo in prima posizione a(1) = min a(indmin) = comodo min2 = a(2) For i = 3 To n ‘Determinazione del minimo tra i rimanenti If a(i) < min2 Then min2 = a(i) End If Next i
N° confronti: n-1 per determinare il minimo n-2 per il 2° valore più piccolo
Totale 2n-3 confronti
4° Algoritmo
Idea: considerare coppie di elementi successivi ed ordinare ogni coppia; poi confrontare in sequenza le coppie. Per semplicità si supporrà n pari.
i = 1 Do While i < n ‘Ordinamento di ogni coppia If a(i+1) < a(i) Then com = a(i) a(i) = a(i+1) a(i+1) = com i = i+ 2 End If Loop min1 = a(1) min2 = a(2) i = 3 ‘Inizializzazione di min1, min2 ed i Do While i < n ‘Confronto delle coppie If a(i) < min1 Then If a(i+1) < min1 Then min1 = a(i) min2 = a(i+1) Else min2 = min1 min1 = a(i) End If Else If a(i) < min2 Then min2 = a(i) End If End If i = i+ 2 Loop
N° confronti: n/2 ordinamento elem. delle coppie
n-2 confronto delle coppie
Totale 1.5n-2 confronti
Riepilogando:
W(n) A(n)
1° algoritmo 3n-2 3n-
2° algoritmo 2n-3 2n-
3° algoritmo 2n-3 *
4° algoritmo 1.5n-2 1.5n-
W(n)====n Complessità worst-case lineare
Supponendo che sia 0.5 la probabilità che l’elemento cercato appartenga al vettore e supponendo che:
probabilità casi di tipo 1 (sono in tutto n casi)
probabilità casi di tipo 2, 3, 4 (sono in tutto n+1 casi)
In queste ipotesi la complessità media è quindi lineare.
n 2(n 1)
n 2(n 1)
i 2n
i A(n)
n
i 1
n
i 1
= =
2n
2(n 1)
Algoritmo di ricerca binaria
r variabile contenente l’elemento da cercare a vettore ordinato di n elementi
i = 1 j = n Do m = (i+j) \ 2; If a(m) < r Then i = m+ 1 Else j = m − 1 End If Until (a(m) = r) Or (i > j) If a(m) <> r Then m = 0 ‘rende 0 se non trova End If
La complessità nel caso peggiore della ricerca binaria è logaritmica: W(n)∈Θ∈Θ∈Θ∈Θ(log 2 (n))
Algoritmi di selection sort Gli algoritmi operano scorrendo il vettore, determinando via via il minimo degli elementi ancora da spostare e sistemando questo nella posizione corretta, come elemento successivo a quelli già posizionati.
a vettore di n elementi For i = 1 To n − 1 ‘versione 1 For j = i + 1 To n If a(i) > a(j) Then s = a(i) ‘scambio degli elementi a(i) = a(j) a(j) = s End If Next j Next i
For i = 1 To n − 1 ‘versione 2 m = i For j = i + 1 To n If a(m) > a(j) Then m = j ‘salvataggio dell’indice End If Next j s = a(i) ‘scambio degli elementi a(i) = a(m) a(m) = s Next i
i= 1
i≤n− 1
j=i+ 1
j≤n i=i+^1
a(i)>a(j)
s=a(i) a(i)=a(j) a(j)=s
j=j+ 1
Selection Sort - 1