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

第 31 讲:区块链

2021-06-27 08:16 作者:SunnieShine  | 我要投稿

接下来我们来看一种新结构,在此之前,我们必须要引入一个新的节点类型:区块。

Part 1 区块节点的引入

来看这一则示例。

如图所示,我们可以观察到链头是r3c4(9)。按照链的逻辑,我们写出文本写法。

当推理到r7c9(9)的时候,按照顺序,这里应该是为真的,但发现b9里含有三个候选数9,按照之前的链的逻辑,我们只可以让其中一个9为假,然后继续推理。但实际上,我们不论指定链从r8c7继续延伸还是r9c7继续,都无法继续推理,因为我们此时仅能让r8c7或r9c7一个单元格的候选数9为假,但c7有三处9,我们不可能因为一处9为假就否定了剩下两处的9,所以我们不得不采用一种逻辑:既然单独看r8c7或r9c7都不行,干脆我们就直接把它们看作一起,当成一个区块。

假设到r7c9(9)为真时,便同时可以使得r89c7(9)均为假。此时,当它们都为假后,我们才可以继续向下推理,c7只有三处9,其中的两处都为假了,自然只能让r2c7(9)为真。那么链得以继续持续到链尾,并且确实拥有删数,且删数是正确的。这条链就此分析完成,并且我们就引入了一种新的节点类型:区块。

不过区块不是整体分析的吗?如此分析已经拆解区块结构了,或者换句话说,实际上前面的逻辑是分了两个“支线”,让r7c9(9)同时分别用虚线箭头(弱关系)指向r8c7(9)和r9c7(9),这并不能说就算真正的区块结构了。那么,既然是节点,就有真假性,而按照之前的逻辑,既然看作整体,那么区块这种类型的节点为真或为假都分别表示哪一种情况呢?下面我们就来看看下面这一则示例里,我们会得到什么新鲜的东西。

Part 2 区块节点为假?

如图所示,这条链和之前的例子不一样的地方是,它从区块节点开始推导的。

那么,初始状态要求区块节点为假,那么区块节点为假是什么?我们回顾一下之前的理解:区块为真是什么,区块为假又是什么。区块是一种结构,我们人为定义的候选数节点为“真”就表示这个节点就填这个数,这个数是对的;那么相反,为“假”就表示不填,删除这个数。可以看到,它们是互斥的。那么区块节点为真,我们人为规定为真即表示“这个区块成立”,即区块所属的单元格里必须有一个单元格就填入这个数。那么为假就取这个说法的相反情况,即“没有单元格填这个数”或“有至少两个单元格填入这个数”

当然,你也可以这么去想:区块为真表示区块成立,那区块为假则表示区块不成立,那么就思考哪些情况属于区块不成立。

而显然,我们这里指代的区块结构是不可能出现“至少两个单元格填入这个数”的情况的,所以只可能是“没有单元格填这个数”。那代入到图里,就表示r3c79都不能填5。那这么一来,链就成立了:r3c2 = 5,即得到了“区块节点为假”得到“候选数节点为真”的结果,即从假过渡到真,此时这个形式为强关系。那么,后面的逻辑就不难了,并最终得到了r2c789(5)全部为假。

从例子里,我们得到了一些结论,下面来总结一下。当区块作为节点时:

  • 节点为真表示区块成立,即区块涉及的单元格里恰好有一个单元格填入该数字,即只有一处候选数为真

  • 节点为假表示区块涉及的单元格里,没有一个单元格能放该数字,即每一个候选数全部为假

那么此时区块为假的逻辑就可以套用到最开始的那一则示例里理解了:r89c7(9)区块为假,指的是这两个候选数全部为假。这完全符合我们之前推理的要求。

所以,区块节点的基本逻辑就只有上述两种情况了。

Part 3 区块不连续环

下面我们来看一则区块节点放入不连续环的逻辑。

如图所示,链的表述如下:

区块为假,指的是无法使得结构构成区块。无法使得区块结构成立,即r45c6同时都没有候选数7。这个时候,由于都没有7的缘故,在c6之中,7只能填入到r2c6之中。所以此时r45c6(7)区块不成立,即r45c6(7)区块为假时,r2c6(7)为真。这样一来,r45c6(7)就和r2c6(7)构成了特别的强关系。于是接着向下推导。

那么,这种结构怎么删数呢?我们可以知道的是,AIC的逻辑,导致的是链头和链尾至少一个为真,这里应该指的是r45c6(9)这个区块和r6c5(5)至少一个为真。既不同数,要找的又是一个区块和一个候选数的交集,这怎么找?

区块内有且仅有一处填数位置是为真的,也就是说,r45c6只有一格是7,但是我们无法确定哪个是7。那么链头的确切位置就无法确定,到底是r4c6还是r5c6;但是链尾处,是唯一确定的候选数r6c5(5)。当区块成立时,b5内一定不可以填7了,这包括了r6c5(7);而r6c5(5)为真时,r6c5当然也就不可以填7。所以r6c5 <> 7。

这个结构是不连续环的拓展版本,因为带了一个区块,所以这个结构也被直接称为区块不连续环(Grouped Discontinuous Nice Loop)。

特别需要引起注意的是,区块节点如果动用首尾异数链的逻辑时,区块并不是所涉及的单元格,每个单元格都能删除候选数,例如此例,删数并不会产生在区块节点上。

Part 4 节点重叠

4-1 空矩形

我们试想一下,如果一条链带若干个区块,而且区块之间有重叠的单元格被共同使用了,这将如何理解?

如图所示,如果r8c5(9)为假,则r8c7(9)真,于是将r123c7(9)看作区块,这个区块节点为假,接着得到b3里还剩下r1c89(9),它们组成区块结构,于是可以保证两处有一处为真,故组成的r1c89(9)区块节点可以表示为节点为真。最终该结构的删数就是链头r8c5(9)和链尾r1c89(9)的交集。显然,这个区块和候选数的交集只有r1c5(9),所以它便是删数。

这个技巧叫做空矩形(Empty Rectangle),虽然和“矩形”沾边,但跟唯一矩形、拓展矩形甚至是可规避矩形里的“矩形”没有任何关系,它仅仅指的是一个结构,即宫内L形状的五个单元格,即此处的{r1c789, r23c7}五个单元格。另外,空矩形一词还可以用来指代这个链技巧。不过……

4-2 空矩形的疑问

可以看到,实际上结构还是很简单和清晰的,不过很典型,因为这个例子里连续用到了区块和区块之间的强弱关系。

那么,对于空矩形还有一个疑问。如果我把空矩形技巧画成这样下图,请问这个链是否能正常使用,并得到一样的删数呢?

为了表达清楚,这里也写出文本形式:

实际上是可行的。虽说这里重叠了一点位置,不过现在要详细阐述此点逻辑。

首先,我们通过之前一样的推理可以到r123c7(9)处。此时得到的结论是节点为假,即r123c7没有一个单元格填9。接着,我们写了r1c789(9),虽然其中r1c7是两个区块节点共用的部分,而且此时r1c7(9)已经为假了。但是这并不妨碍r1c789(9)这个节点的其它两个单元格为真。因为之前说过,区块为真表示区块结构成立,所谓的成立就指的是区块里有一个单元格填这个数就可以了。显然,b3里现在只剩下r1c89可以放下9了,也就直接意味着r1c89必然有一个9的出现,所以总的来说,r1c789里确实有一个9了,所以区块是成立的,也就意味着该区块结构为真。

正因为如此,空矩形才得以存在。实际上,在一些资料和文献之中(包括发现人对于空矩形的介绍)都是采用的重叠的形式介绍的。

4-3 节点重叠

接下来我们就来介绍一个节点重叠的普通版示例。

如图所示,链的表达如下。

可以从示例里得到,链头和链尾都是区块节点,但区块有所重叠:共用了r1c4(4)。那么,删数怎么看呢?实际上,删数就是这两个区块的交集,而这两个区块的交集正是b2的其余单元格,所以r2c5和r3c6自然不能够填入4。

Part 5 鱼图练习

下面来看看这个鱼图测试题,和之前一样,“/”表示不能放候选数a的地方。这个测试题,你能找到合适的删数a的确切位置吗?


第 31 讲:区块链的评论 (共 条)

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