五大常用算法

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2024.06.27

分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

(1)求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。

(2)搜索方式的不同:回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。

(1)队列式(FIFO)分支限界法

按照队列先进先出(FIFO)原则选取下一个结点为扩展结点。

(2)优先队列式分支限界法

按照优先队列中规定的优先级选取优先级最高的结点成为当前扩展结点。

在下图所给的有向图G中,每一边都有一个非负边权。要求图G的从源顶点s到目标顶点t之间的最短路径。

下图是用优先队列式分支限界法解有向图G的单源最短路径问题产生的解空间树。其中,每一个结点旁边的数字表示该结点所对应的当前路长。

找到一条路径:

目前的最短路径是8,一旦发现某个结点到下一个结点的长度不小于这个最短路径,则剪枝:

同一个结点选择最短的到达路径:

在算法扩展结点的过程中,一旦发现一个结点到下一个结点的长度不小于当前找到的最短路长,则算法剪去以该结点为根的子树。

在算法中,利用结点间的控制关系进行剪枝。从源顶点s出发,2条不同路径到达图G的同一结点。由于两条路径的路长不同,因此可以将路长长的路径所对应的树中的结点为根的子树剪去。

比如,从s出发,经c,h和经a,e,q的两条不同路径到达同一结点。但经a,e,q的路径的路长相比经c,h的路长更长,可以将路长长的路径所对应的树中的结点为根的子树剪去。

单源最短路径问题的优先队列式分支限界法创建一个小顶堆来存储活结点表优先队列。其优先级是结点所对应的当前路长。

算法从图G的源顶点s和空优先队列开始。结点s被扩展后,它的儿子结点被依次插入堆中。此后,算法从堆中取出具有当前最小路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。如果从当前扩展结点i到顶点j有边可达,且从源出发,途经顶点i再到顶点j相应的路径的长度小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。这个结点的扩展过程一直继续到活结点优先队列为空时为止。

THE END
1.程序员必须知道的10大基础实用算法及其讲解快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 https://blog.csdn.net/weixin_33921089/article/details/92655408
2.历史上最著名的3个数学算法,关于算法的观念,直到今天还在演进对于“算法”一词给以精确的定义不是一件容易事,有一些意义相近的同义语,就是一些其他的名词,它们(有时)会给出差不多同样的东西,例如法则技巧”“程序”还有“方法”等等都是这种同义语。也可以给出一些例子,如长乘法,就是小学生学的把两个正整数相乘的竖式乘法。然而,虽然非形式的解释和恰当的例子对于https://baijiahao.baidu.com/s?id=1804985943646011952&wfr=spider&for=pc
3.算法概述常见算法有许多种 算法预览.png 简单点的比如:递归、递推、迭代、穷举、概率算法、随机算法等 复杂些的比如:分治算法、贪心算法、动态规划、回溯法、分支限界等,后面会赘述一些这几种算法的基本思想与常见应用。 # 影响算法速度的因素 不一样规模的问题,处理起来的难度是不一样的 → 数据的组织方式 → 解决问题https://www.jianshu.com/p/8c8d20a9bde8
4.数据挖掘的常见算法有哪些?数据挖掘的常见算法有哪些? 数据挖掘是一种通过从大量数据中提取知识和信息的方法,以支持业务决策、市场分析和科学研究等领域。在数据挖掘过程中,算法是最重要的组成部分之一。以下是常见的数据挖掘算法。 1.分类算法 分类算法是一类用于将数据样本分为不同类别的算法。这些算法通常使用监督学习方法,其中模型基于已标记https://www.cda.cn/bigdata/202782.html
5.几种常见的算法2021-07-20 几种常见的分布_几种常见的不良学习习惯 1、 分心学习分心学习习惯是指有些学生在学习的时候同时还做别的事情,如听广播、看电视、上课补其他学科作业或者看小说等等。其实这种做法是违背心理学规律的。因为注意是学习的必要条件,在学习的时候做别的事学法指导 [阅读本文] 2023-06-13 八年级语文学法https://www.oubohk.cn/k/jizhongchangjiandesuanfa/
6.程序员会使用的十个基础算法三. 图算法 1. 最短路径算法:最短路径算法用于寻找两个节点之间的最短路径。常用的最短路径算法有Dijkstra算法和Floyd-Warshall算法。 2. 最小生成树算法:最小生成树算法用于在一个带权重的无向图中找出一棵包含所有节点的子树,并且使得该子树的边权重之和最小。常见的最小生成树算法有Prim算法和Kruskal算法。 https://zhuanlan.zhihu.com/p/656882756
7.一文图解弄懂八大常用算法思想片面了啊。题总是刷不完的,但是算法的思想就那么几个。所以呢,刷了那么多题的你,还不了解这几个常见的算法思想,想必是应该好好反省反省下了。 枚举 首先,最为简单的思想,枚举算法。枚举也叫穷举,顾名思义,就是穷尽列举。枚举思想的应用场景十分广泛,也非常容易理解。简单来说,枚举就是将问题的可能性依次列举https://www.51cto.com/article/628524.html
8.C语言10大常见基础算法C语言10大常见基础算法 算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。本文是包括了经典的Fibonacci数列、简易计算器、回文检查、质数检查等算法。 1、计算Fibonacci数列https://m.sohu.com/a/497664110_121124371
9.排序算法总结菜鸟教程数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。 方案:设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。 实例 public https://www.runoob.com/w3cnote/sort-algorithm-summary.html
10.“才”聚天开,勇往“职”前4.C/C++,数据结构,算法,网络通信等基础扎实: 5.关注新技术,自学能力强,能够与公司共同进步; 6.逻辑思维能力强,善于沟通,团队意识强; 7.工作认真细致,责任心强。 静象文旅科技发展(天津)有限公司 01企业简介 向上滑动阅览 沉浸式文旅项目开发业务,为中小型文旅场馆沉浸式文旅体验项目开发提供综合解决方案。 https://www.tjrc.com.cn/app/article/content/VE4rR2NWRjUzUU5SOFFxWDdRa09oZz09.shtml
11.17个机器学习的常用算法!腾讯云开发者社区在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。 3. 半监督式学习: 在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理https://cloud.tencent.com/developer/article/1874962