![Page 1: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/1.jpg)
1
Informazioni generali
Luca Becchetti• Tel.: 06 49918335• Email:
• URL: www.dis.uniroma1.it/~becchett
Ricevimento:• Latina: martedì e
giovedì, ore 9.00-9.45• Roma: mercoledì, ore
10-12, Dip. Informatica e Sistemistica, via Salaria 113 II piano, 00198 Roma
Testo adottato: • R. Sedgewick, Algoritmi
in Java, Addison Wesley• Ingegneria 2000, via
della polveriera 15 (S. Pietro in vincoli), tel. 06 4744169/06 4746609
Testi consigliati:• T. Cormen e altri.
Introduzione agli algoritmi. Ed. Jackson libri
Altro materiale: documentazione su Java disponibile in rete
![Page 2: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/2.jpg)
2
Informazioni generali/2 Java tutorial:
http://java.sun.com/docs/books/tutorial/ Il Java tutorial è parte di una più ampia
documentazione disponibile al sito Sun API Java: la documentazione è disponibile al sito:
http://java.sun.com/products/jdk/1.2/docs/api/index.html e può essere scaricata a partire da: http://java.sun.com/products/jdk/1.2/docs/
J. Bishop: Java gently – Corso introduttivo. Addison - Wesley
P. Niemeyer e altri. Learning Java. O'REILLY
D. Flanagan. Java in a nutshell. O'REILLY
![Page 3: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/3.jpg)
3
Obiettivi
A cosa serve la progettazione di algoritmi e strutture dati
Come si misura l’efficienza delle strutture dati e degli algoritmi
Come scegliere gli algoritmi e le strutture dati adatti a risolvere in modo efficiente un problema
Implementazione di algoritmi e strutture dati in Java
![Page 4: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/4.jpg)
4
Argomenti del corso Introduzione: efficienza e sua misura. Riepilogo sulle principali strutture dati di base:
liste, code, pile, alberi Code di priorità Dizionari Aspetti avanzati degli algoritmi di ordinamento Grafi
Rappresentazione e algoritmi di visita Algoritmo di Dijkstra per il calcolo del percorso minimo Minimo albero ricoprente (?)
![Page 5: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/5.jpg)
5
Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del
loro accesso Algoritmo: procedura suddivisa in passi che, eseguiti in
sequenza, consentono di eseguire un compito in tempo finito
Esempio: Max. di un vettore di n elementi
Algorithm arrayMax(A, n)currentMax = A[0];for (i=0; i < n; i++)
if (A[i] > currentMax)currentMax = A[i];
return currentMax;
![Page 6: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/6.jpg)
6
Nel mondo reale.......
Gli algoritmi intervengono (in modo più o meno nascosto) in molti aspetti
Esempi• Internet• DBMS • Motori di ricerca• Struttura del Web• Analisi di documenti
![Page 7: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/7.jpg)
7
Esempio: Routing in Internet
Astrazione usando grafi:
I nodi rappresentano router
Gli archi descrivono i link fisici Costi sugli archi
(link) : ritardo, costo in € livello di congestione
Obiettivo: determinare “buon” cammino sorg.-
dest.
Protocollo di Routing
A
ED
CB
F
2
2
13
1
1
2
53
5
Cammino “buono”:• Di solito significa
cammino a costo minimo• Possibili def. alternative
![Page 8: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/8.jpg)
8
Esempio: Accesso a basi di dati
Obiettivo: rispondere rapidamente.
Interrogazione
Data RecordData base
. .
.
Interrogazione
![Page 9: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/9.jpg)
9
Qualità di algoritmi e strutture dati
Efficienza• Tempo di esecuzione• Spazio (quantità di memoria)
I due aspetti sono interdipendenti
![Page 10: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/10.jpg)
11
Come misurare l’efficienza?
Perché B gira più velocemente ? Possiamo affermare che B sia “migliore” di A?
Programma A
Problema
Programma B
10 ms
1 ms
Dati
![Page 11: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/11.jpg)
12
Misura dell’efficienza - obiettivi
Indipendenza dall’implementazione
Generale (valida per ogni input, di
qualsiasi dimensione)
Misura indipendente dalla
piattaforma Hw/Sw
![Page 12: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/12.jpg)
13
Modello di costo RAMRandom Access Machine
Assegnazione
Op. aritmetiche
Test
Lettura/Scrittura
A = 10; (costo 1) A = B*C + D – 7; (costo 4) A == B (costo 1)
System.out.println(A); (Costo
1)
Macchina che esegue le istruzioni in sequenza.Insieme di operazioni primitive a costo unitario:
![Page 13: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/13.jpg)
14
Modello di costo/2Costo di operazioni complesse:
Ciclo: somma costo test di fino ciclo e costo
corpo del ciclo
if…then…else: costo test più costo blocco
istruzioni che segue then o else (a seconda del
caso)
Attivazione di un metodo: somma dei costi di
tutte le istruzioni presenti nel metodo
Costo: somma di tutti i costi
![Page 14: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/14.jpg)
15
Esempio
Nel primo caso (vett. di 3 elementi) si ha costo 1 (ass.)+1 (ass. nel for) + 6 (test e incr. nel for) + 1 (test finale for) + 3 (test if) + 1 (istruz. return) = 13
Nel secondo caso si ha 1 (ass.) + 1 (ass. nel for) + 10 (test e incr. nel for) + 1 (test finale for) + 5 (test if) + 1 (istr. ass. nell’if) + 1 (istruz. return) = 20
AlgorithmarrayMax(A, n)currentMax=A[0]; for (i=0; i<n; i++)
if (A[i]>currentMax)
currentMax=A[i];return currentMax;
7
1
4
1
8
6
3
4
n=3 n=5
![Page 15: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/15.jpg)
16
Perché il modello è accettabile?
A=A+B*C;MUL B,CADD A,B
AB
C
N finito (es. 32 o 64 )
Ogni istruzionecorrisponde a una sequenza finita di istruzioni macchina
Ogni variabile occupauna quantità finita dimemoria e quindi i tempi di accesso a duevariabili sono legati da una costante
![Page 16: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/16.jpg)
17
Vantaggi e svantaggi
Vantaggi: prescinde dalla piattaforma Hw/Sw e dal linguaggio di programmazione
Svantaggi: l’indicazione che si ottiene è qualitativa
![Page 17: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/17.jpg)
18
Quale input considerare? La misura deve dipendere dalla dimensione
dell’input (n nel nostro esempio) ma non dal particolare input considerato
Possibile alternative: Analisi del caso peggiore: si considera il costo
di esecuzione nel caso peggiore Analisi del caso medio: si considera il costo
medio dell’algoritmo rispetto ad una distribuzione dell’input (richiede la conoscenza della distribuzione)
In ogni caso occorre definire la dimensione dell’input
![Page 18: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/18.jpg)
19
Dimensione dell’input
In generale: No. bit necessari a rappresentare l’input
Esempio (calcolo del Max. in un array di n interi) n interi finiti (< MAXINT) log(MAXINT) bit per rappresentare ogni
valore. Poiché MAXINT è una costante in pratica, il
numero di bit necessari a rappresentare un intero è costante (es. 32)
Quindi: dimensione input è proporzionale a n A volte le cose possono non essere così ovvie (v.
problema nell’ultima slide)
![Page 19: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/19.jpg)
20
AlgorithmarrayMax(A, n)currentMax=A[0]; for (i=0; i<n; i++)
if (A[i]>currentMax)
currentMax=A[i];return currentMax;
Analisi nel caso peggiore (esempio)
Nel caso peggiore l’elemento massimo è l’ultimo
In questa ipotesi l’istruzione
currentMax=A[i];
è eseguita n-1 volte. Il costo complessivo
dell’algoritmo è allora 1+1+(n-1)+1+2(n-1)+1=4n+1
1
4
6
3
8
![Page 20: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/20.jpg)
21
Analisi asintotica
Se si considerano tutte le costanti l’analisi può divenire eccessivamente complessa
Interessa conoscere il costo al variare della dimensione dell’input, a meno di costanti Motivo: il costo è comunque calcolato a
meno di costanti, per le ipotesi fatte circa il modello
Un’analisi di questo tipo è detta asintotica L’analisi asintotica è influenzata
dall’operazione dominante di un algoritmo
![Page 21: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/21.jpg)
22
Analisi asintotica/2 f(n), g(n) funzioni dagli interi ai reali f(n)=O(g(n)) se esiste c>0 reale, e una
costante intera n0 tali che f(n)≤cg(n) per ogni n>n0
f(n)=(g(n)) se esiste c>0 reale, e una costante intera n0 tali che, f(n)>c g(n) per ogni n>n0
Si osservi che f(n)=O(g(n)) implica g(n)=(f(n))
In base a tali definizioni, l’algoritmo AlgorithmarrayMax ha costo O(n)
![Page 22: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/22.jpg)
23
Istruzione dominante
Un’ operazione o istruzione si dice dominante se il numero d(n) di volte che essa è eseguita nel caso peggiore di input di dimensione n soddisfa:
f(n)<=a d(n) + b, dove f(n) è la complessità dell’algoritmo
nel caso peggiore ed a e b sono costanti opportune
Es.: istruzione if (A[i]>currentMax) in AlgorithmarrayMax(A, n)
![Page 23: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/23.jpg)
24
Esempi
In base a tali definizioni, l’algoritmo AlgorithmarrayMax ha costo
f(n)= 3n2+10 n = O(n2)
Per c=4 e n0>=10, 3n2+10 n <= 4 n2
Per c1= 1/14, c2= 1/2, n0>=7,
)(nΘ
)(321
)( 22 nnnnf Θ=−=
2
2
22
1 321
ncnnnc ≤−≤
![Page 24: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/24.jpg)
25
Analisi asintotica/3
Limiti dell’analisi asintotica: Le costanti nascoste possono essere
molto grandi: un algoritmo con costo 1050n è lineare ma potrebbe essere poco pratico
Comportamento nel caso di istanze “piccole” (es. 3n contro n2)
Il caso peggiore potrebbe verificarsi raramente
![Page 25: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/25.jpg)
26
Analisi di Insertion SortAlgorithm insertionSort(A, n)
for (i=0; i<n; i++) {tmp=A[i];for (j=i; j>0 &&
tmp<A[j-1]; j--)A[j]=A[j-1];
A[j] = tmp;}return A;
Inserisce l’elemento A[i] nella posizione corretta nel vettore ordinato A[0,…,i-1]
Ex: 5 4 3 2 1
i=0 5 4 3 2 1 0 confronti
i=1 4 5 3 2 1 1 confronto
i=2 3 4 5 2 1 2 confronti
i=3 2 3 4 5 1 3 confronti
i=4 1 2 3 4 5 4 confronti
Ex: 1 2 3 4 5 f(n)= n
)(2
)1()( 2
1
0
nOnn
infn
i
=−==∑−
=
![Page 26: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/26.jpg)
27
Esempiclass esercizio {
public void Ex1(int n) {int a, i;
for (i=0; i<n;i++)a=i;
}public void Ex2(int n) {int a, i;
for (i=0; i<n*n;i++)a=i;
}public void Ex3(int n) {int a, i, j;
for (i=0; i<n;i++) for (j=0; j<=i;j++)
a=i;}
}
Valutare la complessitàdei tre metodi
Complessità di Ex3: 1+2+....+n=O(n2)
![Page 27: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/27.jpg)
29
Metodo Divide et Impera
Il problema è risolto ricorsivamente attraverso la sua scomposizione in problemi di taglia inferiore
Divide: Problema suddiviso in un numero di sottoproblemi di taglia inferioreImpera: Sottoproblemi risolti ricorsivamente o direttamente se di dimensione piccola a sufficienzaCombina: Le soluzioni dei sottoproblemi sono combinate per ottenere la soluzione al problema originale
![Page 28: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/28.jpg)
30
Merge Sort A[0...n]
Si suppone n pari per semplicità
A[0...n/2-1] A[n/2...n-1]
Suddividi A in due sottovettori di dim. n/2
A[0...n/2-1] A[n/2...n-1]
MergeSort A[0...n/2-1] MergeSort A[n/2...n-1]
Merge
A ordinato
![Page 29: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/29.jpg)
31
Merge Sort/2
void mergesort(int[] A, int first, int last){ if (first < last) { int mid = (first + last) / 2; mergesort(A, first, mid); mergesort(A, mid+1, last); merge(A, first, last); }}
![Page 30: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/30.jpg)
32
Merge Sort A[0...n] /3
Divide: divide gli n elementi da ordinare in due sottosequenze da n/2 elementi. Costo: O(n)Impera: ordina ricorsivamente usando il merge sort le due sottosequenze. Costo: 2f(n/2)Combina: fonde le due sottosequenze ordinate. Costo: O(n)
La ricorsione termina quando si hanno solo due elementi da ordinare. Costo:O(1)
Costo dell’algoritmo Merge Sort:
⎩⎨⎧
>+=
=2),()2/(2
2),1()(
nnnf
nnf
θ
θ
![Page 31: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/31.jpg)
33
L’array [1 8 6 4 10 5 3 2 22]ordinatocon mergesort
![Page 32: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/32.jpg)
34
Mergevoid merge(int[] data, int first, int last) {
int mid = (first + last) / 2; int i1 = 0, i2 = first, i3 = mid + 1; while (i2 <= mid && i3 <= last) if (data[i2] <data[i3]) temp[i1++] = data[i2++]; else temp[i1++] = data[i3++]; while (i2 <= mid) temp[i1++] = data[i2++]; while (i3 <= last) temp[i1++] = data[i3++]; for (i1 = 0, i2 = first;
i2 <= last; data[i2++] = temp[i1++]);
}
![Page 33: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/33.jpg)
35
Equazioni di ricorrenza
Tempo di esecuzione di algoritmi ricorsivi descritti con equazioni di ricorrenza. Ex: MergeSort:
Semplificazioni: • Argomenti non interi.
• Condizioni al contorno: per n piccolo
⎩⎨⎧
>+=
=2 ,)2/(2
1 ,)(
2
1
nncnf
ncnf
⎡ ⎤ ⎣ ⎦⎩⎨⎧
>++=
=2),()2/()2/(
2),1()(
nnnfnf
nnf
θ
θ
)1(θ
![Page 34: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/34.jpg)
36
Soluzione di equazioni di ricorrenza
Metodo per sostituzione. Si tenta una soluzione e si verifica se soddisfa l’equazione di ricorsione.
Ex: Merge Sort: 21,,log)( cccaancnnf ≥≥+≤
ancn
anccnncn
ancncn
ancnncnf
+≤++−≤++≤
++≤
log log
)2/(log )2/(log)2/(2)(
2
2
2
aancncf =+≤= log)1( 1
![Page 35: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/35.jpg)
37
Esercizi
Mostrare che la soluzione di f(n)=f(n/2)+1 è O(log n)
Mostrare che la soluzione di f(n)=2f((n/2)+17)+n è O(n log n)
![Page 36: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/36.jpg)
38
Esercizi/2
Si consideri il problema della ricerca in un vettore di interi: dato il vettore A[1..n] ed un intero k, si vuole stabilire se k sia tra gli elementi di A o meno
• Considerato il classico algoritmo basato sulla ricerca binaria, si mostri che esso ha complessità O(log n)
![Page 37: 1 Informazioni generali Luca Becchetti Tel.: 06 49918335 Email: becchett@dis.uniroma1.it URL: becchett Ricevimento: Latina: martedì](https://reader036.vdocuments.pub/reader036/viewer/2022062418/5542eb57497959361e8c19a4/html5/thumbnails/37.jpg)
39
Esercizi/3
Si consideri il problema di “indovinare” un numero intero nel numero minimo di tentativi: ad ogni tentativo, l’algoritmo propone un valore ad un oracolo, che conosce il numero da indovinare. L’oracolo risponde dicendo se il numero proposto sia maggiore, minore o uguale a quello da indovinare (nell’ ultimo caso il gioco termina).
• Si proponga un algoritmo efficiente e se ne esprima la complessità temporale in funzione del generico numero N da indovinare