LC-检索

line void LC(tree T,float cost) {
//为找一个答案结点检索T
0 if(T是答案结点) {输出T;return;}
1 E=T; //E-结点
2 将活结点表初始化为空;
3 while(1) {
4 for(E的每个子结点X) {
5 if(X是答案结点) {输出从X到T的路径;
6 return7 };//endif
8 Add(X); //X是新的活结点
9 Parent(X)=E; //指示到根的路径
10 };//for
11 if(不再有活结点) { print(‘no answer node’);
12 stop;
13 };//if
14 Least(E) ;
15 } //while
16 }//LC

  变量E总是指着当前的E-结点。根结点是第一个E-结点(第1行)。第2行将活结点表置初值。在执行LC的任何时刻,该表含有除了E-结点以外的所有活结点,因此该表最初为空(第2行)。第4~10行的for循环检查E-结点的所有子结点。如果有一个子结点是答案结点,则算法输出由X到T的路径并且终止。如果E的某个子结点不是答案结点,则成为一个活结点,将它加到活结点表(第8行)中且将其Parent信息段置E。当生成了E的全部子结点时,E变成死结点,控制到达第11行。这种情况只有在E的所有子结点都不是答案结点时才会发生,于是检索应更深人地继续进行。在没有活结点剩下的情况下,这整棵状态空间树就被检索完毕,且没有找到答案结点,算法在第12行结束。反之,则通过Least(X)按规定去正确地选择下一个E-结点,并从这里继续进行检索。

  显然LC只有在找到一个答案结点或者在生成并检索了整棵状态空间树时才会终止。因此只有在有限状态空间树下,才能保证LC终止。对于无限状态空间树,在其至少有一个答案结点并假定对成本估计函数c’(·)能作出“适当”的选择时也能保证算法LC终止。

  实际上,,LC算法与状态空间树的宽度优先检索算法和D-检索算法基本相同。如果活结点表作为一个队列来实现,用Least(X)和Add(X)算法从队列中删去或加入元素,则LC就转换成FIFO检索。如果活结点表作为一个栈来实现,用Least(X)和Add(X)算法从栈中删去或加入元素,则LC就转换成LIFO检索。唯一的不同之处在于活结点表的构造上,即仅在于得到下一个E-结点所使用的选择规则不同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值