MemgraphDB疑问:WSHORTEST算法查询为何未选择绿色线路?
问题分析与解答
核心原因
*WSHORTEST算法是基于边的time属性计算总时间最短的路径,而非优先选择同一条线路的路径。它只会挑选累加时间最少的路径,完全不考虑线路是否一致。
具体验证与解释
检查绿色线路直连边的时间
你看到Nollendorfplatz与Kurfürstenstraße之间有三条直连线路,但绿色线路的这条直连边的time值可能比中转其他线路的总时间还要高。比如算法选择的路径可能是:Uhlandstraße → [某中间站] → Kurfürstenstraße,两段边的时间加起来比绿色线路直连的时间更短。验证查询建议
你可以运行以下查询,单独查看绿色线路直连边的时间(注意替换成数据中绿色线路的实际标识,比如U2):MATCH (s1:Station {name: "Nollendorfplatz"})-[r:CONNECTED_VIA]-(s2:Station {name: "Kurfürstenstraße"}) WHERE r.line = "U2" RETURN r.time;再运行查询查看算法返回路径的总时间,对比两者:
MATCH path=(s1:Station {name: "Uhlandstraße"})-[:CONNECTED_VIA *WSHORTEST (r, n | r.time)]-(s2:Station {name: "Kurfürstenstraße"}) RETURN path, reduce(totalTime = 0, r IN relationships(path) | totalTime + r.time) AS total_time;补充说明
你的第二个查询是直接匹配两站之间的所有直连边,所以能看到三条线路;但*WSHORTEST是全局遍历找总时间最短的路径,哪怕需要中转,只要总时间更短就会被选中。
内容的提问来源于stack exchange,提问作者Martin Fonichy
相关产品推荐
相关产品推荐

