首页 > 编程语言 >算法 | 剪枝函数以及几种形式&回溯法和分支限界法的区别&算法特性&分支限界法的思想&分支限界法的基本步骤&Prim和Kruscal&回溯法的效率

算法 | 剪枝函数以及几种形式&回溯法和分支限界法的区别&算法特性&分支限界法的思想&分支限界法的基本步骤&Prim和Kruscal&回溯法的效率

时间:2024-06-10 16:59:03浏览次数:13  
标签:结点 函数 回溯 节点 限界 分支

what is 剪枝函数?

是对该问题能否得到最优解或者可行解的约束

限界函数:最优解

约束函数:可行解


回溯法和分支限界法的区别:

异:

回溯法分支限界法
一次生成/扩展一个结点一次生成所有的孩子结点
BFSDFS/最小耗费优先
找到所有解找到最优解

同:

均需要定义解空间,解空间的组织结构一般是树或者是图
在解空间图上搜索问题的解
在搜索前需要确定判断条件,该条件用来判断该结点是否为可行解
在搜索的过程中,对生成的结点需要进行判断,满足判断条件的保留,不满足的就舍弃

算法特性

输入、输出、确定、可行、有限 


分支限界法的思想:

从根开始,常以广度优先搜索的方式或者是最小耗费优先的方式搜索问题的解空间树,首先把根节点放入活节点表中,然后从活节点表中取出根节点,使其成为扩展节点,一次性生成扩展节点的孩子结点,舍弃那些导致不可行解或者不是最优解的节点,把其他合适的节点放入活节点表中,然后从活节点表中选取下一个扩展节点,一直搜索,直到找到解或者是活节点表为空。


分支限界法的基本步骤

  • 定义解空间
  • 确定解空间的组织结构(一般是树或者是图)
  • 搜索解空间(确定限界函数和约束函数),如果采用优先级队列分支限界法,还要确定优先级确定方式 

Prim和Kruscal

Prim:稠密图

Kruscal:稀疏图,边数较小


回溯法的效率

不依赖于:确定解空间的时间

依赖于:满足显约束的值的个数

计算约束函数的时间

计算限界函数的时间

标签:结点,函数,回溯,节点,限界,分支
From: https://blog.csdn.net/kazuma_hn/article/details/139578338

相关文章

  • 初阶 《分支和循环语句》 3.循环语句
    3.循环语句whilefordowhile3.1while循环前面已经掌握了if语句:if(条件) 语句;当条件满足的情况下,if语句后的语句执行,否则不执行;但是这个语句只会执行一次。由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。那我们怎么做呢?C语言中给......
  • c语言分支循环语句
    与这相关的逻辑运算符和求素数的四种方法都在主页哦 if语句(三种形式)1.无else语句部分1)语法形式if(表达式)语句12)介绍如果表达式为真(成立),则语句执行;如果表达式为假(不成立),则语句不执行。注意:在c语言中,0表示真,非零表示假#include<stdio.h>intmain(){intn=0;scanf......
  • 回溯法求解TSP问题
    1.readme<1>python<2>代码基于具体的实例,如有需要可自行修改问题规模为n,不再赘述2.code点击查看代码#代价矩阵999表示无穷arc=[[999,3,6,7],[5,999,2,3],[6,4,999,2],[3,7,5,999]]#city存放除出发点0外的城市city=[1,2,3......
  • 代码随想录算法训练营第30天|回溯复习篇
    回溯基础理论1.回溯的本质是利用递归进行暴力搜索,将符和条件的结果集搜索出来2.回溯法常见的问题:组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合......
  • 在错误的分支开发了代码
    文章目录在错误的分支开发了新功能处理方法1.新功能还没有在本地commit提交2.新功能已经在本地提交了,但是还没有`push`到远程仓库2.1新的功能需要添加在一个新的分支2.2新功能需要添加在另一个分支上3.新功能已经在本地提交了,且`push`到了远程仓库在错误的分支......
  • 0基础认识C语言(分支&循环)
    大家今天有没有开心的敲代码呢?hhhhhh让我们今天继续走进C语言~前提回顾:上节课我们学习了一些单目操作符和双目操作符,还聊了一会儿scanf和printf,今天我们对前一次的内容做一次补充1.如果你想输出一个保留五位小数并且让他右对齐十格,你应该怎么办呢?这个时候我们也是有办......
  • idea中Git分支操作
    创建分支实际开发中,一般会采用分支开发、主干发布的方式,现在我们就先看看如何创建分支。基本步骤如下:第一步:右键项目,选择Git/NewBranch,例如:第二步:给分支起个名字,例如:第三步:分支创建后,会自动切换到当前创建的分支,然后在新分支上可以编辑代码并提交,例如:合并分支不同的分......
  • 代码随想录算法训练营第二十四天 | 回溯算法 77.组合
    回溯算法理论基础文章讲解视频讲解回溯是递归的副产品,只要有回溯就会有递归回溯的本质是琼剧,所以效率不高回溯法可以解决的问题组合问题切割问题子集问题排列问题棋盘问题如何理解回溯回溯算法的问题都可以抽象为树形结构集合的大小就构成了书的快读,递归的深度......
  • git分支
    有一个需求:比如有两个分支,一个sg分支,一个master分支,必须保证master分支是绝对稳定的,想象一下你正在开心(o(╥﹏╥)o)的开发sg分支下的代码,此时老板告诉你master分支有错误,需要紧急维护一下,但是sg分支你已经写了许多代码了,怎么切换到master分支呢?此时就用到了我们的gitstash......
  • Arkime(前身为Moloch)-开源网络回溯系统
    Arkime(前身为Moloch)是一个专为安全分析师、网络工程师和研究人员设计的工具,它专注于提供高效、直观的方式来捕获、索引和搜索网络流量,以便于进行深入分析。Github官网:GitHub-arkime/arkime:Arkimeisanopensource,largescale,fullpacketcapturing,indexing,anddat......