算法的时间复杂度——大O分析法(转载)
原文地址: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分析法(转载)相关推荐
- 算法复杂度的表示法_用简单的英语算法:时间复杂度和Big-O表示法
算法复杂度的表示法 by Michael Olorunnisola 通过Michael Olorunnisola 用简单的英语算法:时间复杂度和Big-O表示法 (Algorithms in plai ...
- 算法与数据结构(part1)--算法简介及大O表示法
学习笔记,仅供参考 文章目录 算法与数据结构--基于python 数据结构和算法简介 算法引入 例题A 算法的概念 例题A的优化 算法效率的衡量 时间复杂度与大O记法 例题A的时间复杂度 如何理解大O ...
- 算法的时间复杂度和性能分析
算法的引入 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法! 我们可以不看兵法在战 ...
- 算法概念:大O表示法/小o表示法/Ω/Θ
如果算法A需要的时间与f(n)成正比,则算法A称为f(n)阶,表示为O(f(n)).函数f(n)称为算法的增率函数(growth-rate function).该表示法使用大写字母O来表示(order ...
- 信用5C分析法(转载)
1 信用5C分析法 2 进行信用分析的五个方面 3 企业了解"5C"的三种途径 4 实例分析 5 信用5C分析的应用意义 信用5C分析法 西方商业银行在长期的经营时间中,总结归纳出 ...
- 简单分析算法的时间复杂度
目录 一.什么是算法的时间复杂度 二.如何分析一个算法的时间复杂度 1.有确定次数的算法 2.次数不确定的算法 一.什么是算法的时间复杂度 时间复杂度是一个函数 ,定性描述一个算法(程 ...
- 大O表示法(复杂度分析)
程序 = 数据结构 + 算法 大O表示法 什么是程序?相信学过编程的人都知道,程序由数据结构和算法构成,想要写出好的的程序,首先得了解数据结构和算法.一切脱离数据结构和算法的程序设计都是耍流氓! 什么 ...
- 6大思维管理方式分析法,绝对干货,超实用!
无论是在工作中还是生活中,都要时刻保持着清醒的头脑,所以,今天小编为大家带来了6大思维管理方式分析法,需要的赶紧来哦! 1. SWOT分析 SWOT分析具体是指:(1) S (strengths)是优 ...
- 【计算机基础】 经常使用的排序算法的时间复杂度和空间复杂度
经常使用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 高速排序 O(n2) O(n*log2n) 不稳 ...
- 关于算法的时间复杂度和空间复杂度的总结
一.算法的概念 算法(Algorithm)是将一组输入转化为一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成.算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题. 二. ...
最新文章
- POJ 1017 Packets 贪心 模拟
- AI 产品经理:别让你的智能对话产品变“智障”
- 浅析Linux线程调度
- Fedora设置DVD为yum源
- 【TensorFlow】笔记5:图像数据处理
- java实现 SSL双向认证
- Hash冲突处理终极版
- 最有效的创建大数据模型的6个技巧
- 近5年133个Java面试题 你会几个?
- 在NSUserDefaults中存储自定义类型的数据
- 网建短信通 使用java调用API发送短信时总是返回-41,关键的关键,仅在于一个问号:(
- Charles青花瓷抓包
- 【有限元分析】有限元仿真分析与解析解的结果对比——以简单悬臂梁的受力分析为例
- 如何自制自平衡云台基于mpu6050,arduino输出三维倾斜角度的方法(含源码,库)
- 幂级数展开求积分_蛮力硬推定积分基本公式
- WebSocket 消息推送
- 殇雪计算机谱子,殇雪简谱(歌词)-云菲菲演唱-桃李醉春风记谱
- Python可配置爬虫_自定义IP+数据库+日志+分类+分页(代理IP破解反爬虫)
- 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
- Brave与Uphold合作推出钱包以奖励用户浏览