根据算法时间复杂度估算算法运行时间的示例及“对数Lg (x)"的灵活应用
2013-09-20 10:01
537 查看
根据时间复杂度估算算法运行时间-示例及“对数Lg (x)"的灵活应用
1、在数学分析中,以e为底对数很常见。另一方面,以10为底对数在十进制表示法中,手工计算很容易:所以log10x表示正整数x的位数:数字的十进制位数是严格大于log10x的最小的整数。例如 log10 1430 ≈ 3.15 ,下一个整数是4,即1430的位数。
2、以2为底的对数常用于计算机科学,因为计算机中二进制很普及。
下表列出了这些底数的常用的对数符号以及他们所使用的领域。许多学科都写log(x)来代替logb(x),根据前后文可以确定,记号blog(x)也出现过。ISO表示法”(ISO 31-11)一列指定了ISO推荐的表示方法。
3、计算机算法效率
为求解相同问题而设计的不同算法在效率方面常常具有显著的差别,这些差别可能比由于硬件和软件造成的差别要重要的多。
作为一个例子,下面介绍两个用于排序的算法。第一个称为插入排序,为了排序n个项,该算法所花时间大致等于c1 n2,其中c1是一个不依赖于n的常数。也就是说,该算法所花时间大致与n2成正比。第二个称为归并排序,为了排序n个项,该算法所花时间大致等于c2nlgn,其中lgn代表log2n,且c2是另一个不依赖于n的常数。与归并排序相比,插入排序通常具有一个较小的常数因子,所以c1<c2,我们将看到就运行时间来说,常数因子可能远没有对输入规模n的依赖性重要。把插入排序的运行时间写成c1•n•n并把归并排序的运行时间写成c2n•lgn。这时就运行时间来说。插入排序有一个因子n的地方归并排序有一个因子lgn,后者要小的多。(例如,当n=1000是,lgn大致为10,当n=100万时,lgn大致仅为20。)虽然对于小的输入规模,插入排序通常比归并排序要快,但是一旦输入规模n变得足够大,归并排序lgn对n的优点将足以补偿常数因子的差别,不管比c1小c2多少,总会存在一个交叉点,超出这个点,归并排序更快。
作为一个具体的例子,我们让运行插入排序的一台较快的计算机(计算机A)与运行归并排序的一台较慢的计算机(计算机B)竞争。每台计算机必须排序一个具有1000万个数的数组。(虽然1000万个数似乎很多,但是,如果这些数是8字节的证整数,那么输入将占用大致80MB内存,即使一个便宜的便携式计算机的存储器也能多次装入这么多数。)假设计算机A每秒执行百亿条指令(快于目前任何单台串行计算机),而计算机B每秒仅执行1000万条指令,结果计算机A就纯计算能力来说比计算机B快1000倍。为使差别更具有戏剧性,假设世上最巧妙的程序员为计算机A用机器语言编写插入排序,并且为了排序n个数,结果代码需要执行2n2条指令。进一步假设仅由一位水平一般的程序员使用某种带有一个低效编译器的高级语言来实现归并排序,结果需要50nlgn条指令。为了排序1000万数,
计算机A需要:
而计算机B需要:
通过使用一个运行时间较长较慢的算法,即使采用一个较差的编译器,计算机B比计算机A还快17倍!当我们排序1亿个数时,归并排序的优势甚至更加明显,:这时插入排序需要23天多,而归并排序不超过4小时。一般来说,随着问题规模的增大,归并排序的相对优势也会增大。
注: 如何检测Intel的CPU的MIPS?就从网上查找了一下:
有一款测试cpu的软件SiSoftware Sandra PRO能测定intel cpu的MIPS
(1).用2005版,测试Intel(R) Core(TM) Duo CPU T2350 @ 1.86GHz (Dual-Core, 1.86GHz, 2MB L2, 532MHz FSB)
得到的MIPS是:Dhrystone ALU : 17337 MIPS
( 2).用最新版2008测试是:Dhrystone ALU : 11421MIPS
两个值相差1.5倍。可作为计算机参考。
参考:《算法导论第三版》
相关文章推荐
- 算法的时间复杂度——"大O分析法"(转载)
- Collection -> .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- Collection -> .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- 转载&nbsp;一个时间复杂度为O(N)的算法
- 安装"监视程序运行时间"软件
- 阶乘之和 & 程序运行时间 & 算法分析
- 删除"监视程序运行时间"软件
- xxx应用在后台时,突然提示"很抱歉,xxx已停止运行"
- 母函数应用的实践(分析算法的时间复杂度)
- 算法的时间复杂度示例
- 根据数据范围估算时间复杂度
- LeetCode "Palindrome Partitioning"算法时间复杂度分析
- 第2周项目3-体验复杂度(1)两种排序算法运行时间
- Collection -&gt; .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- 一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
- 【算法与数据结构】关于代码运行时间复杂度的计算方法
- 运行"使用DroidPlugin实践应用的插件化"里面demo碰到的问题(附个人解决方案)
- 高级算法 应用主项定理Master Method 求时间复杂度 判断有向图是否有环
- n个无序整数,已知第i个数在排好序的序列中的位置为j,满足|i-j|<=K,请设计一种排序算法,对该序列进行排序。注:算法时间复杂度为O(nlgn)的得0分,复杂度为O(nk) 的得两分,总分是20分
- <名词解释>算法&时间复杂度