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

大O 表示法

大O表示法

指出了算法有多快。例如,假设列表包含n个元素。简
单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,
这个运行时间为O(n)。单位秒呢?没有——大O表示法指的并非以秒为单位的速度。大O表示法
让你能够比较操作数,它指出了算法运行时间的增速。

 

大O 表示法指出了最糟情况下的运行时间
假设你使用简单查找在电话簿中找人。你知道,简单查找的运行时间为O(n),这意味着在最
糟情况下,必须查看电话簿中的每个条目。如果要查找的是Adit——电话簿中的第一个人,一次
就能找到,无需查看每个条目。考虑到一次就找到了Adit,请问这种算法的运行时间是O(n)还是
O(1)呢?
简单查找的运行时间总是为O(n)。查找Adit时,一次就找到了,这是最佳的情形,但大O表
示法说的是最糟的情形。因此,你可以说,在最糟情况下,必须查看电话簿中的每个条目,对应
的运行时间为O(n)。这是一个保证——你知道简单查找的运行时间不可能超过O(n)。

 

下面按从快到慢的顺序列出了你经常会遇到的5种大O运行时间。

 O(log n),也叫对数时间,这样的算法包括二分查找。
 O(n),也叫线性时间,这样的算法包括简单查找。
 O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
 O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
 O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。

 

小结

 二分查找的速度比简单查找快得多。

 O(log n)比O(n)快。需要搜索的元素越多,前者比后者就快得越多。
 算法运行时间并不以秒为单位。
 算法运行时间是从其增速的角度度量的。
 算法运行时间用大O表示法表示。

O表示指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用O表示,这个运行时间为O(n)。单位秒呢?没有——O表示指的并非以秒为单位的速度。
面试题你了解O符号(bigOnotation)么?你能给出不同数据结构的例子么?O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是一个渐进上界。O符号也可用来描述其他的行为,比如:内
1O:数步数数步数为了统一描述,O不关注算法所用的时间,只关注其所用的步数。数组不论多大,读取都只需1步。用O记法来表示,就是:O(1)很多人将其读作“O1”,也有些人读成“1数量级”。一般读
Java中Set和List集合的contains()方法,检查数组链表中是否包含某元素检查数组链表中是否包含某元素,使用Set而不使用List的原因是效率问题,前者的setcontains()方法实现
O表示指出算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用O表示,这个运行时间为O(n)。主要单位不是秒啊,O表示值得并非以秒为单位的速度,而
定义​对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率。对于算法的时间
描述算法复杂度时,经常用到o(1),o(n),o(logn),o(nlogn)来表示对应算法的时间复杂度,这里进行归纳一下它们代表的含义:这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于
、时间复杂度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首先自然是