算法分析 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 ...
随机推荐
- Protocol Buffers动态消息解析
http://www.searchtb.com/2012/09/protocol-buffers.html http://www.cnblogs.com/jacksu-tencent/p/344731 ...
- Hadoop Pipes Exception: Illegal text protocol command
Hadoop Pipes Exception: Illegal text protocol command 对于Hadoop pipes 出现这样的错误,基本上编译代码依赖的.so和.a 版本不匹配 ...
- Linux修改命令提示符(关于环境参量PS1)
关乎环境参量的四个文件/etc/profile /etc/bashrc ~/.bashrc ~/.bash_profile $$$:/etc/profile:此文件为系统的每个用户设置环境信息,当 ...
- ABAP中正则表达式的简单使用方法 (转老白BLOG)
在一个论坛上面看到有人在问正则表达式的问题,特举例简单说明一下.另外,REPLACE也支持REGEX关键字.最后:只能是ECC6或者更高版本才可以(ABAP supports POSIX regula ...
- svn 服务器不能看log问题
Subversion “show log” is offline 1.将/srv/svn/repos/ path svnserve.conf 里的 none-access = read 修改为none ...
- 【读书笔记】iOS网络-HTTP-请求内容
一,GET方法. 从服务器获取一段内容,用HTTP术语来说就是实体.GET请求通常不包含请求体,不过也是可以包含的.有些网络缓存设施只会缓存GET响应.GET请求通常不会导致服务器端的数据变化. 二, ...
- 【读书笔记】iOS-读取文本文件
一,文本文件的内容. 二,工程目录 三,ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional ...
- MAC中安卓开发环境的下载(转)
今天终于为我的Macbook Pro Retina搭建好了Android开发环境,几经折磨,差点放弃了: 总结如下:1.最好选择ADT Bundle,这里面已经集成好了Eclipse.ADT.Andr ...
- iOS开发笔记7:Text、UI交互细节、两个动画效果等
Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...
- UVa 104 - Arbitrage(Floyd动态规划)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...