sudoku策略
昨天夜班练习了一下sudiku,中文翻译成数独游戏。我玩这种动脑子的游戏,比如扫雷,最大的乐趣在于尽可能不动脑子。也就是说利用简单的规则系统,替代复杂的推理过程。
不失一般性,命名规则:3*3的方块或者一行或者一列,称为一个单元。方格中可能填写的数字,称为备选数字。
定理1:如果一个方格内有且只有一个备选数字,那么这个数字就是需要填写的。
定理2:如果一个单元的所有备选数字中,只有一个不重复的数字,那么这个数字是需要填写的。
定理3:在一个单元中,如果出现两个方格中有且只有两个相同的数字,形如|AB|AB|,那么这两个数字必然出现在这两个方格中,且不会出现在单元内的其他方格中
定理4:在一个单元中,如果有N个方格,形如|AB|BC|CD|DE…|xA|,那么数字ABC…x,只能出现在这N个方格中,且不会出现在其他方格中。
推论4.1:|AB|BC|ABC| 同理,
推论4.2:|AB|ABC|ABC|同理
用这个规则系统,可以解出90%以上的hard级别的难题,大概50%左右的Extrem级别的题。要挑战高难度的,似乎我还要扩展定理4.
这一段视频,就是利用这几个定理进行推理导出的。
====
总结一下:
我从小就不喜欢技巧性的东西,比如我厌恶因式分解,而宁可使用求根公式。套用专业一点的属于,叫做喜欢寻求鲁棒性的解决方案,(好了这个词就是乐百氏,robust)
- 首先要选择合适的工具,一般sudoku都是纸和笔,高级一点的游戏,还是模仿纸和笔。这意味这大量的计算过程是心算或者口算。就我个人而言,心算和口算对于训练能力或者提高游戏乐趣是没有意义的。我厌恶口算,小时候100以内加减法口算题一般错一半,但是仍然不能改变我是本科目前唯一会做傅里叶变换的人这一事实。是的,心算能力和数学水平压根没关系。
Sensible sudoku,提供了一个不错的功能,就是一次性给出所有的备选数字,而且在填入一个确定的数字以后,会更新各处的备选数字。计算备选数字基本上是个体力活。体力活只会降低游戏的乐趣。
对于我而言,游戏的乐趣在于不断的把脑力活动化解成若干基本定律,逐一变成体力活动,当最后完全都变成体力活动以后,游戏的乐趣就消失了。而成就感则达到最大。当一个事情可以彻底交给机器做的时候,我就会非常的高兴。
定理系统中,也有不同复杂程度的定理。尽可能优先使用复杂度低的定理。
观察一下我的定理系统和策略就会发现,是基于备选数字的,目的就是不断降低备选数字的自由度。LP也是Sudoku高手,不过她一直使用的是类纸笔的Sudoku系统,所以她的策略和定理系统是基于已填数字的,目的是不断扩大已填数字的数量。其实备选数字和已填数字不过是镜像而已。对同一事物进行不同角度的观察,会产生不同的策略。很有意思,可以写一篇议论文。
很好的文章,被我收藏了,呵呵。
这个网站总结得更为专业。http://sudoku.oubk.com/index.html 对我而言,发现知识的过程更有乐趣,应用的乐趣略低一些。 LP说,这种算法已经严重的干扰了她玩sudoku的乐趣,现在已经拒绝使用了。观点不同,就像RPG,有人玩情节,有人玩练级。