用大0符号表示函数的时间复杂度

time complexity of function in terms of Big-O notation?

本文关键字:时间复杂度 函数 表示 符号 用大      更新时间:2023-10-16

1)虽然我研究了大O表示法,但我不明白我们如何用大O表示法来计算这个函数的时间复杂度。你能详细解释一下吗?

2)对于递归函数;为什么我们在使用递归函数时调用lens -2 ?

bool isPalindrome( char *s, int len) {
             if (len <= 1) {
             return true;
        }
             else
            return ((s[0] == s[len-1]) && isPalindrome(s+1,len-2));
        }

用大0符号表示这个函数的时间复杂度是多少?

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)

使用len-2调用递归函数,因为在每次执行中都从单词中删除了2个字符(第一个和最后一个)。因此len-2。T (n) = 1 + T (n - 2) = 1 + 1 + T (4) = 1 + 1 + 1 + T (n-6) = n/2 + T (1) = O (n)一个函数g(n)是O(f(n))如果存在一个常数c和一个数n0,那么对于n>n0g (n) & lt;c * f (n)。大0符号只是一个上限,所以这个函数是O(n)也是O(n^2)等等

函数从长度为n的字符串开始,并在每次循环中减少2,直到全部减少。

迭代次数因此与长度/2成正比,即O(n/2) => O(n)