寻找最大的子串(分治法)
来源:互联网 发布:程序员自由职业平台 编辑:程序博客网 时间:2024/05/02 05:01
O(nlgn)
#!/usr/bin/python'''file name: maxsum.py --P71 --find maximum subarray sum, divide-and-conquer O(nlng) --author: zevolo, 2012.05.11'''def find_max_across_mid(list, low, high, mid): ret = list[mid] right = mid sum = ret for i in range(mid + 1, high + 1): sum = sum + list[i] if sum > ret: ret = sum right = i left = mid for i in range(mid - 1, low - 1, -1): sum = sum + list[i] if sum > ret: ret = sum left = i return left, right, ret def find_max_sum(list, low, high): if high == low: return (low, high, list[low]) mid = (low + high) / 2 (l_low, l_high, l_sum) = find_max_sum(list, low, mid) (r_low, r_high, r_sum) = find_max_sum(list, mid + 1, high) (m_low, m_high, m_sum) = find_max_across_mid(list, low, high, mid) sum = max(l_sum, r_sum) sum = max(sum, m_sum) s_low = r_low s_high = r_high if sum == l_sum: s_low = l_low s_high = l_high elif sum == m_sum: s_low = m_low s_high = m_high return (s_low, s_high, sum)if __name__ == '__main__': l = [1, -2, 3, 10, -4, 7, 2, -5] print l (low, high, sum) = find_max_sum(l, 0, len(l) - 1) out = l[low:high+1] print (out, sum)
- 寻找最大的子串(分治法)
- 分治法:寻找最大子数组
- 分治法求和最大的子数组
- 分治法求最大子串
- 寻找和最大的最长子串
- 最大子数组(分治法)
- 最大子数组(分治法)
- 计算最大子段(分治法)
- 寻找最大子串(线性方法)
- 最大子序列 分治法
- 分治法--最大子数组
- 分治法-最大子数组
- 最大子矩阵的拓展—目标最近子矩阵(利用分治法)
- 分治法求数组最大连续子序列的和
- 【算法学习】最大子数组问题的分治法求解
- 分治法求数组的最大子数组
- 最大子数组问题--分治法的思想
- Max Sum(hdu1003最大连续子串和+分治法)
- 关于OpenGL矩阵的左乘与列主序
- Spring 中的数据源
- tiny6410温度传感器驱动学习1(测试通过)
- 创业者获得第一笔投资的秘密
- HyperLink与LinkButton的区别
- 寻找最大的子串(分治法)
- java设计模式(简洁版)
- ios学习--sqlite 操作工具 FMDB
- C#获取屏幕大小或任务栏大小
- 活动目录(Active Directory)小结 【转载】
- Jetspeed2学习笔记(五)(转载)
- 《第十五周实验报告任务3.1》
- ALV折叠屏幕
- 关于P2P流量的识别方式