Question 1 Suppose that you time a program as a function of N and producethe following table. N seconds------------------- 1024 0.000 2048 0.001 4096 0.007 8192 0.029 16384 0.121 32768 0.519 65536 2.156 131072 9.182 262144 38.784 524288 164.585 10485…
算法分析 Analysis of Algorithms 为什么要做性能分析?Why performance analysis? 在计算机领域有很多重要的因素我们要考虑 比如用户友好度,模块化, 安全性,可维护性 等等.但是为什么要关心性能呢? 原因很简单,如果有了很好的性能,我们就可以实现以上那些.所以性能相当于货币,有了货币我们就可以购买其他的东西.另外一个原因是研究proformance 非常有趣. 两个算法,到底哪一个好呢?Given two algorithms for a task,…
课程信息 6.046 Design and Analysis of Algorithms…
"Mathematical Analysis of Algorithms" 阅读心得 "Mathematical Analysis of Algorithms"是著名计算机界大神Knuth在1971年发表的论文.以前只是听说Knuth非常神,看了这篇论文才体会到Knuth到底有多神-Orz 此外,特别感谢 @solaaaaa 聚聚,没有他的指导我可能根本看不懂这篇论文-... 这篇文章要解决什么问题? 作为算法分析这一领域的早期论文,这篇文章回答了以下两个问题: 算…
开头废话 这个问题是Donald.E.Knuth在他发表的论文Mathematical Analysis of Algorithms中提到的,这里对他的算法分析过程给出了更详细的解释. 问题描述: 给定一个数组a[1,2,...,n],用尽量少的比较次数找出数组中第t大的数.(假定这n个数两两不同). 算法描述: 对于这个问题,可以很容易想到对应的算法.一个 \(O(n\log n)\) 的排序算法总能解决问题(然鹅今天我们并不对数组进行完全的排序). 参照快速排序中的Partition操作,将…
我们生活在大数的时代 培养数量级的敏感! Tip:见招拆招 作为工程师,你先要能实现出来. 充实基础,没有什么不好意思 哪怕不完美.但是有时候完成比完美更重要. 之后再去想优化 P.S.作者Robert Sedgewick的导师是Knuth(高德纳!) Conclusion First 1.Running Time Operation table 2.Memory 1 SOP - Analysis 2 Observations Measuring the running time - autom…
算法分析 Introduction 有各种原因要求我们分析算法,像预测算法性能,比较不同算法优劣等,其中很实际的一条原因是为了避免性能错误,要对自己算法的性能有个概念. 科学方法(scientific method)也适用于算法分析,它提供了一个预测性能和比较算法的框架: Observe 观察真实世界的某些特征 Hypothesize 根据观察结果提出假设模型 Predict 用模型预测未来的事件 Verify 继续观察来核实预测的准确性 Validate 重复直到预测和观察一致 此外还有两条原…
例子: 3-Sum 给定N个整数,这里面有多少个三元组,使其三个整数相加为0,如上面的例子为有4个三元组. 这个问题是许多问题如计算机几何,图形学等的基础. 用简单粗暴的方式来解决3-Sum问题 通过三个for循环来执行 那么怎么计算它运行的时间呢? Java有一个内嵌的函数来计算运行时间:Stopwatch()           我们通过对不同的input size来运行获得运行时间,如上图所示,那么根据这些已得出来的值,我们可以推测出当input size为8K时,它的运行时间为多少吗?…
时间复杂性的计算一般而言,较小的问题所需要的运行时间通常要比较大的问题所需要的时间少.设一个程序P所占用的时间为T,则 T(P)=编译时间+运行时间. 编译时间与实例特征是无关的,且可假设一个编译过的程序可以运行多次而无需再编译.因此分析程序的时间特性就只需考虑程序的运行时间. 令程序P的运行时间为tp(n),其中n是所要求解问题的实例特征.由于编写程序时,影响tp的许多因素还是未知的,所以只能对tp进行估算.由于代码P的主要操作通常包括加.减.乘.除.比较.读.写等,而这些操作的执行时间是可预…
Question1 Give the id[] array that results from the following sequence of 6 unionoperations on a set of 10 items using the quick-find algorithm. 6-3 2-3 5-3 5-1 9-3 3-0 Your answer should be a sequence of 10 integers, separated by whitespace.Recall:…