有没有人知道用于生成DAG拓扑排序的随机算法,其中算法的每次调用都有非零概率生成每个有效拓扑排序的DAG。
算法不排除任何有效的拓扑排序是至关重要的,因为它是更大算法的一部分,在给定足够的迭代的情况下,必须能够明确地探索给定DAG的所有拓扑类型。
有谁知道这样的算法是否已经开发出来了?
(或者,如果有人知道一个合理有效的算法可以保证生成给定DAG的所有拓扑类型,我可以调整它以获得我需要的东西。)
答案 0 :(得分:1)
考虑到您涵盖所有可能的拓扑类型意味着什么,这有助于思考。在拓扑排序期间,您可以从一组有效候选项中选择要处理的候选项,每个候选项都是有效的选择。根据您实现TS的方式,它可以是从一组边缘开始的边缘,每个边缘都是候选(一组输出边缘)或选择哪个节点作为起始点(一组接收器/源)或者随机选择的起始节点。
您想要的是确保选择过程产生的分布不会对候选人的特定子集产生压倒性的偏见。
您可以偏向您的选择过程,以实现更均匀的分布,而无需无限时间运行。例如,您可以为一组中的每个候选分配权重。每次选择候选人时,您将该候选人的权重减少“X”,并将其他候选人的权重增加“X /(k-1)”,其中k是候选集的大小。这将导致在下一次迭代中选择未被选中的候选者的可能性更大,并且导致更快地收敛到更均匀的分布。