1)Althoug我研究過大O符號,我無法理解我們如何根據Big-O符號來計算這個函數的時間複雜度。你能詳細解釋一下嗎?用Big-O符號表示函數的時間複雜度?
2)用於遞歸函數;爲什麼我們在使用遞歸函數時調用len-2?
bool isPalindrome(char *s, int len) {
if (len <= 1) {
return true;
}
else
return ((s[0] == s[len-1]) && isPalindrome(s+1,len-2));
}
這個函數在Big-O符號方面的時間複雜度是多少?
T(0) = 1 // base case
T(1) = 1 // base case
T(n) = 1 + T(n-2)// general case
T(n-2)=1+T(n-4)
T(n) = 2 + T(n-4)
T(n) = 3 + T(n-6)
T(n) = k + T(n-2k) ... n-2k = 1 k= (n-1)/2
T(n) = (n-1)/2 + T(1) O(n)
提前開始位置1個字符,減少結束位置1個字符(因爲它們匹配或它不是迴文) - 不同的是2個字符的長度。另一個函數簽名可能是'bool isPalindrome(char * start,char * end)'。 – user2246674 2013-05-01 17:47:29
很確定這是O(n),因爲它調用它自己與字符串的長度有關。 – 2013-05-01 17:51:11
***你對O(n)的計算有什麼不瞭解? – phant0m 2013-05-01 17:51:58