【发布时间】:2015-05-17 19:52:30
【问题描述】:
谁能帮我生成给定集合的所有子集?
示例:如果我有 [2,3,4] 并且我想要 K=2,这意味着我需要两个成对的 => [[2,3], [3,2], [2,4] , [4,2], [3,4], [4,3]]
我写了这段代码,但它只生成子集的数量:
arrange::Int->Int->Int
arrange n 1=n
arrange n r=n*arrange (n-1) (r-1)
另一个版本,但这不会生成子集的所有解决方案:
arrange 0 _ =[[]]
arrange _ []=[]
arrange n (x:xs)=(map(x:)) (arrange (n-1) xs)++
(arrange n xs)
【问题讨论】:
-
没有。但是,如果您对我的示例有任何想法,请帮助我实现。
-
适当的名称是子集,而不是“列表的排列”。请更新您的问题。我已经为您正在寻找的内容添加了答案..
-
@DeJaVo,不,这也不是合适的名称。 “子集”表明顺序无关紧要。根据维基百科,这些被称为“部分排列”,或者当特定大小已知时,“n 的 k 排列”(例如,3 的 2 排列)。
标签: haskell