当前位置: 首页 > news >正文

杭州模板网站制作国外营销型网站

杭州模板网站制作,国外营销型网站,保定网络公司电话,网站制作公司哪里好#x1f600;前言 机器人移动问题是一个经典的动态规划应用场景#xff0c;它涉及到在给定范围内的位置上进行移动#xff0c;并计算到达目标位置的方法数。本文将介绍三种解决这一问题的方法#xff1a;暴力递归、缓存法和动态规划。通过比较不同方法的优缺点#xff0c;… 前言 机器人移动问题是一个经典的动态规划应用场景它涉及到在给定范围内的位置上进行移动并计算到达目标位置的方法数。本文将介绍三种解决这一问题的方法暴力递归、缓存法和动态规划。通过比较不同方法的优缺点我们将深入理解动态规划在解决问题中的重要性以及如何优化算法以提高性能和空间利用率。 个人主页尘觉主页 文章目录 动态规划--机器人移动问题Java机器人移动问题暴力递归缓存法动态规划 总结 动态规划–机器人移动问题Java 机器人移动问题 机器人可在1-N的位置上进行移动规定三个数据 分别是机器人当前位置 机器人可以移动的步数 机器人的目标位置 计算出机器人用光步数后到达目标位置的方法数 暴力递归 机器人在1-N的范围上进行移动一共会有3种情况 在1时只能右移动 在N时只能左移动 在中间时既可以左移又可以右移 所以可以根据这几种情况进行暴力递归 递归的终止条件是 当前步数为0 且处于目标位置上 public int moveTimes(int N,int cur,int target,int steps ){//三个参数分别是可以移动的范围 当前位置 目标位置if(steps0){//如果没有步数了进行返回return cur target?1:0;}if(cur1){return moveTimes(N,cur1,target,steps-1);}if (cur N){return moveTimes(N,cur-1,target,steps-1);}return moveTimes(N,cur1,target,steps-1) moveTimes(N,cur-1,target,steps-1);}缓存法 通过这种方式我们就可以取得最终的全部可能的情况但是显然我们的暴力递归会多做很对运算。比如当机器人处于中间位置的时当前的状态是 cur 5steps 10 那么在接下来的递归中我们会有这样的2个分支 ​ 4,9- 5,8/ 3,8 | 6,9- (5,8)/7,8 那么我们的5,8在计算过一次之后还会再次进行计算。这样的情况下我们的运行时间就会变得过长 。 所以我们引出了傻缓存法缓存的作用在于我们进行一次递归的过程中便将这一次递归的结果记录到缓存中当下一次再次递归时可以直接调用之前在缓存中数进行返回而不是继续向下递归了这种方法就是再用时间来换空间 那么回到这道题我们的cache就可以用一个二维数组来进行存储row为我们的当前位置 col 为我们的可移动步数 //傻缓存法public int moveTimes(int N,int cur,int target,int steps,int[][] cache){//cache需要初始化所有值换成-1if(cache[cur][steps]!-1){return cache[cur][steps];}int result -1;//分3种情况进行递归移动//basecaseif (steps 0){result cur target?1:0;} else if (cur 1){result moveTimes(N,cur1,target,steps-1,cache);} else if(cur N){result moveTimes(N,cur-1,target,steps-1,cache);} else{result moveTimes(N,cur1,target,steps-1,cache)moveTimes(N,cur-1,target,steps-1,cache);}cache[cur][steps] result;return result;}public void setCache(int[][] cache){for (int i 0; i cache.length; i) {for (int j 0; j cache[1].length; j) {cache[i][j] -1;}}}这里相比第一种方式会更快一些但是也是浪费了较大的空间 动态规划 我们结合一二一起看会发现我们能basecase的情况发生时可以在缓存即二维数组中确定一些数当 step 0时在二维数组中这一列我们除了是目标位置会返回 1 以外其他位置都会返回 0 。所以我们就可以把确定的数据填写到二维数组中在看暴力递归的其他情况当我们在第 1 行的时候 只能向右移动所以我们的返回值要从相对于二维数组中的当前位置的左下角中的这个元素获取返回值同理当我们在最后 1 行的时候那么就应该从当前位置的左上角进行取返回值了当我们在中间位置的时候我们的则是需要从左上和左下相加来获取返回值依次类推我们会回到我们最开始的位置这时就是我们需要的结果了。 public int moveTimes1(int N,int cur,int target,int steps){int[][] cache new int[N1][steps1];//给第一列进行赋值cache[target][0] 1;for (int i 1; i steps; i) {//第一行手动操作cache[1][i] cache[2][i-1];for (int j 2; j N-1 ; j) {cache[j][i] cache[j1][i-1]cache[j-1][i-1];}cache[N][i] cache[N-1][i-1];}return cache[cur][steps];}完整的代码 SuppressWarnings({all}) public class Robot {//测试public static void main(String[] args) {Robot robot new Robot();int[][] cache new int[6][6];robot.setCache(cache);System.out.println(robot.moveTimes(5, 2, 3, 5, cache));System.out.println(robot.moveTimes(5,2,3,5));System.out.println(robot.moveTimes1(5,2,3,5));}//动态规划法public int moveTimes1(int N,int cur,int target,int steps){int[][] cache new int[N1][steps1];//给第一列进行赋值cache[target][0] 1;for (int i 1; i steps; i) {//第一行手动操作cache[1][i] cache[2][i-1];for (int j 2; j N-1 ; j) {cache[j][i] cache[j1][i-1]cache[j-1][i-1];}cache[N][i] cache[N-1][i-1];}return cache[cur][steps];}//暴力递归法public int moveTimes(int N,int cur,int target,int steps ){//三个参数分别是可以移动的范围 当前位置 目标位置if(steps0){//如果没有步数了进行返回return cur target?1:0;}if(cur1){return moveTimes(N,cur1,target,steps-1);}if (cur N){return moveTimes(N,cur-1,target,steps-1);}return moveTimes(N,cur1,target,steps-1) moveTimes(N,cur-1,target,steps-1);}//傻缓存法public int moveTimes(int N,int cur,int target,int steps,int[][] cache){//cache需要初始化所有值换成-1if(cache[cur][steps]!-1){return cache[cur][steps];}int result -1;//分3种情况进行递归移动//basecaseif (steps 0){result cur target?1:0;} else if (cur 1){result moveTimes(N,cur1,target,steps-1,cache);} else if(cur N){result moveTimes(N,cur-1,target,steps-1,cache);} else{result moveTimes(N,cur1,target,steps-1,cache)moveTimes(N,cur-1,target,steps-1,cache);}cache[cur][steps] result;return result;}public void setCache(int[][] cache){for (int i 0; i cache.length; i) {for (int j 0; j cache[1].length; j) {cache[i][j] -1;}}} }总结 通过本文的学习我们了解了三种解决机器人移动问题的方法暴力递归、缓存法和动态规划。暴力递归虽然简单易懂但效率低下缓存法通过牺牲空间来换取时间提高了效率而动态规划则利用填充二维数组的方式避免了重复计算进一步优化了性能和空间利用率。动态规划在解决各种问题中都有广泛的应用是一种重要的算法思想。 热门专栏推荐 想学习vue的可以看看这个 java基础合集 数据库合集 redis合集 nginx合集 linux合集 手写机制 微服务组件 spring_尘觉 springMVC mybits 等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持 欢迎大家加入我的社区 尘觉社区 文章到这里就结束了如果有什么疑问的地方请指出诸佬们一起来评论区一起讨论 希望能和诸佬们一起努力今后我们一起观看感谢您的阅读 如果帮助到您不妨3连支持一下创造不易您们的支持是我的动力
http://www.hkea.cn/news/14280858/

相关文章:

  • 做网站不能有中文字符中国最新新闻大事件
  • 记事本做网站怎么改字体单本小说wordpress
  • 河北秦皇岛建设局网站企业官方网站建设教程
  • dreamwearver可以做网站吗wordpress封面图七牛
  • 网站 iss手机应用商店下载app
  • 装修网站怎么做推广佛山注册公司流程和费用标准
  • 如果将域名指向网站1688做网站需要多少钱
  • 做文字云的网站管理一个网站的后台怎么做
  • 建设银行网站未响应张家口网站建设公司
  • 武清做网站网站程序元
  • 哪些网站可以做百科参考资料企业网站多少钱
  • 利用access数据库做网站wordpress 弹框
  • 怎么模仿别人做网站建设银行企业网站打不开
  • 怎样做网站外部样式wordpress有几张表
  • 厦门易尔通网站建设好吗各大网站的404
  • 济南制作网站企业企业网站建设原则是
  • 做感恩网站的图片医疗网站优化
  • 前端做的网站上海网页制作方法
  • 仿站网站源码下载三亚新闻发布会直播第十五场
  • 美食网站首页广告设计专业学什么
  • 东莞网站建设收费电商网站建设的关键
  • 柳州门户网站建设公司排名wordpress主题标签
  • 网站类网站开发犯罪吗wordpress建站好不好
  • 百色网站免费建设天汇大厦网站建设公司
  • 国都建设(集团)有限公司网站医院网站和微信公众号建设
  • 网站模板首页常熟智能网站建设
  • 公司企业建站报价wordpress 客户端 出错
  • 十堰建设局网站提高网站流量的软文案例
  • 如何在凡科上做网站wordpress主题git下载
  • 做设计比较好的网站推荐餐饮品牌设计项目