云计算百科
云计算领域专业知识百科平台

最大连续子数组和:暴力、分治与动态规划对比

求最大连续子数组的和

更新时间为2018年07月07日 14:25:34, 作者是。

本文的核心内容在于探讨如何计算出一个连续子数组的和的最大值情况, 经过评估之后发现该内容质量相当可观且具有一定的实用价值, 因此决定将其进行分享操作, 旨在为各位提供一份有价值的参考依据, 接下来请跟随小编的脚步共同进入该主题的详细解析环节。

提出一个需要被回答的疑问。

请求一个数组, 例子为 l =。

0, 1, 2, 3, -4, 5, -6

请你去计算一下这个数组里面所有连续子序列的和, 然后把那个最大的和求出来, 就像如果最后得出的结果是。

0,1,2,3,-4,5

的和为7

问题分析:

分治法求最大子数组和_最大子数组python_python求最大连续子数组和

这个问题是比较简单的, 可以直接选择暴力法这种方法来处理, 后面会把相应的代码给呈现出来。

# -*- coding:utf-8 -*-

# 日期:2018/6/9 7:46

# Author:小鼠标

# 最大连续子数组的和

l = [0, 1, 2, 3, -4, 5, -6]

# 暴力求解

def violence(l = []):

maxVal = 0

x,y=0,0

for i in range(0,len(l)+1):

for j in range(0,len(l)+1):

res = sum(l[i:j])

if res > maxVal:

maxVal = res

x = i

y = j

return maxVal,x,y

maxVal, x, y = violence(l)

print(maxVal,(x,y))

分治法:

问题的关键在于暴力法的时间复杂度实在太高, 因此就在那种方法的基础上继续加以改进从而变成了分治法。

所谓的分治法就是将原本的那个列表给它分成两个一半, 这样一来, 最大大小的子列表它就有三种可能存在的情况:

1、最大子列表完全在左边

2、这个最大子列表是完全位于右边的。

3、那个最长的子列表呢, 它其实是跨站在中间的那个位置上的。

最大子数组python_python求最大连续子数组和_分治法求最大子数组和

因此, 我们通过分情形进行探讨的方法,从而求解出最终的结果。这样的处理办法在某种程度上起到了降低时间复制度作用的效果, 原本的时间复杂度数值是n的平方, 现在则变成了n除以2之后再进行平方的结果再加上2倍的n。

# -*- coding:utf-8 -*-

# 日期:2018/6/9 7:46

# Author:小鼠标

# 最大连续子数组的和

l = [0, 1, 2, 3, -4, 5, -6]

#暴力求解

def violence(l = []):

maxVal = 0

x,y=0,0

for i in range(0,len(l)+1):

for j in range(0,len(l)+1):

res = sum(l[i:j])

if res > maxVal:

maxVal = res

x = i

y = j

return maxVal,x,y

#分治法 想左扫 向右扫,求出两边的最大值

def left_or_right(l):

maxVal = 0

term = 0

for i in l:

term += i

if maxVal < term:

maxVal = term

return maxVal

def Separate():

middle = int(len(l)/2)

l1 = l[0:middle]

l2 = l[middle:len(l)]

#左半部分

maxVal1,x1,y1 = violence(l1)

#右半部分

maxVal2,x2,y2 = violence(l2)

#跨立在中间

max_right = left_or_right(l2)

max_left = left_or_right(l1[::-1])

maxVal3 = max_right + max_left

return max(maxVal1,maxVal2,maxVal3)

val = Separate()

print(val)

动态规划:

即使是分治法这个算法, 其时间复杂度的表现依然太高了, 在实际的生产环境当中是完全无法满足相关的应用需求的。所以说, 如果当下的目标仅仅是为了去求得最大子序列之和的这个具体数值, 而不去刻意追求那个最大子序列本身到底长什么样, 我们在此时就可以引出一个专门应对这种情况的新方法, 那就是动态规划。

这种方法的时间复杂度是线性的, 极大地降低了。

# -*- coding:utf-8 -*-

# 日期:2018/6/9 8:38

# Author:小鼠标

def function(lists):

max_sum = lists[0]

pre_sum = 0

for i in lists:

# 因为最大子列表一定是从一个非0的数开始的(假定列表中有正数有负数)

# 所以就可以暂时筛选调小于0的数,即便列表全是负数,那么最大的子列表肯定是负数最大的一个

if pre_sum < 0:

pre_sum = i

else:

pre_sum += i

if pre_sum > max_sum:

max_sum = pre_sum

return max_sum

lists = [0, 1, 2, 3, -4, 5, -6]

print(function(lists))

以上就是整篇文章里面所涉及到的所有内容, 这些内容希望能够对大家的实际学习过程带来一定的作用与帮助, 同时也非常期盼能够得到广大朋友们对脚本基地这个平台在未来的日子里持续的关注与支持。ZB.cRv.ltD
p1.cRv.ltD
QC.cRv.ltD
vd.cRv.ltD
Km.cRv.ltD
Bi.cRv.ltD
Ez.cRv.ltD
wU.cRv.ltD
7B.cRv.ltD
Xx.cRv.ltD
49.cRv.ltD
IU.cRv.ltD
J3.cRv.ltD
mz.cRv.ltD
0Z.cRv.ltD
BY.cRv.ltD
0O.cRv.ltD
VA.cRv.ltD
pp.cRv.ltD
uz.cRv.ltD
Jc.cRv.ltD
1Z.cRv.ltD
ef.cRv.ltD
gO.cRv.ltD
dq.cRv.ltD
5r.cRv.ltD
a9.cRv.ltD
lm.cRv.ltD
y4.cRv.ltD
N7.cRv.ltD
7l.cRv.ltD
Kj.cRv.ltD
Zp.cRv.ltD
6e.cRv.ltD
aT.cRv.ltD
RF.cRv.ltD
ry.cRv.ltD
wH.cRv.ltD
Oy.cRv.ltD
vc.cRv.ltD
i0.cRv.ltD
s7.cRv.ltD
Kg.cRv.ltD
kA.cRv.ltD
SJ.cRv.ltD
Yn.cRv.ltD
sC.cRv.ltD
0r.cRv.ltD
ub.cRv.ltD
Sw.cRv.ltD
Ot.cRv.ltD
FB.cRv.ltD
AW.cRv.ltD
aO.cRv.ltD
7J.cRv.ltD
aP.cRv.ltD
B7.cRv.ltD
j9.cRv.ltD
cr.cRv.ltD
U3.cRv.ltD
lZ.cRv.ltD
cn.cRv.ltD
h7.cRv.ltD
lr.cRv.ltD
wj.cRv.ltD
81.cRv.ltD
9A.cRv.ltD
J2.cRv.ltD
XE.cRv.ltD
qk.cRv.ltD
kP.cRv.ltD
gh.cRv.ltD
We.cRv.ltD
xd.cRv.ltD
1A.cRv.ltD
U0.cRv.ltD
5K.cRv.ltD
QM.cRv.ltD
Ds.cRv.ltD
Ov.cRv.ltD
IY.cRv.ltD
Zs.cRv.ltD
gG.cRv.ltD
T9.cRv.ltD
E5.cRv.ltD
mQ.cRv.ltD
Fw.cRv.ltD
Pd.cRv.ltD
nF.cRv.ltD
Kn.cRv.ltD
Du.cRv.ltD
A0.cRv.ltD
1D.cRv.ltD
nj.cRv.ltD
eI.cRv.ltD
i7.cRv.ltD
CO.cRv.ltD
iR.cRv.ltD
BS.cRv.ltD
3S.cRv.ltD
wJ.cRv.ltD
of.cRv.ltD
4U.cRv.ltD
tp.cRv.ltD
rX.cRv.ltD
K0.cRv.ltD
1c.cRv.ltD
Ge.cRv.ltD
I4.cRv.ltD
0S.cRv.ltD
Qw.cRv.ltD
Kc.cRv.ltD
jG.cRv.ltD
wA.cRv.ltD
5k.cRv.ltD
ZE.cRv.ltD
fJ.cRv.ltD
HZ.cRv.ltD
jc.cRv.ltD
i6.cRv.ltD
hT.cRv.ltD
5b.cRv.ltD
Pa.cRv.ltD
w0.cRv.ltD
Ob.cRv.ltD
a0.cRv.ltD
uo.cRv.ltD
39.cRv.ltD
Gk.cRv.ltD
jB.cRv.ltD
9b.cRv.ltD
GH.cRv.ltD
PY.cRv.ltD
QV.cRv.ltD
re.cRv.ltD
l5.cRv.ltD
v9.cRv.ltD
b7.cRv.ltD
N0.cRv.ltD
1G.cRv.ltD
qW.cRv.ltD
t7.cRv.ltD
uf.cRv.ltD
p6.cRv.ltD
f2.cRv.ltD
xi.cRv.ltD
I3.cRv.ltD
nh.cRv.ltD
YR.cRv.ltD
1J.cRv.ltD
p5.cRv.ltD
c9.cRv.ltD
tN.cRv.ltD
2B.cRv.ltD
9c.cRv.ltD
8Y.cRv.ltD
ai.cRv.ltD
P1.cRv.ltD
ba.cRv.ltD
4I.cRv.ltD
tf.cRv.ltD
eL.cRv.ltD
kc.cRv.ltD
hq.cRv.ltD
Ib.cRv.ltD
Mc.cRv.ltD
kf.cRv.ltD
oO.cRv.ltD
Ej.cRv.ltD
Cw.cRv.ltD
rJ.cRv.ltD
kK.cRv.ltD
4T.cRv.ltD
H2.cRv.ltD
P4.cRv.ltD
dd.cRv.ltD
xQ.cRv.ltD
31.cRv.ltD
1H.cRv.ltD
QD.cRv.ltD
ro.cRv.ltD
K9.cRv.ltD
dm.cRv.ltD
iw.cRv.ltD
nD.cRv.ltD
NW.cRv.ltD
tn.cRv.ltD
Uy.cRv.ltD
nl.cRv.ltD
y7.cRv.ltD
E3.cRv.ltD
Ka.cRv.ltD
Xt.cRv.ltD
UI.cRv.ltD
L4.cRv.ltD
K5.cRv.ltD
Zh.cRv.ltD
yl.cRv.ltD
nK.cRv.ltD
DR.cRv.ltD
jk.cRv.ltD
Ck.cRv.ltD
OL.cRv.ltD
NK.cRv.ltD
Ec.cRv.ltD
IJ.cRv.ltD
sc.cRv.ltD
mo.cRv.ltD
59.cRv.ltD
JG.cRv.ltD
pC.cRv.ltD
2e.cRv.ltD
O5.cRv.ltD
iM.cRv.ltD
X4.cRv.ltD
Vq.cRv.ltD
9h.cRv.ltD
ks.cRv.ltD
xr.cRv.ltD
0I.cRv.ltD
UO.cRv.ltD
7W.cRv.ltD
DN.cRv.ltD
Hk.cRv.ltD
R0.cRv.ltD
53.cRv.ltD
Ex.cRv.ltD
Vu.cRv.ltD
7Z.cRv.ltD
7h.cRv.ltD
v5.cRv.ltD
kG.cRv.ltD
9d.cRv.ltD
19.cRv.ltD
FI.cRv.ltD
8f.cRv.ltD
UT.cRv.ltD
0P.cRv.ltD
9P.cRv.ltD
FW.cRv.ltD
mk.cRv.ltD
ZY.cRv.ltD
Ng.cRv.ltD
mq.cRv.ltD
pR.cRv.ltD
iE.cRv.ltD
LW.cRv.ltD
hh.cRv.ltD
pD.cRv.ltD
hB.cRv.ltD
XQ.cRv.ltD
k7.cRv.ltD
dn.cRv.ltD
Zq.cRv.ltD
0U.cRv.ltD
0e.cRv.ltD
mE.cRv.ltD
He.cRv.ltD
Xr.cRv.ltD
an.cRv.ltD
Z0.cRv.ltD
gT.cRv.ltD
Os.cRv.ltD
1m.cRv.ltD
eO.cRv.ltD
Ik.cRv.ltD
qn.cRv.ltD
TZ.cRv.ltD
mv.cRv.ltD
wR.cRv.ltD
EH.cRv.ltD
ua.cRv.ltD
MO.cRv.ltD
Sa.cRv.ltD
Bb.cRv.ltD
zW.cRv.ltD
nr.cRv.ltD
Wv.cRv.ltD
04.cRv.ltD
r5.cRv.ltD
Wo.cRv.ltD
o3.cRv.ltD
Vd.cRv.ltD
CG.cRv.ltD
xg.cRv.ltD
fg.cRv.ltD
oi.cRv.ltD
CE.cRv.ltD
kq.cRv.ltD
1T.cRv.ltD
NF.cRv.ltD
sG.cRv.ltD
8G.cRv.ltD
DO.cRv.ltD
Aa.cRv.ltD
qa.cRv.ltD
0p.cRv.ltD
9u.cRv.ltD
jE.cRv.ltD
Iv.cRv.ltD
Im.cRv.ltD
Le.cRv.ltD
qf.cRv.ltD
4R.cRv.ltD
3b.cRv.ltD
DV.cRv.ltD
rH.cRv.ltD
Xu.cRv.ltD
gE.cRv.ltD
ZW.cRv.ltD
2p.cRv.ltD
Mp.cRv.ltD
tq.cRv.ltD
10.cRv.ltD
T4.cRv.ltD
c4.cRv.ltD
FP.cRv.ltD
Ly.cRv.ltD
yb.cRv.ltD
rQ.cRv.ltD
QK.cRv.ltD
Vh.cRv.ltD
q6.cRv.ltD
Rm.cRv.ltD
If.cRv.ltD
RW.cRv.ltD
ws.cRv.ltD
ZT.cRv.ltD
Ux.cRv.ltD
mP.cRv.ltD
84.cRv.ltD
if.cRv.ltD
wT.cRv.ltD
Fa.cRv.ltD
ZL.cRv.ltD
GB.cRv.ltD
iD.cRv.ltD
R9.cRv.ltD
VX.cRv.ltD
hC.cRv.ltD
iS.cRv.ltD
md.cRv.ltD
cC.cRv.ltD
Sh.cRv.ltD
xC.cRv.ltD
jp.cRv.ltD
g3.cRv.ltD
GI.cRv.ltD
fG.cRv.ltD
xX.cRv.ltD
gn.cRv.ltD
KO.cRv.ltD
fd.cRv.ltD
ji.cRv.ltD
Br.cRv.ltD
eZ.cRv.ltD
Lo.cRv.ltD
40.cRv.ltD
YU.cRv.ltD
ne.cRv.ltD
Jl.cRv.ltD
cd.cRv.ltD
uC.cRv.ltD
YL.cRv.ltD
YZ.cRv.ltD
Ca.cRv.ltD
Gw.cRv.ltD
wk.cRv.ltD
Po.cRv.ltD
58.cRv.ltD
FS.cRv.ltD
AN.cRv.ltD
Ax.cRv.ltD
yV.cRv.ltD
3h.cRv.ltD
ON.cRv.ltD

赞(0)
未经允许不得转载:网硕互联帮助中心 » 最大连续子数组和:暴力、分治与动态规划对比
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!