2
我希望確定的遞歸算法的平均處理時間T(N):計算預期時間遞歸程序的複雜性
int myTest(int n) {
if (n <= 0) {
return 0;
}
else {
int i = random(n - 1);
return myTest(i) + myTest(n - 1 - i);
}
}
提供,該算法隨機(INT n)的花費一個時間單元返回 一個在[0,n]範圍內均勻分佈的隨機整數值,而其他指令的花費時間可以忽略不計(例如,T(0)= 0)。
這當然不是簡單的形式T(n)= a * T(n/b)+ c,所以我迷失在如何寫它。我不知道如何編寫它,因爲我每次都從0到n-1範圍內隨機選擇一個數字,並將它提供給函數兩次,並要求這兩個調用的總和。
從規範中我確信'T(0)'存在。但是當你從步驟1移動到步驟2時,假設對於'i> 0',存在值'T(i)'。我們如何證明這一點?因爲如果它是無限的,證明的以下步驟不被資助。 – fjardon
@fjardon沒有無窮大 - 編寫代碼時,遞歸調用始終位於較小的輸入上,這會限制調用堆棧的高度。也就是說,如果'myTest(n)'調用myTest(i)',那麼0 <='i' <'n'。 –
@保羅你能解釋我們如何走到這一步? (n-1)+(1)T(n-1)=(n + 1)T(n-1)+ 1.我不明白這一點。 – discretemathswreckslives