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

高端大气上档次的网站招聘网站开发方案doc

高端大气上档次的网站,招聘网站开发方案doc,手机app免费制作平台,安徽省途顺建设工程有限公司网站回溯基本做题理论 回溯本质是穷举,顶多在穷举过程中剪枝解决排列组合类问题回溯,可以具象化为树从叶子节点往根节点方向“回去”的过程回溯三部曲: 返回值(void)和参数终止条件,达到条件则存放结果并retur…

回溯基本做题理论

  • 回溯本质是穷举,顶多在穷举过程中剪枝
  • 解决排列组合类问题
  • 回溯,可以具象化为树从叶子节点往根节点方向“回去”的过程
  • 回溯三部曲:
    • 返回值(void)和参数
    • 终止条件,达到条件则存放结果并return
    • 回溯搜索的遍历过程
      • 横向:for循环
      • 纵向:递归
  • void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
    }
    

组合

回溯的方法,感觉还是有点难上手。我做这一道题,对于回溯三要素:

  • 最开始是不知道如何去有序地罗列所有情况,看了参考题解,原来是可以选定一个stratIndex来决定。这是回溯的参数确定方面
  • 回溯的终止条件是迭代的深度,也就是数组中数的个数,这个点差点想不到;
  • 回溯的执行逻辑,我自己也没有捋得很明白:
    • for循环执行本层的结果,那下一层结果如何通过递归来实现:原来递归执行下一层操作是基于当前层的,也就是下面代码中的m+1。
    • 以及回溯这个动作需要让数组也跟着pop_back()掉,这样执行完这一层之后,数组中的数目和进入函数前是保持一样的。
class Solution {
public:vector<int> v;//存放数组序列vector<vector<int>> ans;//存放最后的答案序列void backtrack(int n,int k ,int startIndex){//从[startIndex,n]中取一个数if(v.size()==k){//已经收集了k个数ans.push_back(v);return ;}for(int m = startIndex;m<=n;m++){//取了m这个值v.push_back(m);//下一层从[m+1,n]中取一个数backtrack(n,k,m+1);v.pop_back();}}vector<vector<int>> combine(int n, int k) {backtrack(n,k,1);return ans;}
};

回溯虽然有模板算法可以套用,但目前还是比较难自己直接想明白,后面多做题再总结吧。

对于该代码,进一步优化的话,剪枝,主要在循环遍历的时候,m不必循环到n,而是可以根据当前数组中已有数的个数来确定最大取到什么位置。

比如已知现在v还要取t个数就达到有k个数的要求,那么当前这一轮循环m就不用遍历到n,而是遍历到m-t,因为最极限的做法,剩下t个我取[n-t+1,n-t+2,...,n]这t个数的话,m在这样的情况下,应该是最大最大也就是取到n-t,m再往后取,就会出现v还要t个数达到k,但是不够t个数中取t个数。

用中的图解释如下:

代码改动在for循环处:

class Solution {
public:vector<int> v;vector<vector<int>> ans;void backtrack(int n,int k ,int startIndex){if(v.size()==k){ans.push_back(v);return ;}for(int m = startIndex;m<=n-k+v.size()+1;m++){//for循环处剪枝优化v.push_back(m);backtrack(n,k,m+1);v.pop_back();}}vector<vector<int>> combine(int n, int k) {backtrack(n,k,1);return ans;}
};
http://www.dtcms.com/a/396375.html

相关文章:

  • 品牌商标购买网站wordpress过滤显示插件
  • 厦门网站建设制作店面设计费计入什么科目
  • 小红网站建设软件技术是干嘛的
  • 南宁网站建设人才招聘人物摄影网站
  • 网站建设目标是什么dw企业网站设计
  • 做中考试卷的网站wordpress广告先显示
  • 网站色哦优化8888闽侯县住房和城乡建设网站
  • LangGraph:记忆
  • 网站推广怎么样wordpress水印图片插件
  • 公司自己的网站怎样做杭州网站建站
  • 做网站学哪种代码好开家网络公司需要多少钱
  • 织梦网站移动化宁波网站网站建设
  • 根据颜色找网站宁波网站制作定制
  • 织梦cms手机网站昆钢建设集团网站
  • 泉州网站建设平台素材
  • 电脑网站转换手机网站怎么做公司logo设计图片欣赏
  • C++基础:(二)C++入门知识介绍(下)
  • Pyside6 + QML - 信号与槽07 - 一个函数被多个信号触发
  • 网站建设经费的请示中国建设门户网登录入口
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(35):文法運用10课2+文法と使いえ方3)
  • 通过新闻学习日语,标题《ビール各社 厳しい暑さでも育つホップの栽培技術開発など進む》
  • 中国建设银行章丘支行网站做网站排名有用吗
  • 《模拟电子技术》之结型场效应管
  • 【Jenkins】配置到实战教程
  • 国之珍微站个人网站wordpress渗透
  • 有那些网站可以做推广企业网站建设 厦门
  • 站群系统源码微信外卖小程序加盟
  • 重庆直播网站平台建设小程序制作样式
  • 免费注册域名FreeDomain
  • Linux C语言基于FP寄存器进行栈回溯