数独的难度是怎样确定的?
每次我在数独问题下回答的时候,我总会安利一下Hodoku这个软件。
关于数独的难度,一般情况下,给定的数字个数越多,数独相对越简单,但这不是绝对的,所以可以确定的是,软件不会去根据初始值的个数,确定一个数独的难易程度。对于数独的生成,我目前尚未有什么研究,我大概了解到的是一些程序采用打洞法生成,不过对于具体的技术细节尚不清楚,所以不好做评价,对于数独解得唯一性,一般程序在生成数独的时候要避免出现Deadly Pattern,如下图:
即使有77个数被确定了,都不能肯定该数独有唯一解。而且,个人认为, 多解的数独,不是合格的数独,上图中这种数独, 到最后只有采用假设法,或者程回溯法求解,说白了就是brute force,而brute force是不到万不得已的时候一般不要采用。独,不仅是说每行每列每块要独一无二,应该还要求结果也是独一无二的。
我了解到的是,有些数独软件根据求解过程中所使用的策略给数独进行评分,然后根据最终的评分和,给出其难度,下面的截图来自数独软件Hoduku,似乎另外一个叫做Sudoku Explainer的软件也是采用的这个方法。
例如,如果一个数独求解只需要用到Naked Single、Hidden Single,则一般评分都不会很高,最后也就是Easy;如果一个数独用到了 Naked Pair/Triple、Hidden Pair/Triple、Locked Candidate Type1和Type2,则评分会稍微高一些,然后一般被划分为中等难度。然后用到了fish、chain、wing等技巧,则评分会较高,最终会被评为hard、unfair甚至extreme,在Hoduku中Solver下会对每个策略进行评分。
可以看到2-String Kate的评分为150。
目前,我也正在编写一个数独的求解器,目前已经可以对付Hoduku生成的中等难度的数独了,对于X-Wing、Skycraper和2-String Kate也能处理,但是还是有很多求解方法尚未实现,先丢一个截图出来show off一下,紫色的是初值,请忽略渣界面,现在的重点是求解器。
数独的难度是怎样确定的?
每次我在数独问题下回答的时候,我总会安利一下Hodoku这个软件。
关于数独的难度,一般情况下,给定的数字个数越多,数独相对越简单,但这不是绝对的,所以可以确定的是,软件不会去根据初始值的个数,确定一个数独的难易程度。对于数独的生成,我目前尚未有什么研究,我大概了解到的是一些程序采用打洞法生成,不过对于具体的技术细节尚不清楚,所以不好做评价,对于数独解得唯一性,一般程序在生成数独的时候要避免出现Deadly Pattern,如下图:
即使有77个数被确定了,都不能肯定该数独有唯一解。而且,个人认为, 多解的数独,不是合格的数独,上图中这种数独, 到最后只有采用假设法,或者程回溯法求解,说白了就是brute force,而brute force是不到万不得已的时候一般不要采用。独,不仅是说每行每列每块要独一无二,应该还要求结果也是独一无二的。
我了解到的是,有些数独软件根据求解过程中所使用的策略给数独进行评分,然后根据最终的评分和,给出其难度,下面的截图来自数独软件Hoduku,似乎另外一个叫做Sudoku Explainer的软件也是采用的这个方法。
例如,如果一个数独求解只需要用到Naked Single、Hidden Single,则一般评分都不会很高,最后也就是Easy;如果一个数独用到了 Naked Pair/Triple、Hidden Pair/Triple、Locked Candidate Type1和Type2,则评分会稍微高一些,然后一般被划分为中等难度。然后用到了fish、chain、wing等技巧,则评分会较高,最终会被评为hard、unfair甚至extreme,在Hoduku中Solver下会对每个策略进行评分。
可以看到2-String Kate的评分为150。
目前,我也正在编写一个数独的求解器,目前已经可以对付Hoduku生成的中等难度的数独了,对于X-Wing、Skycraper和2-String Kate也能处理,但是还是有很多求解方法尚未实现,先丢一个截图出来show off一下,紫色的是初值,请忽略渣界面,现在的重点是求解器。
数独的难度是怎样确定的?
我觉得可以写个程序来判断。
上周上蒙特卡洛的课的时候,教授当场写了个算法来填数独。地狱难度的数独(只给不到20个数)需要0.7s填完,而简单数独需要的时间极短。
可以每次根据程序完成数独的时间来判断数独难度,比如0.65s以上的数独定义为地狱,0.5-0.65s的为困难,0.3-0.5的为中等,以此类推…
数独的难度是怎样确定的?
我觉得可以写个程序来判断。
上周上蒙特卡洛的课的时候,教授当场写了个算法来填数独。地狱难度的数独(只给不到20个数)需要0.7s填完,而简单数独需要的时间极短。
可以每次根据程序完成数独的时间来判断数独难度,比如0.65s以上的数独定义为地狱,0.5-0.65s的为困难,0.3-0.5的为中等,以此类推…