【发布时间】:2016-11-27 19:26:39
【问题描述】:
我想要一种拓扑排序算法,它每次都不会提供相同的排序,而是随机排序,每次排序对所有其他排序的可能性都相同。
生成所有可能的拓扑排序并随机选择一个是正确的,但太慢了。生成所有排列和过滤无效的拓扑排序也很慢;如果树/森林足够宽,第一个会退化为第二个。
将新节点插入到要检查的节点队列中的随机位置似乎会产生有偏差的结果,并将其放在最后并进行fisher-yates shuffle似乎也有偏差,因为两者都没有考虑到每个节点下“隐藏”的节点数,即有多少节点取决于正在调度的a 或b。 a 可以没有孩子,而b 拥有树的其余部分。
如何在接近线性的时间内生成随机拓扑排序,每个有效排序的可能性相同?
【问题讨论】:
标签: algorithm random topological-sort uniform-distribution