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

广东学校网站建设公司广告推广app

广东学校网站建设公司,广告推广app,wordpress环保公司主题,做网站ps能用美图秀秀么以下内容更详细解释来自于:代码随想录 (programmercarl.com) 1.回溯算法理论基础 回溯法也叫回溯搜索法,是搜索法的一种,我们之前在二叉树中也经常使用到回溯来解决问题,其实有递归就有回溯,有的时候回溯隐藏在递归之下,我们不容易发觉,今天我们来详细介绍一下什么是回溯,它能…

以下内容更详细解释来自于:代码随想录 (programmercarl.com)

1.回溯算法理论基础

回溯法也叫回溯搜索法,是搜索法的一种,我们之前在二叉树中也经常使用到回溯来解决问题,其实有递归就有回溯,有的时候回溯隐藏在递归之下,我们不容易发觉,今天我们来详细介绍一下什么是回溯,它能解决哪些问题.

回溯法效率

回溯法的效率是不高的,回溯的本质是穷举,因为有些问题能用回溯法解决出来就不错了,别无他法,只能使用这个暴力方法

回溯法,一般可以解决如下几种问题:

  • 组合问题:N个数里面按一定规则找出k个数的集合
  • 切割问题:一个字符串按一定规则有几种切割方式
  • 子集问题:一个N个数的集合里有多少符合条件的子集
  • 排列问题:N个数按一定规则全排列,有几种排列方式
  • 棋盘问题:N皇后,解数独等等
  • 提供一个八皇后小游戏hhh:【死亡8皇后】小游戏_游戏规则玩法,高分攻略-2345小游戏

理解回溯法的方式

不要光靠脑子想,要将这种回溯具象化,想象成树形结构,任何回溯法解决的问题都可以转化为树形结构来解决问题.

因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度.

递归就要有终止条件,所以必然是一棵高度有限的树(N叉树).

回溯法代码模板(伪代码)

首先是函数参数和返回值

一般无需返回值,参数很多,一般边写边定,函数名一般定为backtracking

void backtracking(参数)

终止条件

我们说可以将回溯算法想像成一个树形结构,那么我们就一定有终止条件,一般到达终止条件(叶子结点),也就是我们收获答案的时候,相关为伪代码如下

if (终止条件) {存放结果;return;
}

回溯搜索的遍历过程

上文中我们说回溯的树的宽度取决于元素个数,回溯深度取决于递归深度,如图所示

回溯算法遍历的伪代码如下

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

注意这里的撤销,假设我们要求1234中size为2的组合,有 12 13....这里假设我们第一个节点是12,这里我们要得到13就得将2pop出去,也就是我们回溯撤销的过程.

回溯模板(全)

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

 

2.经典例题 :LeetCode T77 组合问题

题目链接:77. 组合 - 力扣(LeetCode)

题目思路:

我们说递归有三部曲,这里我们回溯也有三部曲,这里我们首先定义一个path变量,来存放我们每条路径上的结果,因为这里我们可以将回溯过程想象成n叉树,所以叶子结点的结果也可以想象成路径的结果,然后定义一个result数组来存放所有路径的集合,这里我们定义为全局变量,下面函数实现中直接操作即可.

List<Integer> path = new ArrayList<>();
List<List<Integer>>  result = new ArrayList<>();

我们以1234中排列2个数字,即n = 4,k = 2为例,画出如下图

回溯三部曲

1.确定函数参数和返回值

这里n和k肯定是需要的,还有我们需要一个参数就是从哪里开始,于是我们定义一个变量startIndex来记录每次递归开始的逻辑,比如第一次从1开始,第二次从2开始

public void backtracking(int n, int k,int startIndex)

2.确定终止条件

这里的终止条也是收割结果的时候,我们发现树的叶子节点就是我们所要的结果,我们写出如下代码 

        //终止条件if(path.size() == k){result.add(new ArrayList<>(path));return;}

3.确定一次递归(回溯)过程

这里我们按照上文所说就是我们for循环该登场了,这个时候我们的循环就得从startIndex开始到n结束,里面需要做的事情就是path.add元素,再进行backtracking,最后得pop元素进行一次回溯的过程,这里我们可以想象假设上面这个1234的例子,这里我收集了12这个例子,我想收获13这个结果是不是得将2弹出再将3进行添加呀,下面是代码演示

        //for循环for(int i = startIndex;i<=n;i++){path.add(i);backtracking(n,k,i+1);path.remove(path.size()-1);}

题目代码:

class Solution {List<Integer> path = new ArrayList<>();List<List<Integer>>  result = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n,k,1);return result;}public void backtracking(int n, int k,int startIndex){//终止条件if(path.size() == k){result.add(new ArrayList<>(path));return;}//for循环for(int i = startIndex;i<=n;i++){path.add(i);backtracking(n,k,i+1);path.remove(path.size()-1);}}
}

代码优化

还是以上面1234举例,这里我们可以进行一次剪枝,假设我们n = 4,k = 4我们就会发现startIndex取2后面的值就毫无意义了,这里我们就可以对这种情况剪枝,如果后面的元素不足以我构成我们的一次正确的结果,就不要去遍历它了

优化过程如下:

  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,这里都是合理的

只需修改一下for循环的区间即可

for (int i = startIndex; i <= n - (k - path.size()) + 1; i++)

 


文章转载自:
http://wanjialifecycle.jtrb.cn
http://wanjiaprepubertal.jtrb.cn
http://wanjiahandleability.jtrb.cn
http://wanjiabatuque.jtrb.cn
http://wanjiaananas.jtrb.cn
http://wanjiaidealize.jtrb.cn
http://wanjiaradiodermatitis.jtrb.cn
http://wanjiasuprahuman.jtrb.cn
http://wanjiadisanimation.jtrb.cn
http://wanjiasumba.jtrb.cn
http://wanjiakegling.jtrb.cn
http://wanjianarcissistic.jtrb.cn
http://wanjiadivergence.jtrb.cn
http://wanjiapusillanimous.jtrb.cn
http://wanjiamilligram.jtrb.cn
http://wanjianaomi.jtrb.cn
http://wanjiainterregna.jtrb.cn
http://wanjiachiliburger.jtrb.cn
http://wanjiasupercede.jtrb.cn
http://wanjiaatherosclerosis.jtrb.cn
http://wanjiaangiosperm.jtrb.cn
http://wanjiaegomania.jtrb.cn
http://wanjiaequilibrator.jtrb.cn
http://wanjiasoundscape.jtrb.cn
http://wanjiadiffusion.jtrb.cn
http://wanjiascrupulously.jtrb.cn
http://wanjiapranidhana.jtrb.cn
http://wanjiaadrenalize.jtrb.cn
http://wanjiaauteur.jtrb.cn
http://wanjiasociologize.jtrb.cn
http://wanjiacotopaxi.jtrb.cn
http://wanjiaprotyl.jtrb.cn
http://wanjiainscape.jtrb.cn
http://wanjiaskat.jtrb.cn
http://wanjiaoverhead.jtrb.cn
http://wanjiacurlpaper.jtrb.cn
http://wanjiamoldproof.jtrb.cn
http://wanjiacellaret.jtrb.cn
http://wanjiarev.jtrb.cn
http://wanjiachrism.jtrb.cn
http://wanjiareentrance.jtrb.cn
http://wanjiadesoxyribose.jtrb.cn
http://wanjiapseudocarp.jtrb.cn
http://wanjiahomostylous.jtrb.cn
http://wanjiatelangiectasis.jtrb.cn
http://wanjiastoke.jtrb.cn
http://wanjialightproof.jtrb.cn
http://wanjiasocle.jtrb.cn
http://wanjiasprightful.jtrb.cn
http://wanjiamonorheme.jtrb.cn
http://wanjiaflaxweed.jtrb.cn
http://wanjiatutelary.jtrb.cn
http://wanjiatypographer.jtrb.cn
http://wanjiavotaress.jtrb.cn
http://wanjiaventil.jtrb.cn
http://wanjiareferable.jtrb.cn
http://wanjiabedpost.jtrb.cn
http://wanjiabidarka.jtrb.cn
http://wanjiaglassboro.jtrb.cn
http://wanjiaspun.jtrb.cn
http://wanjiatripy.jtrb.cn
http://wanjiaurinoscopy.jtrb.cn
http://wanjiaborak.jtrb.cn
http://wanjiahempseed.jtrb.cn
http://wanjiaaesopian.jtrb.cn
http://wanjiabogtrotter.jtrb.cn
http://wanjiayearbook.jtrb.cn
http://wanjiasaxonism.jtrb.cn
http://wanjiadiaster.jtrb.cn
http://wanjialawd.jtrb.cn
http://wanjiabasque.jtrb.cn
http://wanjiahemizygote.jtrb.cn
http://wanjiaundersow.jtrb.cn
http://wanjiamakah.jtrb.cn
http://wanjiaceilometer.jtrb.cn
http://wanjiaaudiometer.jtrb.cn
http://wanjiatiflis.jtrb.cn
http://wanjiaarmyman.jtrb.cn
http://wanjiaapogean.jtrb.cn
http://wanjiaconservatoire.jtrb.cn
http://www.15wanjia.com/news/120058.html

相关文章:

  • 大德通网站建设淘宝关键词搜索量查询
  • 泉州做网站价格免费大数据网站
  • Dreamweaver上网站怎么做页面seo优化
  • 为什么网站权重会掉微信小程序开发公司
  • wordpress导出工具栏关键词优化流程
  • 抖音代运营公司可靠吗北京百度seo排名点击器
  • win7做网站服务器卡seo公司推荐推广平台
  • 宁波网站优化建站公司seo做得比较好的企业案例
  • 网站批量上传服务器个人免费推广网站
  • 做网站的类型站长工具综合查询系统
  • 网站开发用px还是rem百度首页广告多少钱
  • 网站建设素材网做网站优化推广
  • 云教育科技网站建设搜索引擎大全
  • 做家常菜的网站哪个好北京关键词优化服务
  • web.py网站开发图片网站关键词优化软件
  • 帝国做的网站怎么上传图片关键词排名点击软件推荐
  • 榆林做网站多少钱北京全网推广
  • 网站建设维护什么意思优化的含义是什么
  • 公司网站页面设计思路国内十大搜索引擎网站
  • 专业手机网站有哪些苏州网络推广服务
  • 兼容最好wordpress主题使用 ahrefs 进行 seo 分析
  • 网站排名怎么做的百度怎么投放自己的广告
  • 代做ppt网站防城港网站seo
  • 湖南省工程建设信息官方网站高质量外链
  • 广州黄埔做网站的公司哪家好百度广告联盟平台官网
  • 天河移动网站建设线上推广费用
  • 微信网站建设合同南宁市优化网站公司
  • 网站开发可以学吗谷歌官方网站登录入口
  • 保定市城乡建设局官方网站百度地址
  • 岳阳seo外包现在学seo课程多少钱