数独游戏的难度等级分析及求解算法研究2——数独难度等级
2 数独难度等级
数独游戏发展至今,在数独爱好者的积极探索下,求解数独的算法众多,有矩形顶点删减法、关键数删减法等[7]。解答一道数独问题是一种或多种方法相互结合,为了使玩家能循环渐进解决数独题目,并且在解答数独过程中不断提高解决数独问题的能力。不同的数独题目被划分为不同的难度等级。最直接的方式是根据个人求解数独的时间长短区分难易。但由于个人求解数独受方方面面的影响,此种划分方式主观因素太强,导致划分的准确率低。如何划分数独的难度系数才是比较科学的呢?
2.1 空格数与难度等级
2.1.1 空格数与难度等级的分析
数独书籍对数独难度的划分较为清晰,研究从分析数独书籍对数独难度等级的划分开始。首先统计《旅途中的数独》[8]《数独》[9]两本书数独谜题的情况。表一所统计的是《旅途中的数独》的题目,统计的题目总数为100道,表格的行表示空格的个数,列表示难度的级别,初级最容易,难度依次递增,超级为最难;表二所统计的是《数独》-5,题目数一样为100道,表格行表示空格的个数,列表示难度的级别,一星为最容易,二星为容易,三星为难,四星为最难。例如:表一的首格10表示,难度为初级,空格个数为45的题目有10道;表二的首格3表示,难度为一星,空格数为50的题目有3道。
表1 统计《旅途中的数独》空格数与难度
Statistic space and difficulty from the book calls planes, trains and sudoku
|
45 |
49 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
总数 |
初级 |
10 |
|
|
|
|
|
|
|
|
|
10 |
中级 |
|
4 |
3 |
2 |
|
|
|
|
|
|
10 |
高级 |
|
|
3 |
2 |
17 |
4 |
12 |
1 |
1 |
|
40 |
超级 |
|
|
|
|
2 |
1 |
21 |
6 |
9 |
1 |
40 |
表2 统计《数独》空格数与难度
Statistic space and difficulty from the book calls sudoku
|
50 |
51 |
52 |
53 |
56 |
57 |
58 |
总数 |
一星 |
3 |
1 |
|
|
|
|
|
4 |
二星 |
1 |
1 |
21 |
1 |
1 |
|
|
25 |
三星 |
|
|
|
|
35 |
11 |
|
46 |
四星 |
|
|
|
|
14 |
8 |
3 |
25 |
分析2个表格,我们初步得到,随着难度的加大,空格数逐步增加。书中不同难度等级的题目数目不一致,难度较低的题目数较少,难度较高的题目较多。为进一步发现问题所在,笔者对数独题目的统计表格进行处理,在同等难度上,将每种空格的题目个数除以该难度的总题目数,得到如下表格。
表3 计算《旅途中的数独》空格率与难度
The probability of space and difficulty from the book calls planes, trains and sudoku
|
45 |
49 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
初级 |
1 |
|
|
|
|
|
|
|
|
|
中级 |
|
0.4 |
0.3 |
0.2 |
|
|
|
|
|
|
高级 |
|
|
0.075 |
0.05 |
0.425 |
0.1 |
0.3 |
0.025 |
0.025 |
0 |
超级 |
|
|
|
|
0.05 |
0.025 |
0.525 |
0.15 |
0.225 |
0.025 |
表4 计算《数独》空格率与难度
The probability of space and difficulty from the book calls sudoku
|
50 |
51 |
52 |
53 |
56 |
57 |
58 |
一星 |
0.75 |
0.25 |
|
|
|
|
|
二星 |
0.04 |
0.04 |
0.84 |
0.04 |
0.04 |
|
|
三星 |
|
|
|
|
0.76 |
0.24 |
|
四星 |
|
|
|
|
0.56 |
0.32 |
0.12 |
表格的数据用面积图表表示(图1、图2),由图可以清晰看出,难度等级递增,空格数也不断增加。难度等级与空格数存在正比的关系。
图1 《旅途中的数独》空格数与难度
The probability of space and difficulty from the book calls planes, trains and sudoku
图2 《数独》空格数与难度
The probability of space and difficulty from the book calls sudoku
结论1:难度等级与空格数存在正比的关系。
2.1.2 空格数难度模型
空格数的取值范围为0-81,以空格数平均划分难度等级。将空格数平均分成5个类型。空格数为0-16的难度等级为1级;17-33为2级;34-50为3级; 51-67为4级;68-81为5级。初步统计,数独题目的空格数是介于40-65之间,空格数少于33或大于65较少。按以上方式划分难度等级,实际数独题目将被划分为2个难度级别,不合理。
为避免上述情况发生,空格数的取值范围缩小到40-65。空格数为40-45难度等级为1级;46-50为2级;51-55为3级;56-60为4级;61-65为5级(图三)。
图3 空格难度模型
The model anlyze the relationship between space and difficulty
2.1.3 空格数模型的程序算法
空格数的计算用遍历法,程序设计的过程如下,详细流程图见右图4,并用java语言实现此过程,详细代码见附录1。
1、将数独谜题转换为String;
转换时,数字不变,依次读入,空格以0表示。
2、遍历谜题String所包含0的个数;
遍历String,读取到0便将空格个数加1;
3、根据空格数划分等级;
4、输出结果。
2.2 空格自由度与难度等级
由2.1结论,数独题目的难度等级与空格数存在正比关系。另一本书《数独-再露锋芒》将难度等级划分为5级,根据书中空格数与难度等级的统计情况(表5),难度等级的增加,空格数总体趋势递增,不同难度等级的题目空格数也一样的情况。我们得出初步结论,简单按照空格的数目多少来划分数独题目的难易程度是不全面的。同样空格数的数独题目,空格数分布位置的不同对难度等级也造成影响。
结论2:空格数是决定难度等级的因素,但不是唯一的因素。
表5 统计《数独-再露锋芒》空格数与难度
statistic space and difficulty from the book calls sudoku
|
45 |
47 |
49 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
总数 |
一星 |
3 |
1 |
1 |
|
1 |
1 |
2 |
1 |
|
|
10 |
二星 |
|
|
|
1 |
2 |
9 |
3 |
2 |
1 |
|
18 |
三星 |
|
|
2 |
1 |
|
22 |
8 |
5 |
2 |
|
40 |
四星 |
|
|
|
1 |
|
4 |
1 |
1 |
1 |
6 |
15 |
五星 |
|
|
|
|
|
|
|
1 |
3 |
6 |
10 |
2.2.1 空格自由度的定义
笔者在求解数独的过程中,往往会观察行、列、宫格内的数的分布情况,当行、列、宫格内所提供的数字越多,推断出空格该填的数字的难度越低。笔者认为,数独的难度等级与行、列、宫格内的空格数存在着联系。提出以空格自由度衡量数独的难度等级。数独的空格自由度,指除掉空格本身,空格所在行、列、九宫内的空格数总和。
2.2.2 空格自由度的计算
计算空格自由度的模型如下:
是除去同行同列的同一宫中的空格数。
2.2.3 空格自由度模型
空格自由度的取值范围大,当数独题目全为0时,空格的数为 81,空间自由度为2106;数独题目只剩1个空格时,空格自由度为0。在[0,2106]的范围内平均划分,将难度级别划分为5个等级,空格自由度0-420难度等级为1;421-841为2;842-1262为3;1263-1683为4;1683-2106为5。这与实际题目的难度划分不一致。空格自由度划分的区间缩小到[700,1300],[700,820]为1级,[820,940]为2级,[940,1060]为3级,[1060,1180]为4级,[1080,1300]为5级(图四)。
图5 空格自由度难度模型
The model analyze the relationship between space and freedom
2.2.4 空格自由度的算法
空格自由度的程序算法主要有如下步骤,详细代码见附录2:
1、题目转换为String;
数独题目转换为String时,数字不变,空格以0表示;
2、判断空格;
3、遍历空格所在行的空格数;
4、遍历空格所在列的空格数;
5、判断空格所在的宫格,遍历宫格内的空格数;
6、将行、列、宫格内的空格数相加得空格自由度;
7、根据空格自由度判断难度等级;
8、输出结果。
2.2.5 模型合理性
随机抽取数独书籍不同难度等级的题目,进行空格自由度的计算,验证空格自由度衡量数独题目的难度是否合理,首先抽取4道不同难度的数独题目,将题目转换为字符串,计算空格自由度,实验结果如下:
表6 实验数据 empirical data
|
数独题目 |
空格自由度 |
难度 |
书难度 |
1 |
000840091001700600070000050460180200700296003000070960040607000605008020200010000 |
820 |
2 |
2 |
2 |
000000023030050040000003700000302650050040072007600000008500960540180200900060001 |
880 |
3 |
2 |
3 |
006009000031800009700000056080400000200010007000008040360000002900005310000200500 |
1008 |
4 |
3 |
4 |
600000004050009800000003570003060280802094000000000000080042000001000020500010008 |
1054 |
4 |
4 |
由实验结果看出,笔者所提出的空格自由度与数独的难度等级存在正比的关系,难度系数的划分合理,与书中的划分基本一致。
2.3难度等级综合模型
2.3.1 建立模型
数独题目的难度等级由空格数与空格自由度综合决定,建立几何难度等级模型:
(1)以数独的空格数来划分,将空格数为横坐标X;
(2)将空格自由度的总和划分等级,将等级数设为纵坐标Y;
(3)根据(X,Y)判定难度。
将计算好的空格数和空格自由度划分等级,两者结合,便可得到数独题目的难度等级了。难度等级等级为A-I,A为最易,I为最难,随着字母变大,难度逐次增加。具体划分的数据如下:
图6 难度判定坐标 The coordinate judge difficulty
表7 难度系数划分依据 Classified difficulty
难度等级 |
A |
B |
C |
D |
E |
F |
G |
H |
I |
X+Y |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
2.3.2 模型验证
为了测试难度等级划分的情况的准确程度,主要做了如下测试:
(1) 测试的数独题目,题目出自《数独》和《路途中的数独》。
表8 测试题目 Test problems
题号 |
数独题目字符串 |
难度 |
1 |
950624003038007061000000050360209008100000006500108072070000000610900830400856097 |
一星 |
2 |
000074680800000000004006910020065071000000000480310050016900800000000009032750000 |
二星 |
3 |
000000023030050040000003700000302650050040072007600000008500960540180200900060001 |
二星 |
4 |
006009000031800009700000056080400000200010007000008040360000002900005310000200500 |
三星 |
5 |
600000004050009800000003570003060280802094000000000000080042000001000020500010008 |
四星 |
(2) 书籍中对数独难度等级的划分,并不一定合理,为了更准确区分难度等级,将测试的题目由3个人完成,计算每道数独题目完成需要的平均时间,完成时间越长,数独题目难度越大。测试结果如下:
表9 测试结果 Test result
题号 |
空格数 |
空格自由度 |
难度 |
书中难度 |
完成时间 |
是否相符 |
1 |
45 |
698 |
A |
一星 |
16min23s |
是 |
2 |
53 |
922 |
E |
二星 |
18min29s |
是 |
3 |
52 |
880 |
E |
二星 |
17min28s |
是 |
4 |
56 |
1008 |
G |
三星 |
20min39s |
是 |
5 |
57 |
1054 |
G |
四星 |
29min57s |
否 |
(3)实验结果:
实验结果表明,划分的难度与书中所划分的难度基本一致。以玩家完成数独题目的时间来判定数独题目的难度的话,那么此种划分难度等级的方法也合理。
2.4模型优缺点分析
根据难度等级模型划分数独难度系数,易于操作,划分的难度等级基本合理。建立模型过程中,忽略部分条件。所以,该模型优缺点并存,下面是对优缺点的详细分析。
优点:
(1)难度等级模型引入空格自由度的概念,是模型的创新点;
(2)此模型对数独的难度的分类较为直观;
(3)难度等级的模型可操作性强;
(4)难度模型计算的难度等级符合现实的等级划分。
缺点:
(1)模型所划分难度等级的区域过大,在实际题目中,数独的空格数往往较为集中在20-40中,研究的范围较大,划分的难度等级准确性低,主观成分过于强;
(2)以完成数独时间来区分数独题目难度,忽略实验者水平的不同,忽略实验者会随着实验不断进行,完成数独题目熟练程度也会不断增加,实验数据主观性强;
(3)实验数据分析过程中,默认数独书籍对难度等级的划分为合理,这个前提存在不准确的可能,因为书籍中的难度等级划分,可能渗入编者个人的主观意识,笔者在研究过程中,没有剔除该种可能,也存在着不足;
(4)模型建立忽视数独题目所提供的数字不同,导致数独题目难度不一致的可能。