算法导论 第三章 and 第四章
第三章
渐进的基本O()....
常用函数
% 和 // 转换
斯特林近似公式
斐波那契数
第四章
分治策略:分解(递归)--解决(递归触底)--合并
求解递归式的3种方法:
1:代入法(替代法):猜测一个(靠经验)--数学归纳法
·2:递归树法:画树p31【第3版中文】p51->递归式--证明
3:主方法:
快速,有些地方不能涉及,递归式不易写出
4.1最大数组问题
分治法:
1.A[low ,mid] 2.A[mid+1, high] 3.包含mid中间(想左和右分别遍历组合找出最大)
import decimal def FIND_MAX_CROSSING_SUBARRAY(A,low,mid,high): left_sum = decimal.MIN_EMIN sum = 0 for i in range(mid,low - 1,-1): sum = sum + A[i] if sum > left_sum: left_sum = sum max_left = i right_sum = decimal.MIN_EMIN sum = 0 for i in range(mid + 1,high+1): sum = sum + A[i] if sum > right_sum: right_sum = sum m ax_right = i return (max_left,max_right,left_sum + right_sum) def FIND_MAXIMUM_SUBARRAY(A,low,high): if high == low: return (low,high,A[low]) else: mid = (low + high) //2 (left_low,left_high,left_sum) = FIND_MAXIMUM_SUBARRAY(A,low,mid) (right_low,right_high,right_sum) = FIND_MAXIMUM_SUBARRAY(A,mid+1,high) (cross_low,cross_high,cross_sum) = FIND_MAX_CROSSING_SUBARRAY(A,low,mid,high) if left_sum >= right_sum and left_sum >= cross_sum: return (left_low,left_high,left_sum) elif right_sum >= left_sum and right_sum >= cross_sum: return (right_low,right_high,right_sum) else: return (cross_low,cross_high,cross_sum) if __name__ == '__main__': A = [13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7] temp = FIND_MAXIMUM_SUBARRAY(A,0,len(A)-1) print(temp) ''' ========= RESTART: F:/python/algorithms/4_1_find_maximum_subarray.py ========= (7, 10, 43) O(n*n) python 3.5.1 win7 和伪代码几乎一模一样 - -! 唯一要注意的问题还是 python 从0开始 '''
线性级改进
O(n)
习题:4.1-5
很容易理解,当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和
def FindGreatestSumOfSubArray(A): if A : nCurSum = nGreatestSum = 0 #nCurSum 保存现在和 nCreatestSum 保存最大的 curStart = curEnd = 0 start = end = 0 for i in range(len(A)): #遍历A nCurSum += A[i] curEnd = i if nCurSum < 0: #为负数摒弃 加一个正数=把正数减 小 nCurSum = 0 curStart = curEnd = i + 1 if nCurSum > nGreatestSum: #刷新最大数组 nGreatestSum = nCurSum start = curStart end = curEnd #都是负数 遍历找最大负数 if nGreatestSum == 0: nGreatestSum = A[0] start = end = 0 for i in range(1,len(A)): if A[i] > nGreatestSum: nGreatestSum = A[i] start = end = i return [start,end,nGreatestSum] else: return [] if __name__ =="__main__": A = [13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7] temp = FindGreatestSumOfSubArray(A) print(temp) ''' $ python3 4_1_5_find_maximum_subarray.py [7, 10, 43] O(n) Python 3.4.3+ Ubuntu 15.10 '''
参考引用:http://www.wutianqi.com/?cat=515&paged=6
http://www.cnblogs.com/chinaxmly/archive/2012/10/10/2718621.html
http://blog.csdn.net/yelbosh/article/details/7558981
算法导论 第三章 and 第四章的更多相关文章
- Kafka 权威指南阅读笔记(第三章,第四章)
Kafka 第三章,第四章阅读笔记 Kafka 发送消息有三种方式:不关心结果的,同步方式,异步方式. Kafka 的异常主要有两类:一种是可重试异常,一种是无需重试异常. 生产者的配置: acks ...
- 统计学习导论:基于R应用——第四章习题
第四章习题,部分题目未给出答案 1. 这个题比较简单,有高中生推导水平的应该不难. 2~3证明题,略 4. (a) 这个问题问我略困惑,答案怎么直接写出来了,难道不是10%么 (b) 这个答案是(0. ...
- JavaScript DOM编程艺术-学习笔记(第三章、第四章)
第三章: 1.js的对象分为三种:①用户自定义对象 ② 内建对象(js提供的对象) ③宿主对象(js寄宿的环境-浏览器,提供的对象) 2.文档是由节点组成的集合,即dom树,html元素是根元素,是唯 ...
- 《算法导论》学习总结 — XX.第23章 最小生成树
一.什么叫最小生成树 一个无向连通图G=(V,E),最小生成树就是联结所有顶点的边的权值和最小时的子图T,此时T无回路且连接所有的顶点,所以它必须是棵树. 二.为什么要研究最小生成树问题 <算法 ...
- (第三章,第四章)http报文内的http信息,返回结果的http状态码
第三章 http报文内的http信息 用于http协议交互的信息被称为http报文,包括请求报文和响应报文. 1.编码提升传输速率,在传输时编码能有效的处理大量的访问请求.但是编码的操作是计算机完成的 ...
- Hadoop: the definitive guide 第三版 拾遗 第四章
第四章中提到了通过CompressionCodec对streams进行压缩和解压缩,并提供了示例程序: 输入:标准输入流 输出:压缩后的标准输出流 // cc StreamCompressor A p ...
- Qt Gui 第三章~第四章
一.图片资源的调用 如上图是我图片存放的位置跟qrc的命名: 如下则是qrc对应的编写格式: <RCC> <qresource> <file>images/icon ...
- 算法导论(第三版)Exercises2.3(归并排序、二分查找、计算集合中是否有和为X的2个元素)
2.3-1: 3 9 26 38 41 49 52 59 3 26 41 52 9 38 49 57 3 41 52 26 38 57 9 49 3 41 52 26 38 ...
- 《算法导论》学习总结 — XX.第22章 图的基本算法
BFS(广搜): 广搜就是广度优先搜索,根据名字可以知道,是通过广度来遍历图,也就是层次遍历吧. 在这里以及下面的DFS(深搜),都用到了颜色WHITE,GRAY,BLACK,不过作用不同,具体分别再 ...
随机推荐
- hdu1233 还是畅通工程 基础最小生成树
//克鲁斯卡尔 #include<iostream> #include<algorithm> using namespace std; ; struct node { int ...
- php连接mysql并读取数据
<?php $server_name="localhost:3306"; //数据库服务器名称 $username="root"; // 连接数据库用户名 ...
- [NOIP2018校模拟赛]T1 阶乘
题目: 描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值. 输入 共两行. 第一行一个正整数n. 第二行n个正整数a[i]. 输出 共 ...
- jQuery attr() 源码解读
我们知道,$().attr()实质上是内部调用了jQuery.access方法,在调用时jQuery.attr作为回调传入.在通过种种判断(参看jQuery.access()方法)之后,取值和赋值最后 ...
- 2019/05/11 Java内存结构
1. 类加载子系统:负责从文件系统或者网络加载Class信息,加载的信息存放在一块称之方法区的内存空间. 2. 方法区:就是存放类的信息.常量信息.常量池信息.包括字符串字面量和数字常量等. 3. ...
- Java入门小知识
软件开发什么是软件? 一系列按照特定顺序组织的计算机数据和指令的集合什么是开发? 制作软件 人机交互 软件的出现实现了人与计算机之间的更好的交互交互方式 图形化界面:这种方式简单直观,使用者 ...
- web前端工程师入门须知
本文是写给那些想要入门web前端工程的初学者,高手请路过,也欢迎高手们拍砖. 先说下web前端工程师的价值,目前web产品交互越来越复杂,用户使用体验和网站前端性能优化这些都得靠web前端工程师去做w ...
- vmware让虚拟机内外网络可互访
以下方法可使主机可以ping通虚拟机,虚拟机也可以ping通主机 首先对虚拟机设置 然后设置虚拟机,假设主机的ip是10.0.0.9,那虚拟机的ip应如下设置: 其中ip地址任意设置一个,但要求跟主机 ...
- HTTPS时代已来,你做好准备了吗?
早在今年年初,Google在其安全博客上已经表明,从7月开始,Chrome68会将所有的HTTP网站标记为不安全.随后,Mozilla也表明,Firefox浏览器也准备将所有HTTP网站标记为不安全. ...
- codevs 1519 过路费
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,…,n.这个国家的政府 ...