ALGO(A,s,d)
m=d-s+1
if m>=2 then
q=⌊m/2⌋
return 2ALGO(A, s, s+q-1) + 3ALGO(A, s+q, d);
else
return 1
endif
Eu tenho esse pedaço de código e preciso encontrar a relação de recorrência em função de n
. O problema afirma que o algoritmo é inicialmente chamado com ALGO(A, 1, n)
. A é um array de tamanho n
, s
e d
são inteiros, q
é a função de chão de m/2
.
A solução que encontrei foi:
T(n) = 1 if n<2
T(n) = T(⌊n/2⌋) + T(⌈n/2⌉) + theta(1) if n>=2.
Meu raciocínio foi que if s=1
e d=n
então m=n
, q=⌊n/2⌋
e na primeira chamada recursiva eu tenho s=1
e d=⌊n/2⌋
então m=⌊n/2⌋
, para a segunda chamada s=s+q=1+⌊n/2⌋ d=n
então m=⌈n/2⌉
então T(⌊n/2⌋) + T(⌈n/2⌉) + theta(1)
porque dentro do if eu calculo q
qual custa 1
. Eu não sei se a solução que eu criei está correta ou não e eu não sei como resolver isso. Para a resolução eu não sei se eu posso dizer que T(⌊n/2⌋) + T(⌈n/2⌉) = T(n)
.