第 8 講:候選數(shù)初步
從這個(gè)篇章開(kāi)始,我們將為大家介紹到的是候選數(shù)技巧。所謂的候選數(shù)(Candidate),就是我們之前提到的,單元格里的填數(shù)情況。
這個(gè)板塊給出的技巧,都是超過(guò)一般比賽難度的技巧,它們也是完成難題的基礎(chǔ)。
上一個(gè)篇章是從第1講到第7講。
Part 1 候選數(shù)初步
為了敘述方便,我們先把后面要說(shuō)到的內(nèi)容全部大體的框架說(shuō)一下。
1-1 做題模式
首先,題目大致分為如下三種做題模式:
直觀(Direct);
局部標(biāo)記(局標(biāo),Partial Marked);
全部標(biāo)記(全標(biāo),Full Marked)。
這三種做題模式都有自己的策略。直觀是直接通過(guò)空白的盤(pán)面上手就開(kāi)始做題的手段;而局部標(biāo)記就是之前數(shù)對(duì)里使用的方式,在一部分單元格里標(biāo)注出候選數(shù)來(lái)達(dá)到輔助做題的目的;而全標(biāo)就是全盤(pán)的所有空格的所有候選數(shù)都標(biāo)注出來(lái)。而我們后續(xù)的講解,都是采用全標(biāo)的形式來(lái)解釋和描述的。因?yàn)楹竺娴募记梢话愣驾^難,所以標(biāo)注出它們是非常有效的(直觀層面一般都做不了)。
1-2 出數(shù)和刪數(shù)
接下來(lái)說(shuō)一下,什么是出數(shù)(Assignment),什么是刪數(shù)(Elimination)。出數(shù)指的是能夠得出填數(shù)結(jié)論的行為,比如之前的技巧,利用區(qū)塊和數(shù)組來(lái)達(dá)到排除和唯一余數(shù)的結(jié)論,這種就叫出數(shù)結(jié)論;而刪數(shù),則是針對(duì)于候選數(shù)而言。得到的推理結(jié)論僅僅是排除一個(gè)候選數(shù)情況的行為(我們稱(chēng)為刪除或刪減情況,所以叫做刪數(shù),而不是“排數(shù)”)。
介紹了這么多后,我們開(kāi)始正式進(jìn)入候選數(shù)技巧的學(xué)習(xí)。不過(guò)為了我們能夠更好過(guò)渡到候選數(shù)層面(全標(biāo)層面),我們依然先得介紹區(qū)塊和數(shù)組結(jié)構(gòu)。
不過(guò),區(qū)塊和數(shù)組的邏輯已經(jīng)講得比較清楚了,這里的全標(biāo)示例僅給出圖片和一些簡(jiǎn)單的邏輯解析。
Part 2 區(qū)塊(Locked Candidates)
2-1 宮區(qū)塊(Pointing)

第一則示例是宮區(qū)塊,因?yàn)檗D(zhuǎn)變了視角,所以結(jié)論就不再是出數(shù)的了,而是刪數(shù):
宮區(qū)塊:r5c78(9) => r5c12 <> 9
我們使用推出符號(hào)“=>”表示前者可以推出后面的結(jié)論,所有后面的結(jié)論使用到了這個(gè)符號(hào)都算作是推出符號(hào)。
2-2 行列區(qū)塊(Claiming)

如圖所示,描述如下:
行區(qū)塊:r8c13(7) => r7c1, r9c13 <> 7
結(jié)論里(推出符號(hào)后的部分)即使出現(xiàn)多個(gè)單元格,也不需要使用大括號(hào)括起來(lái),例如結(jié)論里r7c1和r9c13指的是同時(shí)都可以刪除7,而并不是強(qiáng)調(diào)這些單元格的候選數(shù)7,所以此時(shí)的大括號(hào)是可以省略的(當(dāng)然也可以寫(xiě)上去)。
Part 3 數(shù)組(Subset)
接下來(lái)我們來(lái)快速瀏覽幾則數(shù)組示例,然后提一些在前面數(shù)組沒(méi)有說(shuō)到的東西。
不過(guò),因?yàn)楦淖優(yōu)槿珮?biāo)視角后,唯一余數(shù)就顯得觀察起來(lái)相當(dāng)簡(jiǎn)單,所以與之有所關(guān)聯(lián)的顯性數(shù)組此時(shí)被我調(diào)整在了隱性數(shù)組之前,先給出例子。
3-1 顯性數(shù)組(Naked Subset)
3-1-1 顯性數(shù)對(duì)(Naked Pair)

顯性數(shù)對(duì):{r7c9, r9c7}(23) => r89c9 <> 2, r9c89 <> 3
3-1-2 顯性三數(shù)組(Naked Triple)

顯性三數(shù)組:r479c2(578) => r3c2 <> 58, r6c2 <> 8
3-1-3 顯性四數(shù)組(Naked Quadruple)

顯性四數(shù)組:r2c4789(2489) => r2c12 <> 2, r2c25 <> 4, r2c135 <> 8
3-2?隱性數(shù)組(Hidden Subset)
3-2-1 隱性數(shù)對(duì)(Hidden Pair)

隱性數(shù)對(duì):r46c3(79) => r4c3 <> 456, r6c3 <> 346
隱性數(shù)組的候選數(shù)視角有一點(diǎn)不好入門(mén)。這里簡(jiǎn)單說(shuō)一下。
從候選數(shù)角度來(lái)看,可以發(fā)現(xiàn)b4里,能放7和9的位置只有r46c3,由于同一區(qū)域的關(guān)系,于是它們就形成了隱性數(shù)對(duì)了。
3-2-2?隱性三數(shù)組(Hidden Triple)

隱性三數(shù)組:r568c2(378) => r5c2 <> 69, r6c2 <> 59, r8c2 <> 69
3-2-3?隱性四數(shù)組(Hidden Quadruple)

隱性四數(shù)組:r7c2378(1567) => r7c2 <> 248, r7c3 <> 8, r7c7 <> 9, r7c8 <> 2
3-3 區(qū)塊數(shù)組(Naked Subset+)
3-3-1 區(qū)塊三數(shù)組(Naked Triple+)

區(qū)塊三數(shù)組:r278c5(49), r78c5(6)?=> r3c5 <> 4, r13c5, r8c6 <> 6, r19c5 <> 9
3-3-2 區(qū)塊四數(shù)組(Naked Quadruple+)

區(qū)塊四數(shù)組:r4c789(14), {r4c789, r5c7}(39) =>
?r4c1 <> 14, r5c8 <> 3, r5c9 <> 39, r6c8 <> 4, r6c9 <> 14
3-4 真·為什么沒(méi)有五數(shù)組?
那么,回到直觀類(lèi)技巧里遺留的問(wèn)題:為什么我們不具有五數(shù)組,或者更大規(guī)格的數(shù)組呢?這里我們將為大家解釋這一點(diǎn)。
3-4-1 顯隱性互補(bǔ)
有沒(méi)有想過(guò)一種證明思路,就是通過(guò)顯性和隱性的某種特性,使得一旦有顯性的時(shí)候,隱性就一定不能出現(xiàn)超過(guò)規(guī)格為4的情況呢?


我們找出了一個(gè)稍微極端的例子。例如左圖,我們可以發(fā)現(xiàn)它實(shí)際上是一個(gè)顯性數(shù)對(duì)結(jié)構(gòu)。不過(guò)我們拿出同樣的例子,只是切換技巧,可以變成右圖這樣,圖中的例子立馬變?yōu)榱艘粋€(gè)隱性數(shù)組。
細(xì)數(shù)右圖的隱性數(shù)組,可以發(fā)現(xiàn)它的規(guī)格是5,即一個(gè)五數(shù)組,而我們僅僅是把刪數(shù)不動(dòng),把原來(lái)涂了色的數(shù)字變?yōu)椴煌可?,而不涂色的候選數(shù)變?yōu)橥苛松?。那么形成這樣的原因是為什么呢?
一列一共是9格,除去兩格已經(jīng)有確定值的關(guān)系,所以只剩下7個(gè)空格。一旦這7個(gè)格子里有一個(gè)顯性數(shù)組結(jié)構(gòu),那么必然會(huì)存在一個(gè)隱性數(shù)組,規(guī)格呢?規(guī)格就是拋開(kāi)這個(gè)顯性數(shù)組結(jié)構(gòu)涉及的格子之外,剩下的單元格全部構(gòu)成一個(gè)隱性數(shù)組,這么大的規(guī)格。
你可能會(huì)問(wèn):這樣真的什么時(shí)候都可行嗎?答案是顯然的。我們從另外一個(gè)維度來(lái)看一則極端的例子。


我們來(lái)看這一則示例,首先從左圖可以看到它是一個(gè)隱性數(shù)對(duì);而我們對(duì)照右圖可以發(fā)現(xiàn),剩余四格構(gòu)成了顯性四數(shù)組。別急,你是不是看到,四數(shù)組里除了r8c7有一個(gè)4以外,其它格子都沒(méi)有4???對(duì),這就是這個(gè)示例要告訴大家的東西。
它實(shí)際上也屬于數(shù)組,而且是一個(gè)合格的顯性四數(shù)組結(jié)構(gòu),不過(guò)由于受到其它4的確定值的影響,4最終在結(jié)構(gòu)里只有一處可填。這本身沒(méi)有問(wèn)題。不過(guò),因?yàn)樗廊粷M(mǎn)足四個(gè)單元格里只有四種不相同的數(shù)字,所以它從這個(gè)層面來(lái)說(shuō),確實(shí)是四數(shù)組。只是,這里最終我們能確定一點(diǎn),這一行其余位置的候選數(shù)4都刪除掉后,4就真的只有r8c7一處可以填了!所以除了剛才刪數(shù)結(jié)論外,這種數(shù)組還有一個(gè)出數(shù)結(jié)果:r8c7 = 4,于是,四數(shù)組降階為了三數(shù)組。
雖說(shuō)降階,但是實(shí)際上還是合適的。如果我們此時(shí)不再把這個(gè)四數(shù)組看作真正的四數(shù)組,而是只看r8c236三格,就會(huì)發(fā)現(xiàn)它實(shí)際上就是一個(gè)顯性三數(shù)組,所以此時(shí)得到的刪數(shù)是r8c7(78),此時(shí)直接利用唯一余數(shù)就能夠出數(shù)了。
所以,總的來(lái)說(shuō),只要有顯性數(shù)組,就必然在這個(gè)區(qū)域里存在與之互補(bǔ)的隱性數(shù)組;反之亦然。那么,我們來(lái)簡(jiǎn)單計(jì)算一下,為什么沒(méi)有五數(shù)組,或更高規(guī)格的數(shù)組。
顯然,五數(shù)組的存在就必然存在與之對(duì)應(yīng)互補(bǔ)的另外一個(gè)數(shù)組,這個(gè)數(shù)組的規(guī)格必然小于或等于4。所以,即使我們能夠發(fā)現(xiàn)這樣的數(shù)組,結(jié)構(gòu)也存在與之互補(bǔ)的另外一個(gè)規(guī)格小于5的數(shù)組,所以,理論上是不存在五數(shù)組或更高規(guī)格的數(shù)組的。
3-4-2 為什么要提顯隱性互補(bǔ)?
那么,為什么要提起顯隱性互補(bǔ)呢?提起它的原因很簡(jiǎn)單:為了解決看不到某種數(shù)組的關(guān)系。因?yàn)轱@隱性互補(bǔ)的存在,我們?cè)谟^察顯性數(shù)組的時(shí)候,就可以使用隱性數(shù)組的互補(bǔ)視角來(lái)進(jìn)行代換。隱性數(shù)組僅通過(guò)排除可以得到,所以我們更容易發(fā)現(xiàn)它;既然發(fā)現(xiàn)了隱性數(shù)組,也就間接地相當(dāng)于發(fā)現(xiàn)了顯性數(shù)組。所以,如果你對(duì)顯性數(shù)組不熟悉,可以使用隱性數(shù)組來(lái)進(jìn)行代換。這就是互補(bǔ)存在的意義。
3-5 提一下命名
最后說(shuō)一下數(shù)組的命名格式和規(guī)范。最開(kāi)始,數(shù)組被稱(chēng)為鏈數(shù),比如三數(shù)組最開(kāi)始被稱(chēng)為三鏈數(shù)。不過(guò)鏈數(shù)一詞來(lái)源于中國(guó)臺(tái)灣的謝道臺(tái)老師,后面中國(guó)大陸也在推廣數(shù)獨(dú),并使用適合大陸習(xí)慣的稱(chēng)呼數(shù)組一詞。所以鏈數(shù)也就變?yōu)閿?shù)組了,實(shí)際上它們是一個(gè)東西。而在英語(yǔ)里,數(shù)組一詞有多個(gè)翻譯:subset(子集)、tuple(元組)等。subset來(lái)自于數(shù)學(xué)術(shù)語(yǔ)set(集合),而tuple來(lái)自于計(jì)算機(jī)編程的數(shù)據(jù)結(jié)構(gòu)元組:
(string name, int age, bool isGirl) = ("Sunnie", 24, false);
即使我們知道,數(shù)組在五階及其以上的時(shí)候并不存在,但在數(shù)獨(dú)里,它們依然是被命了名的:
數(shù)對(duì):pair;
三數(shù)組:triple;
四數(shù)組:quadruple;
五數(shù)組:quintuple;
六數(shù)組:sextuple;
七數(shù)組:septuple。
數(shù)組里沒(méi)有八數(shù)組和九數(shù)組,因?yàn)榛パa(bǔ)的最大規(guī)格才等于1或0,這在數(shù)組里顯然是不可能也沒(méi)必要出現(xiàn)的。
好了,具體內(nèi)容就說(shuō)到這里。數(shù)組我們就說(shuō)完了。

技巧信息
名詞解釋
候選數(shù)(Candidate):表示某個(gè)單元格的可能填入的情況。一個(gè)可能情況就是一個(gè)候選數(shù)。
直觀(Direct):表示不需要標(biāo)記任何候選數(shù)就可以完成的做題模式。
局部標(biāo)記(Partial Marked):標(biāo)記其中某一個(gè)或某一些單元格的候選數(shù),用于輔助推理的做題模式。
全部標(biāo)記(Full Marked):將盤(pán)面的所有單元格的所有可能填數(shù)情況都標(biāo)記出來(lái)的做題模式。
出數(shù)(Assignment):通過(guò)技巧得到某處填入某個(gè)數(shù)的結(jié)論的行為。
刪數(shù)(Elimination):通過(guò)技巧得到某處的某個(gè)數(shù)(或某些數(shù)字)肯定可以去除掉的行為。
鏈數(shù)(Subset):謝老師(謝道臺(tái))對(duì)數(shù)組技巧早期的稱(chēng)呼。謝老師是原臺(tái)灣數(shù)獨(dú)協(xié)會(huì)(TSA)的會(huì)長(zhǎng),每日發(fā)布五道數(shù)獨(dú)題目。
三鏈數(shù)(Triple):三數(shù)組的另稱(chēng)。
子集(Subset):數(shù)學(xué)用語(yǔ),表示集合的其中某個(gè)部分。空集是任何集合的子集。
元組(Tuple):Python 和 C# 等編程語(yǔ)言里表示一組數(shù)據(jù)的術(shù)語(yǔ)詞。
集合(Set):數(shù)學(xué)和編程用語(yǔ),表示一系列數(shù)據(jù)的統(tǒng)稱(chēng)。