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课件在这里
MIT6.006Lec01:Python实现的更多相关文章
- 2015/10/9 Python核编初级部分学习总结
终于在十一长假之后的两天看完了<Python核心编程>的初级部分.虽然到后来两章,类和环境看得越来越慢,越来越难以理解.很多东西只能靠强记,也没办法真正掌握了,我想了想,还是不强迫自己去背 ...
- 【MIT6.828】centos7下使用Qemu搭建xv6运行环境
title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Python编码记录
字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...
随机推荐
- 五、java面向对象编程_3
目录 十五.Object类 1.toString 2.equals 十六.对象转型(casting) 十七.动态绑定(多态) 十八.抽象类(abstract) 十九.final关键字 二十.接口 十五 ...
- python 模块之hashlib
Hashlib模块 Python里面的hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据,其他的所有加密算法使用方式上基本类似. h ...
- Java基础-方法(method)的应用
Java基础-方法(method)的应用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 方法就是定义在类中,具有特定功能的一段小程序,方法也称为函数(function),方法可以接 ...
- day17 包装类、日期类
包装类 作用:1.丰富了基本数据类型只能存放值的问题,还提供了大量的方法或常量. 2.包装类充当了基本数据类型和引用数据类型转换的桥梁. 应用层面:包装类.String.基本数据类型的互相转换. 1. ...
- javascript精雕细琢(三):作用域与作用域链
目录 引言 1.执行环境 2.作用域与作用域链 引言 作用域与作用域链是JS应用中无时无刻不在影响程序运行的关键属性,但是由于它的不可见性,或者说它存在的过于普遍,简直就像空气一样.所以 ...
- 最佳的MongoDB客户端管理工具
<最佳的MongoDB客户端管理工具> 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一个好的MongoD ...
- ASP.NET配置文件Web.config 详细解释
一.认识Web.config文件 Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式), ...
- 【leetcode 简单】 第六十七题 回文链表
请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复 ...
- js鼠标自定移入输入框文本框光标自动定位到文本框
1.干货直接上 选中输入框设置如下: document.getElementById("Text1").focus();
- Ubuntu 14.04 + xRDP + Xfce 实现Windows远程桌面连接
1. 安装xRDP及vncserver sudo apt-get install xrdp sudo apt-get install vnc4server tightvncserver 2. 安装Xf ...