612.1.002 ALGS4 | Analysis of Algorithms

我们生活在大数的时代
培养数量级的敏感!
Tip:见招拆招

  • 作为工程师,你先要能实现出来。
  • 充实基础,没有什么不好意思
  • 哪怕不完美。但是有时候完成比完美更重要。
  • 之后再去想优化

P.S.作者Robert Sedgewick的导师是Knuth(高德纳!)

Conclusion First

1.Running Time

  • Operation table

2.Memory

1 SOP - Analysis

2 Observations

  • Measuring the running time - automatic

public class Stopwatch(part of stdlib.jar/algs4.course)


    public static void main(String[] args) {
        In in = new In(args[0]);
        int[] a = in.readAllInts();

        Stopwatch timer = new Stopwatch();
        int count = count(a);
        StdOut.println("elapsed time = " + timer.elapsedTime());//time since creation (in seconds)
        StdOut.println(count);
    }

3 Mathematical Model - Knuth(高德纳!)

Simplification 1: cost model

Simplification 2: tilde notation

approximate

工程近似

  • Bottom line. Use cost model and tilde notation to simplify counts.

4 Order of growth

  • Operation table

5 Binary Search - code 二分搜索

不看代码自己写

public static int binarySearch(int[]a,int key)
        {
        int lo=0;
        int hi=a.length-1;
        while(lo<=hi){
            int mid=lo+(hi-lo)/2;
            if(key>a[mid])lo=mid+1;
            else if(key<a[mid])hi=mid-1;
            else return mid;
        }
        return-1;
        }

6 Memory

Typical memory usage of Java

Object overhead - 对象开销

QuickUnion

原文地址:https://www.cnblogs.com/Neo007/p/10333985.html

时间: 2024-10-12 00:41:29

612.1.002 ALGS4 | Analysis of Algorithms的相关文章

《Mathematical Analysis of Algorithms》中有关“选择第t大的数”的算法分析

开头废话 这个问题是Donald.E.Knuth在他发表的论文Mathematical Analysis of Algorithms中提到的,这里对他的算法分析过程给出了更详细的解释. 问题描述: 给定一个数组a[1,2,...,n],用尽量少的比较次数找出数组中第t大的数.(假定这n个数两两不同). 算法描述: 对于这个问题,可以很容易想到对应的算法.一个 \(O(n\log n)\) 的排序算法总能解决问题(然鹅今天我们并不对数组进行完全的排序). 参照快速排序中的Partition操作,将

Analysis of algorithms: observation

例子: 3-Sum 给定N个整数,这里面有多少个三元组,使其三个整数相加为0,如上面的例子为有4个三元组. 这个问题是许多问题如计算机几何,图形学等的基础. 用简单粗暴的方式来解决3-Sum问题 通过三个for循环来执行 那么怎么计算它运行的时间呢? Java有一个内嵌的函数来计算运行时间:Stopwatch()           我们通过对不同的input size来运行获得运行时间,如上图所示,那么根据这些已得出来的值,我们可以推测出当input size为8K时,它的运行时间为多少吗?

Analysis of algorithms: introduction

一系列的人物角色 Programmer,client,theoretician和blocking 学生可能会承担里面的一个或者多个角色 Running time 提出running time这个概念的可能要追溯到很远的时候,那时通过analytic engine来计算how many times turn lthe crank(手柄) 为什么要分析算法 一些高效算法的例子    快速傅里叶变换:NlogN而不是N2,快速傅里叶变换应用在很多领域(DVD,JPEG...) N-body simul

AlgorithmsI Exercises: Analysis of Algorithms

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

1. 2. binary search (sorted array) 给定查找对象,array,以及最大最小的范围:将查找对象与middle作比较,进而改变最大最小的范围,然后调用递归 时间复杂度的计算要考虑最坏的情况,本题中最坏的情况类比一条面包每天吃一半几天吃完的问题,时间复杂度为log以2为底n的对数 O(log2 n)可以直接写成O(log n),与底数无关(换底公式可以将它们换成统一的底) 3. array的缺点有两个,第一个是fixed size,所以一开始就要给所有元素预留出足够的

Analysis of Algorithms--preface

Analysis of Algorithms: First part of the course is focused on analysis. Second part of the course is focused on design. The analysis of algorithm is the theoretical study.(算法分析是理论研究) The theoretical study of computer-program performance and resource

我要翻译《Think Python》-002 贡献列表 &amp; 目录部分

PDF源文件地址 :  http://www.greenteapress.com/thinkpython/thinkpython.pdf 贡献列表 自从本书诞生之后,有超过上百个目光敏锐且有想法的读者给我发来了许多建议并指出了一些需要修正的地方.他们的热情和无私的奉献给了我巨大的帮助.如果你有任何建议或者发现需要修正的地方,请发邮件至:[email protected].如果您的建议被采纳,您的大名将会出现在我们的贡献人员列表(除非你本人过于低调拒绝承认).如果您发现文中的错误内容,敬请提供一下

名校计算机科学与技术专业培养方案

PS:清华大学计算机科学与技术专业本科生培养方案 计算机科学与技术(0812) 一.研究方向 1.通信软件工程 2.网络技术与应用 3.分布计算理论与技术 4.信息安全与多媒体技术 二.课程设置 类别 课程编号 课程名称 学时 学分 学期 学位课 公共必修课 512.8*704 自然辩证法概论 54 2 秋 521.8*300 科学社会主义理论与实践 36 1 春 534.8*445 英语 144 4 秋/春 基础理论课(至少选1门) 813.8*279 近世代数及其应用 54 3 秋 513.

[it-ebooks]电子书列表

#### it-ebooks电子书质量不错,但搜索功能不是很好 #### 格式说明  [ ]中为年份      ||  前后是标题和副标题  #### [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Objective-C to develop iPhone games http://it-ebooks.info/book/3544/ Learning Web App Developmen