① 用C语言如何实现大数据的加法,且是包括整数和小数的运算
刚写的 看看符合你要求不
#include<stdio.h>
#include<string.h>
typedefstruct
{
inta[200];
intb[200];
}NUM;
voidformat_num(NUM*n,char*str)
{
char*p_dot=NULL;
char*p;
inti=0;
memset(n,0,sizeof(*n));
for(p=str;*p;p++)
if(*p=='.')break;
if(*p)p_dot=p;
p--;
while(p>=str)
{
n->a[i++]=*p---'0';
}
p=p_dot;
if(p==NULL)return;
i=0;
p++;
while(*p)
n->b[i++]=*p++-'0';
}
voidprint_num(NUM*n)
{
inti,j;
for(i=sizeof(n->a)/sizeof(n->a[0])-1;i>=0;i--)
if(n->a[i])break;
if(i>=0)
for(;i>=0;i--)
printf("%d",n->a[i]);
elseprintf("0");
for(i=sizeof(n->b)/sizeof(n->b[0])-1;i>=0;i--)
if(n->b[i])break;
if(i>=0)
{
printf(".");
for(j=0;j<=i;j++)
printf("%d",n->b[j]);
}
}
voidadd(NUM*a,NUM*b,NUM*c)
{
intt=0;
inti;
for(i=sizeof(a->b)/sizeof(a->b[0])-1;i>=0;i--)
{
t+=a->b[i]+b->b[i];
c->b[i]=t%10;
t/=10;
}
for(i=0;i<sizeof(a->a)/sizeof(a->a[0]);i++)
{
t+=a->a[i]+b->a[i];
c->a[i]=t%10;
t/=10;
}
}
intmain()
{
charsa[100],sb[100];
NUMa,b,c;
scanf("%s%s",sa,sb);
format_num(&a,sa);
format_num(&b,sb);
print_num(&a);
printf("+");
print_num(&b);
printf("=");
add(&a,&b,&c);
print_num(&c);
printf(" ");
return0;
}
② 怎么用C语言代码实现超高精度的大数据除法运算要求结果保留到小数点后有两位
#include<stdio.h>
#include<string.h>
#defineMAX_LEN200
chara[MAX_LEN+10];
charb[MAX_LEN+10];
intva[MAX_LEN+10];//被除数,an1[0]对应于个位
intvb[MAX_LEN+10];//除数,an2[0]对应于个位
intvc[MAX_LEN+10];//存放商,aResult[0]对应于个位
//长度为nLen1的大整数减去长度为nLen2的大整数p2
//结果放在p1里,返回值代表结果的长度
//如不够减返回-1,正好减完返回0
//下面判断p1是否比p2大,如果不是,返回-1
intSubstract(int*p1,int*p2,intnLen1,intnLen2)
{
inti;
if(nLen1<nLen2)
return-1;
if(nLen1==nLen2)
{
for(i=nLen1-1;i>=0;i--)
{
if(p1[i]>p2[i])break;//p1>p2
elseif(p1[i]<p2[i])return-1;//p1<p2
}
}
for(i=0;i<nLen1;i++)
{//要求调用本函数确保当i>=nLen2时,p2[i]=0
p1[i]-=p2[i];
if(p1[i]<0)
{
p1[i]+=10;
p1[i+1]--;
}
}
for(i=nLen1-1;i>=0;i--)
if(p1[i])//找到最高位第一个不为0
returni+1;
return0;//全部为0,说明两者相等
}
intmain()
{
freopen("test.txt","r",stdin);
inttest;
scanf("%d",&test);
while(test--){
scanf("%s",a);
scanf("%s",b);
inti,j;
intlena=strlen(a);
memset(va,0,sizeof(va));
memset(vb,0,sizeof(vb));
memset(vc,0,sizeof(vc));
for(j=0,i=lena-1;i>=0;i--)
va[j++]=a[i]-'0';
intlenb=strlen(b);
for(j=0,i=lenb-1;i>=0;i--)
vb[j++]=b[i]-'0';
if(lena<lenb)
{
printf("0 ");
continue;
}
intnTimes=lena-lenb;
if(nTimes>0)
{
for(i=lena-1;i>=nTimes;i--)
vb[i]=vb[i-nTimes];//朝高位移动
for(;i>=0;i--)//低位补0
vb[i]=0;
lenb=lena;
}
for(j=0;j<=nTimes;j++)
{
intnTmp;
//一直减到不够减为止
//先减去若干个an2×(10的nTimes次方),
//不够减了,再减去若干个an2×(10的nTimes-1次方),......
while((nTmp=Substract(va,vb+j,lena,lenb-j))>=0)
{
lena=nTmp;
vc[nTimes-j]++;//每成功减一次,则将商的相应位加1
}
}
//下面输出结果,先跳过高位0
for(i=MAX_LEN;(i>=0)&&(vc[i]==0);i--);
if(i>=0)
for(;i>=0;i--)
printf("%d",vc[i]);
else
printf("0");
printf(" ");
}
return0;
}
③ 大数据的特征是什么
1、容量():数据的大小决定所考虑的数据的价值和潜在的信息;
2、种类(Variety):数据类型的多样性;
3、速度(Velocity):指获得数据的速度;
4、可变性(Variability):妨碍了处理和有效地管理数据的过程。
5、真实性(Veracity):数据的质量。
6、复杂性(Complexity):数据量巨大,来源多渠道。
7、价值(value):合理运用大数据,以低成本创造高价值。
(3)c大数据四则扩展阅读:
大数据的精髓:
大数据带给我们的三个颠覆性观念转变:是全部数据,而不是随机采样;是大体方向,而不是精确制导;是相关关系,而不是因果关系。
A、不是随机样本,而是全体数据:在大数据时代,我们可以分析更多的数据,有时候甚至可以处理和某个特别现象相关的所有数据,而不再依赖于随机采样(随机采样,以前我们通常把这看成是理所应当的限制,但高性能的数字技术让我们意识到,这其实是一种人为限制);
B、不是精确性,而是混杂性:研究数据如此之多,以至于我们不再热衷于追求精确度;
之前需要分析的数据很少,所以我们必须尽可能精确地量化我们的记录,随着规模的扩大,对精确度的痴迷将减弱;拥有了大数据,我们不再需要对一个现象刨根问底,只要掌握了大体的发展方向即可,适当忽略微观层面上的精确度,会让我们在宏观层面拥有更好的洞察力;
C、不是因果关系,而是相关关系:我们不再热衷于找因果关系,寻找因果关系是人类长久以来的习惯,在大数据时代,我们无须再紧盯事物之间的因果关系,而应该寻找事物之间的相关关系;相关关系也许不能准确地告诉我们某件事情为何会发生,但是它会提醒我们这件事情正在发生。
10G 连一次导入内存都不行,而且你说的串除了出现1次没有其他特征,只能文件分块读入用KMP匹配
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024*1024*10
int index_KMP(char *s,int n,char *t,int pos);
//利用模式串的t的next函数求t在主串s中的第pos个位置之后的位置的KMP算法(t非空,1<=pos<=Strlength(s))。
void get_next(char * t,int * next);
//求模式串t的next函数的并存入数组next[]中。
int next[MAX];
int main()
{
char* s= (char*)malloc(MAX+1);
memset(s,0,MAX+1);
char t[256]={0},c;
printf("请输入检测字符串,以#号结尾");
int i=0;
while((c=getchar())!='#'&&i<256)
{
t[i++]=c;
}
fflush(stdin);
//strcpy(t,"2014-04-28 18:14:33,333");
get_next(t,next);
FILE* pf = NULL;
if((pf = fopen("1.txt","r"))==NULL){
printf("打不开文件!\n");
return 0;
}
int cur=0,n=0;
unsigned long long pos=0,sum=0;
while(!feof(pf))
{
int len = fread(s,1,MAX,pf);
sum+=len;
printf("读取第 %5d 次,长度 %5d ,总长:%ld\n",cur+1,len,sum);
n=index_KMP(s,MAX,t,pos);
if(n>0)
{
pos = n+cur*MAX;
break;
}
++cur;
}
fclose(pf);
free(s);
if(n!=0)
printf("\n模式串 t 在主串 s 中第 %ld 个位置之后。\n\n",n);
else
printf("\n主串中不存在与模式串相匹配的子串!\n\n");
}
int index_KMP(char *s,int n,char *t,int pos)
//利用模式串的T的NEXT函数求t在主串s中(长度n)的第pos个位置之后的位置的KMP算法,(t非空,1<=pos<=Strlength(s)).
{
int i=pos,j=1;
while (i<=n &&j<=(int)strlen(t))
{
if (j==0 || s[i]==t[j-1]) //继续进行后续字符串的比较
{
i++;
j++;
}
else j=next[j]; //模式串向右移动
}
if (j>(int)strlen(t)) //匹配成功
return i-strlen(t)+1;
else //匹配不成功
return 0;
}
void get_next(char *t,int *next)
//求模式串t的next函数的并存入数组next[]中。
{
int i=1,j=0;
next[0]=next[1]=0;
while (i<(int)strlen(t))
{
if (j==0 || t[i]==t[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
}
替换文件名,每次读10M,我测试50M的1S搞定,因为寻找串可能再两次读取之间,完美的做法是后一次要把前一次的最后N个字符重新读取,N为寻找的子串长度,计算长度时需要特殊考虑,我简略了该种情况
⑤ 大数据经典算法解析(1)一C4.5算法
姓名:崔升 学号:14020120005
【嵌牛导读】:
C4.5作为一种经典的处理大数据的算法,是我们在学习互联网大数据时不得不去了解的一种常用算法
【嵌牛鼻子】:经典大数据算法之C4.5简单介绍
【嵌牛提问】:C4.5是一种怎么的算法,其决策机制靠什么实现?
【嵌牛正文】:
决策树模型:
决策树是一种通过对特征属性的分类对样本进行分类的树形结构,包括有向边与三类节点:
根节点(root node),表示第一个特征属性,只有出边没有入边;
内部节点(internal node),表示特征属性,有一条入边至少两条出边
叶子节点(leaf node),表示类别,只有一条入边没有出边。
上图给出了(二叉)决策树的示例。决策树具有以下特点:
对于二叉决策树而言,可以看作是if-then规则集合,由决策树的根节点到叶子节点对应于一条分类规则;
分类规则是 互斥并且完备 的,所谓 互斥 即每一条样本记录不会同时匹配上两条分类规则,所谓 完备 即每条样本记录都在决策树中都能匹配上一条规则。
分类的本质是对特征空间的划分,如下图所示,
决策树学习:
决策树学习的本质是从训练数据集中归纳出一组分类规则[2]。但随着分裂属性次序的不同,所得到的决策树也会不同。如何得到一棵决策树既对训练数据有较好的拟合,又对未知数据有很好的预测呢?
首先,我们要解决两个问题:
如何选择较优的特征属性进行分裂?每一次特征属性的分裂,相当于对训练数据集进行再划分,对应于一次决策树的生长。ID3算法定义了目标函数来进行特征选择。
什么时候应该停止分裂?有两种自然情况应该停止分裂,一是该节点对应的所有样本记录均属于同一类别,二是该节点对应的所有样本的特征属性值均相等。但除此之外,是不是还应该其他情况停止分裂呢?
2. 决策树算法
特征选择
特征选择指选择最大化所定义目标函数的特征。下面给出如下三种特征(Gender, Car Type, Customer ID)分裂的例子:
图中有两类类别(C0, C1),C0: 6是对C0类别的计数。直观上,应选择Car Type特征进行分裂,因为其类别的分布概率具有更大的倾斜程度,类别不确定程度更小。
为了衡量类别分布概率的倾斜程度,定义决策树节点tt的不纯度(impurity),其满足:不纯度越小,则类别的分布概率越倾斜;下面给出不纯度的的三种度量:
其中,p(ck|t)p(ck|t)表示对于决策树节点tt类别ckck的概率。这三种不纯度的度量是等价的,在等概率分布是达到最大值。
为了判断分裂前后节点不纯度的变化情况,目标函数定义为信息增益(information gain):
I(⋅)I(⋅)对应于决策树节点的不纯度,parentparent表示分裂前的父节点,NN表示父节点所包含的样本记录数,aiai表示父节点分裂后的某子节点,N(ai)N(ai)为其计数,nn为分裂后的子节点数。
特别地,ID3算法选取 熵值 作为不纯度I(⋅)I(⋅)的度量,则
cc指父节点对应所有样本记录的类别;AA表示选择的特征属性,即aiai的集合。那么,决策树学习中的信息增益ΔΔ等价于训练数据集中 类与特征的互信息 ,表示由于得知特征AA的信息训练数据集cc不确定性减少的程度。
在特征分裂后,有些子节点的记录数可能偏少,以至于影响分类结果。为了解决这个问题,CART算法提出了只进行特征的二元分裂,即决策树是一棵二叉树;C4.5算法改进分裂目标函数,用信息增益比(information gain ratio)来选择特征:
因而,特征选择的过程等同于计算每个特征的信息增益,选择最大信息增益的特征进行分裂。此即回答前面所提出的第一个问题(选择较优特征)。ID3算法设定一阈值,当最大信息增益小于阈值时,认为没有找到有较优分类能力的特征,没有往下继续分裂的必要。根据最大表决原则,将最多计数的类别作为此叶子节点。即回答前面所提出的第二个问题(停止分裂条件)。
决策树生成:
ID3算法的核心是根据信息增益最大的准则,递归地构造决策树;算法流程如下:
如果节点满足停止分裂条件(所有记录属同一类别 or 最大信息增益小于阈值),将其置为叶子节点;
选择信息增益最大的特征进行分裂;
重复步骤1-2,直至分类完成。
C4.5算法流程与ID3相类似,只不过将信息增益改为 信息增益比 。
3. 决策树剪枝
过拟合
生成的决策树对训练数据会有很好的分类效果,却可能对未知数据的预测不准确,即决策树模型发生过拟合(overfitting)——训练误差(training error)很小、泛化误差(generalization error,亦可看作为test error)较大。下图给出训练误差、测试误差(test error)随决策树节点数的变化情况:
可以观察到,当节点数较小时,训练误差与测试误差均较大,即发生了欠拟合(underfitting)。当节点数较大时,训练误差较小,测试误差却很大,即发生了过拟合。只有当节点数适中是,训练误差居中,测试误差较小;对训练数据有较好的拟合,同时对未知数据有很好的分类准确率。
发生过拟合的根本原因是分类模型过于复杂,可能的原因如下:
训练数据集中有噪音样本点,对训练数据拟合的同时也对噪音进行拟合,从而影响了分类的效果;
决策树的叶子节点中缺乏有分类价值的样本记录,也就是说此叶子节点应被剪掉。
剪枝策略
为了解决过拟合,C4.5通过剪枝以减少模型的复杂度。[2]中提出一种简单剪枝策略,通过极小化决策树的整体损失函数(loss function)或代价函数(cost function)来实现,决策树TT的损失函数为:
其中,C(T)C(T)表示决策树的训练误差,αα为调节参数,|T||T|为模型的复杂度。当模型越复杂时,训练的误差就越小。上述定义的损失正好做了两者之间的权衡。
如果剪枝后损失函数减少了,即说明这是有效剪枝。具体剪枝算法可以由动态规划等来实现。
4. 参考资料
[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introction to Data Mining .
[2] 李航,《统计学习方法》.
[3] Naren Ramakrishnan, The Top Ten Algorithms in Data Mining.
⑥ 大数据技术包括哪些
大数据技术包括数据收集、数据存取、基础架构、数据处理、统计分析、数据挖掘、模型预测、结果呈现。
1、数据收集:在大数据的生命周期中,数据采集处于第一个环节。根据MapRece产生数据的应用系统分类,大数据的采集主要有4种来源:管理信息系统、Web信息系统、物理信息系统、科学实验系统。
2、数据存取:大数据的存去采用不同的技术路线,大致可以分为3类。第1类主要面对的是大规模的结构化数据。第2类主要面对的是半结构化和非结构化数据。第3类面对的是结构化和非结构化混合的大数据,
3、基础架构:云存储、分布式文件存储等。
4、数据处理:对于采集到的不同的数据集,可能存在不同的结构和模式,如文件、XML 树、关系表等,表现为数据的异构性。对多个异构的数据集,需要做进一步集成处理或整合处理,将来自不同数据集的数据收集、整理、清洗、转换后,生成到一个新的数据集,为后续查询和分析处理提供统一的数据视图。
5、统计分析:假设检验、显著性检验、差异分析、相关分析、T检验、方差分析、卡方分析、偏相关分析、距离分析、回归分析、简单回归分析、多元回归分析、逐步回归、回归预测与残差分析、岭回归、logistic回归分析、曲线估计、因子分析、聚类分析、主成分分析、因子分析、快速聚类法与聚类法、判别分析、对应分析、多元对应分析(最优尺度分析)、bootstrap技术等等。
6、数据挖掘:目前,还需要改进已有数据挖掘和机器学习技术;开发数据网络挖掘、特异群组挖掘、图挖掘等新型数据挖掘技术;突破基于对象的数据连接、相似性连接等大数据融合技术;突破用户兴趣分析、网络行为分析、情感语义分析等面向领域的大数据挖掘技术。
7、模型预测:预测模型、机器学习、建模仿真。
8、结果呈现:云计算、标签云、关系图等。
⑦ 以下哪些属于大数据特征
大数据(big
data),是指无法复在可承受的制时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。它的4个基本特征分别为:
1.
数据量大,TB,PB,乃至EB等数据量的数据需要分析处理。
2.
要求快速响应,市场变化快,要求能及时快速的响应变化,那对数据的分析也要快速,在性能上有更高要求,所以数据量显得对速度要求有些“大”。
3.
数据多样性:不同的数据源,非结构化数据越来越多,需要进行清洗,整理,筛选等操作,变为结构数据。
4.
价值密度低,由于数据采集的不及时,数据样本不全面,数据可能不连续等等,数据可能会失真,但当数据量达到一定规模,可以通过更多的数据达到更真实全面的反馈。
⑧ c语言处理文件里的大数据
只能分块处理了,读入一块、处理一块、存储一块,数据库就是这么干的。