python递归分治求最大子数组失败
来源:互联网 发布:广州恒大淘宝老板是谁 编辑:程序博客网 时间:2024/06/15 09:32
#coding=utf-8
import math
def getCroosMaxNum(arr,low,mid,high):
lsum=-(math.inf)
leftsum=0
a=list(range(low,mid))
a.reverse()
b=a
for i in b:
leftsum=arr[i]+leftsum
if lsum<leftsum:
lsum=leftsum
leftindex=i
rsum=-(math.inf)
rightsum=0
c=list(range(mid,high))
d=c
for j in d:
rightsum=arr[j]+rightsum
if rsum<rightsum:
rsum=rightsum
rightindex=j
return leftindex,rightindex,lsum+rsum
def getMaxArray(arr,low,high):
#arr=arr[low:high]
if len(arr)==1:
print(arr,low,high)#[3],0,1,[4,1,2]
return low,high,arr[0]
else:
mid=(low+high)//2
#向下取整。3,1,0
leftlow,lefthigh,leftsum=getMaxArray(arr[:mid],low,mid)
"递归,向左递归,"
print(arr,mid,high) #[3,4],1,2 [3, 4, 5, -2] 2,4
rightlow,righthigh,rightsum=getMaxArray(arr[mid:],mid+1,high)
print(rightlow,righthigh,rightsum) #1 2 4
print(arr,low,mid,high)#[3, 4] 0 1 2
crosslow,crosshigh,crosssum=getCroosMaxNum(arr[:],low,mid,high)
if leftsum > rightsum and leftsum >crosssum:
return leftlow,lefthigh,leftsum
elif rightsum >leftsum and rightsum >crosssum:
return rightlow,righthigh,rightsum
else:
return crosslow,crosshigh,crosssum
a=[3,4,5,-2,-9,8,2,-2,-7]
a.extend([])
minindex,maxindex,maxsum=getMaxArray(a,0,len(a))
print(minindex,maxindex,maxsum)
#print(getCroosMaxNum(a,0,len(a)//2,len(a)))
import math
def getCroosMaxNum(arr,low,mid,high):
lsum=-(math.inf)
leftsum=0
a=list(range(low,mid))
a.reverse()
b=a
for i in b:
leftsum=arr[i]+leftsum
if lsum<leftsum:
lsum=leftsum
leftindex=i
rsum=-(math.inf)
rightsum=0
c=list(range(mid,high))
d=c
for j in d:
rightsum=arr[j]+rightsum
if rsum<rightsum:
rsum=rightsum
rightindex=j
return leftindex,rightindex,lsum+rsum
def getMaxArray(arr,low,high):
#arr=arr[low:high]
if len(arr)==1:
print(arr,low,high)#[3],0,1,[4,1,2]
return low,high,arr[0]
else:
mid=(low+high)//2
#向下取整。3,1,0
leftlow,lefthigh,leftsum=getMaxArray(arr[:mid],low,mid)
"递归,向左递归,"
print(arr,mid,high) #[3,4],1,2 [3, 4, 5, -2] 2,4
rightlow,righthigh,rightsum=getMaxArray(arr[mid:],mid+1,high)
print(rightlow,righthigh,rightsum) #1 2 4
print(arr,low,mid,high)#[3, 4] 0 1 2
crosslow,crosshigh,crosssum=getCroosMaxNum(arr[:],low,mid,high)
if leftsum > rightsum and leftsum >crosssum:
return leftlow,lefthigh,leftsum
elif rightsum >leftsum and rightsum >crosssum:
return rightlow,righthigh,rightsum
else:
return crosslow,crosshigh,crosssum
a=[3,4,5,-2,-9,8,2,-2,-7]
a.extend([])
minindex,maxindex,maxsum=getMaxArray(a,0,len(a))
print(minindex,maxindex,maxsum)
#print(getCroosMaxNum(a,0,len(a)//2,len(a)))
0 0
- python递归分治求最大子数组失败
- 分治算法递归求最大子数组,下标,和
- 利用分治法求最大子数组
- 用分治策略求最大子数组
- 分治法求最大子数组备忘
- 分治法求最大子数组
- 分治法求最大子数组问题
- 分治法求最大子数组
- 分治策略求最大子数组
- 分治策略结合递归思想求最大子序列和
- 分治法求数组的最大子数组
- 最大子数组问题分治法(递归)Java实现
- 递归求数组最大最小值(分治思想)
- 递归求数组最大最小值(分治思想)
- 求最大子数组的和,算法导论之分治递归求解,暴力求解,记忆扫描方法。
- 「算法导论」:分治法求最大子数组
- 分治法求数组最大连续子序列的和
- 算法导论-----分治策略----------求最大子数组
- 详细讲述MySQL中的子查询操作
- NOIP 2007 提高组 复赛 expand 字符串的展开
- 新网站建设的完整步骤
- 深度理解z-index
- Spring 事物抛出Exception 异常时事物没有回滚
- python递归分治求最大子数组失败
- PHP编译安装时常见错误解决办法,php编译常见错误
- 设计模式概述及六大原则
- [参考资料] PB中字符编码转换[ansi, UTF8, Unicode]
- Lambada表达式
- java 中各种容器的使用
- jmeter随笔BeanShell 中时间函数__time()
- wampserver官网点击下载对话框不会下载
- Comparator中,好像是有多个方法。