C++的大O记法是算法的时间复杂度表达公式。简单的说大O记法可以告诉你一个算法耗费的时间长度同算法所处理的数据量大小的关系。大O记法只是一个概念性的或定性的记号,不能通过它来真正计算一个算法所耗费的精确时长。
O(1) 算法只花费一个单位时间长度的时间。同所处理的数据量大小没有关系(常量时间)。
“一个单位时间长度”没有定义为1秒,1天,还是1微妙,完全随意指定。大约同处理一个数据项的时长相同。
考虑一个数组,按照数组下标的到一个元素的引用
int arr[100];
int x = arr[88]; //这个算法就是O(1)的
O(1)是最爽的,哪怕有1亿条数据还是1条数据,算法所费时间是常量。
O(N) 算法只花费N个单位时间长度的时间。数据量大小同算法所花费时长成正比例
考虑一个list链表
list.remove( 88 ); //把第88个元素删除。这个算法就是O(N)的
O(N)是最不爽的,假设有1亿条数据,算法就要花费1亿个时间单位的时长。
O(logN) 算法只花费logN个单位时间长度的时间。
logN是取对数,可以简单的理解为取以2为底数,N的对数。例如log65536=16 (因为2^16=65536)
对数是把一个天文数字般的整数映射成一个小小的整数的数学工具。
考虑一个已排序的数组,用“折半法”查找,算法的时间特性就是O(logN)的。
O(log(一个亿))约等于19个单位时间的时长。
O(logN)也不一定是以2为底的,也可能是以3为底的,这都无所谓。
算法在应用于局部小数据量时,可能因为内存的申请,释放,初始化等原因,观察者发现不符合大O记法表示的特性。
但是在长期的运行,经过大数据量的考验后,那些干扰因素逐渐沦为次要因素,观察者可以发现算法的却符合某种自己固有的时间特性。
后注:O记有组织罪案及三合会调查科,同大O记法没有关系
http://blog.sina.com.cn/s/blog_62b4e3ff0100v7aa.html
相关推荐
内容概要:我因为爱好而踏入了编程殿堂。Visual Basic 6 for Dummies 教会了我基础知识,接着我不断阅读,学到的知识也越来越多,但对算法却始终没搞明白。至今我还记得购买第一本算法书后的情景:我琢磨着目录,...
1. **度量复杂性**:这部分会介绍如何度量算法的复杂性,包括使用大O记法和小o记法来表示算法的时间复杂度。 2. **P 类**:讨论可以在多项式时间内解决的问题集,即P类问题。 3. **NP 类**:解释那些可以在多项式...
我们可以使用不同的方法来分析算法,如大 O 记法、Ω 记法、θ 记法等。 增长函数 增长函数是指算法的时间复杂度和空间复杂度的函数。我们可以使用不同的方法来描述增长函数,如大 O 记法、Ω 记法、θ 记法等。...
时间复杂性衡量算法运行所需的时间资源,通常用大O记法表示,描述随着问题规模n的增长,算法运行时间的增长速率。空间复杂性则关注算法在执行过程中占用内存资源的量,同样可以用大O记法来描述。 9. 快速排序算法的...
大O记法忽略了低阶项和首项系数,只保留最高阶项,因为它在输入规模足够大时起决定性作用。 常见的时间复杂度有: 1. 常数阶 (O(1)):算法执行时间与输入大小无关,如判断一个二进制数的奇偶性。 2. 对数阶 (O(log ...
首先,O-notation(大O记法)、Ω-notation(大Ω记法)和Θ-notation(大Θ记法)是描述算法运行时间复杂度的重要工具。大O记法表示算法的上界,即最坏情况下的时间复杂度;大Ω记法表示算法的下界,即最好情况下的...
常用的大O记法表示,如O(1)、O(logn)、O(n)、O(nlogn)、O(n^2)等,分别代表常数时间、对数时间、线性时间、线性对数时间和平方时间。理解这些时间复杂度等级的差异,有助于预测算法在大数据量下的表现。 2. 空间...
为了客观评估,我们需要引入时间复杂度的概念,它是算法在规模为n的问题上所需基本操作数量的增长速度的上限,通常用“大 O 记法”表示。大 O 记法忽略了常数因子和低阶项,只保留最高阶项,以反映算法的渐进行为。 ...
忽略常量和低阶项,只保留最高阶项并考虑其系数,定义了算法的阶次,即大O记法(O-notation),例如O(1), O(logn), O(n), O(nlogn), O(n^2)等。 大O记法描述了一个函数的渐进上界,它用于分类算法性能,不依赖于...
换句话说,它是算法运行时间的增长速度,通常用大O记法来表示。 - **大O渐进表示法**:这是估算时间复杂度的标准方法,通过忽略低阶项和常数项,仅保留最高阶项来简化表达式。例如,对于函数`func1`,基本操作执行...
了解算法运行时间的行为,如二次型、线性型和对数型,以及使用大O记法描述这些行为,对于优化代码性能至关重要。同时,编写测试数据时需考虑边界条件,确保代码的健壮性。 在数据结构的学习过程中,我们首先要理解...
时间复杂度衡量一个算法执行所需的时间资源,通常用大O记法表示,例如O(1)、O(log n)、O(n)、O(n log n)、O(n^2)等,它们分别代表常数时间、对数时间、线性时间、对数线性时间和平方时间复杂度。理解这些概念对于...
时间复杂度描述了算法执行时间与输入数据规模的关系,通常用大O记法表示,如O(1)常数时间、O(n)线性时间、O(nlogn)对数线性时间等。空间复杂度则关注算法运行过程中所需的内存空间,同样用大O记法表示,比如O(1)常数...
常用大O记法表示,如O(1)常数时间,O(n)线性时间,O(n²)平方时间等。 2. 空间复杂性:衡量算法执行过程中所需的存储空间。同样用大O记法表示,例如O(1)常数空间,O(n)线性空间等。 三、算法设计技术 1. 分治策略:...
大O记法通常用于上界分析,给出算法最坏情况下的时间复杂度,而Ω记法则表示下界,Θ记法表示精确界限。通过对这些复杂度的分析,我们可以预测算法在大规模数据下的表现。 【算法的最好、最坏和平均情况】 算法在...