selection sort (minsort) - unimi.itfrasca.di.unimi.it/algm15/slides_lab4.pdft(n, s)= n2 + 5n + 2s -...
TRANSCRIPT
function A = minsort2(A) coston = length(A); nfor i = 1:(n-1) emin = A(i); n-1 indmin=i; n-1 for j = (i+1):n m if(A(j) < emin) m emin = A(j); s indmin = j; s end end tmp = A(i); n-1 A(i) = emin; n-1 A(indmin) = tmp; n-1endTotale : T(n, m, s) = n+5(n-1)+2m+2s = 6n-5+2m+2sm = (n-1)+(n-2)+ … +1 = (n*(n-1)/2)= n2/2 – n/2 T(n, s)= n2 + 5n + 2s - 5
Università degli Studi di Milano
Marco Frasca
Selection Sort (minsort)
T(n, s)= n2 + 5n + 2s - 5
● Caso peggiore: sequenza ordinata in maniera decrescente
s=m= (n*(n-1)/2) T(n)= 2n2 + 4n – 5
● Caso migliore: sequenza ordinata in maniera crescente
s=0 T(n)= n2 + 5n - 5
Università degli Studi di Milano
Marco Frasca
Selection Sort (minsort)
Array Multidimensionali
● Sono array con più di due indici
● Li creiamo con sintassi simile alle matrici bidimensionali>> zeros(3,4,5)crea un array 3x4x5 con elementi settati a zero
● Oppure si possono creare con l'operatore “[ ]”
>> A = [5 7 8; 0 1 9; 4 3 6]; %crea una matrice 3x3
>> A(:,:,2) = [1 0 4; 3 5 6; 9 8 7] % aggiunge una dimensione ad A
Università degli Studi di Milano
Marco Frasca
Array Multidimensionali
>> A = [5 7 8; 0 1 9; 4 3 6]; %crea una matrice 3x3
>> A(:,:,2) = [1 0 4; 3 5 6; 9 8 7] % aggiunge una dimensione ad A
>> A(:,:,1) =
5 7 8 0 1 9 4 3 6
>> A(:,:,2) =
1 0 4 3 5 6 9 8 7
Università degli Studi di Milano
Marco Frasca
Array Multidimensionali
● Possibile creare array multidimensione con il comando cat
>> B = cat( 3, [2 8; 0 5], [1 3; 7 9], [2 3; 4 6]) % Concatena le matrici passate in input sulla terza dimensione>> B(:,:,1) = 2 8 0 5>> B(:,:,2) = 1 3 7 9>> B(:,:,3) = 2 3 4 6
● Le prime due dimensioni devono essere le stesse
Università degli Studi di Milano
Marco Frasca
Array di celle
● Un array di celle è un array di elementi eterogenei● Ogni cella è un contenitore di dati● Ogni elemento può essere di tipo diverso (e.g. un array di interi,
un altro una stringa, una matrice, etc.).● Si può creare un array di celle in tre modi:
1. A(1,1) = {‘Walden’}
2.A{1,1} = ‘Walden’
3.Con la funzione cell
Università degli Studi di Milano
Marco Frasca
Array di celle
● celldisp() e cellplot() sono comandi per stampare a video array di celle
>> A = {[1:4], [0, 9, 2; 10,11,1], [2:5], [6:8]}>> celldisp(A)>> cellplot(A)>> A{1,3} % vettore contenuto nella cella>> A(1,3) % ritorna la cella, non il contenuto>> A(1,2)>> A{1,2}>> A{1,2}(1,2)>> A(1,2)(1,3) % why error?>> A{1,2}(1,3) % why does this work?
Università degli Studi di Milano
Marco Frasca
Array di stringhe
● Le stringhe sono array di caratteri>> a = 'string'>> size(a) ans = 1 6
● a = [a 'string2'] % concatenazione di stringhe>> size(a) ans = 1 13
● a=char('pipppo','it') % Cosa restituisce?
Università degli Studi di Milano
Marco Frasca
Array di stringhe
● a=char('string','1', 'sette')a =string1sette>> size(a) % a è un array multidimensione di caratterians = 3 6>> a(1,5)>> a(2,1)>> a(2,5) % ?
Università degli Studi di Milano
Marco Frasca
Array di stringhe
● Confronto tra stringhe- strcmp controlla solo l'uguaglianza
● a=char('string','otto', 'sette')>> a(1,1) < a(2,1)ans = 0>> a(1, 1:2) > a(3, 1:2)ans =0 1>> a(1, :) > a(3, :) ?
Università degli Studi di Milano
Marco Frasca
Strutture
● Le strutture sono array multidimensione con elementi a cui si accede mediante indici testuali
● Esempio:
» T.nome = 'Mario Rossi'; » T.matricola = 200111;»TT=nome: 'Mario Rossi'matricola: 200111
Università degli Studi di Milano
Marco Frasca
Strutture
● Le strutture possono essere create dinamicamente mediante l'operatore di accesso ai membri “ . ”
● Sintassi : array_name . field_name = field_value
● E' possibile creare ed inserire tutti i valori dei diversi campi di una struttura con una singola istruzione
● T = struct(‘nome’,'Mario Rossi', ‘matricola’, 200111)
● Per i campi stringa occorre specificare gli apici
Università degli Studi di Milano
Marco Frasca
Array di Strutture
● Un array di strutture è una collezione di strutture
● Ogni struttura ha gli stessi campi, ognuno dei quali puòperò essere di tipo differente dagli altri
T(index1).Field1 = [ vector ]
T(index1).Field2 = ‘string’
T(index1).Field3 = number
T(index2).Field1 = [ vector2 ]
T(index2).Field2 = ‘string2’
T(index2).Field3 = number2
Università degli Studi di Milano
Marco Frasca
Array di Strutture
● Inserire in maniera concisa un nuovo record nell'array:
>> T(3) = struct('nome','Carla','matricola', 111232)
● Nota che occorre conoscere a priori i campi della struttura
Università degli Studi di Milano
Marco Frasca
Array di Strutture
● disp(T) % visualizza i campi presenti in ogni elemento della struttura
● disp(T(index)) % visualizza i valori dei campi dell'elemento index
● Aggiungere un nuovo campo ad un array esistente>> T(2).eta = 15;>> disp(T)1x2 struct array with fields: nome key eta>> disp(T(1)) nome: 'uno' key: '1' eta: []
Università degli Studi di Milano
Marco Frasca
Esercizi
Esercizio 1. Scrivere una funzione MATLAB che fornisce all'utente la scelta di due possibili operazioni:
1. inserire da tastiera il nome ed il codice (intero) di un nuovo
articolo2. Ricerca tramite codice di un articolo e nel caso esso esista ne
stampa il nome, altrimenti stampa a video il messaggio “articolo inesistente”.
● Il programma deve ciclare su queste due opzioni finché l'utente non digita “esci”
Università degli Studi di Milano
Marco Frasca
Ricerca
● Per ricerca si intende il procedimento di localizzazione di una particolare informazione in un elenco di dati.
● Il problema della ricerca in termini generali : dato un insieme D = {a
1,a
2, ...,a
n} di n elementi distinti e un elemento x
(elemento chiave), determinare se x appartiene all'insieme.
● Il metodo di ricerca dipende da come le informazioni sono organizzate, esistono due possibili approcci :
Ricerca Sequenziale – serve per ricercare i dati in un vettore NON ordinato
Ricerca Binaria o Dicotomica – serve nel caso in cui i dati nel vettore siano
già ordinati
Università degli Studi di Milano
Marco Frasca
Ricerca Binaria
L’algoritmo può essere descritto mediante i seguenti passi :
1. Si individua l’elemento che sta a metà del vettore (mediano)
2. Si confronta la chiave x con tale elemento. Se l’elemento individuato non è uguale a quello cercato si prosegue in due modi possibili :
se x > elemento mediano la ricerca continua solo nel sottovettore destro se x < elemento mediano la ricerca continua solo nella sottovettore sinistro
1. Il procedimento continua iterativamente dimezzando ogni volta la taglia del vettore, e arrestandosi quando l'elemento mediano è uguale ad x (esito positivo) o quando non è più possibile suddividere (esito negativo)
Università degli Studi di Milano
Marco Frasca
Ricerca Binaria
● La ricerca termina con successo quando l’elemento mediano V[i] considerato ad un certo passo è proprio uguale alla chiave x.
● La ricerca termina con insuccesso quando la parte di vettore considerata è costituita da un solo elemento diverso dalla chiave.
Osservazione : Per il calcolo del valore mediano abbiamo bisogno di tre indici che individuino l'inizio, la fine e la metà del vettore considerato ad ogni passo
Università degli Studi di Milano
Marco Frasca
Ricerca Binaria
function res = BinSearch(v, x, min, max)% INPUT % v : vettore degli elementi; x : chiave da cercare% min: indice di inizio; max: indice di fine% OUTPUT% res : indice di v dove è presente l'elemento x. 0 se l'elemento non è¨ presente
med = floor((min + max)/2);if x == v(med) % 1° criterio di arresto res = med;else if min >= max % 2° criterio di arresto res = 0; else if x < v(med) res = BinSearch (v, x, min, med-1); else res = BinSearch (v, x, med+1, max); end end end
Università degli Studi di Milano
Marco Frasca
Ricerca Binaria
● La ricerca binaria è un algoritmo divide et impera (divide and conquer), cioè è un algoritmo che divide il problema in due o più sotto-problemi dello stesso tipo (nel nostro caso ancora vettori ordinati), ma di taglia inferiore, quindi più facili da risolvere
● Struttura ricorsiva del problema:- ciascuno dei sotto-problemi è ancora un problema di ricerca binaria
● Fase di ricombinazione: le soluzioni dei sotto-problemi in generale devono essere ricombinate per ottenere una soluzione del problema iniziale
● Nel caso della ricerca binaria non è necessaria la ricombinazione
Università degli Studi di Milano
Marco Frasca
Teorema Master
● Permette di analizzare la complessità di algoritmi basati sulla tecnica del divide et impera:
- dividi il problema (di dimensione n) in a ≥ 1 sottoproblemi di dimensione n/b, b > 1
- risolvi i sotto-problemi, ricorsivamente ricombina le soluzioni
● Sia f(n) il tempo per dividere e ricombinare istanze di dimensione n. La relazione di ricorrenza è data da:
Università degli Studi di Milano
Marco Frasca
a T(n/b) + f(n) se n > 1
1 se n = 1T(n) =
Teorema Master
● Ricerca binariaa=1, b=2, f(n) = Θ(1)
● MergeSorta=2, b=2, f(n) = Θ(n)
Università degli Studi di Milano
Marco Frasca
Teorema MasterUniversità degli Studi di Milano
Marco Frasca
La relazione di ricorrenza:
ha soluzione:
1. T(n) = (n ) se f(n)=O(n ) per qualche >0log ba log ba -
2. T(n) = (n log n) se f(n) = (n )log ba log ba
3. T(n) = (f(n)) se f(n)=(n ) per qualche >0
(ma sotto l’ulteriore ipotesi che f(n) soddisfi la “condizione di regolarità”: a*f(n/b)≤ c*f(n) per qualche c<1 ed n sufficientemente grande)
log ba +
a T(n/b) + f(n) se n>1
1 se n=1T(n) =
Teorema Master
● Esempi:1. T(n) = n + 2T(n/2)
a=2, b=2, f(n) = n = (nlog22) -----> T(n)=(n log n)
(caso 2 del teorema master)
1. T(n) = c + 3T(n/9)
a=3, b=9, f(n) = c = O(nlog93 – Ԑ) Ԑ = 0.5,
c = O(1) ---> T(n)=(nlog93) = (√n)
(caso 1 del teorema master)1. T(n) = n + 3T(n/9)
a=3, b=9, f(n) = n = (nlog93 + Ԑ) Ԑ = 0.5,
f(n) = (n), 3(n/9) ≤ c .n per c=1/3 --> T(n) = (n) (regolarità) (caso 3 del teorema master)
Università degli Studi di Milano
Marco Frasca
Teorema Master
● Esempi:1. T(n) = 2T(n/2) + nlogn
a=2, b=2, f(n) = nlogn e nlog22 = n
Apparentemente si può applicare il caso 3 perché f(n) = (n).
Ma f(n) ≠ (n1+Ԑ); f(n)/n = logn che è asintoticamente inferiore di nԐ per qualunque costante positiva Ԑ.
Quindi questa ricorrenza non può essere risolta con il teorema
Master
Università degli Studi di Milano
Marco Frasca
Teorema Master
● EserciziRisolvere le seguenti relazioni di ricorrenza:
1. T(n) = 9T(n/3) + n
2. T(n) = T(2n/3) + 1
3. T(n) = 3T(n/4) + nlogn
Università degli Studi di Milano
Marco Frasca
Teorema Master
Esercizio 2Nell’ipotesi che Proc(m) = Θ( ), determinare la complessità
asintotica (caso peggiore) della seguente procedura Fun(A, n) al crescere di n N .∈
Fun(A, n)if n < 1then return 1t ← Fun(A, n/2)if t > n2
then t ← t − (1/2) · Fun(A, n/2)for j ← 1 to n
do t ← t + A[j] + Proc(n)return t
Università degli Studi di Milano
Marco Frasca
√m
Teorema Master
Esercizio 3Considerata la ricorrenza:
T (n) = 10T(n/3) + 3n2 + n
si richiede di:
1. risolverla utilizzando il teorema principale;
2. dire se T (n) = O(n2), giustificando la risposta.
Università degli Studi di Milano
Marco Frasca