MIT6.006Lec01:Python实现

简介: MIT6.006是Algo Intro这门课,据说语言使用python Lec01是讲peak finding,也就是峰值点 具体为: 一维情况下一个数组中a[i]>a[i-1]且a[i]>a[i+1]那么它是peak  边界时检查一个方向就ok 二维情况下需要某元素x比四个相邻元素都大,边...

MIT6.006是Algo Intro这门课,据说语言使用python

Lec01是讲peak finding,也就是峰值点

具体为:

一维情况下一个数组中a[i]>a[i-1]且a[i]>a[i+1]那么它是peak  边界时检查一个方向就ok

二维情况下需要某元素x比四个相邻元素都大,边界也类似一维去处理

只要找到一个peak返回就好

复杂度:

一维用二分,log n

二维先二分,二分后的一维数组遍历一下,所以是O(n*log n)

代码:

# coding:utf8
# MIT6.006 Lec01
# peakfinder in 1D condition
#       --by HaxtraZ
def peakfinder(a):
    # a is a list. you can also treat it as an array
    n = len(a)/2
    while True:
        if n!=0 and n!=len(a):
             if a[n/2] < a[n/2-1]:
                 #look at left half
                peakfinder(a[:n/2])
            elif a[n/2] < a[n/2+1]:
                #look at right half
                peakfinder(a[n/2+1:])
            else:
                return a[n/2]
        elif n == 0:
            if a[0]>a[1]:return a[0]
            else:return a[1]
        elif n == len(a):
            if a[n]>a[n-1]:return a[n]
            else:return a[n-1]

  

# coding:utf8
# MIT 6.001 Lec1
# peakfinder in 2D condition
# ----by HaxtraZ

def globalMaxIndex(b):
    # you can assum b is a 1-D array
    key = 0
    val = b[0]
    blen = len(b)
    for j in (1,blen):
        if b[j] > val:
            key = j
            val = b[j]
    return key


def peakFinder(a):
    # a is a 2D-list 二维方格
    j = len(a)/2

    i = globalMaxIndex(a[j])
    # get the global max value in the j-th line
    if j!=0 and j!=len(a):
        if a[j-1][i] > a[j][i]:
            # 检查上半部分
            return peakFinder(a[:j])
        elif a[j+1][i] > a[j][i]:
            # 检查下半部分
            return peakFinder(a[j+1:])
        else:
            return a[j][i]
    elif j==0:
        if a[0][i]>a[1][i]:return a[0][i]
        else:return a[1][i]
    elif j==len(a):
        if a[n-1][i]>a[n][i]:return a[n-1][i]
        else:return a[n][i]

 Lec01的pdf课件在这里 

目录
相关文章
|
Python
Python实现因子分析(附案例实战)
Python实现因子分析(附案例实战)
1585 0
Python实现因子分析(附案例实战)
Python print() 打印两个 list ,实现中间换行
Python print() 打印两个 list ,实现中间换行
|
算法 大数据 Python
Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现
Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现
154 2
Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现
|
机器学习/深度学习 算法 Python
利用python实现逻辑回归(以鸢尾花数据为例)
利用python实现逻辑回归(以鸢尾花数据为例)
274 0
利用python实现逻辑回归(以鸢尾花数据为例)
|
存储 数据安全/隐私保护 计算机视觉
python 实现pacs功能 推送下拉影像
python 实现dcmtk关联pacs功能 推送下拉影像
278 0
python 实现pacs功能 推送下拉影像
|
前端开发 Python
Leecode加法题目3个 每日练习 Python实现
Leecode加法题目3个 每日练习 Python实现
110 0
Leecode加法题目3个 每日练习 Python实现
|
iOS开发 Python
Python实现微信消息连续发送
Python实现微信消息连续发送
Python实现微信消息连续发送
python实现微信小游戏“飞机大战”
python实现微信小游戏“飞机大战”
python实现微信小游戏“飞机大战”
|
机器学习/深度学习 算法 数据可视化
Python实现聚类分析和数据降维
Python实现聚类分析和数据降维
903 0
Python实现聚类分析和数据降维
|
机器学习/深度学习 算法 Python
Python实现线性回归和梯度下降算法
Python实现线性回归和梯度下降算法
213 0
Python实现线性回归和梯度下降算法

热门文章

最新文章