注册 登录
编程论坛 新人交流区

C语言能够解决海量数据吗??

godkid 发布于 2007-11-08 18:23, 802 次点击
大家好,用C语言编了一个程序,是从海量数组中找出只出现一次的数组,(这些海量数组中有很多都是重复的,它们都是一维数组,元素个数相同)
程序如下:
#include <stdio.h>
#define N 7
#define M 3
int check(int *p,int *q,int length);
int main(void)
{
int i, j;
int a[N][M]={{1,2,3},{2,5,6},{1,2,3},{3,6,9},{3,4,7},{1,2,3},{3,4,7}};
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
{
if (j==i) continue;
if (check(a[i], a[j], M)) goto NEXT;
}
printf("%3d:\t",i+1);
for (j=0; j<M; j++)
printf("%d ",a[i][j]);
printf("\n");
NEXT:;
}
return 0;
}
int check(int *p, int *q, int length)
{
int i=0;
for (; i<length; i++)
if (p[i]!=q[i])
return 0;
return 1;
}
我这里只是假设只有7个一维数组,当然是正确的,可是当数组个数很大时,就会溢出,听人说编译系统对数组申请的空间是有限制的,请问"高人"这个限制能够人为改动吗,还有C语言是否能够解决海量的数据呢,如果能该怎样解决呢,如果不能那么你们对于上题有什么好的方法和建议呢,谢谢!!
7 回复
#2
sichenpdg2007-11-08 18:30
hennan
#3
lzq2xy2007-11-08 18:39
不懂
#4
xiaofee2007-11-09 18:36
在无序的情况下,要判断一个元素是否只出现一次,需要比较n-1次。
在排号序的情况下,只需要扫描一趟就可以找到所有只出现一次的元素了。
根据元素的特点,看看能否用O(n)的排序算法,如,基数排序和计数排序。

#5
sonfly2007-11-09 19:35
对于大量数据,可以用new运算符在堆上申请,不过要记得delete
#6
godkid2007-11-10 12:23
new运算符在堆上申请的空间也是有限制的,有别的办法吗
#7
xiaofee2007-11-12 09:34
一部分一部分的找。
比如,{{1,2,3},{2,5,6},{1,2,3},{3,6,9},{3,4,7},{1,2,3},{3,4,7}};
先申请一段内存,将第一个分量是1的全部从磁盘读到内存,然后排序。找到所有分量是1的那些只出现一次的元素。
再找第一个分量是2的 ......
这也是排序的基数排序思想吧

#8
xjimm2007-11-12 11:51
海量数据。。。。
1