算法效率分析基础.ppt
《算法效率分析基础.ppt》由会员分享,可在线阅读,更多相关《算法效率分析基础.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法设计与分析算法设计与分析计算机与信息学院计算机与信息学院计算机与信息学院计算机与信息学院 2使用教材 使用教材使用教材使用教材使用教材作者:(美)作者:(美)Anany Levitin 译者:潘彦译者:潘彦出版社:清华大学出版社:清华大学丛书名:国外经典教材丛书名:国外经典教材 计算机计算机 科学与技术科学与技术第第 2 2章章 算法效率分析基础算法效率分析基础 算法效率分析框架算法效率分析框架算法效率分析框架算法效率分析框架 渐进符号和基本效率类型渐进符号和基本效率类型渐进符号和基本效率类型渐进符号和基本效率类型 非递归算法效率分析非递归算法效率分析非递归算法效率分析非递归算法效率分析
2、递归算法效率分析递归算法效率分析递归算法效率分析递归算法效率分析 4算法效率分析框架 算法效率分析框架算法效率分析框架算法效率分析框架算法效率分析框架本节将概要地描述一个分析算法效率的一般性框架。本节将概要地描述一个分析算法效率的一般性框架。本节将概要地描述一个分析算法效率的一般性框架。本节将概要地描述一个分析算法效率的一般性框架。时间效率时间效率时间效率时间效率指出算法运行得有多快;指出算法运行得有多快;指出算法运行得有多快;指出算法运行得有多快;空间效率空间效率空间效率空间效率关心算法需要的额外空间。关心算法需要的额外空间。关心算法需要的额外空间。关心算法需要的额外空间。目前,随着计算机硬
3、件技术的飞速发展,空间效率已不是关心重点。目前,随着计算机硬件技术的飞速发展,空间效率已不是关心重点。目前,随着计算机硬件技术的飞速发展,空间效率已不是关心重点。目前,随着计算机硬件技术的飞速发展,空间效率已不是关心重点。因此,我们主要关心的是时间效率。因此,我们主要关心的是时间效率。因此,我们主要关心的是时间效率。因此,我们主要关心的是时间效率。vv输入规模的度量:(问题规模)输入规模的度量:(问题规模)输入规模的度量:(问题规模)输入规模的度量:(问题规模)一个显而易见的事实:几乎所有的算法,对于更大规模输入都需要运行一个显而易见的事实:几乎所有的算法,对于更大规模输入都需要运行一个显而易
4、见的事实:几乎所有的算法,对于更大规模输入都需要运行一个显而易见的事实:几乎所有的算法,对于更大规模输入都需要运行更长的时间(即算法耗费的时间随着输入规模的增大而增加)更长的时间(即算法耗费的时间随着输入规模的增大而增加)更长的时间(即算法耗费的时间随着输入规模的增大而增加)更长的时间(即算法耗费的时间随着输入规模的增大而增加)。例如:。例如:。例如:。例如:1.1.更大的数组排序需要花费更多的运行时间;更大的数组排序需要花费更多的运行时间;更大的数组排序需要花费更多的运行时间;更大的数组排序需要花费更多的运行时间;2.2.更大的矩阵相乘需要花费更多的运算时间。更大的矩阵相乘需要花费更多的运算
5、时间。更大的矩阵相乘需要花费更多的运算时间。更大的矩阵相乘需要花费更多的运算时间。因此,采用一个以算法因此,采用一个以算法因此,采用一个以算法因此,采用一个以算法输入规模输入规模输入规模输入规模 n n 为参数的函数为参数的函数为参数的函数为参数的函数,来研究算法效率就是,来研究算法效率就是,来研究算法效率就是,来研究算法效率就是非常合乎逻辑的。非常合乎逻辑的。非常合乎逻辑的。非常合乎逻辑的。w w输入规模的选择问题输入规模的选择问题输入规模的选择问题输入规模的选择问题:在大多数情况下,选择这样一个参数是非常直接的。例如,对于排序、在大多数情况下,选择这样一个参数是非常直接的。例如,对于排序、
6、在大多数情况下,选择这样一个参数是非常直接的。例如,对于排序、在大多数情况下,选择这样一个参数是非常直接的。例如,对于排序、查找以及其他大多数与列表相关的问题来讲,这个参数就是列表长度;查找以及其他大多数与列表相关的问题来讲,这个参数就是列表长度;查找以及其他大多数与列表相关的问题来讲,这个参数就是列表长度;查找以及其他大多数与列表相关的问题来讲,这个参数就是列表长度;对于对于对于对于 n n 次多项式求值问题,这个参数是多项式次数或者系数个数。次多项式求值问题,这个参数是多项式次数或者系数个数。次多项式求值问题,这个参数是多项式次数或者系数个数。次多项式求值问题,这个参数是多项式次数或者系数
7、个数。5输入规模的选择当然,有些情况下,怎样选择输入规模参数是有差别的。例如计算两个当然,有些情况下,怎样选择输入规模参数是有差别的。例如计算两个当然,有些情况下,怎样选择输入规模参数是有差别的。例如计算两个当然,有些情况下,怎样选择输入规模参数是有差别的。例如计算两个n n 阶矩阵的乘积,有两种度量输入规模的方法:阶矩阵的乘积,有两种度量输入规模的方法:阶矩阵的乘积,有两种度量输入规模的方法:阶矩阵的乘积,有两种度量输入规模的方法:第一种方法:选择矩阵的阶第一种方法:选择矩阵的阶第一种方法:选择矩阵的阶第一种方法:选择矩阵的阶 n n;第二种方法:选择参与乘法运算的所有元素个数。第二种方法:
8、选择参与乘法运算的所有元素个数。第二种方法:选择参与乘法运算的所有元素个数。第二种方法:选择参与乘法运算的所有元素个数。第二种方法更具一般性,适用于非方阵。第二种方法更具一般性,适用于非方阵。第二种方法更具一般性,适用于非方阵。第二种方法更具一般性,适用于非方阵。对于选择不同的输入规模,其算法效率在含义上有所差别。对于选择不同的输入规模,其算法效率在含义上有所差别。对于选择不同的输入规模,其算法效率在含义上有所差别。对于选择不同的输入规模,其算法效率在含义上有所差别。选择输入规模参数的合适量度,会受到算法操作细节的影响。例如:选择输入规模参数的合适量度,会受到算法操作细节的影响。例如:选择输入
9、规模参数的合适量度,会受到算法操作细节的影响。例如:选择输入规模参数的合适量度,会受到算法操作细节的影响。例如:对于一个检查文字拼写的算法,如果算法要求对每个字符都要检查,对于一个检查文字拼写的算法,如果算法要求对每个字符都要检查,对于一个检查文字拼写的算法,如果算法要求对每个字符都要检查,对于一个检查文字拼写的算法,如果算法要求对每个字符都要检查,那么应该用字符数作为输入规模度量;如果算法操作的是单词,那么那么应该用字符数作为输入规模度量;如果算法操作的是单词,那么那么应该用字符数作为输入规模度量;如果算法操作的是单词,那么那么应该用字符数作为输入规模度量;如果算法操作的是单词,那么选择单词
10、数作为输入规模的度量。选择单词数作为输入规模的度量。选择单词数作为输入规模的度量。选择单词数作为输入规模的度量。若算法与数字特性(数字的大小)相关,那么在度量它的输入规模时,若算法与数字特性(数字的大小)相关,那么在度量它的输入规模时,若算法与数字特性(数字的大小)相关,那么在度量它的输入规模时,若算法与数字特性(数字的大小)相关,那么在度量它的输入规模时,计算机科学家倾向于选择数字的二进制位数作为输入规模的度量。计算机科学家倾向于选择数字的二进制位数作为输入规模的度量。计算机科学家倾向于选择数字的二进制位数作为输入规模的度量。计算机科学家倾向于选择数字的二进制位数作为输入规模的度量。6时间效
11、率的度量vv运行时间的度量:运行时间的度量:运行时间的度量:运行时间的度量:接下来考虑运行时间的度量问题。我们为何不选择时间的标准度量单位接下来考虑运行时间的度量问题。我们为何不选择时间的标准度量单位接下来考虑运行时间的度量问题。我们为何不选择时间的标准度量单位接下来考虑运行时间的度量问题。我们为何不选择时间的标准度量单位(秒、毫秒等)来度量算法的运行时间呢?其(秒、毫秒等)来度量算法的运行时间呢?其(秒、毫秒等)来度量算法的运行时间呢?其(秒、毫秒等)来度量算法的运行时间呢?其理由理由理由理由如下:如下:如下:如下:1.1.它依赖于特定计算机的运行速度;它依赖于特定计算机的运行速度;它依赖于
12、特定计算机的运行速度;它依赖于特定计算机的运行速度;2.2.它依赖于实现算法的代码质量;(程序员编程的水平问题)它依赖于实现算法的代码质量;(程序员编程的水平问题)它依赖于实现算法的代码质量;(程序员编程的水平问题)它依赖于实现算法的代码质量;(程序员编程的水平问题)3.3.它依赖于编译器的好坏;(编译成机器码的质量,即指令条数)它依赖于编译器的好坏;(编译成机器码的质量,即指令条数)它依赖于编译器的好坏;(编译成机器码的质量,即指令条数)它依赖于编译器的好坏;(编译成机器码的质量,即指令条数)4.4.它还依赖于一些其他问题如操作系统的调度策略等。它还依赖于一些其他问题如操作系统的调度策略等。
13、它还依赖于一些其他问题如操作系统的调度策略等。它还依赖于一些其他问题如操作系统的调度策略等。鉴于此,希望找到一个不依赖于上述因素的时间度量。鉴于此,希望找到一个不依赖于上述因素的时间度量。鉴于此,希望找到一个不依赖于上述因素的时间度量。鉴于此,希望找到一个不依赖于上述因素的时间度量。问:问:问:问:是否统计算法的是否统计算法的是否统计算法的是否统计算法的每步操作执行次数每步操作执行次数每步操作执行次数每步操作执行次数来作为算法的时间效率度量呢?来作为算法的时间效率度量呢?来作为算法的时间效率度量呢?来作为算法的时间效率度量呢?答:答:答:答:无此必要且较困难。一个算法中有许多操作,决定算法时间
14、效率的无此必要且较困难。一个算法中有许多操作,决定算法时间效率的无此必要且较困难。一个算法中有许多操作,决定算法时间效率的无此必要且较困难。一个算法中有许多操作,决定算法时间效率的是那些很耗费时间的操作步,因此只需关心这些操作即可评价一个算法是那些很耗费时间的操作步,因此只需关心这些操作即可评价一个算法是那些很耗费时间的操作步,因此只需关心这些操作即可评价一个算法是那些很耗费时间的操作步,因此只需关心这些操作即可评价一个算法时间效率,这些最关键的操作步称为时间效率,这些最关键的操作步称为时间效率,这些最关键的操作步称为时间效率,这些最关键的操作步称为基本操作基本操作基本操作基本操作,它们对算法
15、执行时间的,它们对算法执行时间的,它们对算法执行时间的,它们对算法执行时间的占用最大(基本操作即算法中最费时的操作)。所以,占用最大(基本操作即算法中最费时的操作)。所以,占用最大(基本操作即算法中最费时的操作)。所以,占用最大(基本操作即算法中最费时的操作)。所以,用基本操作执行用基本操作执行用基本操作执行用基本操作执行次数来作为时间效率的度量次数来作为时间效率的度量次数来作为时间效率的度量次数来作为时间效率的度量。7基本操作的选取w w基本操作的选取例基本操作的选取例基本操作的选取例基本操作的选取例:大多数排序算法是通过比较排序元素(键)来进行工作,因此它的基本大多数排序算法是通过比较排序
16、元素(键)来进行工作,因此它的基本大多数排序算法是通过比较排序元素(键)来进行工作,因此它的基本大多数排序算法是通过比较排序元素(键)来进行工作,因此它的基本操作应选为键的操作应选为键的操作应选为键的操作应选为键的比较比较比较比较操作操作操作操作,即算法中键的比较次数。,即算法中键的比较次数。,即算法中键的比较次数。,即算法中键的比较次数。矩阵乘法(或多项式运算)需完成两种操作:乘法和加法。对多数机器矩阵乘法(或多项式运算)需完成两种操作:乘法和加法。对多数机器矩阵乘法(或多项式运算)需完成两种操作:乘法和加法。对多数机器矩阵乘法(或多项式运算)需完成两种操作:乘法和加法。对多数机器而言,乘法
17、比加法更耗费时间,所以选取乘法为基本操作。而言,乘法比加法更耗费时间,所以选取乘法为基本操作。而言,乘法比加法更耗费时间,所以选取乘法为基本操作。而言,乘法比加法更耗费时间,所以选取乘法为基本操作。在定义了算法的输入规模在定义了算法的输入规模在定义了算法的输入规模在定义了算法的输入规模 n n 和基本操作后,我们就可以建立起一个算法和基本操作后,我们就可以建立起一个算法和基本操作后,我们就可以建立起一个算法和基本操作后,我们就可以建立起一个算法w w时间效率的分析框架时间效率的分析框架时间效率的分析框架时间效率的分析框架:对规模为对规模为对规模为对规模为 n n 的算法,通过统计其基本操作的的
18、算法,通过统计其基本操作的的算法,通过统计其基本操作的的算法,通过统计其基本操作的执行次数来度量算法的时间效率执行次数来度量算法的时间效率执行次数来度量算法的时间效率执行次数来度量算法的时间效率。(时间耗费。(时间耗费。(时间耗费。(时间耗费 T T 为输入规模为输入规模为输入规模为输入规模 n n 的函数)的函数)的函数)的函数)w w分析框架的应用分析框架的应用分析框架的应用分析框架的应用:设设设设 t t 为算法的一个基本操作在特定机器上的执行时间,为算法的一个基本操作在特定机器上的执行时间,为算法的一个基本操作在特定机器上的执行时间,为算法的一个基本操作在特定机器上的执行时间,C(n)
19、C(n)为该算法需为该算法需为该算法需为该算法需执行的基本操作数。用下式来估计该算法在该机器上的运行时间:执行的基本操作数。用下式来估计该算法在该机器上的运行时间:执行的基本操作数。用下式来估计该算法在该机器上的运行时间:执行的基本操作数。用下式来估计该算法在该机器上的运行时间:忽略了非基本忽略了非基本操作执行时间操作执行时间问:问:问:问:为什么用约等于符号?为什么用约等于符号?8分析框架的应用例w w分析框架的应用例:分析框架的应用例:分析框架的应用例:分析框架的应用例:根据上式,我们可以回答以下问题:根据上式,我们可以回答以下问题:根据上式,我们可以回答以下问题:根据上式,我们可以回答以
20、下问题:1 1 若某算法运行在一台比现在机器快若某算法运行在一台比现在机器快若某算法运行在一台比现在机器快若某算法运行在一台比现在机器快1010倍的机器上,此算法运行多快?倍的机器上,此算法运行多快?倍的机器上,此算法运行多快?倍的机器上,此算法运行多快?答:答:答:答:1010倍。(倍。(倍。(倍。(t t 增加增加增加增加1010倍,倍,倍,倍,C(n)C(n)不变)不变)不变)不变)2 2 设设设设 ,若输入规模翻倍,该算法运行时间如何变化?,若输入规模翻倍,该算法运行时间如何变化?,若输入规模翻倍,该算法运行时间如何变化?,若输入规模翻倍,该算法运行时间如何变化?(n 不是太小如不是太
21、小如 n=100)不考虑每个操作步在机器上具体的执行时间不考虑每个操作步在机器上具体的执行时间 t,则时间耗费即为:,则时间耗费即为:时间耗费即为基本操作数,为输入规模时间耗费即为基本操作数,为输入规模n的函数。的函数。n的一次、二次函数分别称线性、二次增长率。的一次、二次函数分别称线性、二次增长率。2n 称指数增长率。称指数增长率。9增长次数(增长率)vv增长次数(增长率)增长次数(增长率)增长次数(增长率)增长次数(增长率)基本操作数(时间耗费)是输入规模基本操作数(时间耗费)是输入规模基本操作数(时间耗费)是输入规模基本操作数(时间耗费)是输入规模 n n 的函数,记为的函数,记为的函数
22、,记为的函数,记为T(n)T(n)。T(n)T(n)随着随着随着随着 n n 次数的增加而增加。函数值次数的增加而增加。函数值次数的增加而增加。函数值次数的增加而增加。函数值T(n)T(n)增加快慢,决定于这个增长函数特性;增加快慢,决定于这个增长函数特性;增加快慢,决定于这个增长函数特性;增加快慢,决定于这个增长函数特性;也就是说,线性增长函数的函数值增加较慢,二次增长函数增加较快,也就是说,线性增长函数的函数值增加较慢,二次增长函数增加较快,也就是说,线性增长函数的函数值增加较慢,二次增长函数增加较快,也就是说,线性增长函数的函数值增加较慢,二次增长函数增加较快,指数增长函数最快。因此,我
23、们最关心的就是函数的增长率,它决定了指数增长函数最快。因此,我们最关心的就是函数的增长率,它决定了指数增长函数最快。因此,我们最关心的就是函数的增长率,它决定了指数增长函数最快。因此,我们最关心的就是函数的增长率,它决定了算法的时间耗费(效率)。若输入规模算法的时间耗费(效率)。若输入规模算法的时间耗费(效率)。若输入规模算法的时间耗费(效率)。若输入规模 n n 很小,无论是高效的算法还是很小,无论是高效的算法还是很小,无论是高效的算法还是很小,无论是高效的算法还是低效的算法,时间耗费差距不明显,所以算法分析针对大规模输入。低效的算法,时间耗费差距不明显,所以算法分析针对大规模输入。低效的算
24、法,时间耗费差距不明显,所以算法分析针对大规模输入。低效的算法,时间耗费差距不明显,所以算法分析针对大规模输入。增长函数表:对于算法分析具有重要意义的函数值(近似值)增长函数表:对于算法分析具有重要意义的函数值(近似值)阶乘阶乘阶乘阶乘指数指数指数指数三次三次三次三次二次二次二次二次n-log-nn-log-n线性线性线性线性对数对数对数对数规模规模规模规模101010101818181810101010121212122.0102.0102.0102.0107 7 7 7101010106 6 6 620202020101010106 6 6 610101010151515151010101
25、0101010101.7101.7101.7101.7106 6 6 6101010105 5 5 517171717101010105 5 5 51010101012121212101010108 8 8 81.3101.3101.3101.3105 5 5 5101010104 4 4 413131313101010104 4 4 4101010109 9 9 9101010106 6 6 61.0101.0101.0101.0104 4 4 4101010103 3 3 310101010101010103 3 3 39.3109.3109.3109.3101571571571571.3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 效率 分析 基础
限制150内