算法分析 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 ...
随机推荐
- ViewPager和Fragment的组合使用
如图是效果图用的是Viewpager和fragment来实现的主界面 不过其中的预加载我没有解决 如下是代码代码比较简单 package com.ithello.dingding; import ja ...
- mysql select语句解析
select语句用于从一个或多个数据表选出特定行.特定列的交集 最简单的select语句的语法格式如下: select column1,column2 ........ (列) from 数 ...
- 最小生成树Kruskal算法(邻接矩阵和邻接表)
最小生成树,克鲁斯卡尔算法. 算法简述: 将每个顶点看成一个图. 在所有图中找权值最小的边.将这条边的两个图连成一个图, 重复上一步.直到只剩一个图. 注:将abcdef每个顶点看成一个图.将最小权值 ...
- maven oracle jdbc jar
1.problem describe: when your dependency jar about oracle use code like this: <!-- oracle-connect ...
- C语言范例学习03-上
第三章 数据结构 章首:不好意思,这两天要帮家里做一些活儿.而且内容量与操作量也确实大幅提升了.所以写得很慢. 不过,从今天开始.我写的东西,许多都是之前没怎么学的了.所以速度会慢下来,同时写得也会详 ...
- PHP学习笔记:MySQL数据库的操纵
Update语句 Update 表名 set 字段1=值1, 字段2=值2 where 条件 练习: 把用户名带 ‘小’的人的密码设置为123456@ 语句:UPDATE crm_user SE ...
- [简介]HTML5 and CSS3
一.HTML51.语义标签与新增表单控件标签更加语义化headerfooterarticle等 还增加了许多表单控件记得有:进度条,颜色选择,日期等 2.音频,视频标签关键字:audiovideo 他 ...
- Git的安装和使用记录
Git是目前世界上最先进的分布式版本控制系统(没有之一),只用过集中式版本控制工具的我,今天也要开始学习啦.廖雪峰的git教程我觉得很详细了,这里记录一下步骤以及我终于学会用Markdown了,真的是 ...
- ABAP内表(internal table)有关的系统变量
SY-TABIX – 内表当前行的索引号.SY-TABIX 的值可以被以下命令修改,但是只适用于索引表(index table).对于哈希表(Hashed table),这个系统变量的值为空或0. A ...
- Android Activity/Service/Broadcaster三大组件之间互相调用
我们研究两个问题,1.Service如何通过Broadcaster更改activity的一个TextView.(研究这个问题,考虑到Service从服务器端获得消息之后,将msg返回给activity ...