在当前项目中,我们需要在几乎完全连通的图中找到最便宜的路径,每个顶点对可以包含许多边。
我们开发了包含函数的a plugin
TRAVERSE
时降低类似路径的重复性。我们将其称为search()
extract()
N
条记录而不需要昂贵的ORDER BY
。我们将其称为best()
但是结果查询在完整数据方面的表现仍然不尽人意。
所以我们决定修改search()
函数,以便它可以首先观察最佳边缘并修剪路径,通过使用best()
函数的当前状态来导致绝对不希望的结果。
整体解决方案实际上是Branch and Bound method
结果查询(省略extract()
步骤)应该看起来像
SELECT best(path, <limit>) FROM (
TRAVERSE search(<params>) FROM #<starting_point>
WHILE <conditions on intermediate vertixes>
) WHERE <conditions on result elements>
非常需要此表单,因此我们可以根据WHILE
和WHERE
调整条件以适应当前任务。 path
字段由search()
生成,其中包含best()
要继续的所有信息。
问题是best()
函数在search()
函数之后严格执行,因此search()
无法根据best()
已经评估的结果修剪非最佳分支。 / p>
所以问题是:
在TRAVERSE
处理的早期路径之后,有没有办法将SELECT
步骤到TRAVERSE
步骤的结果与search()
d SELECT
和best()
的方式相关联。与 B
/ \
G C
/ \ \
M H D
\ \ \
N I E
/ \
J F
/ \ \
O K G
?