最近我遇到了一个算法问题,要求从给定集合中生成唯一的子集。
假设当集合是
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个元素!
有没有人有明智的解决方案复杂性?算法将不胜感激!
答案 0 :(得分:0)
一组尺寸n
的子集数量为2^n
。在这里,可能只询问大小为2
的子集。因此,此类子集的数量为n*(n-1)/2
。
由于这些集合中的每一个都是唯一的,因此要生成它们,至少需要那些计算。
因此,对于这些情况,最小复杂性受这些数字Ω(n^2) and Ω(2^n)
的限制。