selection sort (minsort) - unimi.itfrasca.di.unimi.it/algm15/slides_lab4.pdft(n, s)= n2 + 5n + 2s -...

30
function A = minsort2(A) costo n = length(A); n for 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-1 end Totale : T(n, m, s) = n+5(n-1)+2m+2s = 6n-5+2m+2s m = (n-1)+(n-2)+ … +1 = (n*(n-1)/2)= n 2 /2 n/2 T(n, s)= n 2 + 5n + 2s - 5 Università degli Studi di Milano Marco Frasca Selection Sort (minsort)

Upload: others

Post on 26-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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)

Page 2: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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)

Page 3: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 4: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 5: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 6: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 7: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 8: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 9: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 10: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 11: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 12: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 13: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 14: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 15: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 16: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 17: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 18: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=
Page 19: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 20: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 21: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 22: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 23: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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) =

Page 24: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(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

Page 25: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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) =

Page 26: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(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

Page 27: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 28: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 29: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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

Page 30: Selection Sort (minsort) - unimi.itfrasca.di.unimi.it/ALGM15/slides_lab4.pdfT(n, s)= n2 + 5n + 2s - 5 Caso peggiore: sequenza ordinata in maniera decrescente s=m= (n*(n-1)/2) T(n)=

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