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

MIT6.006Lec01:Python实现的更多相关文章

  1. 2015/10/9 Python核编初级部分学习总结

    终于在十一长假之后的两天看完了<Python核心编程>的初级部分.虽然到后来两章,类和环境看得越来越慢,越来越难以理解.很多东西只能靠强记,也没办法真正掌握了,我想了想,还是不强迫自己去背 ...

  2. 【MIT6.828】centos7下使用Qemu搭建xv6运行环境

    title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...

  3. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  4. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  5. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  6. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  7. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  8. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  9. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

随机推荐

  1. iterm2切换显示屏vim乱行解决

    http://note.youdao.com/noteshare?id=5aec9d82cc3a95b6909e9966b4aa3227

  2. SpringBoot实战:我们的第一款开源软件

    原文出处: 纯洁的微笑 在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来 ...

  3. sql server 日志文件占用过多空间

    问题描述: 在sql server的log文件夹中存在大量的mdmp.log文件,整体占用了几十个G C:\Program Files (x86)\Microsoft SQL Server\MSSQL ...

  4. 科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解)

    一:TVTK的管线 使用管线技术将TVTK中各个对象穿连起来,几乎所有渲染引擎都会提到管线技术 在TVTK中,每个对象只需要实现相对简单的任务,整个管线则能根据用户的需求,实现复杂的数据可视化处理. ...

  5. COGS 5. P服务点设置

    5. P服务点设置 http://www.cogs.pro/cogs/problem/problem.php?pid=5 ★★   输入文件:djsc.in   输出文件:djsc.out   简单对 ...

  6. The Difference Between Big Data and a Lot of Data

    The Difference Between Big Data and a Lot of Data The term “big data” has been around for a while no ...

  7. Rolling in the Deep (Learning)

    Rolling in the Deep (Learning) Deep Learning has been getting a lot of press lately, and is one of t ...

  8. nodejs 剪切图像在上传,并保存到指定路径下(./public/img/' + req.session.token + '.jpg‘)

    前jQuery端接收数据 function upAvatar(img){ console.log(img); // data:image/jpeg;base64,/9j/4AAQSkZJRgABAQA ...

  9. func_get_args()获取参数

    php中func_get_args()可以获取多个参数,讲多个参数放在数组里面. <?php function show() { $attr = func_get_args();//获取输入的参 ...

  10. C语言实现线性表

    #include <stdio.h> #include <stdlib.h> //提供malloc()原型 /* 线性表需要的方法: 1. List MakeEmpty():初 ...