写在前面:我的算法能力很弱,并且也是第一次写博文,总之希望自己能在这次的课程中学到很多贴近实践的东西吧。

1、这次的程序是python写的,这也算是我第一次正正经经地拿python来写东西,结果上来说光是语法上就出了不少问题,总是写写停停,时不时要百度、Google一下。最麻烦的是因为我习惯使用sublime作文本编译器,结果还有无法使用中文注释的问题没有解决,很是捉急。(后来经杰仔教导,注释问题解决,我不会说我只是把第一行打错了 = =)

2、“最大子数组之和”问题的一维问题(我是这么叫的)在助教的博客里面已经被解决,并且得出了非常漂亮的O(n)的解法。理所当然地,我希望在这一基础上,通过一个矩阵地不断推进来解决“最大子数组之和“的二维问题。

  但是,这一想法很快遇到了阻力。在二维空间中一个矩形的形状变化有很多种,并且所涉及的改变处的数字和很难统计,也无法简单地设计出遍历所有可能情况的算法。

  于是我希望将该二维问题化为一维问题来解决。为此,我将行数通过两次循环遍历,相当于将问题划归成n(n+1)/2个“最大子数组之和”问题的一维问题。每一问题即为在行数限定、列数可变的数组内寻找最大子数组之和的问题。

  于是所得代码如下,

  

# coding:utf-8
'''
2013-9-17 XTH
'''
n1 = raw_input("please input the row number of array") #the row number of array
n2 = raw_input("please input the line number of array") #the line number of array
f = open(n1 + "," + n2 + ".txt","r")
num=[[]]*int(n1)
for i in range(0,int(n1)):
line = f.readline()
line = line.strip('\n')
num[i] = line.split(",")
num=[[int(x) for x in inner] for inner in num] # 从一个txt文件中读入测试数据(测试数据由另一个python程序产生)
# 该问题的解决思路即通过两次循环遍历将该二维问题转化为多个一维问题
def max_2d(num,n1,n2):
line = [0]*n2
max_sum = 0 #最大和
fore_sum = 0 #
now_sum = 0 #当前和
x = [0]*2
y = [0]*2
for i in range(0,n1):
for j in range(i,n1):
x[0] = i
y[0] = 0
for k in range(0,n2):
line[k] += num[j][k]
if fore_sum <0:
now_sum = 0
y[0]=k
now_sum += line[k]
if now_sum > max_sum:
max_sum = now_sum
y[1]=k
x[1]=j
x2=x[0]
y2=y[0]
now_sum = 0
now_sum=0
line = [0]*n2
return "the max num is " + str(max_sum) + "\n"+ "the area is " + str(x2) + "," + str(y2) + " to " + str(x[1]) + "," + str(y[1])
print(max_2d(num,int(n1),int(n2)))

  然后是生成测试数据的代码:

import random

x = raw_input("please input row number of array")
y = raw_input("please input line number of array")
filename = x + "," + y + ".txt"
f = open(filename,"w")
for i in range(0,int(x)):
for j in range(0,int(y)):
f.write(str(random.randint(-50,100)))
if j<int(y)-1 :f.write(",")
f.write("\n")
f.close()

  对于测试数据

 
  有运行结果
 
 
  经过人工验证,结果无误。

homework-01 "最大子数组之和"的问题求解过程的更多相关文章

  1. homework-01 "最大子数组之和"的解决过程

    看到这个题目,我首先想到就是暴力解决 求出所有的子数组的和,取出最大值即可 但其中是可以有优化的 如 子数组[3:6]可以用[3:5]+[6]来计算 即可以将前面的计算结果保留下来,减少后面的重复计算 ...

  2. homework-02 "最大子数组之和"的问题进阶

    代码编写 这次的作业瞬间难了好多,无论是问题本身的难度或者是单元测试这一原来没接触过的概念或者是命令行参数的处理这些琐碎的问题,都使得这次作业的完成说不上轻松. 最大子数组之和垂直水平相连的拓展问题解 ...

  3. 求一个二维整数数组最大子数组之和,时间复杂度为N^2

    本随笔只由于时间原因,我就只写写思想了 二维数组最大子数组之和,可以  引用  一维最大子数组之和 的思想一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组a[n ...

  4. [LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  5. 求一个整数数组最大子数组之和,时间复杂度为N

    #include<iostream.h> int main () { ]={-,-,-,-,-,-,-,-,-,-}; ],sum=; ;i<;i++) { ) { sum=b[i] ...

  6. [Swift]LeetCode325. 最大子数组之和为k $ Maximum Size Subarray Sum Equals k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  7. 最大子数组之和(N)

    int maxSum(int *array, int n) { ]; ; ; ; i < n; i++) { ) newsum += array[i]; else newsum = array[ ...

  8. [LeetCode] Maximum Product Subarray 求最大子数组乘积

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  9. [LeetCode] Maximum Subarray 最大子数组

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

随机推荐

  1. 【原创】中文分词系统 ICTCLAS2015 的JAVA封装和多线程执行(附代码)

    本文针对的问题是 ICTCLAS2015 的多线程分词,为了实现多线程做了简单的JAVA封装.如果有需要可以自行进一步封装其它接口. 首先ICTCLAS2015的传送门(http://ictclas. ...

  2. Android viewPage notifyDataSetChanged无刷新

    转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分享.其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅.整理出来,分享给大家. 建议使用自 ...

  3. php整理(三): 面向对象

    PHP学习(三)----面向对象   首先,还是建立一个好的理解模型: 1.什么是面向对象? 面向对象分为两个部分,那就是:什么是对象和什么是面向? 什么是对象: 对象的出现就是为了用代码更好的绘制我 ...

  4. java中的toString方法

    对于我这种用惯了C++的人来说,突然见到有人写java程序的时候竟然将整数和String类型的变量使用+连接到一起,感到非常奇怪,追究了下原因. 原来所有的java对象都有toString()方法,而 ...

  5. Linux查看所有用户用什么命令

    用过Linux系统的人都知道,Linux系统查看用户不是会Windows那样,鼠标右键看我的电脑属性,然后看计算机用户和组即可. 那么Linux操作系统里查看所有用户该怎么办呢?用命令.其实用命令就能 ...

  6. Codeforces_GYM Flight Boarding Optimization

    (ACM ICPC 2013–2014, NEERC, Northern Subregional Contest) Flight Boarding OptimizationInput file: fl ...

  7. UVa 11181 (条件概率) Probability|Given

    题意: 有n个人买东西,第i个人买东西的概率为Pi.已知最终有r个人买了东西,求每个人买东西的概率. 分析: 设事件E为r个人买了东西,事件Ei为第i个人买了东西.所求为P(Ei|E) = P(EiE ...

  8. asp.net获取文件夹下的所有文件

    using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System. ...

  9. Web网站的性能测试工具

    随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时,容易发生服务器 ...

  10. Darwin Streaming Server Relay Setting

    安装完Darwin Streaming Server,就可以使用VLC通过RTSP协议播放流媒体文件了.但是我现在有一个需求,需要将一台DSS(假设为A机)上的媒体文件发送到另一台DSS(假设为B机) ...