如何生成子集

时间:2016-06-06 15:22:15

标签: ampl

我想为定义的集创建不同的子集,并将它们存储起来以便稍后在我的建模中使用它们。例如,假设我得到C = {1,2,3},是否有任何有效的方法来获得SC = {{1},{2},{3},{1,2},{1,3}, {2,3},{1,2,3}}并稍后在约束中使用它们?

它专门用于解决旅行商问题中的未连接电路(因此任何有关解决它的建议都很受欢迎)。谢谢!

2 个答案:

答案 0 :(得分:-1)

public IEnumerable<IEnumerable<T>> GetPowerSet<T>(List<T> list) { return from m in Enumerable.Range(0, 1 << list.Count) select from i in Enumerable.Range(0, list.Count) where (m & (1 << i)) != 0 select list[i]; }

这应该有用。

答案 1 :(得分:-1)

Haskell着名的单行:

> filterM (const [True, False]) [1,2,3]
[[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]