算法是什么我记不住,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
这题我觉得再提高,可能就是要用数据结构那一套,建立路径模型,用上高大上的公式分分钟屌炸天是吧。我今后努力试试。
算法是什么我记不住,But i do it my way. (二)的更多相关文章
- 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。
只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...
- 这些年一直记不住的 Java I/O
参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...
- MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题
///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...
- Git 记不住命令
Git 记不住命令 每次用每次查 真棒 git log --stat --author=someone # git查询某个人修改记录 git log filename # fileName相关的com ...
- $.ajax 方法参数总是记不住,在这里记录一下
jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...
- 英语每日阅读---8、VOA慢速英语(翻译+字幕+讲解):脸肓症患者记不住别人的脸
英语每日阅读---8.VOA慢速英语(翻译+字幕+讲解):脸肓症患者记不住别人的脸 一.总结 一句话总结: a.neural abnormalities are more widespread:Duc ...
- 总是记不住但又总是要用的css
有没有经常遇到一些样式每次写都要用百度呢?我收集了一些我平时经常要用到的但又总是记不住的样式.有错误的地方欢迎指正.转载请注明出处. 一.设置input 的placeholder的字体样式 input ...
- Grid属性太多记不住?【Grid栅格布局可视化编辑器】直观易懂高效,拖拉拽,有手就行!
手把手教你通过拖拉拽可视化的方式带你练习[Grid栅格布局]的各个属性,直观易懂!再也不愁记不住繁多的Grid属性了.整个过程在众触应用平台进行,不用手写一行CSS代码. grid-auto-flow ...
- 有了 tldr,妈妈再也不用担心我记不住命令了
引言 有一次我在培训时说「程序员要善于使用 Terminal 以提高开发效率」,一位程序员反驳道:「这是 21 世纪,我们为什么要用落后的命令行,而不是先进的 GUI?」 是的,在一些人眼里,这个黑黑 ...
随机推荐
- Vue.js组件学习
组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素.组件系统提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用. 一个简单组件例子(全局注册) &l ...
- PHP 高级编程(4/5) - SPL异常类之 LogicException 逻辑异常
SPL 提供了一系列标准异常.日常的使用中我们应该根据需求科学的使用它们,来使我们的程序更加健壮.LogicException 是从 Exception 基类派生的,没有添加任何附加方法.抛出逻辑异常 ...
- seajs的使用
写在前面 seajs是什么? Seajs是一个js文件加载器. 遵循 CMD 规范模块化开发,依赖的自动加载.配置的简洁清晰. 用于Web开发的模块加载工具,提供简单.极致的模块化体验 一:使用 文件 ...
- Hadoop Shell命令大全
hadoop支持命令行操作HDFS文件系统,并且支持shell-like命令与HDFS文件系统交互,对于大多数程序猿/媛来说,shell-like命令行操作都是比较熟悉的,其实这也是Hadoop的极大 ...
- [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc
开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...
- linux2.6 内存管理——概述
在紧接着相当长的篇幅中,都是围绕着Linux如何管理内存进行阐述,在内核中分配内存并不是一件非常容易的事情,因为在此过程中必须遵从内核特定的状态约束.linux内存管理建立在基本的分页机制基础上,在l ...
- GitHub更新自己Fork的项目
转自:http://www.tuicool.com/articles/MzMJre github上有个功能叫fork,可以将别人的工程复制到自己账号下.这个功能很方便,但其有一个缺点是:当源项目更新后 ...
- CSS布局 - 三栏布局
CSS布局技术可谓是前端技术中最基础的技术,就是因为基础,所以我认为要更加熟练,深入的去掌握,去梳理. 一. 传统 ---> 浮动实现的三栏布局 采用浮动实现的三栏布局有以下特点及注意事项: · ...
- C#对.zip 存档读取和写入
Framework4.5支持 引用: System.IO.Compression.dll,System.IO.Compression.FileSystem.dll 提取压缩文件 ZipFile.Ext ...
- css3深入了解之奇技淫巧
前言 自CSS3流行以来,虽然以前看过一遍所有的新增属性,但其实在实际项目中用到的少之又少.所以没有形成系统性的认识,以及看到效果立马就能想到解决方案的能力.然后最近正好遇到一个需要绘制大量动画的需求 ...