算法是什么我记不住,But i do it my way. (二)

  昨天做了一道算法题给大家分享了下我的解法,有给出建设性意见的,有支持的还有看得一知半解的。自己想了想的确有可以优化的地方,贴出优化方案。原题和解答过程在这里http://www.cnblogs.com/xianyudotnet/p/5887304.html。

  题目要点:

  给出一个0,1矩阵,矩阵中的1就是路径,左右移动消耗体力1,上移消耗3,下移不消耗。给定一个体力值求左上角到右上角的最小消耗路径。为了方便测试建立了一个8*8的矩阵如图。

   路径是这样的

  原方法的结果:

  上一篇中解题思路就是:递归模拟路径的移动,探索出给定体力值所有可移动路径,然后选取体力消耗最小的路径。

  我修改了一下代码,控制了输入输出,就跑上图的矩阵用于对比测试,结果是这样的。

  

  优化方案:

  1.首先解决循环路径问题。原方法中只要体力没消耗完,循环路径依然循环直至体力消耗完毕,这是相当的不科学。于是移动后检查当前坐标是否在路劲中,在说明循环了,直接放弃此路径。

  2.其次是体力值问题。如果已经有找到一条可行路径且得知消耗了体力p,那么接下来所有移动后消耗体力大于p的路径也放弃。

  有同学提到从最小体力值不断增加循环做递归直到找到路径则这个体力值就是最优解。当然是可行的,但是解很靠后的话,效率是不如原方法固定体力值。后来我又提到用分治的方法固定体力值,后来发现我也是naive了。因为一次递归如果找出解那就是最优了,没找出再调整体力范围,再递归查找,重复计算太多,而且是针对原方法的情况。新方法第二条优化已经是动态调整体力限制,外部再调整体力范围没有意义且作用不大。所以优化后的效率是这样的。

  优化结果:

  

  代码:

  

  

  好多人说用这种算法,那种算法,一大堆名词。。。我看着那些公式真的头疼。我有时间和精力一定努力提高自己学习先进姿势水平。我的野生算法就是这样,经过优化后感觉效率也还说得过去吧。

  想测试的依旧github上自取,两个版本的代码都有:https://github.com/631320085/Algorithm

  这题我觉得再提高,可能就是要用数据结构那一套,建立路径模型,用上高大上的公式分分钟屌炸天是吧。我今后努力试试。

时间: 2024-10-22 00:52:45

算法是什么我记不住,But i do it my way. (二)的相关文章

算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。

只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/5882357.html.看了下,挺有意思,于是就想了想,又写了写,最终撸出来了.刚开始一看顿时感觉很熟悉,大学数据结构和算法课肯定讲过相关东西,什么深度搜索,广度搜索,最优路径,最优解...但是现在你让我说个一二三,我还就只记住几个名字,说不定名字都记错.我向来不喜欢死记东西,能查到的真的不想背下来,而

大胆地去做自己坚信的事情,去做不伤害国家和客户的事情 做企业一定要专注。为企业制定战略目标,绝对不能超过三个。超过三个,你就记不住了,员工也记不住

注:马云认为,我们不勤奋,也不聪明,结果我们这些人都变成了富翁,是什么原因?因为我们的运气好,我们其实很傻,一些聪明的人被别的公司挖走了,剩下的人不聪明,没有人来挖,结果居然变得这么有钱,只有眼光看得远,才能走得更远. 红旗出版社最新出版的<马云内部讲话:相信明天>(修订本)已于近日上市,本书新增了 80% 左右首次披露的马云讲话.其中他看待自己和阿里巴巴的员工的观点很符合这个外星人的思维. 马云说,四五年前阿里巴巴招员工很难,现在招员工很容易,街上会走路的人都被我们招来了.我们不勤奋,也不聪

mysql时间函数,总是记不住,总是查。

http://www.cnblogs.com/zeroone/archive/2010/05/05/1727659.html UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) 返回一个Unix时间戳(从'1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间)mysql> select UNIX_TIMESTAMP(); -> 882226357 mysql> select UNIX_TIMESTAMP('1997-10-04 22:

[写了也记不住系列]数据复制与AA双活(1)

写了也记不住,不记更完蛋,边看边查边记吧,就酱紫好了. 最开始有些概念需要弄明白: 1. 什么是RPO? Wiki: https://en.wikipedia.org/wiki/Recovery_point_objective A recovery point objective, or “RPO”, is defined by business continuity planning. It is the maximum targeted period in which data might

MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题

///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode="Forms">      <forms loginUrl="~/Account/Login" timeout="2880" cookieless="UseCookies" />    </authent

【转】那些年记不住的块级元素,内联元素

笔试时候,考基础什么的是最讨厌了 块级元素,内联元素总是记不全,总结如下 妈妈再也不用担心我记不住了 块级元素 内联元素 address - 地址block - 块引用center - 居中对齐块(不推荐)dir - 目录列表(HTML5踢出) div - 常用的不能再常用了 dl - 列表 fieldset - 一个包含着form组的框 form - 表了个单 h1 ~ h6 各种尺寸标题 hr - 水平分隔线(不推荐) menu - 菜单列表 noframes - 浏览器不支持frames显

阅读文献存在的问题:坐不住,记不住,想不开

引用:http://blog.sciencenet.cn/blog-2068-500206.html 文献阅读是科研的重要基础,但是并非每一个科研人员都喜欢和擅长看文献——例如我自己.我发现,阅读文献存在的问题可以归纳为三个:坐不住,记不住,想不开. 第一大问题:坐不住 坐不住,指的是不喜欢看文献.为什么我们喜欢看小说,看电视剧,却不喜欢看文献呢?首先是因为看文献难,其次是因为看小说.电视剧更有趣,而看文献却枯燥乏味.“坐不住”的问题怎样才能解决?根据<兴趣从何而来>一文中的分析,可以采用以下

为什么理解的知识却记不住????

问题: 我发现我学数学或者编程,我理解没问题,但要是隔半天甚至是一个小时,我基本就忘了如何写了.或是忘记公式,或是忘记函数的作用.我明明理解了,可为什么记忆力还是跟不上,提取不了呢?我就开始百度,把所有的罪责怪于我的记忆力的问题,这样就有正当的借口证明为什么我没有办法学好数学和编程了,但是我不能欺骗我自己.网上找到的答案都证明了一件事:我学知识就是懒!!!! 知乎找到的摘要答案: 1 你记不住知识点不是你记忆力的问题,而是你没有将知识点全方面多角度的理解,而且也没有进行调用 2 集中意念能达到听

Spring控制反转(IOC)和依赖注入(DI),再记不住就去出家!

每次看完spring的东西感觉都理解了,但是过了一段时间就忘,可能是不常用吧,也是没理解好,这次记下来. 拿ssh框架中的action,service,dao这三层举例: 控制反转:完成一个更新用户信息的业务操作,首先在action中需要service对象来处理逻辑操作,但是在action中我们并没有进行类似new Service()的操作,因为spring容器已经帮我们完成了这 样的创建被调用者对象的工作,因此称为控制翻转.这样命名这个技术可能还是有点晦涩,参考 http://blog.csd