算法——算法复杂度

算法及其特性
程序=算法+数据结构
算法是基于我们前面讲的变量、数据结构等内容上的运算,用于解决某个具体的问题,是对特定问
题的求解步骤的描述,是指令的有限序列。
比较简单的算法,是简单操作的结合,高难度的算法,需要涉及到很强的逻辑和数学,所以数学是算法的根本。
算法具有五个重要特性。
1、有穷性
算法针对合法的输入数据,要能在执行有穷步骤之后结束,且每一步都可以在有穷时间内完成。
2、确定性
算法的每一个步骤都具有确定的含义,不会出现二义性。
3、可行性
算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限的次数完成。
4、输入
在算法中可以有零个或者多个输入。
5、输出
在算法中至少有一个或者多个输出。
例1、请你以冒泡排序算法为例,说说上述5个特征。
(1) 输入: 由n个数构成的序列{a1,a2,a3,…,an}。
(2) 输出: 对输入的排序结果{a′1,a′2,a′3,…,a′n},a′1≤a′2≤a′3≤…≤a′n。
(3) 有穷性: 算法在执行O(n 2 )次后结束,这也是对算法性能的评估,即算法复杂度。
(4) 确定性: 算法的每个步骤都是确定的。
(5) 可行性: 算法的步骤能编程实现。

算法复杂度
算法竞赛的题目在逻辑、数学、算法上有不同难度:简单的题目,可以一眼看懂;复杂的题目,往
往需要很多步骤才能找到解决方案。对代码性能考核的要求是代码必须在限定的时间和空间内运行结束。这是因为问题的“有效”解决,不仅在于能否得到正确答案,更重要的是能在合理的时间和空间内给出答案。计算的资源是有限的,竞赛题会限制代码所使用的计算资源。计算资源有两种:计算时间和存储空间。与此对应的有时间复杂度和空间复杂度,时间复杂度衡量计算的次数,空间复杂度衡量需要的存储空间。 算法竞赛的题目,都会对代码的运行时间和空间做出要求。一般情况下,C++代码的运行时间是1s,即代码必须在1s内计算结束并输出结果;空间一般不超256MB。
例2、运算次数的比较
计算1-100的和。用两种方法做:

第一种,使用循环:

#include<iostream>
using namespace std;
int main(){
 int sum = 0;
 for(int i = 1;i<=100;i++){
  sum += i;
}
 cout<<sum<<endl;
 return 0;
}

这种做法,一共计算了100次(加法)。
第二种,使用公式:

#include<iostream>
using namespace std;
int main(){
 int sum = (1+100)*100/2;
 cout<<sum<<endl;
 return 0;
}

第一种方法,运算次数有100次,第二种方法只有3次(加法、乘法、除法),第二种做法的效率更高。但是两个做法的结果都是一样的。

例3、申请空间大小的比较
第一段代码:

#include<iostream>
using namespace std;
int main(){
 int sum = 0;
 for(int i = 0;i<10;i++){
  int temp;
  cin>>temp;
  sum += temp;
}
 cout<<sum<<endl;
 return 0;
}

代码的作用是求输入的十个整数的和。每次输入都要定义一个变量来存放输入数据,这样就用了10次定义,这一个程序占用了11个空间(还有sum)。我们可以将temp定义在外面,只用定义一次也能够实现上面的功能:

#include<iostream>
using namespace std;
int main(){
 int sum = 0;
 int temp;
 for(int i = 0;i<10;i++){
  cin>>temp;
  sum += temp;
}
 cout<<sum<<endl;
 return 0;
}

这样就只需要申请两块空间就可以了。
由此可见,对于同一个问题,常常存在不同的解决方案,我们设计不同的代码去实现的时候,有高
效的,也有低效的。计算机运算的次数和所占空间大小是不同的,算法编程竞赛主要的考核点就是在限定的时间和空间内解决问题.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值