2016-06-06 2 views
1

Я хотел бы создать различные подмножества для набора, который определен и сохранить их, чтобы использовать их позже в моем моделировании. Например, скажем, я получил C = {1,2,3}, есть ли эффективный способ получить SC = {{1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}} и использовать их позже в ограничении?Как сгенерировать подмножества

Это специально для решения неподключенных цепей в проблеме Traveling Salesman (так что любое предложение для ее решения в качестве альтернативы хорошо принято). Благодаря!

ответ

-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

Известный один лайнер в Haskell:

> filterM (const [True, False]) [1,2,3] 
[[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]] 
Смежные вопросы