Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGiosetta Mosca Modificato 10 anni fa
1
Lalgoritmo 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 (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
Spiegazione Lidea è fondere fra loro due sottosequenze già ordinate Occorre un vettore ausiliario di destinazione B (oppure due vettori ausiliari L e R in cui copiare le origini) La procedura di fusione è la chiave: –Si confrontano gli elementi di testa delle due sottosequenze –Si trascrive lelemento minore nel vettore B –Si reitera il procedimento, sinché le due sottosequenze sono entrambe vuote
3
La procedura Merge Sequenze: –A1: 2 4 6 8 –A2: 1 3 5 7 –B: Step 3: –A1: _ 4 6 8 –A2: _ _ 5 7 –B: 1 2 3 Step 6: –A1: _ _ _ 8 –A2: _ _ _ 7 –B: 1 2 3 4 5 6 Step 1: –A1: 2 4 6 8 –A2: _ 3 5 7 –B: 1 Step 2: –A1: _ 4 6 8 –A2: _ 3 5 7 –B: 1 2 Step 4: –A1: _ _ 6 8 –A2: _ _ 5 7 –B: 1 2 3 4 Step 5: –A1: _ _ 6 8 –A2: _ _ _ 7 –B: 1 2 3 4 5 Step 7: –A1: _ _ _ 8 –A2: _ _ _ _ –B: 1 2 3 4 5 6 7 Step 8: –A1: _ _ _ _ –A2: _ _ _ _ –B: 1 2 3 4 5 6 7 8
4
5 2 8 0 4 7 1 9 3 2 6 0 47255 285 2 80 4 75 2 8 0 4 71 9 3 2 62 61 9 31 93629140 5 2 8 0 4 7 1 9 3 2 6 5 2 8 0 4 71 9 3 2 6 5 2 80 4 72 61 9 3 5 28 25 0 471 93 4091 62 0 1 2 2 3 4 5 6 7 8 9 0 2 4 5 7 8 2 5 8 2 5 52 8 1 2 3 6 9 0 4 72 61 3 9 0 471 93 4091 62
5
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) Analisi di complessità di MergeSort Nel seguito usiamo
6
Merge (A,s,m,d) For i 1 to n 1 do L[i] A[i + s – 1] For j 1 to n 2 do R[j] A[j + m] L[n 1 +1] R[n 2 +1] i j 1 For k s to d do If L[i] R[j] then A[k] L[i] i i + 1 else A[k] R[j] j j + 1 Analisi di complessità di Merge
7
Ne risulta che Merge ha complessità lineare
8
Complessità di MergeSort Per semplificare lanalisi, 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 dellindice 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
Vedremo che T(n)= (n lg n) Complessità di MergeSort (2) Con lipotesi semplificativa n 1 = n 2 = n/2
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.