求数列的最大字段和

本文介绍了如何运用二分法解决数列的最大子段和问题,通过实例分析了子问题重叠的情况,并给出了具体的算法设计和程序代码。最终程序运行结果显示最大子段和为98。
摘要由CSDN通过智能技术生成

求数列的最大字段和{0,1,-1,3,-4,5,6,7,-8,88}。

问题分析:

用二分法将实例中的数据分解为{0,1,-1,3,-4},{5,6,7,-8,88},第一个子问题的解是3,第二个子问题的解是88,两个子问题的解不能简单的得到原问题的解。由此看出此问题不能用二分法分解成为独立的两个子问题,子问题中间还有公共的子问题,这类问题称为子问题重叠问题。下面仍用二分法解决这类问题中的一些简单问题,处理不独立的子问题。

算法设计:如果将所给的序列a[1:n]分为长度相等的两段a[1:(n/2)]和a[(n/2)+1:n]分别为求出这两段的最大子段和,则a[1:n]的最大子段和有3中情形:

情形(1)   a[1:n]的最大子段和与a[1:(n/2)]的最大子段和相同。

情形(2)   a[1:n]的最大子段和与a[(n/2)+1:n]的最大子段和相同。

情形(3)   a[1:n]的最大子段和为a[i:j)],且1≤i≤(n/2), (n/2)+1≤j≤n。

程序代码:

#include<stdio.h>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值