La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Divide et impera1 Progetto di algoritmi: metodologia "Divide et Impera" Il problema è risolto attraverso la sua scomposizione in problemi di taglia inferiore.

Presentazioni simili


Presentazione sul tema: "Divide et impera1 Progetto di algoritmi: metodologia "Divide et Impera" Il problema è risolto attraverso la sua scomposizione in problemi di taglia inferiore."— Transcript della presentazione:

1 Divide et impera1 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

2 Divide et impera2 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)

3 Divide et impera3 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) temp[i1++] = data[i2++]; while (i3 <= last) temp[i1++] = data[i3++]; for (i1 = 0, i2 = first; i2 <= last; data[i2++] = temp[i1++]); } r Costo dellalgoritmo Merge Sort:

4 Divide et impera4 Equazioni di ricorrenza Tempo di esecuzione di algoritmi ricorsivi descritti con equazioni di ricorrenza. Ex: MergeSort: Semplificazioni o Argomenti non interi o Condizioni al contorno: (1) per n piccolo

5 Divide et impera5 Soluzione di equazioni di ricorrenza Metodo per sostituzione. Si tenta una soluzione e si verifica se soddisfa lequazione di ricorsione. Ex: Merge Sort:

6 Divide et impera6 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)

7 Divide et impera7 esempio 1. si ipotizza la soluzione 2. 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 o 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 > n 0 )


Scaricare ppt "Divide et impera1 Progetto di algoritmi: metodologia "Divide et Impera" Il problema è risolto attraverso la sua scomposizione in problemi di taglia inferiore."

Presentazioni simili


Annunci Google