摘要: 1.关于基本解题思路 这次的作业是要求生成一个单词矩阵,并且其中包含所给的单词,由自己的一些思路和上次课老师所讲的内容,解题的思路大致如下: 1.将所有单词存入字符串数组word[i]中,二维整形数组pos[i][3]用来记录单词的位置信息。pos[i][0]记录单词word[i]的首字母在矩阵中的横坐标,pos[i][1]记录单词word[i]的首字母在矩阵中的纵坐标,pos[i][2]记录单词word[i]的方向(共8个方向)。 2.先给第一个单词随机分配一个位置和方向,记录在pos[0]中,之后扫描第二个单词的每一个字母,如果有和第一个单词的字母相同的,就根据相同的字母给第二个单词... 阅读全文
posted @ 2013-10-28 01:44 余明海 阅读(140) 评论(1) 推荐(0) 编辑
摘要: 1.关于程序 这次的程序算法基本上已经固定,只是要将算法运行的结果展现出来。在homework-01和homework-02中我使用c++语音编写,这次使用c#语言编写,并处理了命令行参数的问题。 算法和homework-02一样,只是获取了二维数组找到最大子数组和时子数组的边界信息,从而可以对子数组进行绘色。 以下是运行截图: WindowsFormsApplication1.exe 1.txt命令: WindowsFormsApplication1.exe /h 2.txt命令: WindowsFormsApplication1.exe /v 3.txt命令: P... 阅读全文
posted @ 2013-10-25 23:24 余明海 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 1.程序的命令行参数及文件问题 第二次作业中要求程序支持命令行参数及文件,因此我在程序中加入了对这一部分功能的支持,并且加入一些错误处理。之后便是使用第一次作业的算法来求出最大一维子数组和即可。 若程序无参数直接运行: 若输入的文件不存在: 输入了正确的文件名: 2.二维最大子数组问题 关于二维最大子数组问题,一开始只能想到朴素的暴力搜索,但是这样的算法时间复杂度过高,因此决定找一些优化的算法。 先使用一个三维数组b[i][j][k]来记录二维数组a[i][j]第k列第i行到第j行的和,这样便可以将二维数组问题简化为求一位数组b[i][j][0],b[i][j][1],... 阅读全文
posted @ 2013-10-25 23:03 余明海 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 1.程序的架构和思路 对于一维数组的最大连续子数组问题,我想到的是算出每个子数组的大小然后再比较求出最大值,从而找出最大连续子数组。2.程序心得 若要求出每个子数组的大小,所付出的计算代价过于庞大,而子数组又都是连续的,所以可以使用上一次的计算结果来优化计算。即在每次循环中,用当前子数组和加上后一个数组元素来进行比较,这样可以减去一层循环。3.时间消耗和开发效率分析 程序开发所用时间约为一个小时,主要是算法的确定与实现。 由于使用优化减去了一层循环,所以程序的时间复杂度为O(n2)。4.程序运行结果 // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。... 阅读全文
posted @ 2013-09-19 15:16 余明海 阅读(141) 评论(1) 推荐(0) 编辑