最大子数组(The maximum-subarray problem)

最大子数组的两种解法

本文将用两种方法来求解此问题,一种是暴力求解法,一种是分治算法。


以一个简单的例题说明

有下表数组,求解其最大子数组:

数值2-1-3434-67
序号12345678

可以看出,该数组的最大子数组为4~8,值为12

说明:(1,5)表示子数组1~5,值为5

下面以计算机思维求解

暴力求解

  1. max
    ={(1,1) (1,2) (2,2)}
    =(1,1) 值为2
  2. max
    ={(1,1) (1,3) (3,3)}
    =(1,1) 值为2
  3. max
    ={(1,1)(1,4)(4,4)}
    =(4,4) 值为4
  4. max
    ={(4,4)(4,5)(5,5)}
    =(4,5) 值为7
  5. max
    ={(4,5)(4,6)(6,6)}
    =(4,6) 值为9
  6. max
    ={(4,6)(4,7)(7,7)}
    =(4,6) 值为11
  7. max
    ={(4,6)(4,8)(8,8)}
    =(4,8) 值为12

即最大子数组为4~8,数值为12

分治算法求解

平分成4分

数值2-1-3434-67
序号12345678
比较max{(1,1)(1,2)(2,2)}max{(3,3)(3,4)(4,4)}max{(5,5)(5,6)(6,6)}max{(7,7)(7,8)(8,8)}
结果(1,1)(4,4)(5,6)(8,8)
比较max{(1,1)(4,4)(1,4)}max{(5,6)(8,8)(5,8)}
结果(4,4)(5,8)
比较max{(4,4)(5,8)(4,8)}
结果(4,8)

则最大子数组为4~8,值为12.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值