Un approccio per ideare algoritmi ricorsivi si basa sul paradigma di Divide et Impera. Il metodo divide et impera applica tre passi ad ogni livello di ricorsione:

  • Divide: questo passo divide il problema in un certo numero di sottoproblemi, che sono istanze più piccole dello stesso problema.
  • Impera: i sottoproblemi vengono risolti in modo ricorsivo. Ovviamente, quando i sottoproblemi hanno una dimensione sufficientemente piccola, essi vengono risolti direttamente.
  • Combina: le soluzioni dei sottoproblemi vengono combinate per generare la soluzione del problema originale.

Quando i sottoproblemi sono abbastanza grandi da essere risolti ricorsivamente, si ha il cosiddetto caso ricorsivo. Mentre sei sottoproblemi hanno una dimensione sufficientemente piccola da non richiedere ricorsione, si dice che la ricorsione ha toccato il fondo e che si è raggiunto il caso base. A volte, oltre ai sottoproblemi che sono istanze più piccole dello stesso problema, dobbiamo anche risolvere dei sottoproblemi che non sono affatto uguali al problema originale. Noi consideriamo la soluzione di questi sottoproblemi come parte del passo combina.

lezione
lezione
Divide et Impera
Tipo di risorsa Tipo: lezione
Materia di appartenenza Materia: Algoritmi e strutture dati
Avanzamento Avanzamento: lezione completa al 50%

Ricorrenze

modifica

Le ricorrenze vanno mano nella mano con il paradigma di divide et impera, in quanto ci offrono un modo naturale per caratterizzare i tempi di esecuzione degli algoritmi divide et impera. Una ricorrenza è un’equazione o disequazione che descrive una funzione in termini del suo valore con input più piccoli. Un esempio di ricorrenza è la ricorrenza che caratterizza il tempo di esecuzione di merge-sort:

 

la cui soluzione è  

Risolvere le ricorrenze

modifica

Le ricorrenze possono avere varie forme: non sempre un algoritmo divide il problema originale in due sottoproblemi, può capitare una ripartizione 1/3 e 2/3, e non tutti gli algoritmi che adottano questo approccio dividono il problema in sottoproblemi di dimensione costante. Dato questa grande varietà di casistiche sono stati elaborati tre metodi per risolvere le ricorrenze:

  • Metodo di sostituzione: si ipotizza un limite e poi si usa l’induzione matematica per dimostrare che l’ipotesi è corretta
  • Metodo dell’albero di ricorsione: converte la ricorrenza in un albero i cui nodi rappresentano i costi ai vari livelli della ricorsione; per risolvere la ricorrenza si adottano tecniche che limitano le sommatorie.
  • Metodo dell’esperto: fornisce i limiti per ricorrenze della forma   dove   è una funzione data. Una ricorrenza di questa forma caratterizza un algoritmo "divide et impera" che crea   sottoproblemi, ciascuno dei quali ha una dimensione pari a   quella del problema originale ed in cui i passi divide e combina insieme richiedono un tempo  .

Metodo di sostituzione

modifica

Il metodo di sostituzione per risolvere le ricorrenze richiede due passi:

  1. Ipotizzare la forma della soluzione
  2. Usare l'induzione matematica per trovare le costanti e dimostrare che la soluzione funziona.

Questo metodo è potente, ma il problema è che può essere solamente applicato nei casi in cui sia facile immaginare la forma della soluzione. Il metodo di sostituzione può essere usato per determinare il limite inferiore o superiore di una ricorrenza. Ad esempio, si consideri la seguente ricorrenza:

 

Supponiamo che la soluzione sia  . Il nostro metodo consiste nel dimostrare che esistono delle costanti positive   tali che   per ogni  . Procediamo per induzione su  .

  • Caso base:  . Se scegliamo  .
  • Passo induttivo:  .

 

L'ultima disuguaglianza è vera solo se la costante   è scelta in maniera tale che  , ossia se  , il che implica  . Ricapitolando se scegliamo  , allora  .

Metodo dell'albero di ricorsione

modifica

Il metodo dell'albero di ricorsione permette di visualizzare lo sviluppo della ricorsione e dei costi. Ogni nodo rappresenta il costo di una particolare sotto problema appartenente all'insieme delle chiamate ricorsive della funzione. Il valore della ricorrenza viene calcolato sommando prima i costi dei nodi su ciascun livello, e poi determinando il costo totale di tutti i livelli dell'albero di ricorsione. Un albero di ricorsione è un ottimo metodo per ottenere una buona ipotesi, che poi viene verificata col metodo di sostituzione. Si può però usare anche l'albero di ricorsione come prova diretta di una soluzione della ricorrenza. Per esempio vediamo come un albero di ricorsione possa fornire una buona ipotesi per la ricorrenza:

 
Albero di ricorsione per T(n)=2T(n/2)+cn^2

 

Creiamo un albero di ricorsione per la ricorrenza  , ricordando che il coefficiente   è costante. Osserviamo che:

  • ogni livello   ha   nodi ognuno dei quali ha un costo pari ha  . Il costo di ciascun livello è:

 .

  • l'ultimo livello corrisponde ad una chiamata di   con   e quindi  .
  •   è pari alla somma della somma dei costi associati a ciascun nodo dell'albero di ricorsione. Quindi:

 

Metodo dell'esperto

modifica

il metodo dell'esperto rappresenta un "ricettario" per risolvere le ricorrenze della forma   sono costanti e   è una funzione asintoticamente positiva. La ricorrenza   descrive il tempo di esecuzione di un algoritmo che divide un problema di dimensione   sottoproblemi, ciascuno di dimensione  . Mentre la funzione   comprende il costo per dividere il problema e combinare i risultati dei sottoproblemi.

Teorema

modifica

Date le costanti   e la funzione  , sia   una funzione definita sugli interi non negativi dalla ricorrenza   dove   rappresenta  .Allora   può essere asintoticamente limitata nei seguenti modi:

  1. Se  .
  2. Se  .
  3. Se  .

Intuitivamente, il teorema afferma che, data una relazione di ricorrenza della forma  , la soluzione si può ottenere confrontando la funzione   con la funzione  . Se la funzione   è asintoticamente più piccola di   per un fattore  , per qualche costante  , allora  ; se le due funzioni asintoticamente hanno la stessa grandezza allora  ; infine, se   è polinomialmente più grande di   e soddisfa la condizione di regolarità  , allora la soluzione è  .

Applicazione del teorema dell'esperto

modifica

Per utilizzare il metodo dell'esperto, determiniamo semplicemente quale caso (se esiste) del teorema dell'esperto possiamo applicare e scriviamo la soluzione. Per esempio consideriamo le tre seguenti ricorrenze:

  •  
  •  
  •  

In tutti e tre i casi abbiamo che  . Cambia invece il "rapporto" tra  . Ognuna delle tre ricorrenze corrisponde ad un diverso caso del teorema dell'esperto.

  •   (in altri termini   è un limite superiore per  ). Primo caso del teorema dell'esperto:  .
  •   (ossia   è un limite stretto per  ). Secondo caso del teorema dell'esperto:  .
  •   (ossia,   è un limite inferiore per  ). Terzo caso del teorema dell'esperto:  .

Consideriamo, però anche un caso dove il metodo dell'esperto non si può applicare. Consideriamo la seguente ricorrenza:

 

dove  . Potremmo erroneamente ritenere che si possa applicare il caso 3, in quanto   è asintoticamente più grande di  ; il problema è che non è polinomialmente più grande. Il rapporto   è asintoticamente minore di   per qualsiasi costante positiva  . Quindi, la ricorrenza ricade nell'intervallo fra i casi 2 e 3.