第四课
本课主题: 算法效率的度量和存储空间需求
教学目的: 掌握算法的渐近时间复杂度和空间复杂度的意义与作用
教学重点: 渐近时间复杂度的意义与作用及计算方法
教学难点: 渐近时间复杂度的意义
授课内容:
一、算法效率的度量
算法执行的时间是算法优劣和问题规模的函数。评价一个算法的优劣,可以在相同的规模下,考察算法执行时间的长短来进行判断。而一个程序的执行时间通常有两种方法:
1、事后统计的方法。
缺点:不利于较大范围内的算法比较。(异地,异时,异境)
2、事前分析估算的方法。
程序在计算机上运行所需时间的影响因素
算法本身选用的策略
问题的规模
规模越大,消耗时间越多
书写程序的语言
语言越高级,消耗时间越多
编译产生的机器代码质量
机器执行指令的速度
综上所述,为便于比较算法本身的优劣,应排除其它影响算法效率的因素。
从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量度。 (原操作在所有该问题的算法中都相同)
T(n)=O(f(n))
上示表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度
求4*4矩阵元素和,T(4)=O(f(4))
f=n*n;
sum(int num[4][4])
{ int i,j,r=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
r+=num[i][j]; /*原操作*/
return r;
}
最好情况:
T(4)=O(0)
最坏情况:
T(4)=O(n*n)
ispass(int num[4][4])
{ int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(num[i][j]!=i*4+j+1)
return 0;
return 1;
}
原操作执行次数和包含它的语句的频度相同。语句的频度指的是该语句重复执行的次数。
语句
频度
时间复杂度
{++x;s=0;}
1
O(1)
for(i=1;i<=n;++i)
{++x;s+=x;}
n
O(n)
for(j=1;j<=n;++j)
for(k=1;k<=n;++k)
{++x;s+=x;}
n*n
O(n*n)
O(log n)

基本操作的执行次数不确定时的时间复杂度
平均时间复杂度
依基本操作执行次数概率计算平均
最坏情况下时间复杂度
在最坏情况下基本操作执行次数
二、算法的存储空间需求
类似于算法的时间复杂度,空间复杂度可以作为算法所需存储空间的量度。
记作:
S(n)=O(f(n))
若额外空间相对于输入数据量来说是常数,则称此算法为原地工作
如果所占空间量依赖于特定的输入,则除特别指明外,均按最坏情况来分析。
三、总结
渐近时间复杂度
空间复杂度

本文出自 51CTO.COM技术博客

转载于:https://blog.51cto.com/1539867/396241

第四课:算法效率的度量和存储空间需求相关推荐

  1. 【数据结构】之算法效率的度量

    算法效率的度量 算法效率的度量是通过时间复杂度和空间复杂度来描述的. 时间复杂度 一个语句的频度是指该语句在算法中被重复执行的次数.算法中所有语句的频度之和记为T(n) 算法的时间复杂度记为 T(n) ...

  2. OpenMMLab 实战营打卡 - 第 四 课 目标检测算法基础

    (四)计算机视觉之目标检测算法基础 目录 前言 一.目标检测是什么? 1.目标检测VS图像分类 2.检测最朴素方法--滑窗 Sliding Window (1)滑窗的效率问题 (2)改进 3.目标检测 ...

  3. 算法效率分析基础-算法四

    主要内容: 介绍研究算法效率的通用框架 介绍三种符号: O(读作O),Ω(读作omega),和Θ(读作theta).这些数学借来的符号已经成为讨论算法效率的特定语言 使用通用框架系统对非递归算法进行分 ...

  4. 斯坦福大学机器学习第四课“逻辑回归(Logistic Regression)”

    斯坦福大学机器学习第四课"逻辑回归(Logistic Regression)" 本次课程主要包括7部分: 1) Classification(分类) 2) Hypothesis R ...

  5. 《迅雷链精品课》第四课:区块链技术的发展趋势

    上一节课我们系统学习了目前主流的区块链项目的技术架构:思考我们在设计具体的业务架构时,需要决定什么业务应该上链,什么业务应该用链下服务处理:今天我们将深入了解区块链技术发展趋势.在区块链落地应用过程中 ...

  6. 第十四课 k8s源码学习和二次开发原理篇-调度器原理

    第十四课 k8s源码学习和二次开发原理篇-调度器原理 tags: k8s 源码学习 categories: 源码学习 二次开发 文章目录 第十四课 k8s源码学习和二次开发原理篇-调度器原理 第一节 ...

  7. 第四课.LinuxShell编程

    第四课目录 什么是Shell Shell编程 创建脚本 注释 Shell变量 基本运算 字符串,数组,分支循环,函数 应用实例 猜数字 获取CPU使用情况 探测本地网络 什么是Shell 有人说Lin ...

  8. MIT新研究:过去80年,算法效率提升到底有多快?

    来源:MIT,新智元 编辑:David [导读]随着摩尔定律走向终结,靠提升计算机硬件性能可能越发难以满足海量计算的需要,未来的解决之道在于提升算法的效率.MIT的这篇新论文总结了过去80年来,算法效 ...

  9. 3.5 Bounding Box 预测-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.4 卷积的滑动窗口实现 回到目录 3.6 交并比 Bounding Box 预测 (Bounding Box Predictions) 在上一个视频中,你们学到了滑动窗口 ...

最新文章

  1. 初试CSS(二):选择器
  2. Golang 并发concurrency
  3. iOS Winding Rules 缠绕规则
  4. [转]浅谈CMD和win powershell的区别
  5. 移动文件读/写指针----lseek
  6. 计算机项目教学法探讨,【计算机教学论文】项目教学法在计算机教学中的应用(共3594字)...
  7. OpenShift 4 - 部署Mirror Registry并复制Image
  8. Spotlight监控Oracle--Spotlight On Oracle安装和使用
  9. Opengl1.1绘图之GL_COLOR_LOGIC_OP
  10. c语言做的计算器小程序,c语言实现计算器小程序
  11. RecyclerView 实现多种布局(上半部Gridview样式,下半部Listview样式)以及多种数据类型实现不同布局
  12. 武汉市电子信息职业技术学校现代电子电工高水平实训基地
  13. cad黑色背景变成白色_CAD操作很难记?记住了又易混淆?那就看这里!
  14. 从0到1实现Web端H.265播放器:视频解码篇
  15. JSON 解析嵌套json字符串,一个json字符串中嵌套另一个json字符串 (附解析代码)
  16. syn 攻击脚本 python_Python Scapy实现SYN Flood攻击
  17. 【复合五点高斯-勒让德公式】
  18. Java Springboot 使用 OpenOffice 实现Excel转PDF
  19. Android 禁止键盘弹出 关闭键盘 禁用键盘 禁用输入法 关闭输入法
  20. 解决supervisor unix:///var/run/supervisor.sock no such file, 亲测有效

热门文章

  1. “平头哥”半导体公司
  2. 11个优秀的Android开发开源项目
  3. 学习笔记 ACCESS 延迟注入
  4. iOS之深入了解控制器View的加载
  5. [LeetCode]: 96: Unique Binary Search Trees
  6. 演讲十忌(翻译并制作成PPT)
  7. 在Cisco路由器中配置DHCP服务器
  8. 您详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus
  9. iOS 高效开发-----实现description 方法 (续)
  10. C#算法大全-1-Hanoi