西北工业大学算法设计实验2

合集下载

算法设计实验报告

算法设计实验报告

算法设计实验报告一、实验目的本次算法设计实验的主要目的是通过实际操作和分析,深入理解算法的原理和应用,提高解决实际问题的能力,培养创新思维和逻辑推理能力。

二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。

同时,为了进行算法的性能分析和可视化,还使用了一些相关的库,如 time 用于计算时间开销,matplotlib 用于绘制图表。

三、实验内容(一)排序算法的实现与比较1、冒泡排序冒泡排序是一种简单的排序算法。

它重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,直到没有要交换的数据元素为止。

以下是冒泡排序的 Python 代码实现:```pythondef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n i 1):if arrj > arrj + 1 :arrj, arrj + 1 = arrj + 1, arrj```2、快速排序快速排序是对冒泡排序的一种改进。

它采用了分治的策略,通过选择一个基准元素,将待排序的序列分割成两个子序列,其中一个子序列的所有元素都小于等于基准元素,另一个子序列的所有元素都大于等于基准元素,然后对这两个子序列分别进行快速排序。

以下是快速排序的 Python 代码实现:```pythondef quick_sort(arr, low, high):if low < high:pi = partition(arr, low, high)quick_sort(arr, low, pi 1)quick_sort(arr, pi + 1, high)def partition(arr, low, high):pivot = arrhighi =(low 1)for j in range(low, high):if arrj <= pivot:i = i + 1arri, arrj = arrj, arriarri + 1, arrhigh = arrhigh, arri + 1return (i + 1)```(二)搜索算法的实现与比较1、顺序搜索顺序搜索是一种最简单的搜索算法,它从数组的开头开始,依次比较每个元素,直到找到目标元素或者遍历完整个数组。

西北工业大学 算法设计与分析实验指导

西北工业大学 算法设计与分析实验指导

算法设计与分析实验指导王歧编实验一:递归与分治1.二分查找2.合并排序3.快速排序实验二:回溯1.0-1背包问题2.装载问题3.堡垒问题(ZOJ1002)4.*翻硬币问题5.8皇后问题6.素数环问题7.迷宫问题8.*农场灌溉问题(ZOJ2412)9.*求图像的周长(ZOJ1047)10.*骨牌矩阵11.*字母转换(ZOJ1003)12.*踩气球(ZOJ1004)实验三:搜索1.Floodfill2.电子老鼠闯迷宫3.跳马4.独轮车5.皇宫小偷6.分酒问题7.*找倍数8.*8数码难题实验四:动态规划1.最长公共子序列2.计算矩阵连乘积3.凸多边形的最优三角剖分4.防卫导弹5.*石子合并6.*最小代价子母树7.*旅游预算8.*皇宫看守9.*游戏室问题10.*基因问题11.*田忌赛马实验五:贪心与随机算法1.背包问题2.搬桌子问题3.*照亮的山景4.*用随即算法求解8皇后问题5.素数测试实验一:递归与分治实验目的理解递归算法的思想和递归程序的执行过程,并能熟练编写递归程序。

掌握分治算法的思想,对给定的问题能设计出分治算法予以解决。

实验预习内容编程实现讲过的例题:二分搜索、合并排序、快速排序。

对本实验中的问题,设计出算法并编程实现。

试验内容和步骤1.二分查找在对线性表的操作中,经常需要查找某一个元素在线性表中的位置。

此问题的输入是待查元素x和线性表L,输出为x在L 中的位置或者x不在L中的信息。

程序略2.合并排序程序略3.快速排序程序略实验总结及思考合并排序的递归程序执行的过程实验二:回溯算法实验目的:熟练掌握回溯算法实验内容:回溯算法的几种形式a)用回溯算法搜索子集树的一般模式void search(int m){if(m>n) //递归结束条件output(); //相应的处理(输出结果)else{a[m]=0; //设置状态:0表示不要该物品search(m+1); //递归搜索:继续确定下一个物品a[m]=1; //设置状态:1表示要该物品search(m+1); //递归搜索:继续确定下一个物品}}b)用回溯算法搜索子集树的一般模式void search(int m){if(m>n) //递归结束条件output(); //相应的处理(输出结果) elsefor(i=m;i<=n;i++){swap(m,i); //交换a[m]和a[i]if()if(canplace(m)) //如果m处可放置search(m+1); //搜索下一层swpa(m,i); //交换a[m]和a[i](换回来)}}习题1.0-1背包问题在0 / 1背包问题中,需对容量为c 的背包进行装载。

西北工业大学C语言大作业2

西北工业大学C语言大作业2

学院目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (3)2.1程序结构 (3)2.2主要功能 (4)2.3函数实现 (4)2.4开发日志 (5)3 程序调试及运行 (6)3.1程序运行结果 (6)3.2程序使用说明 (7)3.3程序开发总结 (7)4 附件(源程序) (8)1 摘要1.1 设计题目界面编程——简谐运动1.2 设计内容基于Windows界面编程下的SDK编程框架,设计一个带有对话框、GDI图形输出的Windows窗口的程序,实现求解简谐运动方程,能流密度,绘制简谐振动曲线。

运行程序,初始化,X0=V0=W=1时的简谐运动方程和简谐振动曲线。

当点击“运行|计算绘图”时,弹出对话框对简谐运动初相位X0,初速度V0和角频率W进行修改,点击“确认”,就能计算出简谐运动方程,能流密度,绘制简谐振动曲线,这些结果在窗口显示。

1.3 开发工具Visual C++ 6.0和Win32SDKApp1.4 应用平台Windows 2000/XP/Vista 32位2 详细设计2.1 程序结构一、程序的整体结构首先定义资源头文件resource.h;在进行资源描述文件,此过程可通过可视化操作;正式进入编写程序代码:1、由Win32SDKApp自动生成的SDK编程框架:头文件包含所有头文件或链接库文件全局定义应用实例、主窗口变量、数据结构等全局定义,固定不变消息处理函数原型给出所有消息处理函数的原型,增加/删除消息处理时变动消息映射表宏定义定义消息映射表,增加/删除消息处理时变动窗口过程窗口过程函数的实现,固定不变注册窗口类注册窗口类函数的实现,除非修改窗口属性,一般不动初始化窗口初始化窗口函数的实现,除非修改窗口初始化值,一般不动消息循环Windows应用程序主消息循环,一般不动主函数Windows应用程序基本结构,一般不动消息处理函数实现在这编写消息处理函数2、再对SDK编程框架进行修改:设置了快捷键就必须对消息循环函数修改在编写消息处理函数之前:在消息处理函数原型模块中加入要添加的消息处理函数(如WM_COMMAND、WM_ONPAIT)在消息映射表模块增加该消息映射在消息处理函数实现模块中给出该消息处理函数的实现如果消息处理函数之间有共享使用的变量,则将它定义为全局变量。

西北工业大学计算机学院

西北工业大学计算机学院

西北工业大学计算机学院计算机操作系统实验指导张羽谷建华王海鹏编2009-3一、操作系统课内实验目的:计算机操作系统课内实验作为操作系统课堂理论教学的辅助部分是加强计算机科学与技术专业实践的重要环节之一。

由于操作系统自身的庞大和复杂,造成学生在学过操作系统课程后,总有一种“雾里看花”的感觉,即只是支离破碎的了解了一些操作系统局部知识,而很难将这些知识融会贯通,对于运用操作系统知识从事设计和应用更是无从谈起。

本实验课的目的就是力图解决上述问题。

二、操作系统实验整体安排和要求:1.课内实验将按以下三个方面进行:对常用的系统调用命令的使用方式有一个较熟练的掌握;对典型操作系统的编程基础知识和机制进行学习和了解;运用一些重要的系统调用编写程序模块,对操作系统中的一些重要概念和典型算法进行实现或验证。

实验内容如下:实验一 Linux操作系统的安装及使用实验二 Linux Shell程序实验三 vi编辑器的学习和使用实验四 观察进程的并发性实验五 构造进程家族树实验六 理解进程的独立空间实验七 请求分页存储管理设计操作系统的课内实验共7个,根据具体上机条件和学时选做2~3个,其中实验2、3中必选1个,实验4~6必选,实验7可选做。

由于所有实验均在Linux环境下工作,用C语言编程,因此学生要具备一定的C语言编程能力,同时要求在充分预习实验内容中相关知识后,再进行实验的上机环节。

另外由于操作系统实验有些题目具有一定的难度和规模,建议采用分组方式进行。

2.操作系统课内实验考核:预习报告30%,上机实验35%,实验报告35%。

3.预习报告内容包括两部分,一是对相关知识学习的书面总结(知识综述和参考文献);二是对本次实验的分析报告(主要针对涉及算法的题目)。

实验报告内容主要包括本次实验的上机结果(数据结构、程序框图、源程序文档和运行情况)以及实验中难点分析和心得。

4.实验软、硬件环境要求:80386DX以上兼容机,可以使用Intel、AMD、CRIX处理器,对80386或80486SX的CPU建议具有数字协处理器。

C语言大作业西工大

C语言大作业西工大
课程名称 实验项目
实验报告 数据结构 实现深度优先搜索与广度优先搜索算法
一、实验目的 1、通过本实验,掌握图,无向图的基本概念,掌握图的遍历; 2、掌握图的深度优先搜索(DFS)与广度优先搜索(BFS)算法。
二、实验内容 1、建立图的存储方式; 2、图的深度优先搜索算法; 3、图的广度优先搜索算法。
pStack->parc = p; pStack->next = Stack->next; Stack->next = pStack; while(p && (Stack->next)) {
while(p) {
if(Visited[p->adjvex]) p=p->nextarc;
else
{
Visited[p->adjvex]=1;
printf(" %c ",ag.vertices[p->adjvex].cData);
printf("%d\t%c\t",i,pag->vertices[i].cData); p = pag->vertices[i].firstarc; while(p) {
printf("%d\t",p->adjvex); p = p->nextarc; } printf("\n"); } return 1; } int CreateGraph(ALGraph* pag,int start,int end) { ArcNode* arcNodes = (ArcNode*)malloc(sizeof(ArcNode)); ArcNode* arcNodee = (ArcNode*)malloc(sizeof(ArcNode)); ArcNode* p; if(!arcNodes || !arcNodee) return 0; arcNodes->adjvex = end; p = pag->vertices[start].firstarc; if(!p) {

西北工业大学-算法设计大作业

西北工业大学-算法设计大作业

目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (3)2.1程序结构 (3)2.2主要功能 (10)2.4开发日志 (11)3 程序调试及运行 (11)3.1程序运行结果 (11)3.2程序使用说明 (13)3.3程序开发总结 (13)1 摘要1.1 设计题目(1)阶乘求和(2)数组排序(3)图形绘制1.2 设计内容(1)求1!+2!+3!+4!+5!(2)有一个数组中有10个数组元素,输入所有数组元素的值,对数组进行从大到小排序(3)绘制图形1.3 开发工具Raptor是一种基于流程图的可视化编程开发环境。

流程图是一系列相互连接的图形符号的集合,其中每个符号代表要执行的特定类型的指令。

符号之间的连接决定了指令的执行顺序。

一旦开始使用Raptor 解决问题,这样的理念将会变得更加清晰。

1.4 应用平台Windows XP / 7/Vista 32位2 详细设计2.1 程序结构(1)(2)(3)2.2 主要功能(1)通过调用子程序,利用循环思想,实现阶乘求和;(2)先输入十个数组元素,再利用冒泡法,使它们按照由大到小的顺序排列;(3)通过过程调用,进行图形编程,计算坐标,合理排布线段、矩形、圆等图形,最后绘制出优美的图形。

2.4 开发日志按照题目要求设计程序,运用各种工具把程序编写好,然后进行试运行,找出错误进行改正后,继续运行,知道运行结果正确。

3 程序调试及运行3.1 程序运行结果(1)(2)(3)3.2 程序使用说明(1)先切换至中级模式,再开始运行程序,最后可得到结果;(2)开始运行后,按照程序提示,依次输入10个数组元素,程序运行后即可使其按从大到小排列;(3)直接运行程序,即可得到预先设计好的美丽的图形。

3.3 程序开发总结(1)了解了如何调用子程序,切实感受到了利用子程序可以使程序更为简捷,运行更为迅速,十分方便;(2)实际体会了循环,判断等思想在数组排序中的应用,受益匪浅;(3)体会到了raptor的强大功能,可以快速而准确地绘制图形。

工业算法测试实验报告

工业算法测试实验报告

一、实验背景随着工业自动化和信息化的快速发展,算法在工业领域的应用日益广泛。

为了确保算法在实际工业环境中的可靠性和高效性,本实验对几种常见的工业算法进行了测试和分析。

二、实验目的1. 了解不同工业算法的原理和特点。

2. 评估算法在工业环境中的性能表现。

3. 为工业自动化系统的算法优化提供依据。

三、实验内容本实验选取了以下几种工业算法进行测试:1. 快速排序算法2. 归并排序算法3. 希尔排序算法4. 堆排序算法四、实验方法1. 数据准备:随机生成大量测试数据,包括升序、降序、逆序和随机排列的数组。

2. 算法实现:根据每种算法的原理,分别实现相应的代码。

3. 性能测试:对每种算法进行性能测试,包括排序时间、内存消耗和算法稳定性等方面。

4. 结果分析:对测试结果进行统计分析,比较不同算法的性能差异。

五、实验结果与分析1. 快速排序算法- 原理:快速排序是一种分治算法,通过选取一个基准值,将数组划分为两部分,分别对这两部分进行快速排序。

- 性能测试:在升序、降序、逆序和随机排列的数组中,快速排序的平均排序时间分别为0.015秒、0.017秒、0.018秒和0.020秒。

- 分析:快速排序在升序和降序数组中表现较好,而在逆序和随机排列的数组中性能略有下降。

2. 归并排序算法- 原理:归并排序是一种稳定的排序算法,通过将数组分割成多个子数组,然后对这些子数组进行排序,最后将排序后的子数组合并成一个有序数组。

- 性能测试:在升序、降序、逆序和随机排列的数组中,归并排序的平均排序时间分别为0.018秒、0.020秒、0.022秒和0.024秒。

- 分析:归并排序在各种类型的数组中表现稳定,但在逆序和随机排列的数组中性能相对较差。

3. 希尔排序算法- 原理:希尔排序是一种基于插入排序的算法,通过设置一个增量序列,逐步缩小增量,对数组进行排序。

- 性能测试:在升序、降序、逆序和随机排列的数组中,希尔排序的平均排序时间分别为0.012秒、0.014秒、0.016秒和0.018秒。

西北工业大学java实验报告.

西北工业大学java实验报告.
实验1-4:
Forth.java——
说明:编写图形界面的Java Applet,接受用户输入的一个整形数和一个浮点型数,单击按钮求两数之和。
实验1-5:
WaysOfTakingMoney.java——
说明:小明有5分、2分、1分硬币,想拿出1元钱,有几种拿法?给出所有拿法。实现方式不限。
在此题中运用了穷举法,列出了各种取法。
实验5-1:
FileInfor.java——
说明:编写一个图形化小工具,功能类似系统工具dir,可查看用户给定文件的创建时间、文件类型、文件大小等信息。
创建时间、文件大小等信息可直接通过file类取得,文件类型需要写方法判断,接受用户输入的文件名,截取其后缀,根据其后缀判断文件的类型。例如后缀为.java的是Java的源程序文件,后缀为.txt的是文本文件。注意提高程序的容错性(输入的格式的多样性和不确定性)。
实验4-1:
(1)Rectangular1.java——
(2)Rectangular2.java——
说明:在实验3第3题的基础上,分别实现下列5个步骤的要求。
Step1:
为实验3中定义的矩形类派生一个子类:正方形类。正方形类的操作同样是求周长和面积。则这个子类除了从父类继承来的方法之外,还需要定义哪些方法?列出正方形类的所有域与方法。编程验证所编写的正方形类。
在做本本题时原本真对26个字母分别设计了变量,后来进行了优化,运用了数组变量,大大减少了代码量。
实验4-3:
Palindrome.java——
说明:采用递归方法编程,检查一个任意给定的字符串是否是回文。
------------------------------------------------------------
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二:回溯法VS分支定界法一、问题分析回溯法可以处理货郎担问题,分支定界法也可以处理货郎担问题,回溯法和分支定界法哪个算法处理货郎担问题效率更高呢?实现回溯法、分支定界法,以及不同的界值函数(课上讲过的或者自己新设计的),通过随机产生10个不同规模的算例(城市数量分别为10,20,40,80,100,120,160,180,200,500,或者其它规模),比较回溯法和分支定界法在相同界值函数下的执行效率。

另外,分别比较回溯法和分支定界法在不同界值函数下的执行效率。

二、算法基本思想1、回溯法从初始状态出发,搜索其所能到达的所有“状态”,当一条路走到尽头,再后退一步或若干步,从另外一种状态出发,继续搜索,直到所有的路径都搜索过。

这种不断前进、不断回溯寻找解的方法叫回溯法。

回溯法通常将问题解空间组织成“树”结构,采用系统的方法搜索解空间树,从而得到问题解。

搜索策略:深度优先为主,也可以采用广度优先、函数优先、广度深度结合等。

避免无效搜索策略:约束函数:在扩展结点处剪去不满足约束条件的子树界限函数:在扩展结点处剪去得不到最优解的子树2、分支限界法分支界限法类似与回溯法,也是在问题解空间中搜索问题解的一种算法。

分支界限法与回溯法思想对比:求解目标:回溯法的可以用于求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标通常是找出满足约束条件的一个解或最优解。

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

在分支限界法中,每个活结点只有一次机会成为扩展结点。

一旦成为扩展结点,就一次性产生其所有儿子结点。

在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。

此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。

这个过程一直持续到找到所需的解或活结点表为空时为止。

三、算法设计1、回溯法TSP问题的目的是得到一条路径,即一个解向量(X1,X2...Xn),为排列树问题。

对所有城市进行编号后,按大小顺序存储于数组path中,构造一个交换函数swap();对数组path进行遍历,判断当前城市与目标城市是否连通,若连通,通过swap函数对当前节点和目标城市进行交换,即树的节点拓展。

若不连通则恢复,并进入下一次的循环,循环到叶子节点时,判断叶是否与初始节点相连,并计算代价cost是否小于当前最小代价bestc,若小于,则更新bestc,再返回上一节点,知道遍历完树中的所有节点。

2、分支限界法因为问题是经典的TSP问题,所以确定问题的解空间树为排列树。

问题解的表示:可以将问题的解表示成一个n元式 [x1,x2,…,xn]。

使用优先级队列实现最小耗费优先求解。

界函数的确定:首先利用贪心的方法获得一个较优的上界。

对于当前路径下的扩展的过程中,每一步需要存储的当前的结点的下界。

其中的第二部分需要计算的是当前路径的起始结点以及终止结点各自与仍未访问过的结点中的结点只存存在的最小代价。

结点的扩展过程如下:根据优先级从队列中选取优先级最高的元素,当结点不是叶子结点的父节点时,扩展该结点的所有子节点,在扩展的过程中需要根据计算所得的下界与当前求解得到的最优解进行对比,如果下界大于当前的最优解则对相应的子节点时进行剪枝处理,否则扩展该子节点,将其加入到队列中。

当当前所访问的结点为叶子结点的父节点时,判断当前费用+当前结点到叶子结点的费用+叶子结点到起始结点的费用之和是否优于最优解,如果是则更新最优解,并将当前的解加入到队列中。

如果不是则继续取队列中的元素进行扩展。

但取出的元素为叶子节点或者队列中的元素为空的时候,则搜索结束,输出当前的最优解。

四、算法实现1、回溯法核心代码:public void backtrack(int depth){//depth深度if(depth==size){if(map[path[depth-1]][path[depth]] != -1 &&map[path[depth]][path[1]]!= -1&& cost +map[path[depth]][path[1]]<bestc){bestp=path.clone();bestc = cost + map[path[depth]][path[1]];//bestc = cost +a[path[i-1]][path[i]]+a[path[i]][path[1]];//重复计算了上一边}}else{for(int j =depth;j<=size;j++){if(map[path[depth]][path[j]]!=-1){swap(path,depth+1,j);cost +=map[path[depth]][path[depth+1]];//System.out.println(Arrays.toString(x)+":"+cost);backtrack(depth+1);cost -=map[path[depth]][path[depth+1]];swap(path,depth+1,j);}}}}2、分支限界法核心代码:public float fzxj(int[]m){int n=m.length-1;//节点数LinkedList<TSPnode>heap=new LinkedList<TSPnode>();//minOut[i]=i的最小出边费用float[]minOut=new float[n+1];float minSum=0;//最小出边费用和for(int i=1;i<=n;i++){//针对每个节点,找到最小出边//计算minOut[i]和minSumfloat min=Float.MAX_VALUE;for(int j=1;j<=n;j++){if(map[i][j]<Float.MAX_VALUE&&map[i][j]<min)min=map[i][j];}if(min==Float.MAX_VALUE)return Float.MAX_VALUE;minOut[i]=min;minSum+=min;}//初始化int[]x=new int[n];for(int i=0;i<n;i++)x[i]=i+1;TSPnode enode=new TSPnode(0,0,minSum,0,x);float bestc=Float.MAX_VALUE;//搜索排列空间树while(enode!=null&&enode.p<n-1){//非叶节点x=enode.path;if(enode.p==n-2){//当前扩展结点是叶节点的父节点//再加两条边构成回路//所构成回路是否优于当前最优解if(map[x[n-2]][x[n-1]]!=-1&&map[x[n-1]][1]!=-1&&enode.cost+ map[x[n-2]][x[n-1]]+map[x[n-1]][1]<bestc){//找到费用更小的回路bestc=enode.cost+map[x[n-2]][x[n-1]]+map[x[n-1]][1];enode.cost=bestc;enode.lcost=bestc;enode.p++;heap.add(enode);Collections.sort(heap);}}else{//内部结点//产生当前扩展结点的儿子结点for(int i=enode.p+1;i<n;i++){if(map[x[enode.p]][x[i]]!=-1){//可行儿子结点float cc=enode.cost+map[x[enode.p]][x[i]];float rcost=enode.rcost=minOut[x[enode.p]];float b=cc+rcost;//下界if(b<bestc){//子树可能含有最优解,结点插入最小堆int[]xx=new int[n];for(int j=0;j<n;j++)xx[j]=x[j];xx[enode.p+1]=x[i];xx[i]=x[enode.p+1];TSPnode node=newTSPnode(b,cc,rcost,enode.p+1,xx);heap.add(node);Collections.sort(heap);}}}}//取下一个扩展结点enode=heap.poll();}//将最优解复制到v[1...n]for(int i=0;i<n;i++)m[i+1]=x[i];return bestc;}五、算法复杂性理论分析1、回溯法TSP问题是排列树问题,因而该算法的时间复杂度为O(n!)。

2、分支限界法TSP问题是排列树问题,在分支限界法界函数无法剪枝时有最坏情况时间复杂性为O(n!),但通过界函数剪枝可以使复杂度下降。

六、算法代码(单独文件提交)见项目文件七、算法测试(报告只写测试方法与用例设计方法与结果,测试程序单独提交)八、实验中的问题总结回溯法:优点:可以快速的找到一组解,并在此基础之上进行调整。

当搜索完解空间时便可以得到所有的解。

缺点:需要搜索大量的结点,存在一定的盲目性,而且随着结点的个数不断地增加之后,解空间按照阶乘的增长速度递增,因而算法效率较低。

分支限界法:优点:分支限界法采用采用价值队列优先的方式进行搜索,具有一定的目的性。

同时利用贪心算法得到的一个上界,以及设定当前路径下的下界函数。

通过设置界函数进行剪枝,提高算法的效率。

缺点:复杂性高,上下界设计困难。

相关文档
最新文档