La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

L’algoritmo MergeSort

Presentazioni simili


Presentazione sul tema: "L’algoritmo MergeSort"— Transcript della presentazione:

1 L’algoritmo MergeSort
Applica la strategia del “divide et impera” Divide: suddivide la sequenza di n elementi data in due sottosequenze di n/2 elementi Impera: ordina ricorsivamente le sottosequenze; quelle di lunghezza 1 rimangono inalterate (caso base) Combina: fonde (merge) le due sottosequenze per produrre la sequenza ordinata MergeSort (A,s,d) if s < d then m  (s+d)/2 MergeSort (A,s,m) MergeSort (A,m+1,d) Merge(A,s,m,d)

2 Esempio 5 2 8 0 4 7 2 6 1 9 3 2 5 8 5 2 8 0 4 7 0 4 7 1 3 9 1 9 3 2 6 2 6 5 2 8 0 4 7 1 9 3 6 2 5 2 2 5 8 8 0 4 0 4 7 7 1 9 1 9 3 3 2 2 6 6 2 5 4 9 1 5 5 2 2 4 4 1 1 9 9

3 Analisi di complessità di MergeSort
MergeSort (A,s,d)  if s < d then  m  (s+d)/2  MergeSort (A,s,m)  MergeSort (A,m+1,d)  Merge (A,s,m,d)  Si dimostra facilmente che

4 La procedura Merge L’idea è fondere fra loro due sottosequenze già ordinate Occorre un vettore ausiliario di destinazione B La procedura di fusione è la chiave: Si confrontano gli elementi di testa delle due sottosequenze Si trascrive l’elemento minore nel vettore B Si reitera il procedimento, sinché le due sottosequenze sono entrambe vuote

5 Esempio Sequenze: A1: 2 4 6 8 A2: 1 3 5 7 B: Step 1: A1: 2 4 6 8

6 Analisi di complessità di Merge
Merge (A,s,m,d) is := s; id := m+1; i := 1;  while is  m and id  d do  if A[is]  A[id] then B[i] := A[is]; is := is+1; i := i+1; else B[i] := A[id]; id := id+1; i := i+1; endwhile while is  m do  while id  d do  for i = s to d do  A[i] := B[i-s+1]; Far notare che c1, c2 ecc… non sono gli stessi di MergeSort Ne risulta che Merge ha complessità lineare

7 Analisi di complessità di MergeSort
MergeSort (A,s,d)  If s < d then  m  (s+d)/2  MergeSort (A,s,m)  MergeSort (A,m+1,d)  Merge (A,s,m,d)  Si dimostra facilmente che

8 Complessità di MergeSort
Per semplificare l’analisi, consideriamo sequenze la cui lunghezza è una potenza di 2 i due sottoproblemi riguardano sottosequenze di ugual lunghezza Quando n = 1, il tempo di elaborazione è (1) Quando n > 1 Divide: calcolo dell’indice mediano della sequenza: (1) Impera: si risolvono ricorsivamente due sottoproblemi di dimensione n/2: 2T(n/2) Combina: si applica la procedura Merge a due sottosequenze di n/2 elementi: (n)

9 Complessità di MergeSort (2)
Con l’ipotesi semplificativa n1 = n2 = n/2 Vedremo che T(n)= (n lg n)


Scaricare ppt "L’algoritmo MergeSort"

Presentazioni simili


Annunci Google