1. 何为数据结构?何为算法?

简单来说,数据结构就是数据的存储方式,比如数组就是把数据存在一段连续的内存上,而链表则是通过指针的关联将数据存在任意可用的内存上;栈是先进后出,队列是先进先出。

而算法则是对这些数据的操作方法,比如数据的插入、查找、删除、排序等。

二者相辅相成,互为一体,数据结构为算法服务,而算法要在指定数据结构上进行操作。

2. 复杂度分析?

学习数据结构和算法的目的是为了在实际应用的时候更加优化地利用内存,提高程序运行效率,而复杂度分析则是给我们提供一个衡量代码质量好坏的标准。

如果我们在不运行程序的情况下就可以定性知道代码的内存占用和时间消耗,这将会给我们提供一个当前程序的总体评估和未来的改进方向。

直接运行程序就可以知道算法的执行时间和占用内存,但这个过程往往会受到运行环境和数据规模的影响,因此,我们需要一个不用进行具体测试就可以粗略估计算法执行效率的方法,这就是复杂度分析。

3. 时间复杂度

3.1 大 O 复杂度表示法

int cal(int n)

{

int sum = 0;

int i = 1;

for (; i <= n; ++i)

{

sum = sum + i;

}

return sum;

}

我们假设每行代码的运行时间为 t,则第一二行代码需要时间为 2 * t,第三四行代码需要时间为 2n * t,总时间为 (2n+2) * t,代码运行总时间与 n 成正比。

用大 O 法可表示为 O(2n+2),这并不代表代码的实际执行时间,只是表征代码执行时间随数据规模的变化趋势。

当 n 足够大时,低阶、常量和系数就可以忽略不计,直接表示为 O(n)。

3.2 常用分析方法

循环最多代码,重点关注

串行代码,复杂度相加

嵌套代码,复杂度相乘

3.3 几种常见复杂度

多项式量级

常量阶

对数阶

线性阶

线性对数阶

乘方阶

非多项式量级(Non-Deterministic Polynomial)

指数阶

阶乘阶

非多项式量级的算法的执行时间会随着数据规模的扩大急剧增加,是非常低效的算法。

3.4 进阶情况

最好情况时间复杂度(Best Case Time Complexity)

最坏情况时间复杂度(Worst Case Time Complexity)

平均情况时间复杂度(Average Case Time Complexity)

以查找为例,看如下代码

// n 表示数组 array 的长度

int find(int[] array, int n, int x)

{

int i = 0;

int pos = -1;

for (; i < n; ++i)

{

if (array[i] == x)

{

pos = i;

break;

}

}

return pos;

}

最好情况时间复杂度就是在程序最理想的状态下,数组第一个元素就是我们要查找的元素,只需要查找一次;而最坏情况时间复杂度就是在程序最糟糕的状态下,数组最后一个元素才是我们要查找的元素,需要查找完整个数组;

事实上,我们要查找的元素可能存在数组中的任何一个位置,甚至可能不存在于数组中,因此,考虑所有情况出现的概率,求出各种情况下时间复杂度的平均值,也就是平均情况时间复杂度。

均摊情况时间复杂度(Amortized Case Time Complexity)

// array 表示一个长度为 n 的数组

// 代码中的 array.length 就等于 n

int[] array = new int[n];

int count = 0;

void insert(int val)

{

if (count == array.length)

{

int sum = 0;

for (int i = 0; i < array.length; ++i)

{

sum = sum + array[i];

}

array[0] = sum;

count = 1;

}

array[count] = val;

++count;

}

这段代码的功能是向数组中插入一个元素,当数组未满时,直接插入,时间复杂度为O(1);当数组满时,先计算数组所有元素的和,再插入元素,时间复杂度为 O(n)。

并且,两种复杂度不同的操作具有一定的规律,一系列O(1)的插入导致数组占满,然后紧跟着一个O(n) 的插入,再继续循环往复。

这时候,我么就可以把O(n) 复杂度的这个操作平均分摊到前面的O(1)复杂度操作上去,整体的时间复杂度也就变成了O(1),这就是均摊情况时间复杂度。

如果大部分情况时间复杂度都很低,只有少数情况时间复杂度较高,并且这些操作具有前后的时序关系,那么我们就可以应用均摊情况时间复杂度来进行分析。通常来说,均摊情况时间复杂度就等于最好情况时间复杂度。

4. 时间复杂度的计算

同阶函数集合

称为与f(n)同阶的函数集合。

低阶函数集合

称为比 f(n)低阶的函数集合。

高阶函数集合

称为比f(n)高阶的函数集合。

严格低阶函数集合

称为f(n)的严格低阶函数集合。

严格高阶函数集合

称为比f(n)高阶的函数集合。

迭代法求解递归方程

Master 定理求解递归方程

5. 空间复杂度

空间复杂度表征程序占用内存随着数据规模的变化趋势,分析程序中数据的分配空间即可,一般常见的复杂度有O(1)、O(n)、O(n*n)。

怎么算matlab算法复杂度,算法复杂度分析相关推荐

  1. matlab 投票法_SVM算法原理及其Matlab应用

    <SVM算法原理及其Matlab应用>由会员分享,可在线阅读,更多相关<SVM算法原理及其Matlab应用(18页珍藏版)>请在人人文库网上搜索. 1.SVM 算法及其 Mat ...

  2. 智能优化算法:海鸥算法原理及Matlab代码

    智能优化算法:海鸥算法原理及Matlab代码 文章导航 1. 算法原理 2. SOA算法流程 2.1 迁徙行为(exploration ability) 2.2 攻击行为(exploitation a ...

  3. matlab基于人工蜂群算法的函数优化分析【matlab优化算法十一】

    基于人工蜂群算法的函数优化分析 自然界中的群居昆虫,它们虽然个体结构简单,但是通过个体间的合作却能够表现出极其复杂的行为能力.受这些社会性昆虫群体行为的启发,研宄者通过模拟这些群体的行为提出了群集智能 ...

  4. 海量图片相似度算法软件,海量数据相似度匹配

    计算图像相似度的算法有哪些 SIM=StructuralSIMilarity(结构相似性),这是一种用来评测图像质量的一种方法. 由于人类视觉很容易从图像中抽取出结构信息,因此计算两幅图像结构信息的相 ...

  5. 仿射投影算法 matlab,基于仿射投影算法的时延估计

    Signal Process & System 号与系 基于仿射投影算法的时延估计 摘要:在时间延迟计中,通常利用互相关箅法对8寸延进行估计.然而,互相关算法受操声影较人,在低信比时无法准确对 ...

  6. mcra matlab,噪声估计的算法及matlab实现毕业设计

    噪声估计的算法及matlab实现毕业设计 (53页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 I噪声估计的算法及MATLAB实现毕业设计 ...

  7. PSO粒子群算法(鸟群算法)计算二元函数极值(C语言实现、matlab工具箱实现)

    算法讲解和感悟   PSO算法是经典的智能优化算法,在数学建模等比赛中非常常用,求解时的效果不错.对于智能优化算法,个人倾向于matlab实现,因为计算起来非常方便.但是这次因为老师的要求,准备C语言 ...

  8. 图片对比相似度算法标准,图片相似度匹配算法

    怎么对比两张图片的相似度 1.首先打开微信,选择底部"发现".如图所示.2.然后在点击进入"小程序".如图所示.3.然后输入"腾讯AI体验中心&quo ...

  9. matlab共轭梯度法_优化算法之牛顿法

    牛顿法(Newton's method)是一种在实数域和复数域上近似求解方程的方法,,它使用函数f(x)的泰勒级数的前面几项来寻找方程f(y)=0的根. 牛顿法最初由艾萨克·牛顿在<Method ...

  10. pagerank算法实现matlab,Matlab 入门及PageRank算法求解.ppt

    Matlab 入门及PageRank算法求解 矩阵运算 + 矩阵加 - 矩阵减 * 矩阵乘 / 矩阵左除 \ 矩阵右除 ^ 矩阵幂 维数相同才能加减:方 阵才能求幂. 注意左乘,右乘. a\b?求a* ...

最新文章

  1. Cortex-M3 异常中断向量表
  2. python基础语法 第0关print-python学习笔记1,新手小白也能看得懂
  3. 遇到一个git的大坑 src refspec master does not match any error: failed to push some refs to
  4. Azure Arc:微软是怎么玩多云游戏的?
  5. mpvue 中使用 wx-f2 tooltip 失效解决
  6. 南开大学计算机原理在线作业,南开大学20秋《计算机原理》在线作业-1(参考答案)...
  7. 调查显示:被黑过的公司难以找到投资
  8. Spring学习总结(25)——注解@PostConstruct和@PreDestroy使用总结
  9. Codeforces 1043F(容斥+dp)
  10. java 面试,java 后端面试,数据库方面对初级和高级程序员的要求
  11. java8 metaspacesize_java-8 – Java8 MetaspaceSize标志不起作用
  12. hdu 二分图最大匹配问题 (hdu 1083)
  13. 2021-2027全球与中国锁模激光器市场现状及未来发展趋势
  14. pandas警告SettingWithCopyWarning: A value is trying to ...原理和解决方案
  15. html空格符的代码用转义字符怎么表示,html空格符号标签 空格符号怎么打出来HTML?...
  16. Electron加密打包文件
  17. 优化算法+神经网络:神经网络自动参数优化
  18. webrtc janus服务器部署在公网,coturn转发媒体流
  19. 汉寿计算机职业中专,汉寿县职业中等专业学校2021年有哪些专业
  20. axios get请求下载后端文件流xlsx文件

热门文章

  1. 三个变量中怎么找出中间值_一文理解神经网络中的偏差和方差
  2. cocos2dx java 调用lua_Cocos2d-x Lua实现从Android回调到Lua的方法
  3. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用
  4. ajax获取后台数据出错parsererror
  5. # EXP8 Web基础
  6. 参数的范数正则/惩罚(parameter norm penalties)
  7. Android 关于“NetworkOnMainThreadException”
  8. PageRank算法简介及Map-Reduce实现
  9. 更新部分字段 NHibernate
  10. 美印钞一万亿焉知祸福?