Prim 和 Kruskal 的应用,而不是寻找 MST

Application of Prim's and Kruskal's other than finding MST

我在 codechef 中看到了一个问题,其中 objective 是图中的 select 条边,这样 selected 条边不会形成一个循环,也不会形成所有权重的乘积selected edges 是 maximum.In 社论 假定 prim 和 kruskal 的算法有效 here.Infact 假定它适用于最大化边的任何对称单调函数。 那么什么是对称单调函数,我们还能在哪里使用这种算法。

我猜作者的意思是:

如果您在生成树上的最终分数是 f(w1, w2, ... wn),其中 wi 是边权重,那么 f 的权重应该是单调的。这意味着,如果您增加任何权重,f 将始终增加(单调增加)或始终减少(单调减少)。和与积都是单调递增的:

f_sum (w1, w2, ... wn) = w1 + w2 + ... + wn
f_prod(w1, w2, ... wn) = w1 * w2 * ... * wn //non-negative-weights

对称是指顺序。如果能保证f(..., wi, ..., wj, ...) = f(..., wj, ..., wi, ...)f就是对称的。应该清楚为什么需要这样做。任何 MST 算法都应该只关心选择哪些边而不关心它们的顺序。和与积都是交换运算,因此是对称的。

之所以可行,是因为给定图形的所有生成树都具有相同数量的边。如果你贪婪地取最大可用边(对于单调递增函数)或最小边(对于单调递减函数),你会自动最大化f.

我所知道的大多数应用都是 MST 的应用(主要是近似最优解)。就概率模型而言,最大乘积可以指最大化最终概率,其中边表示单独事件然后组合的概率。我还没有偶然发现任何其他用于构建生成树的函数。