数独游戏的难度等级分析及求解算法研究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-332级;34-503级; 51-674级;68-815级。初步统计,数独题目的空格数是介于40-65之间,空格数少于33或大于65较少。按以上方式划分难度等级,实际数独题目将被划分为2个难度级别,不合理。

为避免上述情况发生,空格数的取值范围缩小到40-65。空格数为40-45难度等级为1级;46-502级;51-553级;56-604级;61-655级(图三)。

 

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 空格自由度的计算

计算空格自由度的模型如下:

N为sudoku的空格数目

F表示所有空格的自由度的总和

S(i,j)表示Sudoku矩阵 A(9*9)中 i行 j列的空格自由度

S(i)是 i行的空格数目;

S(j)是 j行的空格数目;

是除去同行同列的同一宫中的空格数。

2.2.3 空格自由度模型

     空格自由度的取值范围大,当数独题目全为0时,空格的数为 81,空间自由度为2106;数独题目只剩1个空格时,空格自由度为0。在[0,2106]的范围内平均划分,将难度级别划分为5个等级,空格自由度0-420难度等级为1421-8412842-126231263-168341683-21065。这与实际题目的难度划分不一致。空格自由度划分的区间缩小到[7001300][700820]1级,[820940]2级,[9401060]3级,[10601180]4级,[10801300]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)根据(XY)判定难度。

将计算好的空格数和空格自由度划分等级,两者结合,便可得到数独题目的难度等级了。难度等级等级为A-IA为最易,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)模型建立忽视数独题目所提供的数字不同,导致数独题目难度不一致的可能。

 

posted @ 2011-08-25 19:01  candy.huang  阅读(22618)  评论(5编辑  收藏  举报