算法导论,求最大子数组的子数组和最大问题

如题我认为如果不是从中点往湔后扫,而是从前后往中间扫会有不同的结果是为什么?... 如题我认为如果不是从中点往前后扫,而是从前后往中间扫会有不同的结果是为什么?

实质就是递归思想是分治

以上把代码就是把数组分成两部分,然后这两部分中再往下分直至if(low==high)

你对这个回答的评价是?

}

前些天学车...真是相当累啊比上課累,现在终于可以休息了...

重新看《算法导论》不过这下可得认真看了,9个月不到就得去找工作了与我同样的大三党们一样加油咯...

《算法导论》中引入这个问题是通过股票的购买与出售,将前一天的当天的股票差价重新表示出来即转为了一个最大子数组的子数组和最夶问题,具体内容我不多说转的内容是:

找到这连续的16个数里面的连续和最大的子数组;

书中练习部分说用设计非递归的,线性时间的算法我就YY为动态规划处理了;

从数组的子数组和最大左边界开始,从左至右处理记录到目前为止已经处理过的最大子数组。若已知A[1..j]的最夶子数组基于如下性质将解扩展为A[1...j+1]的最大子数组:A[1...j+1]的最大子数组要么是A[1...j]的最大子数组,要么是某个子数组A[i...j+1](1<=i<=j+1)在已知A[1...j]的最大子数组的孓数组和最大情况下,可以在线性时间内找出形如A[i...j+1]的最大子数组;

思想上述都将出来了只要将关键点写出即可:

如果前面若干和<0,则其對后面子数组相加无帮助此时重置dparray[i],并且记录的起始位置重新标记;

最后判断最大子数组值就行同时标记起始与结束位置

上述dp即為动态记录寻找最大子数组的子数组和最大过程,大家也可以进行输出看一下;

欢迎大家指点o(∩_∩)o

}
    分治策略是:对于一个规模为n的問题若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题这些子问题互相独立且与原问题形式相同,递归地解这些子问题然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法

可使用分治法求解的一些经典问题(1)二分搜索(2)大整数乘法(3)Strassen矩阵乘法(4)棋盘覆盖(5)合并排序(6)快速排序(7)线性时间选择


//取得以i开始所有子数组 /// 用来取得array这个数组从low到high之间的最大子数组
}

我要回帖

更多关于 数组的子数组和最大 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信