[英]Find the value of f(n) in the master theorem
首先,讓我說我知道主定理的性質,所以問題不在這里。
我需要知道如何使用現有算法確定主定理的值
所以,我需要 T(n)=a*T(n/b) + f(n)。
我知道 a 是遞歸調用的數量。
我知道 b 是問題的划分大小
但我不知道如何確定 f(n)
我有一個例子;
這里我們有 a=2; b=2 f(n) = n
a=2 因為我們有 2 次合並函數調用 b=2 因為 j=(k+i)/2
但我不明白我們如何得到 f(n)=n
歸並排序(T,我,K)
需要 T 數組
i,k 整數,使得 Tm<=i<=k<=TM 與 Tm 和 TM 是 T 的邊界
確保 T 在 i 和 k 之間排序
`if (k>i) then
j=(k+i)/2;
mergeSort(T,i,j);
mergeSort(T,j+1,k);
append(T,i,j,k);`
謝謝你的幫助。
在主定理中, f(n)
是給出運行時遞歸定義的非遞歸部分的函數。 在遞歸調用的每一步,算法都會調用自己多次,並且可以選擇做一些額外的工作(所有這些,除非您處於基本情況,在這種情況下所做的工作是恆定的)。
在 Mergesort 中, f(n) = O(n)
因為合並兩個已排序的子列表以生成包含所有子列表元素的單個排序列表需要在組合排序列表的大小上花費線性時間。
在二分搜索中, f(n) = O(1)
因為在每一步中必須執行的只是將目標值與要搜索的子列表中間元素的值進行比較。
判斷f(n)
應該是什么的方法是通過執行所有遞歸調用,將任何參數的計算移到函數調用之外,然后用常量值替換遞歸函數調用。 剩下的與f(n)
漸近相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.