用大0符号表示函数的时间复杂度
time complexity of function in terms of Big-O notation?
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)
。
相关文章:
- 函数的时间复杂度是多少?
- 如何计算此排序函数的时间复杂度?
- 如何计算函数的时间复杂度?
- 在确定函数的时间复杂度时需要帮助
- C++ 数学库 pow() 函数的时间复杂度
- 递归函数的时间复杂度计算
- 一个清晰的函数的时间复杂度是多少,根据大 O,是 std::map
- 加泰罗尼亚数字,递归函数时间复杂度
- 递归函数的渐近时间复杂度
- 这个函数的时间复杂度是多少
- C++中strstr()函数的时间复杂度、空间复杂度和算法是什么
- std::deque::erase函数的时间复杂度是多少
- 当一个std::vector对象在堆栈中而另一个在堆中时,vector的交换函数的时间复杂度为O(1)或O(n)
- 用大0符号表示函数的时间复杂度
- 下面这个函数的时间复杂度应该是多少?
- 这个递归函数的时间复杂度是多少?
- CUDA 的"推力::min_element"函数的时间复杂度是多少?
- 这个递归函数的时间复杂度是多少?
- c++中调用虚函数的时间复杂度
- 随机高斯函数的时间复杂度