大家好,我是一只学弱狗,记录学习的点点滴滴!
算法才是程序设计的灵魂,每日一题!
优质文章
优质专栏
艰难的开始学习递推方程与算法分析,一提起递推方程,最先想到的应该是类似于背包的这种dp问题,其实,一些复杂的递归问题也是包含有递推方程的。
下面从斐波那契数列进行引入,
如果现在让你求斐波那契数列的第100你怎么求,有童鞋直接给我扔给我一个函数
int Fibonacci(int n){
int a = 1,b = 1;
for(int i=3;i<=n;i++){
if(i%2){
a = a + b;
}else{
b = a + b;
}
}
cout<<max(a,b)<<endl;
}
这是不是太慢了?这样的时间复杂度是n,有没有一个公式,与求等比数列的和一样,直接得出结果呢?当然有,其实这个公式在高中的时候我们是可以求出来的吧!
额。下面再举一个例子,汉诺塔,这个问题对于新手是真的不友好,想不明白!
下面是汉诺塔的伪码描述
下面求出汉诺塔的时间复杂度,好家伙,是个指数量级,怪不得说解除这个问题就世界末日了,原来出自这里啊!
有意思,再看一种对插入排序排序的时间复杂度的分析,下面是伪代码,太建大了,不多说了
可以看出,插入排序的时间复杂度是n^2的