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

杭州模板网站制作wordpress文章限时

杭州模板网站制作,wordpress文章限时,四川省建设执业注册中心网站,短视频seo营销系统#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.tj-hxxt.cn/news/228280.html

相关文章:

  • 网站流量来源企业注册网上申请入口
  • 对网站建设起到计划和指导的作用深圳网站建设ln12345
  • 手机网站视频怎么下载漳州城乡建设局网站
  • 重庆网站建设专家wordpress在固定链接设置页面
  • 柯桥做网站有哪些公司网站开发是什么意思
  • 台州网站注册 公司同一ip网站
  • 中国国家城乡建设部网站用户体验设计是什么
  • 网站 空间 下载网站备案号 查询
  • 免费app模板下载网站鸿蒙系统软件开发教程
  • 免费搭建淘宝客网站营业执照年检
  • 合肥做企业网站的网络公司郑州企业网站推广外包
  • 网站运营工作具体做啥怎么用云虚拟主机建设网站
  • 网站设计答辩ppt动漫设计软件有哪些
  • 建网站哪个好网站免费申请空间
  • 如何仿制手机版网站营业执照官网申请入口
  • 做网站有哪些行业wordpress落地页模板
  • 重庆荣昌网站建设价格长寿网站建设
  • 长尾关键词爱站网怎么制作网页页面
  • 怎么建设一个自己的网站首页wordpress rpc
  • 汕头网站建设技术支持网址生成短链接
  • 网站设置请求桌面网站wordpress防止文章被采集
  • 这样建立网站wordpress安装方式
  • 公众号的微网站怎么做深圳市住房和建设局红色警示
  • 如何建设农业推广网站WordPress数据库和网站文件
  • 辽宁市场网站建设销售广州网站改版 网站建设
  • 重庆有哪些做网站公司苏州市规划建设局网站
  • dedecms 5.7 通用企业网站模板一个域名可以做两个网站吗
  • 旅游网站建设主要工作手机排行榜软件
  • 东莞网站建设企慕网站安装出现dir
  • 做网站多少钱一张页面建设网站企业运营