我被告知要創建一個基於循環的函數,該函數返回第n個斐波那契數。我已經完成了這個功能,並將其包含在下面。我的任務說「要求函數的運行時間是Θ(n),即函數在n中是線性的」。在我看過的書和我看過的視頻中,Big-Theta總是寫成Θ(g(n)),並表示爲一些不平等。導師拒絕,直到我們把它回答任何相關的問題Big Theta表示法和循環的時間複雜度
這裏是我的兩個問題:
1)請問我在說我克(n)是5N + 7和Θ是正確的(n)是線性的,因爲g(n)是線性的?
2)即使此函數具有線性運行時,我是否還需要擔心上限和下限?
int fib(int n)
{
int fib = 1; //1
int num1 = 0; //1
int num2 = 1; //1
for(int i = 0; i < n; i++) // 1 + (n+1) + 1
{
fib = num1 + num2; //2n
num1 = num2; //1n
num2= fib; //1n
}
return fib; //1
} //----------------
//5n+7 <- runtime as a function of n
據我明白就沒有上限或下限因爲運行時是線性的。
我會小心每個操作分配的實際時間值,因爲當一個附加只需要一半在大多數現代CPU的一個週期,一個讀/寫最多可能需要80 – meowgoesthedog
且不說什麼編譯器與此代碼片段以及它最終的外觀。這就是O-notations如此有用的原因,因爲它抽象了所有的時間參考和實現細節。您可以構建一個自定義CPU,在一個週期內完成所有操作。但它仍然需要循環「n」次。 – SkryptX