大o表示法

【从0到1学算法】大O表示法

偶尔善良 提交于 2020-02-26 03:36:50
一般我们在选择算法时,都是想要选择效率最高的算法。那算法的效率,用什么表示?没错!就是用大O表示法。 PS : 大O表示法中,log即为log2,后面不再说明。 下面以简单查找和二分查找,在含有n个元素的有序列表中查找其中一个元素为例,下表总结了我们发现的情况。 使用简单查找时,最多需要猜测次数与列表长度相同,这被称为线性时间,大O表示法为O(n)。 二分查找则不同,最多需要猜测次数为logn(n为列表长度),这被称为对数时间(log时间),大O表示法为O(logn)。 基本概念 大O表示法指出了算法的速度有多快。 可能你会好奇,它的单位是多少?秒?没有单位,它并非指的是时间,而是从增量的角度衡量。 列表中查找元素,简单查找、二分查找的增速如下图。 假若我们不知道增速,只知道查找100个元素时的查找时间,猜测10000个元素时的查找时间: 对于简单查找,100个元素时为100毫秒,简单推算出10000个元素为10秒; 对于二分查找,100个元素时为7毫秒,简单推算出10000个元素为700毫秒。 PS:简单推算 10000个元素时的运行时间= 运行时间(100个元素时)* 100 简单查找的推算是对的,因为的增速是n,而二分查找的推算是错的,它的增速为logn,这便不能理所当然简单推算了。 很显然,我们只要知道算法的增速,便能知道它在n个元素中运行的运行时间了

关于大O表示法和小O表示法

白昼怎懂夜的黑 提交于 2020-02-02 08:02:31
上节课老师讲了一下各种表示法,当时没咋听懂,后来查了一些资料弄懂了,记录一下。 主要是从维基百科上看的。http://en.wikipedia.org/wiki/Big_O_notation 大O表示法: f(x) = O(g(x)) 表示f(x)以g(x)为上界。上界并不是确接。例如f(x)=n^2的上界可以是g(x)=n^3,或者g(x)=n^4。 实际上O(g(x))应该是一个函数的集合,所以应该写成f(x)∈O(g(x))。 小o表示法: f(x) = o(g(x))表示f(x)趋近于g(x)。也就是当x趋于∞时,f(x)/g(x) = 0。例如f(x)=x^2+1, g(x)=x^2。 Ω表示法: f(x) = Ω(g(x))表示f(x)以g(x)为下界。例如g(x) = x是f(x) = x^2的一个下界。 θ表示法: f(x) = θ(g(x))说明g(x)是f(x)的确界。也就是同时满足f(x) = O(g(x))且f(x) = Ω(g(x))。 来源: https://www.cnblogs.com/lzsz1212/p/3955218.html

大O表示法的理解

五迷三道 提交于 2020-02-01 10:56:27
一. 背景 在现实生活中,解决一个问题可以有多种方法,其中有好的方法,也有较为一般的方法。评判标准虽有不同,但总体思想是:用最小的代价获得最多的收益。 这里所说代价并不仅指金钱开销,有时也包括时间,所耗费资源等。 计算机程序也是为了解决问题而编写的。同理可知,程序有好的,也有一般的,评判标准主要有两方面:时间与空间。 人们都希望事情解决的越快越好,所以程序解决问题花费的时间一定要少。计算机资源是有限的,所以程序也要尽可能的少消耗资源。 不过很多时候不能两全其美,此时应该抓主要矛盾。在编程时,很多场合会用空间消耗的增加来换取运行时间的减少。毕竟对于我们来说,时间一般会更加重要。 二. 引入 那么应该怎么比较不同算法之间的优劣呢?答:应该从时间与空间两方面入手。 打个比方: 你的书架上有100本书,它们是任意放置的,没有先后次序。你想在其中找到《算法导论》,那么你需要从头找到尾,运气好的话,第一本就是,运气不好的话,你就要找到最后。 但是有一天你突发奇想,为每本书编号并且记住了,那么运用二分查找,最多只需要找7次。 忽然有一天,你买了1000本书,还是没有先后次序地都放在书架上,并且又想找到《算法导论》,这次情况就会比较复杂,运气好的话,第一本就是,运气不好的话,你要找遍这1000本书。 但是你发现编号的方法比较好找,于是再次编号并运用二分查找,最多只要10次。 三. 大O记号