数据结构与算法--算法复杂度

前言

常见数据结构与算法:
<1>数据结构:数组,链表,栈,队列,散列表,二叉树,堆,跳图,树,Tire树

<2>算法:递归,排序,二分查找,搜索,哈希算法,贪心算法,分治算法,回溯算法,动态规划,字符串匹配算法。

一、算法复杂度

1. T(n)= O(F(n))

T(n)代表代码执行的时间;n表示数据规模的大小;F(n)表示每行代码的次数总和。因为这是一个公式,所以用F(n)来表示。公式中的O表示代码的执行时间T(n)与F(n)表达式成正比。

2.复杂度分析法则

<1>单段代码看高频:比如循环。
<2>多段代码取最大:比如一段代码有单循环和多重循环,那么取多重循环的复杂度。
<3>嵌套代码求乘积:比如递归,多重循环等。
<4>多个规模求加法:比如方法有两个参数控制两个循环的次数,那么这时候就取二者复杂度相加。

3.时间复杂度分析

<1>只关注循环执行次数最多的一段代码
<2>假发法则:总复杂度等于量级最大的那段代码的复杂度
<3>乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

4.常见时间复杂度实例分析

复杂度量级(按数量级递增)
多项式阶:随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长。
<1>常数阶 O(1)
<2>对数阶 O(log n)
<3>线性阶O(n)
<4>线性对数阶O(nlog n)
<5>平方阶O(n^2)
非多项式阶:随着数据规模的增长,算法的执行时间和空间占用暴增,这类算法性能极差
<6>指数阶O(2^n)
<7>阶乘阶O(n!)

5.复杂度增长趋势图

在这里插入图片描述

6.复杂度分析概念

<1>最坏情况时间复杂度:代码在最坏情况下执行的时间复杂度
<2>最好情况时间复杂度:代码在最理想情况下执行的时间复杂度
<3>平均时间复杂度:代码在所有情况下执行的次数的加权平均值
<4>均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等于低级别复杂度。

总结

通常在写代码的时候要同时注重代码的时间复杂度和空间复杂度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值