当回工具
//规定偏好值越小,用户越喜欢 //所以,在优先队列中,按照偏好值的升序排列 //偏好函数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; } } } }
浙公网安备 33010602011771号