zoukankan      html  css  js  c++  java
  • MIT6.006Lec01:Python实现

    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课件在这里 

  • 相关阅读:
    JAVA获取昨天、今天、明天等日期
    IDEA设置调用方法时提示方法上的注释
    Hibernate使用distinct返回不重复的数据,使用group by 进行分组
    SpringBoot 自定义注解
    tailwindcss 使用总结
    nodejs nvm 包管理
    macos NPM 全局安装解决方案
    git 遇到修改github密码导致本地push失败解决方案
    Jupyter 快捷方式设置
    Vue indent eslint缩进webstorm冲突解决
  • 原文地址:https://www.cnblogs.com/zjutzz/p/3268824.html
Copyright © 2011-2022 走看看