当回工具

//规定偏好值越小,用户越喜欢
//所以,在优先队列中,按照偏好值的升序排列
//偏好函数f(n)=π[] * p.lb[],向量π代表偏好向量,p.lb[]代表(Vs...Vi...Vt)的估计消耗向量
ARSC(Node Vs, Node Vt, Emb.MAGraph G)
{
    Qnode=NULL;//Qnode为优先队列,队列中的节点值为f(n),并指向一个链表来存储到该节点的RSQ子路径
    Sroute=NULL;//存储所有的skyline查询结果
    insert Vs into Qnode;
    while(Qnode not empty)
    {
        Vi=Qnode.fetchTop();//弹出队首元素
        for each p in Vi.SubRouteSkyline Do//遍历以该节点为终点的所有RSQ子路径
        {
            if(p.lb[] is dominated by any route in Sroute)//如果该子路径的下界估计值被结果集控制,则删除该子路径
            {
                remove p from vi.SubRouteSkyline;
            }
            else
            {
                if(p.flag not processed)//如果路径没有被控制且还未被处理
                {
                    VecPath=p.expand();//在每一个方向前进一个步长
                }
                for each p* in VecPath Do
                {
                    set p*.flag = processed;//标记p*为以处理
                    if(p*.lastNode=Vt)//说明p*到达终点
                    {
                        if(p* is not dominated by a route in Sroute)
                        {
                            Sroute.insert(p*);//将p*插入结果集
                            remove all routes in Sroute are dominated by p*;//删除结果集中被p*控制的路径
                        }
                        else
                        {
                            Vnext=p*.end_node;//p*的最后一个点
                            if(p* is not dominated by Vnext.SubRouteSkyLine)//如果p*没有被RSQ(Vs,Vnext)控制,则插入其中
                            {
                                insert p* into Vnext.SubRouteSkyline;
                                remove all sub-routes in Vnext.SubRouteSkyLine are dominated by p*;
                            }
                            update Qnode;
                        }
                        
                    }
                }
            }
        }
    }
}

 

说对方是否

//规定偏好值越小,用户越喜欢
//所以,在优先队列中,按照偏好值的升序排列
//偏好函数f(n)=π[] * p.lb[],向量π代表偏好向量,p.lb[]代表(Vs...Vi...Vt)的估计消耗向量
BRSC(Node Vs, Node Vt, Emb.MAGraph G)
{
    Qcand=NULL;//存储f(n)值的优先队列,按升序存储
    Sroute=NULL;//存储所有的skyline查询结果
    insert path p0=(Vs) into Qcand;//计算Vs的f(n)值,插入到Qcand里
    while (Qcand not Empty)
    {
        p=Qcand.fetchTop();//取出队头结点,该节点代表一段子路径的f(n)值
        if (p.lastNode==Vt)//路径搜索完毕
        {
            if (p is not dominated by a route in Sroute)//若p没有被结果集控制,则将其插入结果集,并删除Sroute中被p控制的路径
            {
                Sroute.insert(p);
                remove all routes in Sroute are dominated by p;
            }
        }
        else//路径未搜索完成,还继续向后探索
        {
            if( p.lb[] is not dominated by any route in Sroute)
            {
                vecPath = p.expand();//继续向后面的每个方向以一个步长探索路径p,并且每个方向的f(n)值存入优先队列中
                remove sub-routes in vecPath that include cycles;
                insert sub-route in vecPath into Qcand;
            }
        }
    }
}

posted on 2012-10-25 15:29  wtianxi  阅读(197)  评论(0)    收藏  举报

导航