算法问题基础

算法的特性:输入,输出,确定性,能行性,有穷性。
如果去除有穷性称计算方法。
递归方法:递归主要是通过系统栈来实现的,很多计算工作是重复的所以比较耗时。

#include<bits/stdc++.h>
using namespace std;
long fid(int n)
{
	if(n<=1)
	return n;
	else
	return fid(n-1)+fid(n-2);
 } 
 int main()
 {
 	int n;
 	cin>>n;
 	cout<<fid(n)<<endl;
 }

费不那切数列的递归形式
其实真的挺耗时的,递归这个东西真的很难说,很难想有点烦。
时间复杂度:表示算法运行所需要的时间
渐进表示法:大O记号 表示有两个非负函数,存在常数c>0且当n>n0时,满足有f(n)<=cg(n),则记为f(n)=O(g(n))
大O标记可以表示增长阶数都不超过g(n)的函数的集合,表示一个算法运行的上界,
定理1:执行次数如果是n^m
次方,那么其渐进时间复杂度一定是O(n^3)
Ω记号 若存在c和n0保证f(n)>=g(n),那么记为f(n)=Ω(g(n))
执行次数如果是n^m
次方,那么其渐进时间复杂度一定是Ω(n^3)
求算法的时间下界,也是算法的最优性问题的求解方法。
summer记号,对八七,我实在不知道那个记号怎么读
设非负函数f(n)和g(n),若存在常数c1>0,c2>0和n0,使得当n>=n0时,有c1g(n)<=f(n)<=c2g(n)
则成为f(n)=xxg(n)
执行次数如果是n^m
次方,那么其渐进时间复杂度一定是X(n^3)
小o记号
f(n)=o(g(n))当且仅当f(n)=O(g(n)),且f(n)!=Ω(g(n))
计算递推式的三种方法:迭代法,替代方法(就是假设证明方法),主方法。
主方法:通常用于解决T(n)=aT(n/b)+f(n)的式子。
求解这类递推式的办法叫做主方法
(主定理)
见书P25页
分摊分析主要是执行n个运算所需要的总时间是T(n),那么T(n)/n就是平均代价,对其进行分析,就是分摊分析。
分摊分析的方法:聚焦方法,会计方法,势能方法。
1)聚焦方法,就是计算n个运算序列在最坏情况下,总的执行时间T(n),所以每一个运算的平均代价就是T(n)/n了,聚焦方法保证每个运算都有相同的分摊代价。
会计方法:对每个运算预先赋予不同的费值,有的费值可能会超过其实际代价,有的可能会低于他的实际代价,所以可以进行补偿。
势能方法:执行数据结构上的一个运算将使该数据结构改变状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值