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)
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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
● 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
● 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)