[问题] 关于set的merge

楼主: flipsydee (原来是宅男)   2014-01-22 17:18:15
我不清楚这个问题是不是应该在此版发问,因为有点像算法或资料结构的问题
如果不妥或违反板规我会立刻删文!
问题是这样的:
我现在有两个set(集合),以array来实作,array中的元素没有顺序之分(因为是set)
其中set A 大小为M
set B 大小为N
M的大小远大于N,其中M的大小约是N的平方倍
现在要写一个算法,创造一个set C,也是以array来实作
将A和B 联集(Union)为C set
重点来了,此问题要求此算法要尽量有效率
我的写法如下:(虚拟码)
int main()
{
int a[1..M];
int b[1..N];
int[] c = merge(a,b,M,N);
}
int[] merge(int a[], int b[], int M, int N)
{
int S=M+N;
int c[1..S]; //宣告C阵列,大小为M+N
for(int i=1;i<=M;i++) //把a阵列丢进c的前半部
c[i]=a[i];
for(int i=1;i<=N;i++) //把b阵列丢进c的后半部
c[M+i]=b[i];
return c;
}
这算法就很直观,也没什么特别想法,就创一个M+N的array把元素都扔进来就对了
时间为O(N^2),因为M的大小相当于N^2
不知道有没有更好的解决方法? 我实在不了解这问题有什么特殊之处,但感觉有陷阱
谢谢各位抽空帮我解答!!

Links booklink

Contact Us: admin [ a t ] ucptt.com