• 作业2


    一.思路

    1.一维数组作业1已述

    2.二维数组连续最大子矩阵的和,其实是建立在连续最大子数组的和基础上的。遇到二维的情况一般是转换为一维的解法,解法如下:

      如果子矩阵从第i行开始,到第r行结束,从第j列开始到第t列结束,则列的选择是一维的问题,关键在于如何选择哪几个行。所以在行的问题上使用暴力搜索,可得以下算法,算法复杂度达到了O(nm^2):

    public static int max2(int[][] a){
            int m = a.length;
            int n = a[0].length;
            int temp[] = new int[n];
            int max = 0;
            int tempMax = 0;
            for(int i=0; i<m; i++){//从第0行开始暴力搜索
                for(int k=0; k<n; k++)
                    temp[k] = 0;
                for(int j=i; j<m; j++){
                    for(int p=0; p<n; p++){
                        temp[p] += a[j][p];
                    }
                    tempMax = max1(temp, 0);//利用已有的一维算法
                    max = max > tempMax ? max : tempMax;
                }
            }
            return max;
     }
    3.如果是连通的情况,暂时没有好的解法,以后补上
    4.如果是上下相连,只需将行的搜索扩大一点,使每一行开始的搜索次数都达到m,关键一步是:
    while(count < m){
        if(j == m)
            j = 0;
        //处理(此处省略)
        j++;
        count++;
    }
    5.如果是左右相连,只需将一维算法改进一下,使每一列开始的搜索次数都达到n,关键一步是:
    for(int k=0; k<m; k++){
        tempMax = max1(temp, k);
        max = max > tempMax ? max : tempMax;
    }
    6.如果是上下左右相连,将4和5的算法合并即可。

    二.心得

    1.动态规划的算法本质是什么?我现在只能想到的是将大问题分解成小问题,并能利用小问题的解。关键一点在于如何划分这个大问题。这个还须多做练习才能总结出新的认识。

    2.所谓将算法复杂度降低就是用人脑代替计算机?先在人脑上抽象出一些数学模型,从而简化问题?比如这个问题一维数组的情况,如果纯粹暴力解的话,计算机会大量的计算;而如果我们先自己解的话(利用动态规划)就能让计算机减少许多重复的计算。

    3.二维的情况一般转换成一维的情况来解。

    三.效率分析

     

    Personal Software Process Stages

    时间百分比(%)

    实际花费的时间 (分钟)

    原来估计的时间 (分钟)

    Planning 计划 1 10 10
    ·         Estimate

    · 估计这个任务需要多少时间,把工作细化并大致排序

         
    Development 开发 91 750 480
    ·         Analysis · 需求分析 (包括学习新技术) 36 300 240
    ·         Design Spec · 生成设计文档 3 30 30
    ·         Design Review · 设计复审 (和同事审核设计文档) 4 30 30
    ·         Coding Standard · 代码规范 (制定合适的规范) 1 10 20
    ·         Design · 具体设计 29 240 60
    ·         Coding · 具体编码 3 30 30
    ·         Code Review · 代码复审 2 20 10
    ·         Test · 测试(自我测试,修改代码,提交修改) 3 30 60
    Reporting

    总结报告

    8 60 30
    · Test Report · 测试报告 6 50 20
    · Size Measurement · 计算工作量 1 5 5
    · Postmortem & Improvement Plan · 事后总结, 并提出改进 1 5 5
    Total 总计 100% 820 520

    四.效果截图

    捕获

  • 相关阅读:
    Qt使用第三方库3rdparty
    Qt5.5以来对Network的改进(包括对SSL的功能支持,HTTP的重定向等等)
    ddd
    C# ICSharpCode.SharpZipLib
    OWIN
    C#/.NET code
    ABP启动配置
    Oracle表空间及分区表
    Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用
    WebAPI使用多个xml文件生成帮助文档
  • 原文地址:https://www.cnblogs.com/mountainking/p/3347077.html
Copyright © 2020-2023  润新知