| 测试数据 
 M=32,K=8,L=2
 a=0.5,b=1
 
 F={{1,1,2,2,1,1,2,1},{2,1,2,1,2,1,2,2},{1,2,2,1,1,1,1,1},{2,2,2,2,2,1,2,1},{2,2,2,2,1,1,1,1},{2,1,1,2,2,1,1,1},{1,1,2,2,1,2,1,2},{1,2,1,1,1,1,1,1},{2,1,1,1,1,2,1,2},{1,1,2,2,1,2,2,1},{2,2,2,2,1,2,1,1},{2,2,1,1,2,2,1,1},{1,1,2,2,2,2,2,1},{2,1,1,1,1,1,2,2},{1,1,2,2,1,2,2,2},{1,2,1,1,2,2,2,2},{2,1,1,1,2,2,2,2},{2,2,2,2,2,2,2,1},{2,1,1,1,2,2,1,1},{1,2,2,2,2,2,2,1},{1,1,1,1,2,2,1,2},{1,2,2,2,1,1,1,2},{1,2,2,1,1,2,2,1},{2,1,2,1,1,2,2,2},{1,1,2,2,2,2,1,2},{1,1,2,1,2,2,2,1},{1,1,1,2,2,1,1,2},{2,2,1,2,1,1,1,1},{2,2,1,1,2,1,2,1},{1,2,2,2,1,1,2,2},{2,2,1,1,1,1,1,2},{1,2,2,2,1,1,2,2}}
 
 策略总是按最小距离给出答案,不回答不确定
 测试100000次,得到0.355546的得分率
 这里正确率的误差要如何估计呢?
 
 mathematica测试代码:
 
 复制代码mM=32;kK=8;lL=2;
testcount=100000
correct=0
xX=Table[i,{i,1,kK}]
yY=Table[i,{i,1,lL}]
Table[f[i]=Table[RandomInteger[{1,lL}],{j,1,kK}],{i,1,mM}]
For[n=1,n<=testcount,++n,
i=RandomInteger[{1,mM}];
ff=f[i];
nn=RandomInteger[{1,kK}];
For[j=1,j<=nn,++j,
k=RandomInteger[{1,kK}];
l=RandomInteger[{1,lL}];
ff[[xX[[k]]]]=yY[[l]];
];
match=Ordering[Table[Norm[f[j]-ff,1],{j,1,mM}],1];
If[match[[1]]==i,correct++];
];
N[correct/testcount]
 |