你在这个作业中学到了什么?  有什么好的设计值得分享?  感想如何 (太容易 / 太难 / 太无趣)?

  我觉得这套题目有点偏难,我不像大牛那样,有很多算法可以选择,我是0算法基础的,所以遇到这题我一个就是想到我一维的应用,我的一维思想不是动态规划,而是通过最大和的特质即:当一段连续的数的总和小于零时  这段数一定不会与其他段的数字相连,我们设这段数字为连续A段,然后通过统计A段中当前最大的结尾数字的后几位的和,若大于0则加入到最大序列并更改结尾数字,否则继续搜索下一个数字并继续统计当前借位数字的后几位之和再次运算。这样就能保证能对给定的数组统计出多段类似于A段的最长子连续串,然后比较他们的的大小就可以。而拿到这题之后我的第一个想法就是迪杰斯特拉算法,把整个矩阵看做一张图,通过寻找正数的节点间的最短距离,构建一个相对简单的图,然后在对这个只有在正数节点和路径长度的简单的图进行简单地搜索,但是我之后发先一个致命的问题,就是正数节点之间的相连有可能有一部分重复,即A,B,C为正节点,B到A的最短路径与B到C的最短路径之间可能只有一部分是重复的,但是如果在这种情况下还按照我的算法来算的话就会把这一重复的段,重复计算两次。所以这个方法不行。

  我之后苦苦思索纠正这个方法的办法,但是发现可能要把所有的点都当成节点,这种情况下复杂度为(n^4),但是在这之上的讨论极为复杂,而作业又是如此急促,所以万般无奈下只能想做出来的大神请教相对简单的方法。看过大家的讨论后,状态压缩dp或联通状态压缩dp是一个出口。大家好像都说状态压缩dp相对好写也好理解,所以先看状态压缩dp,自己做了几道题,然后对这个算法有了一定的理解,发现这道题用状态压缩来解不错,至少思路相对简单,我一开始的状态压缩dp思想复杂度为(n*4^n),主要是通过第i-1行的状态来从i行的2^n个状态中筛选出存在联通可能的状态,然后对筛选出的状态的纵向进行求最大的运算,纵向的意思就是跟自己比,因为第i-1行的多个状态可能对应第i行的同一个状态,所以state(i,k)(0=<k<2^n)(表示第i行的2^n的状态中的一个)中的每一项都有多种取值,但是肯定要取和最大的嘛,因为就连通性来说第i+1行只与第i行的有关所以这是对于i—1行来说,一定要最大的嘛。然后这样就会有一个递推公式state(i,k)=MAX(state(i-1,j)+sum(i,k),sum(i,k)),sum(i,k)为第i行第k个状态的的值,这样的话最后需要处理的只是,结尾判断整个图的连通性的问题,但是显然这个问题有一个最大的难点就是本题的矩阵最大为32*32,而2^32已经是4GB了,如此再开32个就是128GB,肯定行不通的。

  又是在万般无奈下,只能选择状态压缩dp复杂度为2^(mn)的算法,偏暴力的。这个就不细说了。最后的作业交的也是这个,实在很抱歉。

  但是,灵光一现,在即将交作业的最后一天,我突然有一个优化复杂度(n*4^n)的算法的方法,记得我之前说过的一维的思想吧,一维的思想是把一个一维数组分成几个单独的块,而这些块有一个特点就是如果其中任意一个块的任意一点连接到最佳图上,则这一个快一定会连接到最佳图上,按照这种思路就可以把这一块当成复杂度(n*4^n)的算法中的2^n种可能中的一种,这样的话会大大减少2^n的个数,其次,可以利用状态压缩dp的思想,可以把一行当成一维数组的一个元素,这样的话这道题跟一位数组的题的区别就是n个数中每一个数有优化了的2^n个选择,然后在顶层的想法就是跟一维数组一样。

  代码较长,就不在这里贴了,代码里面有注释,有兴趣就看看吧,不过就是无力的暴力,意义不大。

 

Personal Software Process Stages

时间百分比(%)

实际花费的时间 (分钟)

原来估计的时间 (分钟)

Planning

计划

 40  400分钟  无

·         Estimate

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

     

Development

开发

 58  580分钟  无

·         Analysis

·         需求分析 (包括学习新技术)

     

·         Design Spec

·         生成设计文档

     

·         Design Review

·         设计复审 (和同事审核设计文档)

     

·         Coding Standard

·         代码规范 (制定合适的规范)

     

·         Design

·         具体设计

     

·         Coding

·         具体编码

     

·         Code Review

·         代码复审

     

·         Test

·         测试(自我测试,修改代码,提交修改)

     

Reporting

总结报告

 2  1小时  无
  • Test Report
  • 测试报告
     
  • Size Measurement
  • 计算工作量
  • Postmortem & Improvement Plan
  • 事后总结, 并提出改进
       
         
Total 总计 100% 总用时 总估计的用时

文章不长,主要在于截图比较少,但都是我经验的体现啊。而且作业也挺无聊的,不如花更多的时间想最后提出的算法上面。如果之后的算法有进展会po在github上面,本文也会持续更新中。

homework-02 一坑到底的最大和联通图的更多相关文章

  1. Rust入坑指南:坑主驾到

    欢迎大家和我一起入坑Rust,以后我就是坑主,我主要负责在前面挖坑,各位可以在上面看,有手痒的也可以和我一起挖.这个坑到底有多深?我也不知道,我是抱着有多深就挖多深的心态来的,下面我先跳了,各位请随意 ...

  2. 一次shardingjdbc踩坑引起的胡思乱想

    项目里面的一个分表用到了sharding-jdbc 当时纠结过是用mycat还是用sharding-jdbc的, 但是最终还是用了sharding-jdbc, 原因如下: 1. mycat比较重, 相 ...

  3. [Virtualization][SDN] VXLAN到底是什么 [转]

    写在转发之前: 几个月以前,在北大机房和燕园大厦直接拉了一根光钎.两端彼此为校园内公网IP.为了方便连接彼此机房,我做个一个VPN server在燕园的边界,北大机房使用client拨回.两个物理机房 ...

  4. 在Array原型链上扩展remove,contain等方法所遇到的坑

    相信jser兄弟们肯定会碰到这样一个问题, 在做数组类的操作的时候,会要求删除数组中的一个元素:亦或是判断某值是否存在于这个数组: OK,拿删除数组元素举例,扩展方法为: Array.prototyp ...

  5. kmeans聚类中的坑 基于R shiny 可交互的展示

    龙君蛋君 2015年5月24日 1.背景介绍 最近公司在用R 建模,老板要求用shiny 展示结果,建模的过程中用到诸如kmean聚类,时间序列分析等方法.由于之前看过一篇讨论kmenas聚类针对某一 ...

  6. python让你再也不为文章配图与素材发愁,让高清图片占满你的硬盘! #华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  7. Vue2和Vue3技术整理1 - 入门篇 - 更新完毕

    Vue2 0.前言 首先说明:要直接上手简单得很,看官网熟悉大概有哪些东西.怎么用的,然后简单练一下就可以做出程序来了,最多两天,无论Vue2还是Vue3,就都完全可以了,Vue3就是比Vue2多了一 ...

  8. sizzle分析记录:关于querySelectorAll兼容问题

    querySelector和querySelectorAll是W3C提供的新的查询接口 目前几乎主流浏览器均支持了他们.包括 IE8(含) 以上版本. Firefox. Chrome.Safari.O ...

  9. 从一道面试题分析javascript闭包

    据说是一不注意就会做错的五道javascript面试题之一,我们来看看这道题长什么样 function Container( properties ) { var objthis = this; fo ...

随机推荐

  1. POJ 1942 Paths on a Grid(组合数)

    http://poj.org/problem?id=1942 题意 :在一个n*m的矩形上有n*m个网格,从左下角的网格划到右上角的网格,沿着边画,只能向上或向右走,问有多少条不重复的路 . 思路 : ...

  2. SQL Server中的分页

    sqlserver2000时的分页思路 .分页查询时,首先将数据排序 select * from MyStudent order by fid desc .取第一页数据 * from MyStuden ...

  3. IPC:Sockets

    Please refer to http://www.cs.cf.ac.uk/Dave/C/node28.html.

  4. 5个难以置信的VS 2015预览版新特性

    Visual Studio 2015 Preview包含了很多强大的新特性,无论你是从事WEB应用程序开发,还是桌面应用程序开发,甚至是移动应用开发,VS 2015都将大大提高你的开发效率.有几个特性 ...

  5. UVa 808 (建坐标系、找规律) Bee Breeding

    题意: 如图,按照图中的规律给这些格子编号.给出两个格子的编号,求从一个格子到另一个格子的最少步数.(一步只能穿过有有公共边的格子) 分析: 根据高中数学知识,选任意两个不共线的向量,就能表示平面上所 ...

  6. ZBreak

    https://github.com/atskyline/ZBreak 最近用电脑用的多,总觉得有必要2个小时休息一会.就花了一点点时间写了这个小东西如果连续使用电脑超过2个小时会弹出一个窗口提示. ...

  7. 【转】angular学习笔记(十四)-$watch(1)

    本篇主要介绍$watch的基本概念: $watch是所有控制器的$scope中内置的方法: $scope.$watch(watchObj,watchCallback,ifDeep) watchObj: ...

  8. 【转】Eclipse配置Struts2问题:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    我的解决方案 一开始,我是依照某本教材,配置了User Libraries(名为struts-2.2.3, 可供多个项目多次使用), 然后直接把struts-2.2.3引入过来(这个包不会真正的放在项 ...

  9. [开发工具] 史上最全系列之开发环境搭建之DDMS

    原文链接:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=275774 一.简介 DDMS 的全称是DalvikDebug Mon ...

  10. SharePoint 2007 页面定制(一)

    转:http://www.nanmu.net/SharePoint-MOSS-WSS-Silverlight/Lists/Posts/Post.aspx?ID=74 本文主要包括以下几方面内容: 1. ...