MIT算法导论一 简介

本系列文章根据MIT公开课程:算法导论,并结合《算法导论》进行整理。

Analysis of algorithm 算法分析

关于计算机程序在效率资源利用方面的理论研究

首先提出几个问题?

  • 有比效率更重要的吗?
    其实有很多,例如:正确性、可维护性、时间成本、健壮性、用户友好(user-friendly)等等

  • 既然如此,为什么还要进行算法的效率分析呢?
    一个很有意思的比方,你认为钱重要还是水和饭重要?当然是水和饭,但是钱却可以换来水和饭。在算法分析中的“效率”,就是用来支持其他东西的基础,比如用户体验、安全等等。


这里举个例子:排序问题
Input:一些列的数字集合 seq<a1, a2, a3... an>
Output:重新排序的数字集合seq<a1', a2', a3'... an'>,并且a1'<a2'<a3'...<an'

插入排序实现(伪代码):

insertion sort(A[1...n])
  for j <- 2 to n
    do key <- A[j]
      i <- j-1
      while i>0 and A[i]>key
        do A[i+1] <- A[i]
          i <- i-1
      A[i+1] <- key

对于每一个A[i],考虑A[1...i-1]中它的合适的插入位置k,然后将A[k...i-1]依次后移一个位置,把A[i]插入到A[k]的位置即可


归并排序实现(伪代码):

merge sort(A[1...n])
  1. if n=1 done
  2. recursively sort A[1...n/2] and A[n/2+1...n]
  3. merge 2 sorted lists

将一个表分成两部分递归排序,递归处理的两个表已经有序了后进行合并


关注运行时间,依赖于
-数据的输入情况,数据是否有序
-数据的规模
-找到运行时间上界。一般情况下,我们需要找到这个程序对于最坏的输入数据的情况下,运行时间是多长。As a guarantee to the user


几种分析运行时间的方法
Worst-case:(usually)
用T(n)来表示算法在输入规模为n时的最大运行时间
Average-case:(sometimes)
用T(n)来表示算法在所有输入规模为n的序列的运行时间的一个期望值
基于假设:输入的统计分布,一种常见的假设就是均匀分布,所有输入都以相同可能的方式出现。
Best-case:(bogus)
用一组极好的数据在一个效率极低的算法上跑,没有说服力。

那么插入排序的Worst-case时间是多少?
首先取决于运行的机器,所以当比较算法时,通常比较的是相对速度(在同一台机器上)

Big Idea——引入渐近分析
忽略那些依赖于机器的常量
关注当n趋近于无限大时,T(n)的增长

渐进符号(Asymptotic notation)
θ-notation:忽略所有的低阶项和常数因子,只分析最高阶项

3n3 + 2n2 + 4n + 1=θ(n3)

如果算法A的渐近时间复杂度是θ(n3),算法B的是θ(n2),那么一定存在一个足够大的n,算法B的运行时间要小于A


对于插入排序的分析

T(n)分析

T(n)=Σθ(j)=θ(n2)

所以插入排序够快吗?
当n比较小的时候比较快,但是当n变大时效率会很糟糕


对于归并排序的分析

T(n)分析

T(n)=2T(n/2)+θ(n)=2T(n/2)+cn=θ(nlgn) | constant c > 0

归并排序能够在效率上当输入规模n增大的时候渐近的超过插入排序,在最坏的情况下。实际上,当n>30以及以上的时候,归并排序的效率就比插入排序的效率要高了

文中图片来源:http://www.cnblogs.com/beautiful-code/p/4923632.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,159评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,726评论 0 15
  • 一. 写在前面 要学习算法,“排序”是一个回避不了的重要话题,在分析完并查集算法和常用数据结构之后,今天我们终于可...
    Leesper阅读 2,516评论 0 40
  • 又是这个点了 是啊又到点了 敲门声又响起了 我像是躺在客厅沙发上 我想我应该应该是没喝酒的 分不清正敲门的是天使还...
    石中麦阅读 151评论 0 2
  • 厂工会请清华医院送健康下基层活动 崔医生分三部讲解 颈腰椎知识 颈椎病变,腰椎病变,腰肌劳损,腰椎间盘突出的知识 ...
    Expe阅读 360评论 1 1