MIT Introduction to Algorithms 学习笔记(一)

MIT Introduction to Algorithms 学习笔记

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/

 

整个课程分成8个部分:

214640_mwk7_106593.png

 

Lecture 1: Introduction and Peak Finding

  1. Peak Finder

在数组中找到一个峰值。

  1.  

在数组中,如果bcba,那么b是一个峰值。如果ihi是一峰值。

214746_Q8qQ_106593.png

最简单的算法就是从数组的第一个元素和它的相邻的元素比较。算法运行时间为Θ(n)

 

另外就是使用二分法:

214859_Gkkc_106593.png

算法运行时间为Θ(log2(n)):

215021_1vZE_106593.png 

  1. Two-dimensional Version

215106_ia4j_106593.png

在二维数组中如果a b, a d, a c, a e,那么a是峰值。

过程如下:

215306_vW4Y_106593.png

215340_OWmt_106593.png

假设二维数组大小为(mn),算法运行时间为Θ(n log n)

215451_ZHWK_106593.png

python代码:

def getMaxIndex(sList):
    #print(sList)
    iMax = 0
    Max = sList[0]
    for i in range(0,len(sList)):
        if sList[i] > Max:
            Max = sList[i]
            iMax = i
    return iMax
def isPeak(sList,iPos):
    #print(sList)
    sLen =len(sList)
    if(1 == sLen):
        return 0
    elif(sLen - 1 == iPos):
        if(sList[iPos] < sList[iPos - 1]):
            return -1 
        else:
            return 0  
    elif(0 == iPos):
        if(sList[iPos] < sList[iPos + 1]):
            return 1
        else:
            return 0
    elif(sList[iPos] < sList[iPos - 1]):
        return -1
    elif(sList[iPos] < sList[iPos + 1]):
        return 1
    elif(sList[iPos] >= sList[iPos + 1] and sList[iPos] >= sList[iPos - 1]):
        return 0
 
def PeakFinder_2D(sList2d,startPos,endPos):
    rowLen = endPos - startPos + 1
    tmpList1 = []
    if(0 == rowLen):
        return -1,-1,-1
    
    iMid = int(rowLen / 2) + startPos
    colLen = len(sList2d[iMid])
    if(0 == colLen):
        return -1,-1,-1
    
    iMaxValInCol = getMaxIndex(sList2d[iMid])
    for i in range(0,len(sList2d[iMid])):
        tmpList1.append(sList2d[i][iMaxValInCol])
    bIsPeak = isPeak(tmpList1, iMid);
    print(iMid,iMaxValInCol,sList2d[iMid],bIsPeak)    
    if(0 == bIsPeak):
        return iMid,iMaxValInCol,sList2d[iMid][iMaxValInCol]
    elif(-1 == bIsPeak) :
        return PeakFinder_2D(sList2d,startPos,iMid - 1)
    elif(1 == bIsPeak):
        return PeakFinder_2D(sList2d,iMid + 1,endPos)  
    
    return -1,-1,-1

 

转载于:https://my.oschina.net/hyaicc/blog/544269

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 第一课 课程细节;序论:算法分析,插入排序法(Insertion Sort),合并排序(Merge Sort) 阅读:1-2章 发测验 0 2 演示课 1 算法的正确性 发《作业 1》 3 第二课 渐进表示(Asymptotic Notation)。递归公式(Recurrences):置换法,迭代法,主方式 阅读:3-4 章,除了§4.4 4 第三课 各个击破法: Strassen 算法,费氏数列,多项式乘法。 阅读:28 章第 2 节,30章第1节 5 演示课 2 递归公式,松散性 阅读:Akra-Bazzi 的讲义 6 第四课 快速排序法,随机化算法 阅读:5 章 1 到 3 节,7 章 收《作业 1》发《作业 2》 7 演示课 3 排序法:堆积排序法,动态集合,优先队列 阅读:6 章 8 第五课 线性时间的排序法,下限,计数排序法, 基数排序法 阅读: 8 章第 1 到 3 节 收《作业 2》发《作业 3》 9 第六课 序列统计,中位数 阅读:9 章 10 演示课 4 中位数的应用,桶式排序 阅读:8 章第 4 节 11 第七课 散列,通用散列 阅读: 11 章 1 到 3 节 收《作业 3》发《作业 4》 12 第八课 散列函数,完美散列 阅读:11 章第 5 节 13 演示课 5 测验 1 复习 收《作业 4》 14 评分后的作业4可以在中午拿到 15 测验 1 16 演示课 6 二元搜寻树,树的追踪 阅读:12 章 1 到 3 节 17 第九课 二元搜寻树和快速排序法之间的关系;随机二元搜寻树的分析 阅读:12 章 4 节 发《作业 5》 18 第十课 红黑树,循环,插入,删除 阅读:13 章 19 演示课 7 2-3树, B-树 阅读:18 章 1 到 2 节 20 第十一课 增强数据结构,间距树 阅读:14 章 收《作业 5》发《作业 6》 21 第十二课 计算几何,区间查询 阅读:33 章 1 到 2 节 22 演示课 8 凸多边形 阅读:33 章 3 节 23 第十三课 van Emde Boas,优先队列 阅读:van Emde Boas 的讲义 收《作业 6》发《作业 7》 24 第十四课 偿还算法,表的复制,可能法 阅读:17 章 25 演示课 9 竞争分析,自我排序列 26 第十五课 动态编程,最长共同子序列,最优二元搜寻树 阅读:15 章 收《作业 7》发《作业 8》 27 第十六课 贪婪算法,最小生成树 阅读:16 章 1 到 3 节, 23 章 28 演示课 10 贪婪算法和动态编程的范例 29 第十七课 最短路径,Dijkstra算法,广度优先搜寻法 阅读:22 章1, 2 节;第 580 - 587 页,24章 3 节 收《作业 8》发《作业 9》 30 演示课 11 深度优先搜寻法,边的分类 阅读:22 章 3 到 5 节 31 第十八课 最短路径,Bellman-Ford,DAG内的最短路径,差异局限 阅读:24 章 1, 2, 4, 5 节 32 第十九课 全成对最短路径,动态编程,Floyd-Warshall,Johnson 的算法 阅读:25 章 收《作业 9》 33 第二十课 零散集合的数据结构 阅读:21 章 34 评分后的作业9可以在中午拿到 35 第二十一课 带回家 发下 测验 2 ; 道德,解决问题 (强制参加) 发测验 2 36 没有演示课 - 解答测验 2! 37 没有课 算法程序比赛开始 (非强制参加) 收测验 2 38 第二十二课 网络流,最大流量最小切割论 阅读:26 章 1 - 2 节 发《作业 10》 (选答) 39 演示课 12 求对集 (注:最大二分图求对集) 阅读:26 章 3 节 40 第二十三课 网络流,Edmonds-Karp 算法 参赛答案截止 41 第二十四课 随堂测验;比赛颁奖;后续课程的讨论 《作业 10》解答

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值