蓝桥杯备赛--基础算法(1)

一,时空复杂度

(一)时间复杂度

1,衡量算法执行时间输入规模增长的增长率,通过分析基本操作的执行次数来确定

2,常见包含:常数时间O(1)  就是说时间长短不随输入规模而改变;线性时间O(n)  我的理解就是类似线性函数;对数时间O(log n) 平方时间O(n^2)等。

3,在计算时关心的只有复杂度的数量级,并不严格要求表达式。

也就是说假如有两个并列的for循环,他们的时间复杂度都是o(1),执行1~n,

则时间复杂度为o(2n)相当于o(n),前面那个常数不看

4,一般来说,评测机1秒大约可以跑2e8次(2*10^8)运算,那么就要尽可能地让我们的程序运算规模数量级控制在1e8以内。

(二)空间复杂度

大体类似时间复杂度,是衡量算法执行过程中所需的存储空间随输入规模增长的增长率

通过分析算法中所使用的额外存储空间的大小来确定的

一般来说题目不会卡空间只会卡时间

(三)分析技巧

1,基本操作:比如算术操作(加法,减法,位运算等),比较操作,赋值等,这种一般是o(1)

2,关注循环结构:一般一个for()是o(n),里面嵌套一个是o(n^2)

3,递归算法:比较复杂,确定递归的深度以及每个递归调用的时间和空间开销;一般是画递归树来分析;

有个小结论:一个二叉树,n层,节点数(执行递归调用的次数)为2^n个,实际还应该在此基础上减一,但是估算就忽略了

4,善用一些已经知道的常见算法的结果来分析

二,枚举

(一)枚举算法介绍

1,简单来说就是穷举所有可能,基本思想是:将问题的解空间中的每个可能的解都枚举出来,并进行验证和比较,最后找到解

2,只能由于规模小,解空间可以穷举的情况

(二)解空间的类型

1,一个范围内的所有数字(或者二元组,字符串等数据),或者满足某个条件的所有数字

举个例子:找n的所有偶数因子,想法如下:

(1)先找到n的所有因子,再从中筛选出偶数;那么其解空间就是n的所有因子

(2)先找出所有偶数,在看是否是n的因子;那么解空间就是所有的偶数

2,也可是解空间树,一般分为子集树和排列树,需要使用回溯法来枚举

(三)循环枚举解空间

1,首先确定维度,就是需要枚举的变量个数

比如说要一个数字,那就是一个循环去枚举;如果是一个二元组,那就要双重循环分别枚举第一个和第二个变量

2,对于每个变量,确定其可能的取值范围,这一步是时间复杂度优化的关键

举例:找n的所有偶数因子,那么确定的取值范围肯定是n的因子,就不要往所有的偶数上去想

3,再循环体内,对每个可能解进行处理,变成真正的解

三,模拟

(一)模拟算法介绍

1,通过模拟实际情况来解决问题,一般容易理解但比较复杂

2,有较多的简单但不好处理的部份组成,会写比较多的小函数来帮助解题

3,解法比较暴力,一般不会卡时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值