我有面向图。图可以强烈连接。每个顶点都可以有一组任何东西,例如字母。该集是用户可编辑的。
每个顶点在先前的顶点中进行交集(仅后退一步)。
但是现在有问题:当我更新一个顶点的集合时,更改应该扩展到所有顶点并对它们之前顶点集的交集进行加速。
如何更新任何顶点后每个顶点都有正确的交点? 限制:算法必须避免陷入无穷大。 ...
知道怎么解决吗? 修改
示例 - 红色顶点发生变化,需要传播所有顶点的交点变化: alt text http://img402.imageshack.us/img402/7608/beznzvuru.jpg
答案 0 :(得分:2)
看起来像BFS会这样做:
也许你真正的问题在于集合的交集。你会在这里指出(3)。您应该添加一个示例以使问题更加清晰。
答案 1 :(得分:1)
您可以将更改拆分为减法和添加更改。可以使用MicSim描述的方法在一次通过中去除任何减法。但是,任何添加剂都可能在您拥有的任何循环中一直传播。
对于添加剂更改,请以相同方式执行更新,但忽略尚未更新的任何输入。这将导致您过多地填充图表,因为您没有计算所有交叉点。但是如果你再回去第二遍,你将清理所有的变化。 (你可能需要继续扫描,直到没有更多变化;我不完全确定。)
我想如果你不关心跟踪添加的内容和减去的内容 - 只是有一个更改 - 你只需要进行初始扫描,其中需要更新但未更新的节点不会相交,然后继续扫过,直到一切都安定下来。由于交集只能删除元素,因此可以保证完成。
答案 2 :(得分:0)
按照MicSim的建议做BFS,在没有改变任何顶点的迭代后停止。