第三章

渐进的基本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 第四章的更多相关文章

  1. Kafka 权威指南阅读笔记(第三章,第四章)

    Kafka 第三章,第四章阅读笔记 Kafka 发送消息有三种方式:不关心结果的,同步方式,异步方式. Kafka 的异常主要有两类:一种是可重试异常,一种是无需重试异常. 生产者的配置: acks ...

  2. 统计学习导论:基于R应用——第四章习题

    第四章习题,部分题目未给出答案 1. 这个题比较简单,有高中生推导水平的应该不难. 2~3证明题,略 4. (a) 这个问题问我略困惑,答案怎么直接写出来了,难道不是10%么 (b) 这个答案是(0. ...

  3. JavaScript DOM编程艺术-学习笔记(第三章、第四章)

    第三章: 1.js的对象分为三种:①用户自定义对象 ② 内建对象(js提供的对象) ③宿主对象(js寄宿的环境-浏览器,提供的对象) 2.文档是由节点组成的集合,即dom树,html元素是根元素,是唯 ...

  4. 《算法导论》学习总结 — XX.第23章 最小生成树

    一.什么叫最小生成树 一个无向连通图G=(V,E),最小生成树就是联结所有顶点的边的权值和最小时的子图T,此时T无回路且连接所有的顶点,所以它必须是棵树. 二.为什么要研究最小生成树问题 <算法 ...

  5. (第三章,第四章)http报文内的http信息,返回结果的http状态码

    第三章 http报文内的http信息 用于http协议交互的信息被称为http报文,包括请求报文和响应报文. 1.编码提升传输速率,在传输时编码能有效的处理大量的访问请求.但是编码的操作是计算机完成的 ...

  6. Hadoop: the definitive guide 第三版 拾遗 第四章

    第四章中提到了通过CompressionCodec对streams进行压缩和解压缩,并提供了示例程序: 输入:标准输入流 输出:压缩后的标准输出流 // cc StreamCompressor A p ...

  7. Qt Gui 第三章~第四章

    一.图片资源的调用 如上图是我图片存放的位置跟qrc的命名: 如下则是qrc对应的编写格式: <RCC> <qresource> <file>images/icon ...

  8. 算法导论(第三版)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  ...

  9. 《算法导论》学习总结 — XX.第22章 图的基本算法

    BFS(广搜): 广搜就是广度优先搜索,根据名字可以知道,是通过广度来遍历图,也就是层次遍历吧. 在这里以及下面的DFS(深搜),都用到了颜色WHITE,GRAY,BLACK,不过作用不同,具体分别再 ...

随机推荐

  1. 点击a标签的子元素不跳转 ,阻止默认行为

  2. 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换

    题目传送门 /* 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 比赛时以为是贪心,榨干智商也想不出来:( ...

  3. 你有学习者综合征吗?Web 开发是重灾区

    [导读]:学习者综合征的主要表现:学而不用,不停学习,却没有真正实际应用知识来做东西.如果过去的一年里,学习的语言或框架超过三个,那可能已经感染学习者综合征了.Web 开发是重灾区咯. 你有学习者综合 ...

  4. EditText输入手机号自动带空格

    xml: <EditText android:id="@+id/edit_main" android:layout_width="match_parent" ...

  5. 位bit,字节byte,K,M,G(转)

      字节是由8个位所组成,可代表一个字符(A~Z).数字(0~9).或符号(,.?!%&+-*/),是内存储存数据的基本单位.1 byte = 8 bit 1 KB = 1024 bytes1 ...

  6. 洛谷 P1455 搭配购买

    题目描述 明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某个网站上有卖云朵的,小朋友们决定一同前往去看看这种神奇的商品,这个店里有n朵云,云朵已经 ...

  7. 洛谷 P1918 保龄球

    题目描述 DL 算缘分算得很烦闷,所以常常到体育馆去打保龄球解闷.因为他保龄球已经打了几十年了,所以技术上不成问题,于是他就想玩点新花招. DL 的视力真的很不错,竟然能够数清楚在他前方十米左右每个位 ...

  8. 分享一个开源的JavaScript统计图表库,40行代码实现专业统计图表

    提升程序员工作效率的工具/技巧推荐系列 推荐一个功能强大的文件搜索工具SearchMyFiles 介绍一个好用的免费流程图和UML绘制软件-Diagram Designer 介绍Windows任务管理 ...

  9. Linux OpenGL 实践篇-10-framebuffer

    在之前的实践中我们都是在当前的窗口中渲染,即使用的缓存都是由glutCreateWindow时创建的缓存,我们可称之为默认缓存.它是唯一一个可以被图形服务器的显示系统识别的帧缓存,我们在屏幕上看到的只 ...

  10. Git搭建自己的网站服务器(Linux)

    git服务器弄了半天终于搞定了,还是记录下吧,不然下次有得忘了 流程: 服务器 构建git目录 git用户,git组作为仓库管理 ssh授权(远程无需密码接入) hook(post-receive)自 ...