Teorema dell'esperto

Il teorema dell'esperto, noto anche come teorema principale (in inglese master theorem) o teorema del maestro, è un teorema inerente all'analisi degli algoritmi che fornisce una soluzione asintotica ad una famiglia di relazioni di ricorrenza. È stato inizialmente esposto da Jon Bentley, Dorothea Haken, e James B. Saxe nel 1980, dove fu descritto come un metodo unificato[1] per una famiglia di ricorrenze.[2] Il nome di questo teorema è stato popolarizzato dal famoso manuale Introduzione agli algoritmi di Cormen, Leiserson, Rivest e Stein. Non fornisce una soluzione a tutte le possibili relazioni di ricorrenza, ed una sua generalizzazione è il teorema di Akra-Bazzi.

Informalmente, il teorema afferma che, data una relazione di ricorrenza nella forma T ( n ) = a T ( n b ) + f ( n ) {\displaystyle T(n)=aT\left({\frac {n}{b}}\right)+f(n)} con a 1 {\displaystyle a\geq 1} e b > 1 {\displaystyle b>1} , in alcuni casi si può ottenere una soluzione confrontando f {\displaystyle f} con la funzione n log b a {\displaystyle n^{\log _{b}a}} . Se f {\displaystyle f} è asintoticamente polinomialmente più piccola (ovvero più piccola per almeno un fattore polinomiale n ε {\displaystyle n^{\varepsilon }} allora T ( n ) = Θ ( n log b a ) {\displaystyle T(n)=\Theta (n^{\log _{b}a})} ; se le due funzioni hanno asintoticamente la stessa grandezza allora T ( n ) = Θ ( n log b a log ( n ) ) = Θ ( f ( n ) log ( n ) ) {\displaystyle T(n)=\Theta (n^{\log _{b}a}\log(n))=\Theta \left(f(n)\log(n)\right)} ; infine, se f {\displaystyle f} è sufficientemente regolare e polinomialmente più grande allora T ( n ) = Θ ( f ( n ) ) {\displaystyle T(n)=\Theta \left(f(n)\right)} . Non sono coperti dal teorema i casi in cui f {\displaystyle f} sia asintoticamente più grande o più piccola di n log b a {\displaystyle n^{\log _{b}a}} in modo non polinomiale.[3]

Enunciato

Sia data una relazione di ricorrenza T ( n ) {\displaystyle T(n)} nella forma[4]

T ( n ) = a T ( n b ) + f ( n ) , {\displaystyle T(n)=aT\left({\frac {n}{b}}\right)+f(n),}

dove a 1 {\displaystyle a\geq 1} e b > 1 {\displaystyle b>1} sono costanti e n b {\displaystyle {\frac {n}{b}}} si può interpretare sia come n b {\displaystyle \left\lfloor {\frac {n}{b}}\right\rfloor } (parte intera) sia come n b {\displaystyle \left\lceil {\frac {n}{b}}\right\rceil } (parte intera superiore).

Allora la funzione T ( n ) {\displaystyle \,T(n)} è limitata asintoticamente secondo uno dei tre seguenti casi:

  1. se esiste una costante ε > 0 {\displaystyle \varepsilon >0} tale che f ( n ) = O ( n log b a ε ) {\displaystyle f(n)=O\left(n^{\log _{b}a-\varepsilon }\right)} , allora T ( n ) = Θ ( n log b a ) {\displaystyle T(n)=\Theta \left(n^{\log _{b}a}\right)} ;
  2. se f ( n ) = Θ ( n log b a ) {\displaystyle f(n)=\Theta \left(n^{\log _{b}a}\right)} , allora T ( n ) = Θ ( n log b a log n ) {\displaystyle T(n)=\Theta \left(n^{\log _{b}a}\log n\right)} ;
  3. se esiste una costante ε > 0 {\displaystyle \varepsilon >0} tale che f ( n ) = Ω ( n log b a + ε ) {\displaystyle f(n)=\Omega \left(n^{\log _{b}a+\varepsilon }\right)} ed esistono una costante 0 < c < 1 {\displaystyle 0<c<1} e un intero n 0 {\displaystyle n_{0}} tali che n n 0 : a f ( n b ) c f ( n ) {\displaystyle \forall n\geq n_{0}\colon af\left({\frac {n}{b}}\right)\leq cf(n)} , allora T ( n ) = Θ ( f ( n ) ) {\displaystyle T(n)=\Theta (f(n))} .[5]

Dimostrazione

Lemma

La somma s ( n ) = i = 0 log b n a i f ( n b i ) {\displaystyle s(n)=\sum _{i=0}^{\log _{b}n}a^{i}f\left({\frac {n}{b^{i}}}\right)} definita su potenze di b {\displaystyle b} , dove a 1 {\displaystyle a\geq 1} e b > 1 {\displaystyle b>1} sono costanti e f {\displaystyle f} è non negativa, ha rispettivamente comportamento asintotico:

  1. sotto l'ipotesi del caso 1 del teorema principale, s ( n ) = Θ ( n log b a ) {\displaystyle s(n)=\Theta \left(n^{\log _{b}a}\right)} ;
  2. sotto l'ipotesi del caso 2 del teorema principale, s ( n ) = Θ ( n log b a log n ) {\displaystyle s(n)=\Theta \left(n^{\log _{b}a}\log n\right)} ;
  3. sotto l'ipotesi del caso 3 del teorema principale, se esistono una costante 0 < c < 1 {\displaystyle 0<c<1} e un intero n 0 {\displaystyle n_{0}} tali che n n 0 : a f ( n b ) c f ( n ) {\displaystyle \forall n\geq n_{0}\colon af\left({\frac {n}{b}}\right)\leq cf(n)} , allora s ( n ) = Θ ( f ( n ) ) {\displaystyle s(n)=\Theta \left(f(n)\right)} .

Dimostrazione

Caso 1

Per il caso 1, l'ipotesi implica

f ( n b j ) = O ( ( n b j ) log b a ε ) {\displaystyle f\left({\frac {n}{b^{j}}}\right)=O\left(\left({\frac {n}{b^{j}}}\right)^{\log _{b}a-\varepsilon }\right)}

che sostituita in s {\displaystyle s} porta a

s ( n ) = O ( i = 0 log b n 1 a i ( n b i ) log b a ε ) . {\displaystyle s(n)=O\left(\sum _{i=0}^{\log _{b}n-1}a^{i}\left({\frac {n}{b^{i}}}\right)^{\log _{b}a-\varepsilon }\right).}

Raccogliendo i fattori comuni, semplificando e sommando la serie geometrica troncata risultante, si ha

s ( n ) = O ( n log b a ε ( n ε 1 b ε 1 ) ) . {\displaystyle s(n)=O\left(n^{\log _{b}a-\varepsilon }\left({\frac {n^{\varepsilon }-1}{b^{\varepsilon }-1}}\right)\right).}

Poiché ε {\displaystyle \varepsilon } e b {\displaystyle b} sono costanti, si ha

n log b a ε ( n ε 1 b ε 1 ) = n log b a ε O ( n ε ) = O ( n log b a ) , {\displaystyle n^{\log _{b}a-\varepsilon }\left({\frac {n^{\varepsilon }-1}{b^{\varepsilon }-1}}\right)=n^{\log _{b}a-\varepsilon }O\left(n^{\varepsilon }\right)=O\left(n^{\log _{b}a}\right),}

e dal fatto che, poiché f ( 1 ) {\displaystyle f(1)} è una costante,

s ( n ) a log b n f ( 1 ) = f ( 1 ) n log b a s ( n ) Ω ( n log b a ) {\displaystyle s(n)\geq a^{\log _{b}n}f(1)=f(1)n^{\log _{b}a}\to s(n)\in \Omega (n^{\log _{b}a})}

che insieme danno

s ( n ) Θ ( n log b a ) {\displaystyle s(n)\in \Theta (n^{\log _{b}a})}

da cui la tesi.

Caso 2

Analogamente al caso 1, per il caso 2 l'ipotesi implica

f ( n b j ) = Θ ( ( n b j ) log b a ) {\displaystyle f\left({\frac {n}{b^{j}}}\right)=\Theta \left(\left({\frac {n}{b^{j}}}\right)^{\log _{b}a}\right)}

che sostituita in s {\displaystyle s} porta a

s ( n ) = Θ ( i = 0 log b n 1 a i ( n b i ) log b a ) . {\displaystyle s(n)=\Theta \left(\sum _{i=0}^{\log _{b}n-1}a^{i}\left({\frac {n}{b^{i}}}\right)^{\log _{b}a}\right).}

Si procede analogamente al caso precedente, tuttavia la serie troncata ottenuta non è una serie geometrica, ma una serie a termini costanti

n l o g b a i = 0 log b n 1 1 = n log b a log b n {\displaystyle n^{log_{b}a}\sum _{i=0}^{\log _{b}n-1}1=n^{\log _{b}a}\log _{b}n}

da cui la tesi.

Caso 3

Applicando iterativamente i {\displaystyle i} volte l'ipotesi di regolarità del caso 3, si ha

a i f ( n b i ) c i f ( n ) {\displaystyle a^{i}f\left({\frac {n}{b^{i}}}\right)\leq c^{i}f(n)}

per valori sufficientemente grandi di n {\displaystyle n} . Tale condizione vale dunque per tutti tranne al più un numero costante di termini, per i quali n {\displaystyle n} non è sufficientemente grande. Analogamente ai casi precedenti, si sostituisce nella definizione di s {\displaystyle s} , ottenendo

s ( n ) i = 0 log b n c i f ( n ) + O ( 1 ) f ( n ) i = 0 c i + O ( 1 ) , {\displaystyle s(n)\leq \sum _{i=0}^{\log _{b}n}c^{i}f(n)+O(1)\leq f(n)\sum _{i=0}^{\infty }c^{i}+O(1),}

dove O ( 1 ) {\displaystyle O(1)} rappresenta i termini precedentemente citati per i quali non vale la disuguaglianza. Sommando la serie geometrica si ha

s ( n ) = f ( n ) ( 1 1 c ) + O ( 1 ) = O ( f ( n ) ) {\displaystyle s(n)=f(n)\left({\frac {1}{1-c}}\right)+O(1)=O\left(f(n)\right)}

e poiché la definizione di s {\displaystyle s} contiene f {\displaystyle f} in una somma a termini non negativi, si ha anche s ( n ) = Ω ( f ( n ) ) {\displaystyle s(n)=\Omega \left(f(n)\right)} . Combinando le due limitazioni asintotiche, si ha s ( n ) = Θ ( f ( n ) ) {\displaystyle s(n)=\Theta \left(f(n)\right)} .[6]

Dimostrazione del teorema principale

Nel caso particolare in cui T {\displaystyle T} sia definita solo su potenze esatte di b {\displaystyle b} , analizzando l'albero della ricorsione relativo alla relazione di ricorrenza si osserva che[7]

T ( n ) = i = 0 log b n a i f ( n b i ) + Θ ( n log b a ) . {\displaystyle T(n)=\sum _{i=0}^{\log _{b}n}a^{i}f\left({\frac {n}{b^{i}}}\right)+\Theta \left(n^{\log _{b}a}\right).}

Applicando quindi il lemma dimostrato precedentemente, si ottiene immediatamente la validità del teorema principale nel caso particolare in cui n {\displaystyle n} sia definita su potenze di b {\displaystyle b} . Questo ovviamente non è sufficiente a dimostrare il teorema, ma può essere esteso al caso generale considerando il caso in cui compaiano parti intere superiori o inferiori.

Nel caso di una parte intera superiore, nel considerare l'albero di ricorsione alla chiamata i {\displaystyle i} -esima l'argomento assume la forma

n i = { n , i = 0 , n i 1 b , i > 0. {\displaystyle n_{i}={\begin{cases}n,\quad &i=0,\\\lceil {\frac {n_{i-1}}{b}}\rceil ,&i>0.\end{cases}}}

Poiché dalla definizione di parte intera superiore si ha x x + 1 {\displaystyle \lceil x\rceil \leq x+1} , si ottiene

n i n b i + i = 0 i 1 1 b i < n b i + b b 1 . {\displaystyle n_{i}\leq {\frac {n}{b^{i}}}+\sum _{i=0}^{i-1}{\frac {1}{b^{i}}}<{\frac {n}{b^{i}}}+{\frac {b}{b-1}}.}

Da ciò si osserva che n log b n = O ( 1 ) {\displaystyle n_{\lfloor \log _{b}n\rfloor }=O(1)} , quindi alla profondità di ricorsione log b n {\displaystyle \lfloor \log _{b}n\rfloor } il costo del problema è limitato da una costante. Si generalizza quindi la prima equazione per n {\displaystyle n} arbitrario, non più ristretto alle potenze di b {\displaystyle b}

T ( n ) = i = 0 log b n a i f ( n i ) + Θ ( n log b a ) {\displaystyle T(n)=\sum _{i=0}^{\lfloor \log _{b}n\rfloor }a^{i}f\left(n_{i}\right)+\Theta \left(n^{\log _{b}a}\right)}

e si può procedere a studiare la somma. Il terzo caso procede in maniera esattamente analoga al terzo caso del lemma. Per il secondo caso, dalla definizione di O-grande e ricordando l'espressione di n i {\displaystyle n_{i}} si ha che esiste una costante c > 0 {\displaystyle c>0} e un intero n 0 {\displaystyle n_{0}} tali che, per n n 0 {\displaystyle n\geq n_{0}}

f ( n i ) c ( n b i + b b 1 ) log b a c ( n log b a a i ) ( 1 + b b 1 ) log b a = O ( n log b a a i ) . {\displaystyle f\left(n_{i}\right)\leq c\left({\frac {n}{b^{i}}}+{\frac {b}{b-1}}\right)^{\log _{b}a}\leq c\left({\frac {n^{\log _{b}a}}{a^{i}}}\right)\left(1+{\frac {b}{b-1}}\right)^{\log _{b}a}=O\left({\frac {n^{\log _{b}a}}{a^{i}}}\right).}

Il limite asintotico ottenuto permette di procedere poi in maniera analoga al caso 2 del lemma. Per il primo caso, in maniera analoga a quanto appena fatto si mostra che

f ( n i ) = O ( ( n b i ) log b a ε ) {\displaystyle f\left(n_{i}\right)=O\left(\left({\frac {n}{b^{i}}}\right)^{\log _{b}a-\varepsilon }\right)}

che permette di procedere poi in maniera analoga al caso 1 del lemma. Questo completa la dimostrazione del teorema principale in caso di parte intera superiore, nel caso della parte intera inferiore la dimostrazione è analoga.[8]

Generalizzazioni

Il secondo caso del teorema principale può essere generalizzato sostituendo solo alla sua ipotesi particolare, f ( n ) = Θ ( n log b a log k n ) {\displaystyle f(n)=\Theta \left(n^{\log _{b}a}\log ^{k}n\right)} per qualche k 0 {\displaystyle k\geq 0} e alla tesi T ( n ) = Θ ( n log b a log k + 1 n ) {\displaystyle T(n)=\Theta \left(n^{\log _{b}a}\log ^{k+1}n\right)} .[9] Come si vede il caso non generale è per k = 0 {\displaystyle k=0} .

Il teorema di Akra-Bazzi generalizza il teorema principale, sotto opportune ipotesi, per relazioni di ricorrenza nella forma T ( x ) = g ( x ) + i = 1 k a i T ( b i x + h i ( x ) ) {\displaystyle T(x)=g(x)+\sum _{i=1}^{k}a_{i}T(b_{i}x+h_{i}(x))} .

Esempi

Caso 1

Sia data la seguente relazione di ricorrenza:

T A ( n ) = 9 T A ( n 3 ) + n . {\displaystyle T_{A}(n)=9\,T_{A}\left({\frac {n}{3}}\right)+n.}

Si ha a = 9 {\displaystyle a=9} , b = 3 {\displaystyle b=3} e f ( n ) = n {\displaystyle f(n)=n} . Allora n log b a = n log 3 9 = Θ ( n 2 ) . {\displaystyle n^{\log _{b}a}=n^{\log _{3}9}=\Theta \left(n^{2}\right).} Dato che f ( n ) = O ( n log 3 9 ε ) {\displaystyle f(n)=O\left(n^{\log _{3}9-\varepsilon }\right)} quando ε = 1 {\displaystyle \varepsilon =1} , è possibile applicare il caso 1 del teorema dell'esperto ottenendo la soluzione

T A ( n ) = Θ ( n 2 ) . {\displaystyle T_{A}(n)=\Theta \left(n^{2}\right).}

Caso 2

Sia data ora la relazione di ricorrenza:

T A ( n ) = T A ( 2 n 3 ) + 1 , {\displaystyle T_{A}(n)=T_{A}\left({\frac {2\,n}{3}}\right)+1,}

in cui a = 1 {\displaystyle a=1} , b = 3 / 2 {\displaystyle b=3/2} e f ( n ) = 1 {\displaystyle f(n)=1} . Essendo n log b a = n log 3 / 2 1 = Θ ( n 0 ) = Θ ( 1 ) {\displaystyle n^{\log _{b}a}=n^{\log _{3/2}1}=\Theta (n^{0})=\Theta (1)} ed f ( n ) = 1 {\displaystyle f(n)=1} , vale il caso 2 del teorema dell'esperto, che porta alla soluzione T A ( n ) = Θ ( log n ) . {\displaystyle T_{A}(n)=\Theta (\log n).}

Caso 3

Infine sia data la relazione di ricorrenza:

T A ( n ) = 3 T A ( n 4 ) + n log n , {\displaystyle T_{A}(n)=3\,T_{A}\left({\frac {n}{4}}\right)+n\log n,}

in cui a = 3 {\displaystyle a=3} , b = 4 {\displaystyle b=4} e f ( n ) = n log n {\displaystyle f(n)=n\log n} . Essendo n log b a = n log 4 3 = O ( n 0 , 793 ) {\displaystyle n^{\log _{b}a}=n^{\log _{4}3}=O\left(n^{0,793}\right)} ed f ( n ) = Ω ( n log 4 3 + ε ) {\displaystyle f(n)=\Omega \left(n^{\log _{4}3+\varepsilon }\right)} , in cui ε 0 , 2 {\displaystyle \varepsilon \approx 0,2} , il caso 3 del teorema dell'esperto si può applicare solo se vale la condizione di regolarità per f ( n ) {\displaystyle f(n)} . Per n {\displaystyle n} sufficientemente grande si ha 3 ( n 4 ) log ( n 4 ) ( 3 4 n log n ) = c f ( n ) {\displaystyle 3\left({\frac {n}{4}}\right)\log \left({\frac {n}{4}}\right)\leq \left({\frac {3}{4}}n\log n\right)=cf(n)} per c = 3 / 4 1 {\displaystyle c=3/4\leq 1} . Di conseguenza la soluzione della ricorrenza è T A ( n ) = Θ ( n log n ) . {\displaystyle T_{A}(n)=\Theta (n\log n).}

Note

  1. ^ Questo il significato originario del termine master nel nome.
  2. ^ Jon Louis Bentley, Dorothea Haken e James B. Saxe, A general method for solving divide-and-conquer recurrences, in ACM SIGACT News, vol. 12, n. 3, September 1980, pp. 36–44, DOI:10.1145/1008861.1008865.
  3. ^ Cormen et al., pp. 94–95.
  4. ^ Considerando un algoritmo ricorsivo associato alla relazione di ricorrenza, le quantità coinvolte si possono interpretare come:
    • n {\displaystyle n} è la dimensione dell'input;
    • a {\displaystyle a} è il numero di chiamate ricorsive all'algoritmo;
    • n b {\displaystyle {\frac {n}{b}}} è la dimensione della chiamata ricorsiva (ovvero la porzione del problema originale rappresentato in ogni sottoproblema);
    • f ( n ) {\displaystyle f(n)} è la funzione di costo della fase di suddivisione del problema e di ricostruzione della soluzione.
  5. ^ Cormen et al., p. 94.
  6. ^ Cormen et al., pp. 100–102.
  7. ^ Cormen et al., pp. 98–100.
  8. ^ Cormen et al., pp. 103–106.
  9. ^ Goodrich & Tamassia, pp. 268–270.

Bibliografia

  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein, Introduction to Algorithms, 3ª ed., MIT Press, 2009, pp. 93–106, ISBN 978-0-262-53305-8.
  • Michael T. Goodrich e Roberto Tamassia, Algorithm Design: Foundation, Analysis, and Internet Examples, Wiley, 2002, ISBN 0-471-38365-1.

Voci correlate

  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica