测试数据
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]
复制代码 |