算法——绪论

1.算法(Algorithm):对特定问题求解步骤的一种描述,是指令的有限序列。
2.算法的五大特性:
输入:一个算法有零个或多个输入。
输出:一个算法有一个或多个输出。
有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
3.算法的描述方法
自然语言
优点:容易理解
缺点:冗长、二义性
使用方法:粗线条描述算法思想
注意事项:避免写成自然段
以著名的欧几里德算法为例

① 输入m 和n;
② 求m除以n的余数r;
③ 若r等于0,则n为最大公约数,算法结束;
否则执行第④步;
④ 将n的值放在m中,将r的值放在n中;
⑤ 重新执行第②步。
流程图
优点:流程直观
缺点:缺少严密性、灵活性
使用方法:描述简单算法
注意事项:注意抽象层次
在这里插入图片描述

程序设计语言
优点:能由计算机执行
缺点:抽象性差,对语言要求高
使用方法:算法需要验证
注意事项:将算法写成子函数

#include <iostream>
using namespace std;

int gcd(int m, int n)
{
	if(m<n) gcd(n,m);
    int r=m % n;
    while (r!=0) 
    {
    	m=n;
      	n=r;
      	r=m % n;
    }
   return n;
}
void main( )
{
   cout<<gcd(63, 54)<<endl;
}
//递归实现
int gcd(int m,int n)
{
	if(m<n) gcd(n,m);
	if(n==0) return m;
	else return gcd(n,m%n);
}

伪代码
伪代码(Pseudocode):介于自然语言和程序设计语言之间的方法,它采用某一程序设计语言的基本语法,操作指令可以结合自然语言来设计。
优点:表达能力强,抽象性强,容易理解

1.r = m % n;
2.循环直到 r 等于0
      2.1 m = n;
      2.2 n = r;
      2.3 r = m % n;
3. 输出 n ;

算法分析(Algorithm Analysis):对算法所需要的两种计算机资源——时间和空间进行估算

算法分析的目的:
设计算法——设计出复杂性尽可能低的算法
选择算法——在多种算法中选择其中复杂性最低者
(1) 大O符号(运行时间的上界)
定义1.1 若存在两个正的常数c和n0,使得对一切n≥n0,都有0≤T(n)≤c×f(n),则称T(n)=O(f(n)),或称算法在O(f(n)中。
(2)大Ω符号(运行时间的下界)
定义1.2 若存在两个正的常数c和n0,使得对一切n≥n0,都有0≤c×g(n)≤T(n),则称T(n)=Ω(g(n))
(3)小o符号
定义1.3若任意的正数c都存在n0,使得对一切n≥n0,都有0≤T(n)<c×f(n),则称T(n)=o(f(n)),或称算法在o(f(n)中。
(4)小ω符号
若任意的正数c都存在n0,使得对一切n≥n0,都有0≤c×f(n)<T(n),则称T(n)=ω(f(n)),或称算法在ω(f(n)中。
(5) Θ符号(运行时间的准确界)
定义1.5 若存在三个正的常数c1、c2和n0,对于任意n≥n0都有c1×f(n)≤T(n)≤c2×f(n),则称T(n)=Θ(f(n))
即T(n)=O(f(n))且T(n)=Ω(g(n))
例: T(n)=5n2+8n+1
当n≥1时,5n2+8n+1≤5n2+8n+n
=5n2+9n≤5n2+9n2≤14n2=O(n2)
当n≥1时,5n2+8n+1≥5n2=Ω(n2)
∴ 当n≥1时,14n2≥5n2+8n+1≥5n2
则:5n2+8n+1=Θ(n2)
定理1.1 若T(n)=amnm +am-1nm-1 + … +a1n+a0(am>0),则有T(n)=O(nm)且T(n)=Ω(nm),因此,有T(n)=Θ(nm)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值