前提: 不要纠结小项!!!
eg: f(n)=3n^2+2n+2 只需要关注n^2就可以了,其余的全部忽略。
1.归纳法之递归类:
先根据递归逻辑写出T(n)公式----->T(n)=a*T(n/b)+O(n^d),其中:
T(n)为原始问题大小为n。
a*T(n/b):原始问题划分为n个规模为n/b的问题。
O(n^d):调用一次函数消耗的时间/空间复杂度。
当遇到复杂表达式时直接套用以下公式:
2.归纳法之非递归类:
确定最复杂的那一项代码(记住前提:小项不管)
计算执行的次数,一般要运用数列的相关公式求和
3.设t法:
设t次终止,建立t与n的关系,反求出n
还是记住前提-->不管小项,eg:2^(t+1)这种,直接看成2^t就行
最后:
一般来说,当看到循环中的变量增加或者减少的次数变化比较复杂时才考虑使用设t法
eg: