昨天做了一道算法题给大家分享了下我的解法,有给出建设性意见的,有支持的还有看得一知半解的。自己想了想的确有可以优化的地方,贴出优化方案。原题和解答过程在这里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

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

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

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

    只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...

  2. 这些年一直记不住的 Java I/O

    参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...

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

    ///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...

  4. Git 记不住命令

    Git 记不住命令 每次用每次查 真棒 git log --stat --author=someone # git查询某个人修改记录 git log filename # fileName相关的com ...

  5. $.ajax 方法参数总是记不住,在这里记录一下

    jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...

  6. 英语每日阅读---8、VOA慢速英语(翻译+字幕+讲解):脸肓症患者记不住别人的脸

    英语每日阅读---8.VOA慢速英语(翻译+字幕+讲解):脸肓症患者记不住别人的脸 一.总结 一句话总结: a.neural abnormalities are more widespread:Duc ...

  7. 总是记不住但又总是要用的css

    有没有经常遇到一些样式每次写都要用百度呢?我收集了一些我平时经常要用到的但又总是记不住的样式.有错误的地方欢迎指正.转载请注明出处. 一.设置input 的placeholder的字体样式 input ...

  8. Grid属性太多记不住?【Grid栅格布局可视化编辑器】直观易懂高效,拖拉拽,有手就行!

    手把手教你通过拖拉拽可视化的方式带你练习[Grid栅格布局]的各个属性,直观易懂!再也不愁记不住繁多的Grid属性了.整个过程在众触应用平台进行,不用手写一行CSS代码. grid-auto-flow ...

  9. 有了 tldr,妈妈再也不用担心我记不住命令了

    引言 有一次我在培训时说「程序员要善于使用 Terminal 以提高开发效率」,一位程序员反驳道:「这是 21 世纪,我们为什么要用落后的命令行,而不是先进的 GUI?」 是的,在一些人眼里,这个黑黑 ...

随机推荐

  1. GitHub实战系列~2.把本地项目提交到github中 2015-12-10

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  2. 前端学HTTP之URL

    × 目录 [1]URI [2]URL语法 [3]字符[4]编码方法 前面的话 一般地,URL和URI比较难以区分.接下来,本文以区分URL和URI为引子,详细介绍URL的用法 URI与URL的区别 U ...

  3. 初探AngularJS

    一.前言 早已听说AngularJS的大名,并在很久前也编写过些小demo,但是都没有系统学习过.由于,在下个版本项目中用到了AngularJS,so,那就一起再来研究研究呗. 说到,这个Angula ...

  4. 压缩SWF文件大小!减少40%体积!

     使用FlashBuild作为IDE的痛苦是显著的!如果开发的项目比较大,那么卡顿.崩溃.白屏是常事,使用别的IDE开发如Sublime.FlashDevelop.IDEA等,然后再用mxmlc编译出 ...

  5. Java进击C#——应用开发之Asp.net

    本章简言 上一章中笔者讲到关于Linq和EF的用法.并以hibernate来进行讲解.那么本章笔者来讲一下C#的Asp.Net.即是在B/S模式下开发.现在企业大部分的业务都是面向B/S模式的.所以对 ...

  6. 『.NET Core CLI工具文档』(十二)dotnet-pack

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-pack 翻译:dotnet-pack 名称 dotnet-pack - 将代码打包成 NuGet 包 概 ...

  7. jquery遍历table获取td单元格的值

    $("#grd").find("tr").each(function () { //第二列单元格的值eq(索引) alert($(this).children( ...

  8. Oracle用户被锁原因及办法

    Oracle用户被锁原因及办法   在登陆时被告知test用户被锁 1.用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间 SQL> alter session set nl ...

  9. Linux安装jdk

    查看Java的版本命令:java -version 查看java版本的方法是:运行--->cmd,输入java –version.注意: java命令后是有个空格的,-version表示参数而已 ...

  10. [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...