Progetto di algoritmi metodologia Divide et Impera q

  • Slides: 7
Download presentation
Progetto di algoritmi: metodologia "Divide et Impera" q Il problema è risolto attraverso la

Progetto di algoritmi: metodologia "Divide et Impera" q Il problema è risolto attraverso la sua scomposizione in problemi di taglia inferiore q 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

Merge Sort q Divide: divide gli n elementi da ordinare in due sottosequenze da

Merge Sort q 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: 2 f(n/2) Combina: fonde le due sottosequenze ordinate. Costo: O(n) q La ricorsione termina quando si hanno solo due elementi da ordinare. Costo: O(1) Divide et impera

Merge Sort void mergesort(int[] A, int first, int last) { if (first < last)

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); } } r. Costo dell’algoritmo Merge Sort: void merge(int[] data, int first, int last) { int mid = (first + last) / 2; int i 1 = 0, i 2 = first, i 3 = mid + 1; int[] temp = new int[last – first + 1]; while (i 2 <= mid && i 3 <= last) if (data[i 2] < data[i 3]) temp[i 1++] = data[i 2++]; else temp[i 1++] = data[i 3++]; while (i 2 <= mid) temp[i 1++] = data[i 2++]; while (i 3 <= last) temp[i 1++] = data[i 3++]; for (i 1 = 0, i 2 = first; i 2 <= last; data[i 2++] = temp[i 1++]); } Divide et impera

Equazioni di ricorrenza q Tempo di esecuzione di algoritmi ricorsivi descritti con equazioni di

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

Soluzione di equazioni di ricorrenza q Metodo per sostituzione. Si tenta una soluzione e

Soluzione di equazioni di ricorrenza q Metodo per sostituzione. Si tenta una soluzione e si verifica se soddisfa l’equazione di ricorsione. q Ex: Merge Sort: Divide et impera

Esercizi q Mostrare che la soluzione di f(n)=f(n/2)+1 è O(log n) q Mostrare che

Esercizi q Mostrare che la soluzione di f(n)=f(n/2)+1 è O(log n) q Mostrare che la soluzione di f(n)=2 f((n/2)+17)+n è O(n log n) Divide et impera

esempio si ipotizza la soluzione 2. induzione matematica per trovare costanti e mostrare che

esempio si ipotizza la soluzione 2. induzione matematica per trovare costanti e mostrare che la soluzione funziona q tecnica usata sia per upper/lower bound 1. q proviamo che f(n) <= cn lg n per una c appropriata o q 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) Divide et impera