📄 pp.cpp
字号:
{
cout<<data[i][j]<<',';
//cout<<data[i][j]<<'\t';
}
cout<<endl;
}
}
//计算data的不一致率
double inconsistency()
{
int a[N];
int i=0,j=0,n=0,k=0,num=0;
for(i=0;i<N;i++)
a[i]=0;
for(i=0;i<(N-1);i++)
{
j=i+1;
while(j<N)
{
n=0;
for(k=1;k<=A;k++)
{
if(data[i][k]==data[j][k]) n++;
else break;
}
if((n==A)&&(data[i][A+1]!=data[j][A+1]))
{
a[i]=1;
a[j]=1;
}
j++;
}
}
num=0;
for(i=0;i<N;i++)
{
if(a[i]==1) num++;
}
return((double)num/N);
}
//计算CAIM值
double CAIM(int i,int n,double selectvalue,double point[N],double canpoint[N],int l)
{ int r,m,cc,k,j,M[N+1],q[N+1][S+1],C[S+1],upper[S+1],a[N+1],qq[N+1],aa;
double t=0.0,tt=0.0,w=0.0,caim=0.0;
int flag=0;
a[0]=0;
// out();
sort(i);
for(r=1;r<=n;r++)
{ M[r]=0;
qq[r]=0;
a[r]=0;
}
for(cc=1;cc<=S;cc++)
{ upper[cc]=0;
C[cc]=0;
}
for(r=1;r<=n;r++)
{for(cc=1;cc<=S;cc++)
q[r][cc]=0;}
// for(k=1;k<=n;k++)
// {for(j=1;j<=S;j++)
// cout<<q[k][j]<<" ";}
// cout<<endl;
// out();
//cout<<"n="<<n<<" ";
for(j=1;j<n;j++)
if(selectvalue==point[j])
flag=1;
if(flag==0)
{
for(j=1;j<n;j++)
{
aa=n-1;
if(selectvalue>point[j-1]&&selectvalue<point[j])
{
aa=j; break;
}
}
// cout<<"n="<<n<<endl;
// cout<<"aa="<<aa<<endl;
// out();
if(aa==1)
{ r=1; m=0;
while((m<N)&&data[m][i]>point[r-1]&&data[m][i]<selectvalue)
{ M[r]++;
for(cc=1;cc<=S;cc++)
{
if(data[m][A+1]==cc)
// cout<<data[m][A+1];
q[r][cc]++;
}
// cout<<q[r][1]<<endl;
// cout<<q[r][2]<<endl;
// cout<<q[r][3]<<endl;
// cout<<q[2][1]<<endl;
// cout<<q[2][2]<<endl;
// cout<<q[2][3]<<endl;
m++;
}
// for(k=1;k<=n;k++)
// { for(j=1;j<=S;j++)
// cout<<q[k][j]<<endl;
// }
// cout<<"M["<<r<<"]="<<M[r]<<endl;
a[r]=m;
// cout<<"a["<<r<<"]="<<a[r]<<endl;
r++;
while((m<N)&&data[m][i]>selectvalue&&data[m][i]<point[r-1])
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
//for(k=1;k<=n;k++)
// { for(j=1;j<=S;j++)
// cout<<q[k][j]<<endl;
// }
a[r]=m;
// cout<<"a["<<r<<"]="<<a[r]<<endl;
// cout<<"M["<<r<<"]="<<M[r]<<endl;
for(r=aa+2;r<=n;r++)
{ while((m<N)&&data[m][i]>point[r-2]&&data[m][i]<point[r-1])
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
a[r]=m;
}
}
if(aa!=1&&aa!=n-1)
{ m=0;
for(r=1;r<aa;r++)
{ while(data[m][i]>point[r-1]&&data[m][i]<point[r])
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
a[r]=m;
}
while(data[m][i]>point[r-1]&&data[m][i]<selectvalue)
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
a[r]=m;
r++;
while(data[m][i]>selectvalue&&data[m][i]<point[r-1])
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
a[r]=m;
for(r=aa+2;r<=n;r++)
{ while((m<N)&&(data[m][i]>point[r-2])&&(data[m][i]<point[r-1]))
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
a[r]=m;
}
}
if(aa==n-1&&n>2)
{ m=0;
for(r=1;r<aa;r++)
{ while(data[m][i]>point[r-1]&&data[m][i]<point[r])
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
a[r]=m;
}
while(data[m][i]>point[r-1]&&data[m][i]<selectvalue)
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
a[r]=m;
r++;
while((m<N)&&data[m][i]>selectvalue&&data[m][i]<point[r-1])
{ M[r]++;
for(cc=1;cc<=S;cc++)
if(data[m][A+1]==cc)
q[r][cc]++;
m++;
}
a[r]=m;
}
// out();
for(m=0;m<N;m++)
{ for(j=1;j<=S;j++)
if(data[m][A+1]==j)
C[j]++;}
// for(j=1;j<=S;j++)
// cout<<"C["<<j<<"]="<<C[j]<<endl;
for(r=1;r<=n;r++)
{
for(j=1;j<=S;j++)
{
for(m=a[r-1];m<a[r];m++)
if(data[m][A+1]==j)
{
upper[j]+=M[r];
break;
}
}
}
// for(j=1;j<=S;j++)
// cout<<"upper["<<j<<"]="<<upper[j]<<endl;
// for(r=1;r<=l;r++)
// for(j=1;j<=S;j++)
// cout<<q[r][j]<<" ";
/*
for(r=1;r<=n;r++)
{ for(j=1;j<=S;j++)
{
if(q[r][j]!=0)
t=t*((double)pow(q[r][j],(double)(1/S)));
// t=t*((double)sqrt(q[r][j]));
}
if(M[r]!=0)
tt+=(double)(t/((double)(M[r])));
}
for(j=1;j<=S;j++)
{
if(upper[j]!=0)
w+=(double)((double)C[j]/(double)upper[j]);
}
// cout<<"tt="<<tt<<endl;
// cout<<"w="<<w<<endl;
t=logaaa(i,n,canpoint,l);
// cout<<"log="<<t<<endl;
caim=((double)tt*w)/(double)t;
*/
for(r=1;r<=n;r++)
{
for(j=1;j<=S;j++)
{
if(q[r][j]>qq[r])
qq[r]=q[r][j];
}
}
for(r=1;r<=n;r++)
t+=(((double)qq[r])*((double)qq[r]))/M[r];
caim=(double)t/(double)n;
}
else
{caim=-100;}
return(caim);
}
//计算以互信息为底的对数
double logaaa(int i,int n,double canpoint[N],int l)
{ double I=0.0,H=0.0,aaa=0.0;
int r,m,k,j,M[N+1],q[N+1][S+1],C[S+1];
sort(i);
for(r=1;r<=l;r++)
M[r]=0;
// for(r=1;r<=l;r++)
// cout<<M[r]<<" ";
// cout<<endl;
for(r=1;r<=l;r++)
{
for(j=1;j<=S;j++)
q[r][j]=0;
}
// for(k=1;k<=l;k++)
// { for(j=1;j<=S;j++)
// cout<<q[k][j]<<" ";
// }
// cout<<endl;
for(j=1;j<=S;j++)
C[j]=0;
m=0;
for(r=1;r<=l;r++)
{ while((m<N)&&data[m][i]>canpoint[r-1]&&data[m][i]<canpoint[r])
{
M[r]++;
for(j=1;j<=S;j++)
{
if(data[m][A+1]==j)
q[r][j]++;
}
m++;
}
}
// for(k=1;k<=l;k++)
// { for(j=1;j<=S;j++)
// cout<<q[k][j]<<" ";
// cout<<endl;
// }
for(m=0;m<N;m++)
{ for(j=1;j<=S;j++)
{
if(data[m][A+1]==j)
C[j]++;
}
}
// for(j=1;j<=S;j++)
// cout<<"C["<<j<<"]="<<C[j]<<endl;
for(r=1;r<=l;r++)
{ for(j=1;j<=S;j++)
{
if(q[r][j]!=0)
{ I+=(((double)q[r][j]/N))*log(((double)((double)q[r][j]*N)/((double)M[r]*C[j])));
// cout<<"I="<<I<<" ";
H+=((double)((double)q[r][j]/(double)N))*log((double)((double)N/(double)q[r][j]));
// cout<<"H="<<H<<" ";
}
}
}
// cout<<"I="<<I<<endl;
// cout<<"H="<<H<<endl;
aaa=(double)(log(n))/log((double)((double)H/(double)I));
// aaa=1000*n;
// cout<<"aaa="<<aaa<<endl;
return(aaa);
}
void replace(int i,double cutpoint[N],int ll)
{
sort(i);
int j,m,p,q,k;
double z,plus=1.0;
for(p=1;p<ll-1;p++)
{ for(q=p+1;q<ll;q++)
{
if(cutpoint[p]>cutpoint[q])
{
z=cutpoint[p];
cutpoint[p]=cutpoint[q];
cutpoint[q]=z;
}
}
}
// for(k=0;k<ll;k++)
// cout<<"cutpoint["<<k<<"]="<<cutpoint[k]<<endl;
m=0;
for(j=1;j<=ll;j++)
{ while((m<N)&&data[m][i]>cutpoint[j-1]&&data[m][i]<cutpoint[j])
{
data[m][i]=plus;
m++;
}
plus++;
}
}
//CAIM值从大到小排序
void findsort(int cai[N],double caivalue[N],int j,double caim)
{
int m,k;
for(m=j-1;m>0;m--)
{
if((caim<caivalue[m])||(caim==caivalue[m]))
break;
}
for(k=j;k>m+1;k--)
{
cai[k]=cai[k-1];
caivalue[k]=caivalue[k-1];
}
cai[m+1]=j;
caivalue[m+1]=caim;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -