是否有一种算法可以在拓扑遍历期间最小化工作集?
-
29-09-2020 - |
题
我有一个任务的依赖关系图,它形成了DAG。我正在寻找一种计算最佳拓扑遍历以最小化“工作集”的算法。具体地,我将当前工作集定义为已被访问的一组节点,并且具有至少一个未传出的传出边缘。
更有用的是计算最佳拓扑遍历的算法,这最小化了工作集的固定尺寸高速缓存的缓存驱逐的数量。
是否有一种计算这种拓扑遍历的算法?我可以从拓扑排序中贪婪地贪婪,但怀疑是次优。
解决方案
决定如果使用尺寸 $ \ le k $ 的拓扑排序,则存在NP-Creating,即使在二分图中。
我们可以减少 pathwidth 计算到这个问题。让 $ g $ 是一个无向图形,我们想要计算的路径。现在创建一个定向图 $ h $ ,带有顶点 $ v'$ 对于每个顶点 $ V $ $ g $ 。对于每个边缘 $(u,v)$ $ g $ ,创建顶点 $ e_ {(u,v)} $ 和定向边缘 $(v',e _ {(u,v)}'),( U',E _ {(u,v)}')$ 。
现在考虑 $ h $ 的拓扑排序。将相应的工作集序列定义为 $ x_1,\ ldots,x_p $ 。我们证明 $ x_1,\ ldots,x_p $ 是 $ g $ 的路径分解。工作组仅包括 $ v'$ 类型的顶点,因为其他顶点没有传出边。根据定义的工作集满足了交叉点属性 $ i \ le j \ le k \ lightarrow x_i \ cap x_k \ subseteq x_j $ 。如果有一个边缘 $(u,v)$ 在 $ g $ 中,则有边缘 $ h $ 从 $ v'$ 和 $ u '$ 到 $ e _ {(u,v)}'$ 所以必须有一个工作set $ x_i $ $ v',u'\ in x_i $ 。因此,每个边缘是路径分解的一些袋子的子集,因此 $ x_1,\ ldots,x_p $ 是 $ g $ 。
还可以显示 $ g $ 对应于 $ h $
对于积极的结果,我建议在文学中观察某些路径的类别。快速搜索我发现了指向路径和DAG宽度的概念,但似乎它们在这里不相关,因为它们是悲层的微不足道。