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

惠州网站策划建设品牌产品策划方案

惠州网站策划建设,品牌产品策划方案,寓意好的装饰公司名称,鞋行业的网站建设理论基础 回溯法和递归不可分割,回溯法是一种穷举的方法,通常需要剪枝来降低复杂度。回溯法有一个选择并退回的过程,可以抽象为树结构,回溯法的模板如下: void backtracking(参数) {if (终止条件) {存放结果;return;}…

理论基础 

回溯法和递归不可分割,回溯法是一种穷举的方法,通常需要剪枝来降低复杂度。回溯法有一个选择并退回的过程,可以抽象为树结构,回溯法的模板如下:

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}

 77. 组合  

这道题是回溯的经典题目,按照递归三步走:

参数:

在这里要定义两个全局变量,一个用来存放符合条件单一结果,一个用来存放符合条件结果的集合。函数里一定有两个参数,既然是集合n里面取k个数,那么n和k是两个int型的参数。

然后还需要一个参数,为int型变量startIndex,这个参数用来记录本层递归的中,集合从哪里开始遍历(集合就是[1,...,n] )。

回溯函数结束条件:

path这个数组的大小如果达到k,说明我们找到了一个子集大小为k的组合了,此时用result二维数组,把path保存起来,并终止本层递归。

单层搜索的过程

回溯法的搜索过程就是一个树型结构的遍历过程,在如下图中,可以看出for循环用来横向遍历,递归的过程是纵向遍历。

77.组合1

如此我们才遍历完图中的这棵树。for循环每次从startIndex开始遍历,然后用path保存取到的节点i。可以看出backtracking(递归函数)通过不断调用自己一直往深处遍历,总会遇到叶子节点,遇到了叶子节点就要返回。backtracking的下面部分就是回溯的操作了,撤销本次处理的结果。

此外:比较重要的剪枝部分:

可以剪枝的地方就在递归中每一层的for循环所选择的起始位置

如果for循环选择的起始位置之后的元素个数 已经不足 我们需要的元素个数了,那么就没有必要搜索了。注意代码中i,就是for循环里选择的起始位置。

for (int i = startIndex; i <= n; i++) {

优化过程如下:

  1. 已经选择的元素个数:path.size();

  2. 还需要的元素个数为: k - path.size();

  3. 在集合n中至多要从该起始位置 : n - (k - path.size()) + 1,开始遍历

为什么有个+1呢,因为包括起始位置,我们要是一个左闭的集合。举个例子,n = 4,k = 3, 目前已经选取的元素为0(path.size为0),n - (k - 0) + 1 即 4 - ( 3 - 0) + 1 = 2。

最终详细代码如下:

class Solution
{
public:vector<int> path;vector<vector<int>> res;void backTracking(int n, int k, int startindex) {//endif (path.size() == k) {res.push_back(path);return;}// backtrackingfor (int i = startindex; i <= n - (k - path.size()) + 1; i++) {path.push_back(i);backTracking(n, k, i + 1);path.pop_back();}}vector<vector<int>> combine(int n, int k) {backTracking(n, k, 1);return res;}
};

http://www.yayakq.cn/news/452276/

相关文章:

  • 阿里云的虚拟主机用什么做网站商标怎么设计
  • 网站域名所有权食品包装设计要点
  • 中文域名指向同一个网站蚌埠seo招聘
  • 专业网站建设阿里云望野朗读
  • 如何在网站上做淘宝客推广wordpress 最后修改时间排序
  • ipfs做网站工业设计作品集
  • 旅游网站开发需求分析开发公司与物业公司的交接手续
  • 国外做外汇网站交流wordpress可视化插件下载
  • 网站规划与开发专业企业形象网站怎么做
  • 旅游网站系统wordpress洛阳营销型网站
  • 做网站能赚流量钱吗建立网站用英语
  • 国内可以使用的自己建站wordpress 微博登陆
  • 网站开发用的电脑wordpress 评论插件下载
  • 公司注册网站方法深圳宝安区属于富人区吗
  • 太仓seo网站优化软件创鑫云网络
  • 网站怎么做qq微信登陆wordpress 增删改查 函数
  • 网站建设:博采网络沈阳蓝德网站建设
  • 企业网站建设有什么淘宝有做钓鱼网站的吗
  • 建设部职称评审的网站seo软件定制
  • 网站搜索功能代码水果网站建设案例
  • 网站建设资料准备网站建设朝阳
  • 网站流量如何盈利dw制作简单网站模板下载地址
  • wordpress托管网站wordpress 教程
  • 网站建设个网站一般需要花多少钱10_10_微信里网站怎么做的
  • 山东枣庄滕州网站建设网站建设方案功能描述
  • 河北邯郸做网站的公司烟台市两学一做网站
  • 网站建设网站制作学做投资网站
  • 大型网站开发成本如何优化关键词搜索排名
  • 如何做网站答题领红包链接做外贸主页网站用什么的空间好点
  • 东莞网络推广网站微餐饮网站建设平台