【鏈式推理①】基礎篇:強鏈接與弱鏈接
鏈式推理(Chain)是數獨高級技巧的核心理論框架。幾乎所有的高級排除技巧——從簡單的X-Wing到複雜的AICs——都可以用鏈式推理來統一理解和描述。本文將深入探討鏈式推理最基礎也最重要的兩個概念:強鏈接與弱鏈接。
什麼是鏈?
在數獨中,鏈(Chain)是候選數之間通過某種邏輯關係形成的連接序列。想像一下:如果我們能在候選數之間建立「如果A為真,則B為真/假」這樣的推理關係,並將這些關係串聯起來,就形成了鏈。
鏈的本質是邏輯傳遞:從一個起點出發,通過一系列的邏輯推斷,得出某個結論。這個結論通常用於:
- 確定某個候選數必須為真(確定填入值)
- 確定某個候選數必須為假(排除候選數)
要理解鏈,我們必須首先理解構成鏈的基本單元:鏈接(Link)。鏈接描述的是兩個候選數之間的邏輯關係,根據關係的強度分為強鏈接和弱鏈接。
強鏈接(Strong Link)
兩個候選數A和B之間存在強鏈接,當且僅當:A和B恰好一個為真,一個為假。
換言之,如果A為假則B必為真,如果A為真則B必為假(互斥且完備)。
記法:A = B 或 A ═══ B(雙線表示)
強鏈接的來源
強鏈接可以來自以下幾種情況:
1. 雙值格內的強鏈接(Bi-value Cell)
當一個格子只有兩個候選數時,這兩個候選數之間存在強鏈接。
邏輯:如果4為假,該格子必須是7;如果7為假,該格子必須是4。
雙值格是最常見的強鏈接來源,因為它直觀明了:格子要麼填這個數,要麼填那個數。
2. 共軛對形成的強鏈接(Conjugate Pair)
當某個數字在一個單元(行、列或宮)內只出現在兩個位置時,這兩個位置的該候選數之間存在強鏈接。這種關係稱為共軛對。
邏輯:第5行必須有一個3。如果R5C2不是3,R5C8必須是3;反之亦然。
共軛對強鏈接的兩端是同一個數字在不同位置,而不是同一位置的不同數字。這與雙值格內的強鏈接有本質區別。
3. 分組強鏈接(Grouped Strong Link)
更廣泛地說,當一組候選數與另一組候選數之間滿足「恰好一組為真」的關係時,就存在強鏈接。這在高級技巧中會涉及,本系列第三篇將詳細討論。
強鏈接的核心性質
- 恰好一真:強鏈接的兩端恰好一個為真,一個為假
- 假傳真:如果一端為假,另一端必為真
- 真傳假:如果一端為真,另一端必為假
弱鏈接(Weak Link)
兩個候選數A和B之間存在弱鏈接,當且僅當:如果A為真,則B必定為假。
換言之,A和B至多有一個為真(可能都為假,但不可能都為真)。
記法:A - B 或 A ─── B(單線表示)
弱鏈接的來源
弱鏈接同樣有多種來源:
1. 同一格子內不同候選數之間的弱鏈接
在同一個格子內,任意兩個不同的候選數之間都存在弱鏈接。
邏輯:一個格子只能填一個數。如果填了1,就不可能是5。
2. 同單元內相同候選數之間的弱鏈接
在同一個單元(行、列或宮)內,同一個數字的所有候選位置之間兩兩存在弱鏈接。
邏輯:一個宮內同一數字只能出現一次。如果R1C7是6,則R2C8和R3C9都不能是6。
相比強鏈接,弱鏈接更加普遍。實際上,數獨的基本規則(行、列、宮內數字不重複;一格只填一數)本質上就是定義了大量的弱鏈接關係。
弱鏈接的核心性質
- 至多一真:弱鏈接的兩端至多有一個為真
- 真傳假:如果一端為真,另一端必為假
- 可能共假:兩端可以同時為假(這點與強鏈接不同!)
強鏈接與弱鏈接的對比
理解強鏈接和弱鏈接的區別是掌握鏈式推理的關鍵。讓我們通過一個對比表格來總結:
| 特性 | 強鏈接 (Strong Link) | 弱鏈接 (Weak Link) |
|---|---|---|
| 核心性質 | 恰好一真一假 | 至多一個為真 |
| 邏輯傳遞 | 假 → 真,真 → 假 | 真 → 假 |
| 可否同真 | ✗ 不可以 | ✗ 不可以 |
| 可否同假 | ✗ 不可以 | ✓ 可以 |
| 記號 | ═══(雙線)或 = | ───(單線)或 - |
| 常見來源 | 雙值格、共軛對 | 同格異數、同單元同數 |
強鏈接的特殊情況:同時也是弱鏈接
這裡有一個重要的概念需要理解:強鏈接往往同時也是弱鏈接。
強鏈接角度:如果4為假,7必為真 → 存在強鏈接
弱鏈接角度:如果4為真,7必為假 → 也存在弱鏈接
結論:這兩個候選數之間既是強鏈接也是弱鏈接!
強鏈接角度:如果R5C2的3為假,R5C8的3必為真 → 存在強鏈接
弱鏈接角度:如果R5C2的3為真,R5C8的3必為假(同行不能有兩個3)→ 也存在弱鏈接
結論:共軛對也同時滿足強弱兩種鏈接!
當兩個候選數之間恰好滿足「一真一假」的關係(即不可能同真,也不可能同假)時,它們之間既是強鏈接也是弱鏈接。這種關係是最「強」的鏈接關係,在鏈的構建中非常有用。
記憶口訣:雙值格和共軛對,強弱兩相隨。
「看到」的概念
在鏈式推理中,經常會用到「看到」(see)這個概念。理解「看到」對於識別鏈接關係至關重要。
候選數A「看到」候選數B,意味著A和B之間存在弱鏈接。
如果A為真,則B必為假——即A能「排除」B。
「看到」關係存在於:
- 同一格子的不同候選數之間
- 同一行中相同候選數之間
- 同一列中相同候選數之間
- 同一宮中相同候選數之間
這個概念在後續討論鏈的應用時會頻繁使用,比如「兩端能同時看到的候選數可以被排除」。
為什麼區分強弱鏈接如此重要?
強鏈接和弱鏈接的區分是鏈式推理的基石。它們的區別決定了:
強鏈接允許從「假」推出「真」;弱鏈接允許從「真」推出「假」。鏈式推理正是利用這兩種不同的傳遞方向來構建複雜的邏輯推導。
在構建鏈時,必須正確識別每一步是強鏈接還是弱鏈接,才能保證推理的正確性。錯誤地把弱鏈接當作強鏈接使用,會導致錯誤的結論。
許多看似不同的技巧(如X-Wing、Skyscraper、XY-Wing等)本質上都是特定模式的鏈。理解了強弱鏈接,就能用統一的框架理解這些技巧。
下一步
本文介紹了鏈式推理最基礎的兩個概念:強鏈接和弱鏈接。理解了這兩個概念後,我們就可以開始學習如何將它們組合起來構建完整的鏈。
在下一篇文章中,我們將討論:
- 如何交替使用強鏈接和弱鏈接構建鏈
- 鏈的真假狀態傳遞規則
- 鏈式推理的「著色」思想
- 從鏈的兩端得出結論的方法