如何生成集合的所有唯一子集
How to generate all the unique subsets of a set?
最近我遇到了一个算法问题,该问题要求从给定集中生成唯一的子集。假设何时该集合 S={1, 2, 3, 4}
其中 n=4
(元素数(。然后结果应生成所有n*(n-1)/2
子集: - {(1,2(,(1,3(,(1,4(,(2,3(,(2,4(,(3,4(}
#include<iostream>
int main()
{
int k;
std::cin>>k;
for(long int i=1;i<=k;i++)
{
for(long int j=i+1;j<=k;j++)
{
std::cout<<i<<" "<<j<<"n";
}
}
return 0;
}
我有一个O(n^2(方法,但是出现的问题是数字很大对于n = 1000,由于必须生成499,500个元素!
,需要花费很多时间有人明智地有更好的解决方案复杂性吗?算法将不胜感激!
一组n
的子集的数量是2^n
。在这里,可能只要求2
大小的子集。因此,此类子集的数量为n*(n-1)/2
。
由于这些集合都是唯一的,因此要生成它们,至少需要许多计算。
因此,对于这些情况,最小复杂性由这些数字Ω(n^2) and Ω(2^n)
界定。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 计算排序向量的向量中唯一值的计数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 通过组合不同的类型来创建唯一的id
- 使用Unique_ptr确保工厂中的对象唯一
- c++多进程编写一个唯一的文件
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 如何更改唯一指针向量的可见性
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- C++尝试深度复制唯一指针时出现内存访问冲突
- 具有引用成员的结构是否具有唯一的对象表示形式
- 显示字符串的集合和子集
- 如何生成集合的所有唯一子集
- 如何在满足谓词的向量中获得唯一PTR的子集
- 如何生成数组 c++ 长度为 k 的所有唯一子集
- 用一些S计数大小为k的唯一子集