2013-12-18 3 views
-2

Здесь уравнение я работаю с (это из прошлого вопроса экзамена, который я получил не так):Тупик на решение уравнения рекуррентного

void foo(float[] array, int start, int end){ 
    if((end-start) <= 1) return; 

    int x = (end-start)/5; 
    int y = 2*x; 
    int z = 4*x; 

    foo(array,start,start+y); 
    for(index = y; index <z; index++){ 
      array[index]++; 
    } 
    foo(array,start+z,end); 
} 

Как бы я идти о придумывая рекуррентное уравнение для это? Я не уверен, нотации я должен использовать, так как функция #recurrences зависит от величины конечного начала ...

T (1) = 1
T (N) = _ ___ + __ _ _ + _ ____

ответ

1
for notation simplicity, lets call N = end-start 
then: 
foo(array,start,start+y); // T(2/5 * N) 
for(index = y; index <z; index++) // 2/5 * N 
foo(array,start+z,end); // T(N/5) 

T(N) = T(2/5 * N) + 2/5 * N + T(N/5) 

является т шляпу достаточно близко?

+0

Я предполагаю, что первая часть должна быть 'T (N/5)'. В противном случае это здорово. Это правда, что вы должны обозначить 'end-start' как' N'. = D – justhalf

Смежные вопросы