实验一 分治策略

实验一  分治策略

一、 实验目的及任务

1、理解递归的概念,掌握设计有效算法的分治策略。

2、分治法求解最大连续子数组(字段和)问题

二、 实验环境

python

三、 问题描述

Input : 一个数组

Output:最大连续子数组。

四、 编程任务

一个整数数组中的元素有正有负,在该数组中找出一个连续子数组,要求该连续子数组中各元素的和最大,这个连续子数组便被称作最大连续子数组。

五、 数据输入

随机产生1000以上的整数(有正有负),写入文件input.txt

六、 结果输出

比如数组{2,4,-7,5,2,-1,2,-4,3}的最大连续子数组为{5,2,-1,2},最大连续子数组的和为5+2-1+2=8将结果输出到文件output.txt

参考代码:

def maxSubArray(nums):  
    max_sum = float('-inf')  # 记录最大子数组和  
    cur_sum = 0  # 当前子数组和  
    for num in nums:  
        cur_sum += num  
        if cur_sum > max_sum:  
            max_sum = cur_sum  
        if cur_sum < 0:  
            cur_sum = 0  
    return max_sum  
  
# 读取输入数据  
with open('input.txt', 'r') as f:  
    nums = [int(x.strip()) for x in f.readlines()]  
  
# 求出最大子数组和  
max_sum = maxSubArray(nums)  
  
# 输出结果  
with open('output.txt', 'w') as f:  
    f.write(str(max_sum) + '\n')

这个算法的时间复杂度是 O(n),其中 n 是输入数组的长度。因为枚举所有可能的子数组只需要常数时间,最坏时间复杂度为 O(n^2),但是在本题中,输入数组长度远远大于 n^2,所以时间复杂度可以接受。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简单点了

谢谢大佬

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值