|
原帖由 rollingpig 于 2011-4-10 19:22 发表 ![]()
先说
3-32吧。
你看到了
left join a ta --如果原路径终点 = 新路径起点 ,新产生的路径不应当大于 已知最短路径
on t.arrive = a.depart
and t.depart = ta.depart
and a.arrive = ta.arrive
and t.distance + a.distance >= ta.distance
后面还有一句
where ta.depart is null and tb.depart is null
left join 然后被join的table的值是 null, 相当于not exists 或者 not in 的逻辑。
我的的确是3-13. 不清楚你的解法是哪个?
哦,那这个代码是没有错的。
我的是3-1,我现在明白为什么你在全连通图中这么快了,因为这种情况下你的routesprobe已经基本上包括了所有点对间的最佳路径了。但是很多时候往往是点和点之间不存在直接的路径,或者是3层之内不存在直接路径,比方多阶段的路径,这时候
AND NOT EXISTS (--距离不比之前算过的最佳路径长
这个过滤每次都会失败,应此后面构造的路径数量仍然会按指数级别递增
你可以考虑下这种情况
a1, a2, a3, a4 和 b1, b2, b3, b4 之间有路径
b1, b2, b3, b4 和 c1, c2, c3, c4 之间有路径
。。。
y1, y2, y3, y4 和 z1, z2, z3, z4 之间有路径
这时 allpathprobe 中很多节点的距离数据基本上不存在 |
|