【发布时间】:2014-05-07 18:00:29
【问题描述】:
给定一组整数,计算最多有 k 个不同元素的子集的数量。
例如:设置为 {1,1,2,3,3} 并且 k = 2:
可能的子集是:
{} - 空集
{1}
{1}
{2}
{3}
{3}
{1,1}
{1,2}
{1,3}
{1,3}
{1,2}
{1,3}
{1,3}
{2,3}
{2,3}
{1,1,2}
{1,1,3}
{1,1,3}
{1,3,3}
{1,3,3}
{2,3,3}
{1,1,3,3}
我的解决方案是迭代所有可能的子集并检查是否有更少的 k+1 个元素.. 但它太慢了.. O(2^n)
【问题讨论】:
-
根据集合论,{1} 与 {1, 1} 完全相同。您对“集合”的定义与数论中的定义相同吗? en.wikipedia.org/wiki/Set_(mathematics)#Describing_sets
-
我认为您正在寻找的概念是multiset。将订购一个数组。
-
{1, 3} 和 {3, 1} 是否被视为同一个子集?在集合论中它们是。
-
您是在寻找多组还是只是组? {1} 和 {1} 不会是同一个集合吗?
-
可能更清晰的描述是,给定非负整数 k
标签: algorithm set subset combinatorics