Bloccato in una ricorrenza

Darèios89
[tex]T(n)=\sqrt{n}T(\sqrt{n})+n[/tex]

Ho pensato di sostituire:

[tex]n=2^m[/tex]

[tex]T(2^m)=2^{\frac{m}{2}}T(2^{\frac{m}{2}})+2^m[/tex]

Ora dovrei togliermi prima di T quel [tex]2^{\frac{m}{2}}[/tex]

Potrei provare a dividere tutto proprio per questo fattore ma poi non riesco a sostituire altro...come procedereste?

Risposte
hamming_burst
Ciao,
un'altra ricorrenza :D

guarda ho pensato solo venti secondi, e fatto anche due conti mentali, ma a me sembra banale. Gurderò meglio domani, ma se ho fatto bene è semplice. Dovrebbe forse esserci un problema di una costante, ma guarderò.

Comunque ti do solo un piccolo aiuto: cambia metodo, prova il metodo della sostituzione.

Ricordi qual'è, se no è questa:

https://www.matematicamente.it/forum/pos ... tml#466639

ipotizzi una complessità e dimostri per induzione. Ciau :-)

hamming_burst
Allora, ieri avevo pensato di dimostrare questa equazione con complessità $O(n)$. Ma facendo i conti con carte e penna, non viene per via di una costante che fa non valere la disequazione.

Perciò un'altra strada è o ipotizzare n'altra complessità ad occhio $O(nlogn)$, o andare su quella che hai affrontato te, cioè sostituazioni di variabile.

In questo modo però ci si complica la vita, quel $2^(m/2)$ è in mezzo. Provando con il metodo dell'iterazione si può cercare di toglierlo, non è complicato. Basta ricordarsi che $sqrt(n)*sqrt(n) = n$ e $2^(m/2)*2^(m/2) = 2^m$
O al massimo usare un altro cambio di variabile.

Darèios89
Ho proseguito sulla strada della sostituzione, però ho una soluzione leggermente diversa.

La soluzione corretta è: [tex]T(n)=\theta(n\log(\log(n)))[/tex]

Continuando da dove ho lasciato allora divido tutto e:

[tex]\frac{T(2^m)}{2^\frac{m}{2}*2^\frac{m}{2}}=\frac{2^\frac{m}{2}T(2^\frac{m}{2})}{2^\frac{m}{2}*2^\frac{m}{2}}+1[/tex]

[tex]\frac{T(2^m)}{2^\frac{m}{2}*2^{\frac{m}{2}}}=S(m)[/tex]

[tex]S(m)=S(m/2)+1[/tex]

Dovrebbe essere il secondo caso del teorema Master e avrei: [tex]S(m)=\theta(\log(m))[/tex]

Quindi [tex]T(2^m)=2^mS(m)[/tex]

[tex]T(n)=\theta(n\log(\log(n)))[/tex]

hamming_burst
come sei arrivato a $Theta(nloglogn)$ se quella è la soluzione dell'esercizio, allora si è corretta.
Non ero lontano da $O(n)$ mancava un fattore piccolo. :)

se provi ad usare l'induzione viene perfetta la dimostrazione, un $O(nloglogn)$ tondo.


però passando alla tua esecuzione dell'esercizo, fino al master è ok.
Sbagli nel tornare indietro nella sostituzione, devi ricordati che hai diviso per $2^m$....

Darèios89
La soluzione in cui mi hai chiesto come ci sono arrivato è quella del libro :oops:

QUel 1 che non ti spieghi è perchè il lavoro esterno sarebbe [tex]2^m[/tex]

Se ho diviso tutto quanto per lo stesso fattore avrei [tex]\frac{2^m}{2^\frac{m}{2}*2^\frac{m}{2}}[/tex]

Quindi non farebbe 1?

Poi avanti non so cosa sostituire evidentemente se S(m) non va bene.

hamming_burst
ho capito solo dopo aver scritto il messaggio, cosa hai fatto.
ti ho scritto qualcosa sopra perchè lo ho editato mentre te scrivevi...

Darèios89
Hai ragione ho sostituito male, risulta e come, grazie mille....sarei perduto senza di te :oops:

Una curiosità....ma se invece devo risolvere delle ricorrenze con l'albero, ogni volta mi confondo su quale è la base del logaritmo dell' altezza. Per dire se avessi, me la invento:

[tex]T(n)=2T(n/2)+3T(n/3)+1[/tex]

Come faccio a capire qual' è la base del logaritmo dell' altezza dell'albero?

hamming_burst
ah sei riuscito, perfetto ;)
Non preoccuparti non sei l'unico che sbaglia in quel punto in questo metodo, pure io tantissime volte ho sbagliato a tornare indietro, son dimenticanze, e poi se non si sceglie una variabile corretta ($2^m$ va sempre bene per sti esecizi) sono azzi :D

Come faccio a capire qual' è la base del logaritmo dell' altezza dell'albero?


In generale, se hai un'equazione del tipo:

$aT(n/b) + n$

altezza massima $h = log_b(n)$

numero foglie totali T(1) all'altezza h: $a^(log_b(n))$

ma questo è la base della dimostrazione del Master Theorem....

In questa equazione $2T(n/2) + 3T(n/3) + 1$ non pui molto vedere le cose scritte sopra perchè fai ricorrenza su una costante,
ma cmq sei in un caso semplice che anche senza ricorrere all'albero lo risolvi.

Darèios89
Ah ok perfetto, ma quindi se ci fosse più di una ricorrenza e avessi:

[tex]2T(\frac{n}{2})+3T(\frac{n}{3})+n[/tex]

o

[tex]2T(\frac{n}{2})+3T(\frac{n}{3})+n^2[/tex]

E' difficile determinare l'altezza dell' albero visto che ci sono due chiamate ricorsive?

hamming_burst
In questa ricorrenza sei in un caso "fortunato", se ti ricordi con la doppia ricorrenza devi fare un'analisi particolare come ti mostrai in un altro post,
devi maggiorare per ricondurti ad un'equazione più facile da maneggiare con l'albero o con il Master.

Ma l'albero in questi contesti puoi usarlo per vedere in quale parte dell'albero "pende" maggiormente l'equazione.
Cioè quale parte ha altezza maggiore (ricordati che non è completo con doppia equazione). In questo caso però non vale questa regola, ti faccio vedere:

alberto giustificato a sinistra (scusa non ho voglia di disegnare)

$n$

$2n/2 = n$ + $3n/3 = n$ $= 2n$

$2^i n/2^i = n$ + $3^i n/3^i = n$ $= 2n$
....

$T(1) = 2^(log_2(n)) = n$ + $T(1) = 3^(log_3(n)) = n$ $=2n$

puoi vedere semplicemente che anche se le altezze sono diverse, la complessità è identica, cioè $O(n)$. Ho evitato di scriverti ogni cosa, la sommatoria fino al livello $h-1$, con alla fine la somma delle foglie ecc, perchè la sommatori risulta una costante, e alla fine è una somma tra $2n + 2n = 4n in O(n)$

stesso discorso con $n^2$.


PS: mi sembra di ricordare che c'era una complicazione in queste equazioni apparentementi banali, ti dico domani però. :-)

edit:
sistemato formule nuovo formato.

Darèios89
Si la complicazione è che poi le devi dimostrare per induzione....XD

Grazie comunque, credo di aver capito adesso....:)

hamming_burst
eeeh l'induzione è una palla sempre...ma bisogna farsi l'abitudine, l'informatico usa l'induzione dovunque (anche dimostrazione per assurdo)... :D

però come ti dicevo sopra, non ero sicuro della correttezza di ciò che ti avevo detto.
Perciò non vorrei farti capire cose sbagliate, l'albero è corretto, ma cercando una limitazione superiore puoi prendere l'altezza maggiore, cioè $log_2(n)$ e usare quella come limitazione.
Ho fatto un errore nel calcolo (imbarazzante), ma che voglio mostrarti così non sbagli te:

generalizzando per livello $i$

$(sum_{i=0}^{log_2(n)-1} 2^i*n/2^i) + (sum_{i=0}^{log_3(n)-1} 3^i*n/3^i) <= (n*sum_{i=1}^{log_2(n)} (2/2)^i) + (n*sum_{i=1}^{log_3(n)} (3/3)^i) = (n*sum_{i=1}^{log_2(n)} 1^i) + (n*sum_{i=1}^{log_3(n)} 1^i) = $

$= nlog_2(n) + nlog_3(n) <= nlog_2(n) + nlog_2(n) = 2nlog_2(n)$

sommando con le foglie:

$2n + 2nlog_2(n) in O(nlog_2(n))$

la dimostrazione con $O(n)$ non mi tornava ,per quello ho rifatto i conti. L'induzione serve proprio per capire se quello che si è fatto è corretto, in questo caso è servito :-)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.