Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Analisi di Complessità: Ricerca Sequenziale, Binaria e Selection Sort - Prof. Pelessoni, Appunti di Elementi di Informatica

Appunti sugli algoritmi del corso di elementi di informatica di pelessoni

Tipologia: Appunti

2013/2014

Caricato il 07/06/2014

rikypozzo
rikypozzo 🇮🇹

2 documenti

1 / 31

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
1
UNIVERSITÀ DEGLI STUDI DI TRIESTE
FACOLTÀ DI ECONOMIA
APPUNTI SUGLI ALGORITMI
ANNO ACCADEMICO 2007 - 2008
Renato Pelessoni
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f

Anteprima parziale del testo

Scarica Analisi di Complessità: Ricerca Sequenziale, Binaria e Selection Sort - Prof. Pelessoni e più Appunti in PDF di Elementi di Informatica solo su Docsity!

UNIVERSITÀ DEGLI STUDI DI TRIESTE FACOLTÀ DI ECONOMIA

APPUNTI SUGLI ALGORITMI

ANNO ACCADEMICO 2007 - 2008

Renato Pelessoni

ALGORITMI

Un algoritmo è un insieme finito di istruzioni che consente di risolvere una classe di problemi.

Un algoritmo deve essere caratterizzato da

  • generalità
  • finitezza
  • non ambiguità

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

p(Ci ) = q n(i =1,…, n) p(C n + 1 ) = 1 −q ( q∈[0,1 ])

=

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à

  • limn →+∞g(n)/f(n) = 0 ⇒ g∈O(f)
  • limn →+∞g(n)/f(n) = u > 0 ⇒ g∈Θ(f)
  • limn →+∞g(n)/f(n) = +∞ ⇒ g∈Ω(f)
  • limn →+∞g(n)/f(n) = 0 ⇒ g∈o(f)
  • f∈O(g), g∈O(h) ⇒ f ∈O(h) (anche per Ω, Θ, o)
  • f∈O(g) ⇔ g∈Ω(f)
  • f∈Θ(g) ⇔ g∈Θ(f)
  • O(f+g)=O(max{f,g})
  • Ω(f+g)=Ω(max{f,g})
  • Θ(f+g)=Θ(max{f,g})

La relazione Θ definita dalla

fΘΘΘΘg ⇔⇔⇔⇔ f∈Θ∈Θ∈Θ∈Θ(g)

è 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

  • ΘΘΘΘ(log(n)) classe di complessità logaritmica
  • ΘΘΘΘ(n) classe di complessità lineare
  • ΘΘΘΘ(n^2 ) classe di complessità quadratica
  • ΘΘΘΘ(n^3 ) classe di complessità cubica
  • ΘΘΘΘ(kn) (k>1) classe di complessità esponenziale

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-

  • dipende dalla distribuzione di probabilità dell’input

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

BEGIN

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

END

T

F

T

T

F

F

Selection Sort - 1