《大话数据结构》读书笔记 第二章 算法 函数的渐近增长
2013-08-09 19:14
363 查看
2.8. “函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,是的对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐近快于g(n)”
笔记:
1)函数的渐近增长,针对函数的“增长”这一角度来说,却又不是函数自身的特性,而是在函数之间关系的反应。
2)函数的渐近增长,简单来说,就是“到了一定程度,函数f就一直比函数g大,就说函数f的增长渐近快于g”
3)判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)。
4)判断一个算法好不好,我们通过少量的数据时不能做出正确判断的。我们可以对比某些算法的关键执行次数函数的渐近增长性,基本就可以的得出:某个算法,随着n的增大,它会越来越优于另外一个算法,或者原来越差另一个算法。
5)渐近增长性,是一种有些宽泛的特性。并不能根据算法的关键函执行次数的函数的渐近增长性,得出算法的精确执行时间——但可以根据这个特性,在不同的算法的对比中,得出某些算法好,那些算法不好。
2.9 算法的时间复杂度
“在进行算法分析时,语句总的被执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作T(n)=O(f(n)),它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。”
笔记
1)这个定义真心不太明白,出来的真心突兀,上来就是一个破定义,真心的破定义!
2)算法的时间复杂度,并非是算法的时间函数,而是某种度量方式,这种度量方式的用处在于对比算法之间的优劣。
3)推到大O的方法,首先用常熟1取代运行时间的所有加法常熟,然后只保留最高阶项,最后置最高阶项系数为1。
常熟阶
无论n为多少,代码的执行次数都不会发生变化,我们称之为具有O(1)的时间复杂度,又叫常熟阶。不管这个常熟是多少,都记作O(1),而不能记作O(3),O(12)等其他任何数字。
线性阶
要确定某个算法的阶次,通常需要确定某个特定语句或某个语句集的运行次数,所以关键就是要分析循环结构的运行情况。
对数阶
平方阶
笔记:
1)函数的渐近增长,针对函数的“增长”这一角度来说,却又不是函数自身的特性,而是在函数之间关系的反应。
2)函数的渐近增长,简单来说,就是“到了一定程度,函数f就一直比函数g大,就说函数f的增长渐近快于g”
3)判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)。
4)判断一个算法好不好,我们通过少量的数据时不能做出正确判断的。我们可以对比某些算法的关键执行次数函数的渐近增长性,基本就可以的得出:某个算法,随着n的增大,它会越来越优于另外一个算法,或者原来越差另一个算法。
5)渐近增长性,是一种有些宽泛的特性。并不能根据算法的关键函执行次数的函数的渐近增长性,得出算法的精确执行时间——但可以根据这个特性,在不同的算法的对比中,得出某些算法好,那些算法不好。
2.9 算法的时间复杂度
“在进行算法分析时,语句总的被执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作T(n)=O(f(n)),它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。”
笔记
1)这个定义真心不太明白,出来的真心突兀,上来就是一个破定义,真心的破定义!
2)算法的时间复杂度,并非是算法的时间函数,而是某种度量方式,这种度量方式的用处在于对比算法之间的优劣。
3)推到大O的方法,首先用常熟1取代运行时间的所有加法常熟,然后只保留最高阶项,最后置最高阶项系数为1。
常熟阶
无论n为多少,代码的执行次数都不会发生变化,我们称之为具有O(1)的时间复杂度,又叫常熟阶。不管这个常熟是多少,都记作O(1),而不能记作O(3),O(12)等其他任何数字。
线性阶
要确定某个算法的阶次,通常需要确定某个特定语句或某个语句集的运行次数,所以关键就是要分析循环结构的运行情况。
int i; for(i=0;i<n;i++) { /*时间复杂度为O(1)的程序步骤序列*/ }
对数阶
int count=1; while(count<n) { count=count*2; /*时间复杂度为O(1)的程序步骤序列*/ }
平方阶
int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { /*时间复杂度为O(1)的程序步骤序列*/ } }
/*下面的算法时间复杂度为O(m*n)*/ int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++) { /*时间复杂度为O(1)的步骤序列*/ } }
int i,j; for(i=0;i<n;i++) { for(j=i;j<n;j++) { /*时间复杂度为O(1)的程序步骤序列*/ } }
相关文章推荐
- 《大话数据结构》第2章 算法基础 2.8 函数的渐近增长
- 《大话数据结构》第2章 算法基础 2.8 函数的渐近增长
- 第2章 函数的渐近增长---《大话数据结构》读书笔记
- 《大话数据结构》读书笔记 第二章 算法
- 读书笔记-《大话数据结构》第二章算法
- 大话数据结构 第二章 算法(读书笔记)
- 函数的渐近增长表4
- 读书笔记-->第二张 算法 -->《大话数据结构》
- 啊哈!算法读书笔记 | 第二章 栈、队列、链表
- [读书笔记]算法(Sedgewick著)·第二章.初级排序算法
- 函数的渐近增长
- 《大话数据结构》读书笔记系列(二)---- 算法
- 《算法导论》读书笔记--第三章 函数的增长
- 函数的渐近增长
- 【大话数据结构】第二章 算法
- 【转】读书笔记:“集体智慧编程”之第二章:推荐算法——协同滤波
- 【编程珠玑】读书笔记 第二章 算法
- 函数的渐近增长表4
- 数据结构与算法-函数的渐近增长
- 《大话数据结构》读书笔记(一)——数据结构基础和算法