【发布时间】:2017-04-14 15:44:59
【问题描述】:
最近我遇到了一个算法问题,它要求从给定的集合中生成唯一的子集。
假设当集合是
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 的问题,你不会找到比它更快的算法。
-
是的,我的意思是。是这样吗 ? :-(
-
只有在不必生成所有对的情况下才能做得更好,并且可以更好地对生成进行排序。
-
见stackoverflow.com/questions/127704/…。这个问题可能与那个问题重复。
-
@AmireddyTharunreddy 您自己说过:您的算法需要在 1000 个元素的集合中生成 499,500 对唯一元素。您的算法无法改变这一点。