搜索
简帛阁>技术文章>大O记法

大O记法

1 大O:数步数

数步数 为了统一描述,大O不关注算法所用的时间,只关注其所用的步数。

数组不论多大,读取都只需1步。用大O记法来表示,就是:O(1) 很多人将其读作“大O1”,也有些人读成“1数量级”。一般读成“O1”。虽然大O记法有很多种读法,但写法只有一种。

若用大O记法来描述一种处理一个N元素的数组需花N步的算法的效率,很简单,就是O(N)。

 

2 常数时间与线性时间

大O解答的是这样的问题:当数据增长时,步数如何变化?

O(N)算法所需的步数等于数据量,意思是当数组增加一个元素时,O(N)算法就要增加1步。而O(1)算法无论面对多大的数组,其步数都不变。

 

 

O(N)呈现为一条对角线。O(N)也被称为线性时间。

O(1)则为一条水平线,O(1)也被称为常数时间。

因为大O主要关注的是数据量变动时算法的性能变化,不管数据量怎样变化,算法的步数都恒定,所以这也是常数时间,也可以表示为O(1)。

O(1)就是用来表示所有数据增长但步数不变的算法。

 

3 同一算法,不同场景

线性查找并不总是O(N)的。当要找的元素在数组末尾,那确实是O(N)。但如果它在数组开头,1步就能找到的话,那么技术上来说应该是O(1)。所以概括来说,线性查找的最好情况是O(1),最坏情况是O(N)。大O记法一般都是指最坏情况。

 

4 第三种算法

二分查找的大O记法是:O(logN)我将其读作“O log N”。归于此类的算法,它们的时间复杂度都叫作对数时间。

简单来说,O(logN)意味着该算法当数据量翻倍时,步数加1。

 

 

 

5 对数

log即是对数(logarithm)。

对数是指数的反函数

 

6 解释O(log N)

当我们说O(logN)时,其实指的是O(log2N),不过为了方便就省略了2而已。

二分查找所干的事情。它就是不断地将数组拆成两半,直至范围缩小到只剩你要找的那个元素。

简单来说,O(logN)算法的步数等于二分数据直至元素剩余1个的次数。

 

 每次数据量翻倍时,O(N)算法的步数也跟着翻倍,O(logN)算法却只需加1。

 

参考:数据结构与算法图解.3

 

1O:数步数数步数为了统一描述,O不关注算法所用的时间,只关注其所用的步数。数组不论多大,读取都只需1步。用O记法来表示,就是:O(1)很多人将其读作“O1”,也有些人读成“1数量级”。一般读
面试题你了解O符号(bigOnotation)么?你能给出不同数据结构的例子么?O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是一个渐进上界。O符号也可用来描述其他的行为,比如:内
O表示法指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用O表示法,这个运行时间为O(n)。单位秒呢?没有——O表示法指的并非以秒为单位的速度。
O表示法指出算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用O表示法,这个运行时间为O(n)。主要单位不是秒啊,O表示法值得并非以秒为单位的速度,而是
定义​对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率。对于算法的时间
在描述算法复杂度时,经常用到o(1),o(n),o(logn),o(nlogn)来表示对应算法的时间复杂度,这里进行归纳一下它们代表的含义:这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用
1、时间复杂度o(1),o(n),o(logn),o(nlogn)。算法时间复杂度的时候有说o(1),o(n),o(logn),o(nlogn),这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,
天面试上来就是一个算法,平时基本的算法还行,结果变个法就不会了。。。感觉应该刷一波Leecode冷静下。。。今天抽空看下。题目就是要求O(n)复杂度求无序列表中第K的元素如果没有复杂度的限制很简单
Flutter在今年的GoogleI/O上发布了许多重磅更新,欢迎大家和我们一起了解其中不容错过的7亮点,点击这里观看Flutter不容错过的7亮点视频了解更多信息。Flutter22首先自然是
ps:郁闷纳,一个整形变量,为什么不做一强制转换呢!看过第六轮黑防实验室的两位大侠对Oblog30Access版本的渗透过程,敬佩之情犹如滔滔江水连绵不绝,又如黄河之水一发而不可收拾,尤其是他们把社会