array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 数独高阶技巧入门之七——AIC & Nice Loop - 爱码网

AIC(交替推理链,Alternate Inference Chain)

简单异数链一文中我们介绍过XY-Chain技法,AIC可以看作是XY-Chain的扩展。有别于XY-Chain仅局限于双值格,AIC籍由各种强弱关系的灵活运用,极大化的丰富了链类解题方法。

Alternate Inference Chain Type 1

AIC 根据首尾两端点候选数的异同可分为两种类型,我们将首尾数字相同的称为AIC1,下图就是一个AIC1的实例。

 
数独高阶技巧入门之七——AIC & Nice Loop
图1-AIC1

​图1中,实线代表强链,虚线代表弱链(下同)。我们可以看到,虽然本例中的链行进过程中候选数一直在发生变化(由双值格、多值格内候选数强弱关系的灵活运用实现),但候选数间始终保持着强弱交替,最终首尾两个相同候选数5之间形成强关系,可以删去两端点共同作用格内的5。

Alternate Inference Chain Type 2

AIC1的首尾数字相同,还有一类AIC的首尾两端点数字不同,但因为两端的候选数可以彼此在对方单元格内看到自己,我们得以据此对相关候选数进行删除,可将之称为AIC2。

 
数独高阶技巧入门之七——AIC & Nice Loop
图2-AIC2

​图2中,链的两端点分别为4和8,彼此都可以在对方格内看到自己。简单推理就可以发现,红框中的4、8互为强关系,不管哪个成立,红圈的4、8都会被删去。由此可得出AIC2的删除规则:互为强关系的两端点候选数可对对方格内的自己进行摈除。

是不是感觉很简单?AIC的工作原理的确很好理解,但是要达到熟练运用的程度并不容易,这需要敏锐的观察力以及大量的针对练习,随后我会针对本篇的内容提供一些练习题供大家进行训练。

Nice Loop

Continuous Nice Loops (AIC Loops)

先引入一个概念“Nice Loop”,在简单异数链一文中曾介绍过XY-Cycle的结构,我们把这类从某格出发并最终回到出发格的链路称为Nice Loop。若构成Nice Loop的每个候选数都可以首尾相连且保持强弱交替,则可将之称为Continuous Nice Loops(连续环,此前介绍过的X-Wing和XY-Cycle都是简单的连续环,如果AIC能够首尾相连则会构成AIC Loops,属于较复杂的连续环)。

下图即是一个AIC连续环,与XY-Cycle一样,断开任意一条虚线(弱链),都会构成一条强始强终的数链,弱链断开处两端的候选数互为强关系,可对其共同作用格进行摈除(弱链出现在多值格内部,可删除该格内其他候选数,如本例中r78c1中的35)。

 
数独高阶技巧入门之七——AIC & Nice Loop
图3-CNL01

​图4中在格内进行的删减更多,大家可以仔细体会一下。

 
数独高阶技巧入门之七——AIC & Nice Loop
图4-CNL02

​我们将构成连续环的每个单元格视作节点,观察各节点间的联结情况(大家需要注意,寻找环时分为两个层次,第一层首先是单元格之间的关系,第二层才是单元格内候选数间的关系),会发现:

1、若某节点通过两条强链与其他节点联结,该节点单元格内联结两条强链的候选数必然相异;

2、若某节点通过两条弱链与其他节点联结,该节点必为双值格且两个候选数分别联结一条弱链;

3、若某节点通过一条强链和一条弱链与其他节点联结,该节点内联结这两条链的为同一候选数。

(熟练掌握之前内容的话,就会马上明白,以上3点是连续环成立的必然要求。)

Discontinuous Nice Loop

如果环链的某个节点不符合上述3点的要求,亦即不能满足强弱交替的规则,就会构成Discontinuous Nice Loop(不连续环)。

 
数独高阶技巧入门之七——AIC & Nice Loop
图5-DNL01

图5中是一个不连续环的实例,本例中的环以7的弱链从r1c8出发,最终以5的强链回到该格,我们将这条弱始强终的链简化为 A—B==C 进行推理:若A为真,则B为假(弱链不能同真);若B为假,则C为真(强链不能同假)。即A为真时,C必为真。回到本例中,假设r1c8=7,以此为前提,最终会推导出的结论是r1c8=5,即在同一个格内,有两个候选数同时成立,显然这种情况是违反数独规则的,由此我们可以判定之前假设的前提为假,并得出结论r1c8≠7。经过以上的归缪,可得出不连续环的一个删减规则:若某节点通过一条强链和一条弱链与其他节点联结,且该节点内联结这两条链的不是同一候选数,则联结弱链的候选数应被删去。

 
数独高阶技巧入门之七——AIC & Nice Loop
图6-DNL02

​上图是另一种情况的不连续环,本例中的环以4的强链从r8c2出发,最终又以4的强链回到r8c2格。我们假设这个格内存在起点和终点两个4,则这两个4互为强关系,不能同假。若假设起点r8c2≠4,由此前提会推导出终点r8c2=4的结论,产生矛盾,故该前提为假,r8c2=4。经过反证后我们可以得出不连续环的第二个删减规则:若某节点通过两条强链与其他节点联结,且该节点单元格内联结两条强链的是同一候选数,则该候选数为真,可删去单元格内其他候选数。

 
数独高阶技巧入门之七——AIC & Nice Loop
图7-DNL03

​图7是第三种情况的不连续环,本例中的环以1的弱链从r6c1格出发,最终又以1的弱链回到r6c1格,我们仿上例进行推理:假设r6c1格存在起点和终点两个1,这两个1互为弱关系不能同真,则由r6c1=1的前提,会推导出r6c1≠1的结论,产生矛盾,可知该前提为假,r6c1≠1。至此我们可以得出不连续环的第三个删减规则:若某节点通过两条弱链与其他节点联结,且该节点单元格内联结两条弱链的是同一候选数,则该候选数为假。

Grouped Nice Loop/AIC

在之前的文章(简单的单数链结构——双强链)里曾介绍过利用打包分组(Group)来寻找双强链的方法,这一技巧在Nice Loop和AIC中同样适用。在面对一些复杂的局面时,灵活的运用Group在行列宫制造出新的强弱关系,会让解题思路豁然开朗。

 
数独高阶技巧入门之七——AIC & Nice Loop
图8-GDNL

​上图中,利用将第2宫c4两个8(绿色圈内)打包后分别形成的与r1c5的强关系和r5c4的弱关系,以及第7宫c3两个2(绿色圈内)打包后分别形成的与r5c3的弱关系和r7c1的强关系可以找到一条不连续环,最终在r7c1中填入2。

 
数独高阶技巧入门之七——AIC & Nice Loop
图9-GCNL

​​图9实例中,分别将第8宫r9和c4的两个2打包后,可找到一条连续环,从而实现大量的删数。

 
数独高阶技巧入门之七——AIC & Nice Loop
图10-GAIC1

 
数独高阶技巧入门之七——AIC & Nice Loop
图12-GAIC2

​图11、12分别是AIC1、2的例子,大家仔细体会一下。

Group Nodes and ALS

除了使用单纯的Group做为节点联结Loop和AIC外,我们可以将思路继续发散,利用ALS候选数集间的关系,将之嵌入Loop和AIC中来解决问题。

 
数独高阶技巧入门之七——AIC & Nice Loop
图13-GDNLALS

​本例就是将ALS作为节点的一个应用,r8存在ALS{256},在这个ALS中,2和打包起来的两个5之间为强关系,巧妙利用这一关系构造出一个非连续环,可以删除r8c2格内的5。

 
数独高阶技巧入门之七——AIC & Nice Loop
图14-GCNLALS

​眼尖的朋友已经发现,图14和图9是同一个盘势。本例利用r6的ALS{238}中2和打包的两个3的强关系,以及第8宫打包的两组2(绿色圈内),构造出一个连续环,实现了对更多候选数的删减,其中候选数1、2、3(红色)的删除很好理解(弱链两端点为强关系),但第5宫和r6中红色的8为何也被删除?

这是由连续环的特性所决定的。之前的内容中多次介绍过,连续环中断开任意一条弱链后,断开处两端点互为强关系。但是,连续环的另外一个特性大家可能没有注意到:断开任意一条强链后,断开处两端点互为弱关系,亦即连续环中的任意一条链都同时兼具强弱两种属性——两端点间是矛盾关系,不能同真,亦不能同假,必然一真一假。回到本例中,r6的ALS{238}中,2和group(3)不管哪一个成立,都会导致对方不成立,从而使ALS{238}变成(28)或者(38)的数对,则group(8)在任何情况下都成立,据此可对第5宫和r6中红色的8进行摈除。​

 
数独高阶技巧入门之七——AIC & Nice Loop
图15-GAITALS

​​上图是之前在微博上单独发过的一个利用ALS联结AIT2的实例,本例关键点在于c6列ALS{147}(黄框)中7和group(4)的强关系,以及group(4)和R4C6的4的弱关系



作者:零时四分_719b
链接:https://www.jianshu.com/p/9cd7e2e1d022
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章: