【发布时间】:2018-10-06 10:06:43
【问题描述】:
我有一个计算集合子集的 Haskell 函数。
subsets :: [a] -> [[a]]
subsets [] = [[]]
subsets (x:xs) = [zs | ys <- subsets xs, zs <- [ys, (x:ys)]]
使用示例:
*Main> subsets [1,2,3]
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
如果我添加定义:
ksubsets k xs = [ys | ys<-subsets xs, length ys==k]
我可以计算一组 n 个元素的子集,其中每个子集恰好有 k 个元素
Example of use:
*Main> ksubsets 3 [1,2,3,4,5]
[[1,2,3],[1,2,4],[1,3,4],[2,3,4],[1,2,5],[1,3,5],[2,3,5],[1,4,5],[2,4,5],
[3,4,5]]
如何创建一个更有效的函数来生成具有 n 个元素的集合的子集,其中 n 个元素恰好具有 k 个元素,但不生成所有子集。我如何只找到 k 个元素的子集。
【问题讨论】:
标签: haskell