原文地址:https://my.oschina.net/gooke/blog/684026

一下为本人笔记:)


场景:在解决计算机科学领域的问题时,经常有好多个方法都可以,想找到最优的方法,就有了时间复杂度。

时间复杂度

1.基于时间来衡量算法的效率高低。

2.时间:算法执行一个特定输入规模的函数所需要的时间。

案例!:

编写一个函数,找出数组中的最小值。

方法一:只是简单的遍历数组的每一个元素,然后用变量curMin保持当前的最小值。

int CompareSmallestNumber(int array[]) {int curMin;//把数组的第一个元素赋值给当前最小值
curMin = array[0];/** 遍历数组找出最小值*/for (int x = 1; x < 10; x++) {if (array[x] < curMin) {curMin = array[x];}}// 返回最小值return curMin;​}

方法二:让数组中的每一个元素和数组中的所有元素对比,如果某个元素小于或等于数组中所有的元素,那么这么元素就是数组中的最小元素。

int CompareToAllNumbers(int array[]) {boolean isMin;int  min =0 ;/** 遍历数组中的每一个元素*/for (int i = 0; i < 10; i++) {isMin = true;for (int j = 0; j < 10; j++) {/** array[i]和数组的其他元素比较* 如果array[i]大于数组中的任何一个元素* 就说明array[i]不是最小值 */if (array[i] > array[j]){isMin = false;}}//如果是最小元素,保存下该元素并结束外层循环if (isMin){min =array[i];break;}}return min;}

如何计算呢

“大O”会设法表达出n个输入项被“使用”了多少次。“使用”一词在不同的算法中会有不同的意思,在一个算法中表示“输入项”和一个常量了多少次,而在另外一个算法中可能表示“输入项”被往数据结构中添加了多少次,等等。

先来看方法一:

n(例子中是10)个输入项,每一个输入项仅在和最小值比较的时候被使用了一次。在“大O表示法”(Big-O Notation)中,它被写作O(n),也就是我们熟知的线性时间(linear time)。线性时间意味着,算法运行所需的时间和输入规模成正比。

我们把变量curMin初始化为数组的第一个值,也就是说,“输入项”被使用了一次。所以“大O表示法”应该是O(n+1)才对。实际上,“大O表示法”关心的是当输入规模n趋于无穷大时算法的运行时间。当‘n’趋于无穷大时,常量1就变得微不足道,可以忽略了。

所以,函数CompareSmallestNumber的“大O表示法”是O(n)而不是O(n+1)。

再看方法二:

这个算法最坏的情况是怎样的?数组中的最小值是数组的最后一个元素,就是最坏的情况,因为为了找到最小值,它不得不把数组从头到尾遍历一遍。数组中的每一个元素,都要和其他元素(包括自己)比较一次,一共做了100次比较,因为我们的输入规模是10,10x10=100=10²。当输入规模是n时,输入项会被使用n²次。O(n²)。

还有一些常见的大O符号,如 O(n²),O(log n),O(n log n)。

转载于:https://www.cnblogs.com/mogujiang/p/7779545.html

算法的时间复杂度——大O分析法(转载)相关推荐

  1. 算法复杂度的表示法_用简单的英语算法:时间复杂度和Big-O表示法

    算法复杂度的表示法 by Michael Olorunnisola 通过Michael Olorunnisola 用简单的英语算法:时间复杂度和Big-O表示法 (Algorithms in plai ...

  2. 算法与数据结构(part1)--算法简介及大O表示法

    学习笔记,仅供参考 文章目录 算法与数据结构--基于python 数据结构和算法简介 算法引入 例题A 算法的概念 例题A的优化 算法效率的衡量 时间复杂度与大O记法 例题A的时间复杂度 如何理解大O ...

  3. 算法的时间复杂度和性能分析

    算法的引入 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法! 我们可以不看兵法在战 ...

  4. 算法概念:大O表示法/小o表示法/Ω/Θ

    如果算法A需要的时间与f(n)成正比,则算法A称为f(n)阶,表示为O(f(n)).函数f(n)称为算法的增率函数(growth-rate function).该表示法使用大写字母O来表示(order ...

  5. 信用5C分析法(转载)

    1 信用5C分析法 2 进行信用分析的五个方面 3 企业了解"5C"的三种途径 4 实例分析 5 信用5C分析的应用意义 信用5C分析法 西方商业银行在长期的经营时间中,总结归纳出 ...

  6. 简单分析算法的时间复杂度

    目录 一.什么是算法的时间复杂度 二.如何分析一个算法的时间复杂度 1.有确定次数的算法 2.次数不确定的算法 一.什么是算法的时间复杂度         时间复杂度是一个函数 ,定性描述一个算法(程 ...

  7. 大O表示法(复杂度分析)

    程序 = 数据结构 + 算法 大O表示法 什么是程序?相信学过编程的人都知道,程序由数据结构和算法构成,想要写出好的的程序,首先得了解数据结构和算法.一切脱离数据结构和算法的程序设计都是耍流氓! 什么 ...

  8. 6大思维管理方式分析法,绝对干货,超实用!

    无论是在工作中还是生活中,都要时刻保持着清醒的头脑,所以,今天小编为大家带来了6大思维管理方式分析法,需要的赶紧来哦! 1. SWOT分析 SWOT分析具体是指:(1) S (strengths)是优 ...

  9. 【计算机基础】 经常使用的排序算法的时间复杂度和空间复杂度

    经常使用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 高速排序 O(n2) O(n*log2n) 不稳 ...

  10. 关于算法的时间复杂度和空间复杂度的总结

    一.算法的概念   算法(Algorithm)是将一组输入转化为一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成.算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题. 二. ...

最新文章

  1. POJ 1017 Packets 贪心 模拟
  2. AI 产品经理:别让你的智能对话产品变“智障”
  3. 浅析Linux线程调度
  4. Fedora设置DVD为yum源
  5. 【TensorFlow】笔记5:图像数据处理
  6. java实现 SSL双向认证
  7. Hash冲突处理终极版
  8. 最有效的创建大数据模型的6个技巧
  9. 近5年133个Java面试题 你会几个?
  10. 在NSUserDefaults中存储自定义类型的数据
  11. 网建短信通 使用java调用API发送短信时总是返回-41,关键的关键,仅在于一个问号:(
  12. Charles青花瓷抓包
  13. 【有限元分析】有限元仿真分析与解析解的结果对比——以简单悬臂梁的受力分析为例
  14. 如何自制自平衡云台基于mpu6050,arduino输出三维倾斜角度的方法(含源码,库)
  15. 幂级数展开求积分_蛮力硬推定积分基本公式
  16. WebSocket 消息推送
  17. 殇雪计算机谱子,殇雪简谱(歌词)-云菲菲演唱-桃李醉春风记谱
  18. Python可配置爬虫_自定义IP+数据库+日志+分类+分页(代理IP破解反爬虫)
  19. 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
  20. Brave与Uphold合作推出钱包以奖励用户浏览

热门文章

  1. 【渝粤题库】陕西师范大学164105 物流管理学 作业(高起专)
  2. ubuntu16.04下ROS操作系统学习笔记(九)Moveit
  3. 矩阵分解在推荐系统中的应用:NMF和经典SVD实战(2)
  4. 浅议基因测序技术的代际:后记
  5. Rabbit MQ 安装
  6. 思科接入层交换机故障
  7. 大数模拟——K - Large Division LightOJ - 1214
  8. Go语言学习之8 goroutine详解、定时器与单元测试
  9. AngularJS 模板
  10. JavaScript--如何插入JS