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

  我觉得这套题目有点偏难,我不像大牛那样,有很多算法可以选择,我是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. hdu 3859 Inverting Cups

    题意是给出A个杯子,一开始都朝上,每次可以翻B个杯子,问最少需要翻转多少次可以让所有杯子都朝下. 分类讨论: 首先对于A%B==0一类情况,直接输出. 对于A>=3B,让A减到[2B,3B)区间 ...

  2. poj 2976 Dropping tests 0/1分数规划

    0/1分数规划问题,用二分解决!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> # ...

  3. cocos2d-x 多分辨率适配详解(转载),以前北京团队设计的游戏,也是用这套方案

    http://blog.csdn.net/kyo7552/article/details/17163487 多种分辨率的适配一直都是一个蛋疼的问题,各家公司可能都有自己的一套方案.今天我为大家介绍的是 ...

  4. 好看的游戏soul calibur

    http://soulcalibur.fr/index.php?wiki/sophitia/ http://astuce-soluce.playfrance.com/index.php/Soul_Ca ...

  5. android系统平台显示驱动开发简要:LCD基本原理篇『一』

    平台信息:内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客 ...

  6. allegro中数据库检查

    1. -------------------- ----

  7. 关于Firefox浏览器如何支持ActiveX控件,一个小的Hellow World

    今天尝试开发一个Firefox的插件.虽然比较简单,网上也有很多教程,但是感觉一些教程写的比较麻烦,在初步的开发过程中并没有用到那些东西,于是自己把开发过程记录下来.我是根据Mozilla官方教程开发 ...

  8. Hadoop单机模式安装

    一.实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: ...

  9. Ruby Gem命令

    Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找.安装.升级和卸载软件包,非常的便捷. Ruby 1.9.2版本默认已安装Ru ...

  10. 对于requirejs AMD模块加载的理解

    个人人为使用模块化加载的优点有三: 1,以我的项目为例:90%为图表展示,使用的是echarts,此文件较大,requirejs可以在同一个版本号(urlArgs)之下缓存文件,那么我就可以在访问登陆 ...