欢迎光临散文网 会员登陆 & 注册

第 57 讲:内鱼鳍

2021-09-10 08:08 作者:SunnieShine  | 我要投稿

相信,你看到这个标题的时候,一定是一头雾水的,不过,请你回顾一下宫内鱼有一种特殊情况,即定义域区域存在重叠的时候。

这种时候我们当时告诉大家的是,鱼的结构不要覆盖到两个定义域区域重叠的地方,这样讨论会比较复杂,因为重叠的地方,只需要填入一次数字,就同时满足了两个定义域区域,所以是非常难搞定的一件事。鱼的定义域区域数和删除域区域数要一致,是为了后面能够更好地推导鱼结构,能够快速经过这个通过理论证明过的结论,来得到全部删除域的能够删除的数。但重叠区域不同的地方在于,它会影响到的是两个定义域区域,这便影响到了定义域区域数和删除域区域数相同,并且全覆盖就可以删数的说法。

通过理论证明,我们保证了每一个候选数都能不重叠,才可以得到删数的结论,我们就拿宫内四链列和重叠后依旧可以删数的宫内四链列作出一个对比。

Part 1 基本形成

如左图所示,它是一个标准的宫内四链列结构,而且每一处定义域区域都没有重叠的地方;而右图给出的,r6和b6就产生了重叠。

思考一下。如果r6和b6重叠的其中r6c78两个单元格包含候选数x的话(即相当于把“/”符号替换为“x”),则鱼的删数逻辑还成立吗?显然就不能了。当我们不把x放到r6c78的时候,就等同于右图的情况,删数此时是成立的;但我们把r6c78里放一个x的话,这样r6和b6两个区域都有了x,但我们只填了一个,那么,剩余的两个定义域区域只能填入两个x,这样算起来一共只有三处x,而涉及了四个定义域区域。而删除域一共有4个区域,我们只有三个x,而且删除域区域没有重叠,虽然删除域区域是全覆盖了这些x的,但由于定义域里只有3个x,那么删除域一共4个区域,怎么可能每一个区域都能“兼顾”到呢?所以,此时推导就不对了。

那么,我们应该如何去处理这种重叠部分,来清除掉它对我们结构本体的影响呢?鱼鳍就是一个很好的选择。鱼鳍就是这样的一种存在,它会直接影响鱼本体的存在和形成,而它又独立于鱼的本体推导。那么我们不妨把右图里的r6c78(x)看作鱼鳍。

当它们不存在的时候,删数必然是删除域上的所有位置的删数(当然这不包括构建鱼结构的候选数);而当它们为真的时候,显然只能是找这个鱼鳍和删除域共同对应的部分。不过遗憾的是,r6c78(x)是两个鱼鳍,而此时如果找和删除域的交集的话,显然是不能找到的。对照图上而言,鱼鳍分属到删除域的其中两列上,它们是并行的关系,要同时能删除,显然是做不到的,所以此时这个结构是没有删数的。

那么,如何使得这个结构拥有删数呢?答案就是,r6c78里只有一处是鱼鳍就可以了,而另外一个单元格并不含有这个候选数数值,即其中一个单元格画上“x”,而另外一个单元格画上“/”,这样就可以得到删数了。比如r6c7含有x,那么删数就是c7的删除域区域的x;而如果只有r6c8含有x,那么删数就是c8的删除域区域的x。这样我们就完全解决了结构无法删数和无法推导的问题。

接下来我们降阶,看一下宫内三链列重叠时,鱼鳍应当放哪里。

如图所示,这就是一个重叠了定义域区域的宫内三链列,重叠的其中r9c23含有x。和刚才的思维逻辑一样,此时的鱼是无法删数的,因为重叠的地方有两处,我们不得不看作鱼鳍处理,但删数又无法直接对应到同一处或多处上,所以此时是不允许的。那么我们削减一个位置,比如我们尝试把r9c2(x)改为“/”,结构就可以删数了:删数是c3这个删除域区域的x。

最后,我们来说一下定义。如果鱼鳍长在定义域区域的交集的,我们称为内鱼鳍(简称内鳍,Endo Fin);而其余位置上的鱼鳍,此时我们约定称之为外鱼鳍(简称外鳍,Exo Fin)以作区分。它们实际上都属于鱼鳍的范畴;当然,至于如何对一个鱼结构命名,这一点我们后面再说,现在都直接视作鳍鱼处理就好。之所以叫内鳍,就是因为在全覆盖的时候,内鳍其实也是被覆盖了的,而外鳍必须单独分配一个删除域区域才可以覆盖。

在鱼图里,内鱼鳍我们使用“@”(at符号)或“E”来表示,而外鱼鳍则使用“F”(有些时候也用“&”,即and符号)来表示。那么接下来我们就来看一些有关内鱼鳍的宫内鱼结构的示例。

Part 2 内鳍宫内鱼的示例

2-1 内鳍宫内三链列

如图所示,这个结构想必我们在刚才才推理过,所以删数比较容易确定。如果内鱼鳍不成立,则宫内三链列是成立的(只是,在之前的内容里提到过,宫内三链列如果含有重叠的定义域的话,重叠部分不能有填数,就会使得结构直接降解。所以这种结构必须依赖于鱼鳍而存在);而鱼鳍r9c3(3)的存在只能使得删数确定在c3的其余位置的3,所以,这个例子的删数只有r3c3(3)。

2-2 内鳍宫内四链列

这个示例是一个比较标准的带内鳍的宫内四链列。如果r1c9(4)为假,则宫内四链列就无需考虑重叠的部分,所以定义域区域数和删除域区域数相等,也全覆盖了,所以删数是完全成立的;不过由于内鳍的存在,此时的删数只能在c9,所以r4578c9(4)都是可以删除的。

我们再来看一则示例。

如图所示,这个示例和刚才的推导过程完全一样。如果鱼鳍r5c1(4)不成立,则定义域区域数和删除域区域数相同,都是4个,而且全覆盖,所以删数是成立的;而鱼鳍的客观存在影响了结构,导致删数只能在r5这个删除域上,所以删数只有r5c568(4)。

2-3 内鳍宫内五链列

最后的这个例子比较复杂,因为它既有外鳍也有内鳍。

如图所示,定义域区域c1和b7含有重叠部分,所以r9c1(7)我们考虑为内鱼鳍,而为了保证鱼能够更好地推理,我们又把r1c5(7)视作外鱼鳍处理,这样的话,如果它们同时都不存在,则结构包含五个定义域区域和五个删除域区域,它们个数是相等的,而且也做到了全覆盖,所以删除域的删数全部可以删除;而鱼鳍的存在打破了删数规则,所以我们此时必须找的是删除域、外鱼鳍r1c5(7)和内鱼鳍r9c1(7)的共同对应的位置。

显然,我们为了分析更严谨,我们不得不分三种情况考虑。如果r1c5(7)成立,可以删到r9c5(7);如果r9c1(7)成立,则也可以删除r9c5(7);而且r9c5(7)也在删除域上,所以r9c5(7)就是这个鱼的删数结论。

那么,宫内鱼结构的逻辑就全部讲完了。接下来我们要看到的是,另外一种鱼结构的变体类型,它的形状就更加奇怪了,导致这种结构的名字的直译版本很“草率”地就叫做变异鱼(Mutant Fish),那么实际上这个结构叫什么呢?我们下一节继续。

第 57 讲:内鱼鳍的评论 (共 条)

分享到微博请遵守国家法律