算法分析 Analysis of Algorithms -------GeekforGeeker 翻译
算法分析 Analysis of Algorithms
为什么要做性能分析?Why performance analysis?
在计算机领域有很多重要的因素我们要考虑 比如用户友好度,模块化, 安全性,可维护性 等等。但是为什么要关心性能呢?
原因很简单,如果有了很好的性能,我们就可以实现以上那些。所以性能相当于货币,有了货币我们就可以购买其他的东西。另外一个原因是研究proformance 非常有趣。
两个算法,到底哪一个好呢?Given two algorithms for a task, how do we find out which one is better?
最笨的办法就是在电脑上实现两个算法,用不同的输入值,看看那个用时短。但是这样的办法有很多问题:
1. 对于有些输入,第一个算法好,但是对于有些输入,第二个算法好、
2. 还有一种可能,第一个算法对于某些输入在某一台机器上性能好,第二种算法在另一台机器上新能好。
渐进分析是一种可以解决以上问题的一种分析办法。在渐进分析中,我们用输入数据的大小来评估算法性能(我们并不会计算出真正的运行时间)。 我们计算的是根据输入的大小,算法的时间或者空间是如何增长的。
举个例子,在一个已排序的数组的查找问题,一种办法是用线性查找(线性增长),一种是用二分查找(binary search)(对数增长) 。为了理解渐进分析是如何解决上面两种问题的,让我们假设线性搜索运行在一台快速的电脑上,二分查找运行在一台较慢的电脑上。对于比较小的输入,快的电脑花的时间更少。但是输入的大小超过了某个值,二分查找绝对会用更少的时间运行完这个算法,即使二分查找运行在较慢的电脑上。原因是二分查找对于输入的大小增长是遵守对数增长的,但是线性查找是遵守线性增长。所以上面两个问题中关于计算机速度的问题,超过某个输入大小时,是可以忽略的。
渐进分析一直有用吗?Does Asymptotic Analysis always work?
渐进分析不是完美的,但是是最好的分析算法的方法。例如,两个排序算法在一台计算机上,一个用时为 100nlogn 另一个是 2nlogn (n 是排序元素的大小) 。两个渐进分析的大小是一样的,都是nlogn, 所以通过渐进分析,我们不能判断哪个算法更好,因为我们忽略了常数。 (即使100000000nlogn 和 nlog 也是一样的)。
还有一点,我们刚才说了超过某个输入的大小,但是也许你的算法的输入永远不会超过这个值,也就是说在渐进分析中慢的算法的性能更好。所以你可能会选择在渐进算法分析中慢的算法用在你的程序中。
原文链接:
http://www.geeksforgeeks.org/analysis-of-algorithms-set-1-asymptotic-analysis/
算法分析 Analysis of Algorithms -------GeekforGeeker 翻译的更多相关文章
- 《Mathematical Analysis of Algorithms》中有关“选择第t大的数”的算法分析
开头废话 这个问题是Donald.E.Knuth在他发表的论文Mathematical Analysis of Algorithms中提到的,这里对他的算法分析过程给出了更详细的解释. 问题描述: 给 ...
- "Mathematical Analysis of Algorithms" 阅读心得
"Mathematical Analysis of Algorithms" 阅读心得 "Mathematical Analysis of Algorithms" ...
- 6.046 Design and Analysis of Algorithms
课程信息 6.046 Design and Analysis of Algorithms
- 《Mathematical Analysis of Algorithms》中有关“就地排列”(In Situ Permutation)的算法分析
问题描述 把数列\((x_1,x_2,\cdots,x_n)\)变换顺序为\((x_{p(1)},x_{p(2)},\cdots,x_{p(n)})\),其中\(p\)是\(A=\{1,2,3,\cd ...
- Analysis of Algorithms
算法分析 Introduction 有各种原因要求我们分析算法,像预测算法性能,比较不同算法优劣等,其中很实际的一条原因是为了避免性能错误,要对自己算法的性能有个概念. 科学方法(scientific ...
- 612.1.002 ALGS4 | Analysis of Algorithms
我们生活在大数的时代 培养数量级的敏感! Tip:见招拆招 作为工程师,你先要能实现出来. 充实基础,没有什么不好意思 哪怕不完美.但是有时候完成比完美更重要. 之后再去想优化 P.S.作者Rober ...
- Analysis of algorithms: observation
例子: 3-Sum 给定N个整数,这里面有多少个三元组,使其三个整数相加为0,如上面的例子为有4个三元组. 这个问题是许多问题如计算机几何,图形学等的基础. 用简单粗暴的方式来解决3-Sum问题 通过 ...
- Time complexity analysis of algorithms
时间复杂性的计算一般而言,较小的问题所需要的运行时间通常要比较大的问题所需要的时间少.设一个程序P所占用的时间为T,则 T(P)=编译时间+运行时间. 编译时间与实例特征是无关的,且可假设一个编译过的 ...
- AlgorithmsI Exercises: Analysis of Algorithms
Question 1 Suppose that you time a program as a function of N and producethe following table. N seco ...
随机推荐
- javascript url几种编码方式
1.escape() 不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值.比如“春节”的返回结果是%u6625%u8282,escape()不对"+"编码主要 ...
- .Net开源项目之开源论坛
.Net开源项目非常多,但是开源并且直接就能用的BBS项目就很少了,至少最近我在这上面没有找到一个合适的开源论坛.可能是因为我要求比较特殊,不但要开箱即用,还要用MVC+MySql开发. Discuz ...
- Head First Design Patterns学习笔记-观察者模式
认识观察者模式 首先来看看报纸订阅的过程 1.报社的业务就是出版报纸 2.向某家报社订阅报纸,只要他们有新报纸出版,就会送过来,只要你是他们的订户 3.当你不想再看报纸的时候,取消订阅,他们就不会再送 ...
- TCP中close和shutdown之间的区别
该图片截取自<<IP高效编程-改善网络编程的44个技巧>>,第17个技巧. 如果想验证可以写个简单的网络程序,分别用close和shutdown来断开连接,然后用tcpdum ...
- Sass学习之路(2)——Sass环境安装(windows版)
因为本喵目前用的是window10的本子,所以这里就发windows版本的安装流程啦.(希望有朋友可以赞助我一个mac(┳_┳)): 第一步:安装ruby 因为Sass是基于ruby编写的,所以先去官 ...
- setTimeout实现动画的黄金优化法则
1.使用递归思想实现setTimeout的轮询动画:在每一次执行方法的时候都重新的设置一个定时器,然后在指定时间内重新的执行当前的方法 问题:每一次设置的定时器,虽然不执行了,但是还存在呢,浪费性能 ...
- 身份证号码15位转18位 C#实现
[身份证最后一位神秘X的由来]身份证中的“冷知识”1999年的今天,<国务院关于实行公民身份号码制度的决定>被发布,当年10月1日实施.为什么有的有X?这位数是根据前17位计算出的校验码. ...
- 桥牌笔记:Skill Level 4 D8
西拿黑桃K.A后,转攻小方块. 看来只有一个小红桃失张了.飞方块没有必要冒险.但将牌分布4-0时会有点麻烦.
- HDFS简单入门
本文地址:http://www.cnblogs.com/archimedes/p/hadoop-simple.html,转载请注明源地址. 欢迎关注我的个人博客:www.wuyudong.com, 更 ...
- (方法调配)Method Swizzling
一.概念 方法调配:因为Objective-C是运行时语言,也就是说究竟会调用何种方法要在运行期才能解析出来.那么我们其实也可以在运行时改变选择子名称.这样我们既不需要查看到源代码,又没有必要去重写子 ...