第六章:分支先结法
1,请简述分支限界法的算法思想以及两种主要的实现方法。
答:分支限界法的算法思想是在问题的解空间树上以广度优先或最小耗费(最大效益)优先方式搜索问题的满足约束条件的一个解或最优解。(搜索策略:每一个活结点只有一次机会成为扩展结点。扩展结点一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中按一定的策略取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。)
分支限界法根据从活结点表中选择下一个扩展结点的方式有两种实现方法
1)队列式FIFO分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
(最大优先队列:使用最大堆,体现最大效益优先 最小优先队列:使用最小堆,体现最小费用优先)
分支限界法的基本思想:
(1)分支限界法常以广度优先或以最小耗费(最大效益)优先的方式 搜索问题的解空间树。
(2)在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致 非最优解的儿子结点被舍弃,其余儿子结点 被加入活结点表中。
(3)此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程,这个过程一直持续到找到所需的解或活结点表这空时为止。
2、请指出回溯法与分支限界法的相同点与不同点。
答:相同点:
1)两者在进行问题求解前,都需要完成解空间的定义和组织;
2)都是通过在解空间树上搜索来寻找问题的解;
不同点:
1)搜索方式
回溯法:深度优先;
分支限界法:广度优先;
2)搜索策略
回溯法:根据剪枝函数,选择下一个扩展接点并按深度优先方式进行搜索;
分支限界法:在扩展结点处,先产生其所有的子结点(分支),然后根据限界函数,确定哪些子结点将导致不可行解或非最优解,将这些子结点剔除,用剩下的子结点构造当前的活结点表,然后从该表中取一个结点作为当前扩展结点,并重复上述过程;
n 设计限界函数的主要目的是利用最少的时间,在内存允许的范围内去解决问题。
n 不要片面追求能产生具有最少数目的解空间结点,减少结点并不是根本的目标。因此,我们需要的是一个能够有效地减少计算时间并因此而使产生的结点数目也减少的限界函数。
n 回溯法与分支限界法在空间方面的比较
回溯法比分支限界法在占用内存方面具有优势。
n 回溯法:O(解空间的最大路径长度)
分支限界法:O(解空间大小)。
例题:
1,例 [旅行商问题] 对于如下图的四城市旅行商问题,其对应的解空间为一棵由结点A到结点Q的排列树。
对于此问题,有两种搜索解空间树方式:
1)使用FIFO分支限界法;
扩展结点顺序:B C D E F G H (I) J K
2)优先队列式分支限界法:
使用最小耗费方法,即用一个最小堆来存储活结点。
扩展结点顺序:B E D H J K (I) (C)