The theoretical study of computer program performance and resource useage.
 
First, analysis and then design.
 
Questions:
1 In programming, what is more important than performance(有什么比性能更重要)?
correctness, simplicity(简洁性), maintainability, stability, modularity(模块化,避免修改功能以外的代码), efficiency, programmer's time, security, 
scalability(可扩展性),  Functionality(特性多), user friendliness (用户友好)
2 why study algorithms and performance?(那为什么还要学习算法?)
user friendliness(提高性能也会用户友好) ,feasible versus infeasible(内存占用多或速度慢会导致不可行), you can use algorithms to pay for these other things that you want(like user friendilness, security, ).
like communication and memory and so forth,同performance一样需要节约.. for fun.
 
Problem :Sorting(排序问题)
Insertion Sort: move the key and copy to a position to compare if it is corrent
 
Running time:(运行时间)
Depends on input(e.g. already sorted)
Depends on input size(6 elem. vs 6 * 10^9 elem.) -- parametionze in input size
want upper bounds(想知道它运行时间的上限) -- guarantee to user
 
Kinds of anaylysis:(如何分析)
Worst-case(usually): T(n) = max time on any imput of size n
Average-case (sometimes) T(n) = expected time over all inputs of size n(每种输入的概率*时间,求和平均
 -- statistical distribution of inputs(Need assumption of statistic distribution, like normal distr.)
Best-case: (bogus 假象) just for cheat,为特定输入给出特定输出,not for all cases。
 
What is ins-sort's w-c time?
    Depends on computer
        -- relative speed (on same machine) 在相同机器上比较相对速度
        -- absolute sppeed (on diff machine) 真的会有某个算法不关在什么计算机上运行都最快吗?这会很困惑
 
BIG IDEA:
Asymtotic analysis: 渐近分析
1 Ignore machine dependent constants(忽略与机器相关的常量)
2 look at growth of T(n) as n - > infinity
 
Asymptotic notation(渐近符号)
theta-notation: drop lowner order terms Ignore leading constants
    Ex: 3n^3 + 90n^2 -5n -6046 = theta(n^3)
As n-> infinity , theta(n^2) alg. always beats a theta(n^3) alg.(即使在不同的机器上,极其差别也只是constants diff)
会由一个点开始,theta(n^2)与theta(n^3)消耗相同或更少
 
Insertion Sort:(插入排序)
 
T(n) = 求和(j = 2-> n):theta(j) = theta(n^2)(arithmetic serias算数级数)
 
Is insertion sort fast?
    -- moderately so, for small n(对于很小的n,适度的快)
    -- not at all for largen
 
Merge Sort:(归并排序)
 
 
    1 If n == 1,  done                                                     (theta(1))
    2 Recursively sort: A[1... n/2] and A[(n/2+1) ... n]    (2T(n/2))
    3 Merge two sorted list                                            (theta(n))
 
Key subroutine is Merge:(子集合并)
两个子列,20 13 7 2, 12 11 9 1, 两个列中的最小值比较,拿走1,在比较两个列中的最小值,拿走2,当某一个子列空了,另一个子列整个拿走。操作数是固定的,因此:
Time = theta(n) on n total elems. 在下面即为c*n
 
T(n) = theta(1), if n = 1 (usually omit)
T(n) = 2T(n/2) + theta(n) if n > 1
 
Recrusion tree:(递归树)
         T(n) = 2T(n/2) +c*n (c is a contant) 可以写成树状:(高度是lgn, 叶子数为n)
                                =  2(2T(n/4) + c*n/2)) + c*n
                                = ... 
                                = lgn个c*n以及叶子上的n个theta(1),即为theta(n))
                                = c*n*lgn+ theta(n)
                                = theta(n*lgn)(去掉低阶项)
 
Result: theta(n*lgn) is faster then theta(n^2) when the element size is larger than a number.

[MIT Intro. to algo]Lecture 1: 课程介绍,算法优势,插入算法和归并算法分析,渐近符号的更多相关文章

  1. [学习笔记] CS131 Computer Vision: Foundations and Applications:Lecture 1 课程介绍

    课程大纲:http://vision.stanford.edu/teaching/cs131_fall1718/syllabus.html 课程定位: 课程交叉: what is (computer) ...

  2. MIT 6.828 课程介绍

    MIT 6.828 课程介绍 本文是对MIT 6.828操作系统课程介绍的简单摘录,详细介绍见6.828: Learning by doing以及朱佳顺的推荐一门课:6.828.学习资源均可以在课程主 ...

  3. 优雅智慧女性课程班 - 公开课程 - 课程介绍 - 中国人民大学商学院EDP中心

    优雅智慧女性课程班 - 公开课程 - 课程介绍 - 中国人民大学商学院EDP中心 优雅智慧女性课程班 课程总览 思想睿智成熟,外表美丽自信,气质优雅端庄,是魅力女性所应具备的特性.在当今不确定环境下, ...

  4. Vue+koa2开发一款全栈小程序(1.课程介绍+2.ES6入门)

    1.课程介绍 1.课程概述 1.做什么? Vue+koa2开发一款全栈小程序 2.哪些功能? 个人中心.图书列表.图书详情.图书评论.个人评论列表 3.技术栈 小程序.Vue.js.koa2.koa- ...

  5. 爬虫--Scrapy框架课程介绍

    Scrapy框架课程介绍: 框架的简介和基础使用 持久化存储 代理和cookie 日志等级和请求传参 CrawlSpider 基于redis的分布式爬虫 一scrapy框架的简介和基础使用 a)    ...

  6. web安全之SQL注入--第一章 课程介绍

    课程介绍1.什么是SQL注入?2.如何寻找SQL注入漏洞?3.如何进行sql注入攻击?4.如何预防sql注入5.课程总结

  7. python入门课程 第一章 课程介绍

    1-1 Python入门课程介绍特点:    优雅.明确.简单适合领域:    web网站和各种网络服务    系统工具和脚本    作为"胶水"语言把其他语言开发的模块包装起来方 ...

  8. 01.课程介绍 & 02.最小可行化产品MVP

    01.课程介绍 02.最小可行化产品MVP 产品开发过程 最小化和可用之间找到一个平衡点

  9. JS--- part6课程介绍 & part5复习

    part6 课程介绍 scroll系列:-----重点,每个属性是什么意思 封装scroll系列的相关的属性,固定导航栏案例---事件浏览器的滚动条事件--能够写出来 封装动画函数---缓动动画--- ...

随机推荐

  1. java内部类案例

    实现键值对的存储输出 import java.util.Arrays; public class EntryDemoTest { //实现键值对的存储 public static void main( ...

  2. UE4中的AI行为树简单介绍

    UE4引擎中可以实现简单AI的方式有很多,行为树是其中比较常用也很实用的AI控制方式,在官网的学习文档中也有最简单的目标跟踪AI操作教程,笔者在这里只作简单介绍. AIController->和 ...

  3. super深究

    super的入门使用: 在类的继承中,如果定义某个方法,该方法会覆盖父类的同名方法,但有时候我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可以通过使用super来实现.比如: cla ...

  4. ubuntu 12.04 64位 安装wps

    1.去wps官网下载linux版的软件 http://community.wps.cn/download/ 我这里下载的是Alpha版的kingsoft-office_9.1.0.4280~a12p4 ...

  5. python第三课——数据类型2

    day03: 1.列表:list 特点:有序的(有索引.定义和显示顺序是一致的).可变的(既可以改变元素内容也可以自动扩容).可重复的. 可以存储任何的数据类型数据 定义个列表如下: lt = ['宋 ...

  6. 全局唯一Id:雪花算法

    雪花算法-snowflake 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有 ...

  7. mongodb的学习-3-在Mac上的安装配置

    1.使用homebrew安装: brew install mongodb 查看安装好的版本: mongo --version MongoDB shell version v3.6.4 git vers ...

  8. java 控制流

    一:     块作用域 块(即复合语句):是指由一对花括号括起来的若干条简单的java语句.块决定了变量的作用域,一个块可以嵌套在另一个块中,如下: public class print_In { p ...

  9. Spring源码分析(一)基本介绍

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 前言 作为一名开发人员,阅读源码是一个很好的学习方式.本文将结合< ...

  10. 1550: Simple String (做得少的思维题,两个字符串能否组成另外一个字符串问题)

    1550: Simple String Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 256 Mb     Submitt ...