Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoOsvaldo Di bella Modificato 10 anni fa
1
Progetto di algoritmi: metodologia "Divide et Impera"
Il problema è risolto attraverso la sua scomposizione in problemi di taglia inferiore Divide: Problema suddiviso in un numero di sottoproblemi di taglia inferiore Impera: Sottoproblemi risolti ricorsivamente o direttamente se di dimensione piccola a sufficienza Combina: Le soluzioni dei sottoproblemi sono combinate per ottenere la soluzione al problema originale Divide et impera
2
Merge Sort Divide: divide gli n elementi da ordinare in due sottosequenze da n/2 elementi. Costo: O(n) Impera: ordina ricorsivamente usando il merge sort le due sottosequenze. Costo: 2f(n/2) Combina: fonde le due sottosequenze ordinate. Costo: O(n) La ricorsione termina quando si hanno solo due elementi da ordinare. Costo:O(1) Divide et impera
3
Costo dell’algoritmo Merge Sort:
void mergesort(int[] A, int first, int last) { if (first < last) { int mid = (first + last) / 2; mergesort(A, first, mid); mergesort(A, mid+1, last); merge(A, first, last); } void merge(int[] data, int first, int last) { int mid = (first + last) / 2; int i1 = 0, i2 = first, i3 = mid + 1; int[] temp = new int[last – first + 1]; while (i2 <= mid && i3 <= last) if (data[i2] < data[i3]) temp[i1++] = data[i2++]; else temp[i1++] = data[i3++]; while (i2 <= mid) while (i3 <= last) temp[i1++] = data[i3++]; for (i1 = 0, i2 = first; i2 <= last; data[i2++] = temp[i1++]); } Costo dell’algoritmo Merge Sort: Divide et impera
4
Equazioni di ricorrenza
Tempo di esecuzione di algoritmi ricorsivi descritti con equazioni di ricorrenza. Ex: MergeSort: Semplificazioni Argomenti non interi Condizioni al contorno: (1) per n piccolo Divide et impera
5
Soluzione di equazioni di ricorrenza
Metodo per sostituzione. Si tenta una soluzione e si verifica se soddisfa l’equazione di ricorsione. Ex: Merge Sort: Divide et impera
6
Esercizi Mostrare che la soluzione di f(n)=f(n/2)+1 è O(log n)
Mostrare che la soluzione di f(n)=2f((n/2)+17)+n è O(n log n) Divide et impera
7
esempio si ipotizza la soluzione
induzione matematica per trovare costanti e mostrare che la soluzione funziona tecnica usata sia per upper/lower bound proviamo che f(n) <= cn lg n per una c appropriata assumiamo che funzioni per n/2 e sostituendo otteniamo f(n) <= c n lg n verifica delle condizioni al contorno (per n = 1, o almeno n > n0) Divide et impera
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.