用三种方法实现最大子列和的求解(Python实现)
来源:互联网 发布:对网络的认识和感受 编辑:程序博客网 时间:2024/05/18 03:41
问题描述:给定N个整数的序列{ A1, A2, …, AN}, 求该序列的最大子列和。
操作系统:Windows 10 编译环境:Pycharm 编程语言:Python3.6
实现思路:首先得有数据,所以先用代码实现随机列表的生成,随后用三种算法实现,并在主函数中实现函数的调用以及结果的输出
import random#生成随机列表 start和stop分别代表所需要列表元素的大小范围,length代表列表的长度def random_int_list(start, stop, length): start, stop = (int(start), int(stop)) if start <= stop else (int(stop), int(start)) length = int(abs(length)) if length else 0 random_list = [] for i in range(length): random_list.append(random.randint(start, stop)) return random_listdef main(): N = 10 A = random_int_list(-20, 20, N) maxsum = MAXSUBSEQSUM1(A, N) maxsum2= MAXSUBSEQSUM2(A, N) maxsum3= MAXSUBSEQSUM3(A, N) #分别用三种算法实现并输出结果 print(maxsum) print(maxsum2) print(maxsum3)#用最基础的方法来实现最大子列和,算法复杂度O(N*N*N)def MAXSUBSEQSUM1(A, N): ThisSum, MaxSum = 0, 0 for i in range(N): #i代表子列的左端位置 for j in range(i, N):#j代表子列的左端位置 ThisSum = 0 #ThisSum是从A[I]到A[J]的子列和 for k in range(i, j+1): ThisSum += A[k] if ThisSum > MaxSum: #如果刚得到的这个子列和更大 MaxSum = ThisSum #则更新结果 return MaxSum#在上面那个算法做了一些修改使算法复杂度降低,算法复杂度O(N*N)def MAXSUBSEQSUM2(A, N): ThisSum, MaxSum = 0, 0 for i in range(N): ThisSum = 0 for j in range(i, N): ThisSum += A[j] #只在前一个和上增加一个元素得到新的和 if ThisSum > MaxSum: MaxSum = ThisSum return MaxSum#在线处理算法def MAXSUBSEQSUM3(A, N): ThisSum, MaxSum = 0, 0 for i in range(N): ThisSum += A[i] #向右累加 if ThisSum > MaxSum: MaxSum = ThisSum #发现更大和则更新当前结果 elif ThisSum<0: #如果当前子列和为负数 ThisSum=0 #则不可能使后面的部分和增大,则该抛弃掉 return MaxSummain()
阅读全文
1 0
- 用三种方法实现最大子列和的求解(Python实现)
- Python实现求解最大子数组问题
- 求解PTA最大子列和问题的三种方法(包括输出首尾项)
- python实现动态规划求解给定矩阵的和最大的子数组(矩阵中数字正负均存在)
- 最大子列和问题的不同实现算法
- 求解最大子列和问题的四种算法
- 20160919求解最大子列和的问题
- java实现动态规划求解给定矩阵的和最大的子数组(矩阵中数字正负均存在)
- 最大子序列的求解分析(java代码实现)
- 用暴力求解法和分而治之法求解最大子数组问题的Java代码实现
- python3实现最大子序列和的在线处理方法
- 最大子列和问题的四种不同时间复杂度的算法实现
- 求解最大子列和问题——MaxSubSum
- PAT 最大子列和问题 (Python)
- 最大子数组--python实现
- 最大子数组的代码实现(非暴力方法)
- c实现 求一个数组中最大子序列的和 (两种方法)
- 最大子序列和问题的求解
- 博客开通
- java集合(待补充)
- 《Batch File Programming》读书笔记(二)
- SpringMVC学习之环境搭设
- 笔记本自带键盘的开启关闭
- 用三种方法实现最大子列和的求解(Python实现)
- ACM 概率&期望
- 像写C++一样写CUDA
- Delphi著名皮肤控件库大全
- python向图片里添加文字
- 第三章 字符串、向量和数组学习笔记(第一遍阅读)
- laravel 如何设置时区
- spymemcache java的demo
- [机器学习入门] 李宏毅机器学习笔记-19 (Deep Generative Model-part 2:深度生成模型-part 2)