显性数组

显性数组

初级

什么是数独中的裸子集?

裸子集是指同一宫(行、列或九宫格)内N个格子的候选数合起来恰好包含N个不同的数字。由于这N个数字必须填入这N个格子,它们就不能再出现在该宫的其他单元格中。这样你就能安全地从其余格子中排除这些数字。“裸”的意思是候选数完全可见、暴露在外。你无需寻找隐藏在其他候选数中的数字。子集通过那些格子里的铅笔标记清楚地显现出来。裸子集技巧共有四种,分别对应一种可能的组大小:-裸单(N=1)——一个单元格只有一个候选数-裸双(N=2)——两个格子的候选数合起来恰好是两个数字-裸三数(N=3)——三个格子的候选数合起来恰好是三个数字-裸四数(N=4)——四个格子的候选数合起来恰好是四个数字这四种技巧构成一个家族。它们共享相同的底层逻辑,只是涉及的格子数量不同。一旦你理解了核心原理,更大的子集就会成为较小子集的自然延伸。

核心原理:裸子集为何有效

裸子集背后的逻辑基于一种基本的计数论证,有时被称为鸽巢原理。通俗地说:如果你有N个位置,而恰好有N个物品要填入,那么每个物品正好占一个位置,其他物品无法占据这些位置。设想一行有九个格子。每个未解出的单元格都有一组候选数字,即那些仍可合法填入该单元格的铅笔标记。假设你发现该行中有两个格子的候选数都来自同一个两位数池,比如{4,6}。那么其中一个格子必定填4,另一个必定填6。没有其他排列的余地。这意味着该行中其他单元格都不能包含4或6,因为这两个数字已被那两个格子完全占用。同样的推理可以向上扩展。三个格子的候选数合起来恰好是三个数字,就把这三个数字锁定在这三个格子中。四个格子有四个合并候选数,就锁定全部四个数字。在每一个单元格中,被锁定的数字都可以从同一宫的其他所有格子中排除。无论该宫是行、列还是3x3九宫格,这一原理都同样适用。唯一的要求是全部N个格子都属于同一宫。

裸单:数独解题的基础

裸单是最简单的裸子集。当一个单元格的铅笔标记中只剩下一个候选数时,就会出现这种情况。由于只有一个数字可以合法地填入该单元格,那个数字就是该单元格的解。每一位数独解题者,无论是人还是算法,都依赖唯一候选数。它们是排除链的最后一步:当行、列和宫的约束排除了所有不可能的数字后,最后剩下的候选数就是答案。寻找裸单需要你仔细追踪每个单元格的铅笔标记。一个单元格一开始最多有九个可能的候选数。当你在棋盘其他位置填入数字时,候选数会被排除:-如果某个数字被填入同一行的任意位置,就从该单元格的候选数中将其移除。-如果某个数字被填入同一列的任意位置,就从该单元格的候选数中将其移除。-如果某个数字被填入同一个3x3宫的任意位置,就从该单元格的候选数中将其移除。当这些排除使某个单元格只剩下一个候选数时,你就找到了一个裸单。考虑一个部分解开的谜题中的单元格R5C3。行、列和宫的约束排除了以下数字:-第5行已包含:1、3、5、8-第3列已包含:2、6、9-第4宫(中左宫)已包含:7综合起来,数字1、2、3、5、6、7、8和9都被排除了。唯一剩下的候选数是4。单元格R5C3必定是4。这就是一个裸单。每走一步之后,都应首先检查唯一候选数。每次你填入一个数字,都可能使相邻的格子只剩下一个候选数。在较简单的谜题中,一连串的唯一候选数无需其他技巧就能解开棋盘的大部分。即使在较难的谜题中,唯一候选数也能在更高级技巧排除候选数之后清理棋盘。

裸双:两个格子,两个候选数,强大的排除力

当同一个宫中两个格子都恰好只含有相同的两个候选数、且没有其他候选数时,就出现了裸双。由于这两个数字必须填入这两个格子,你可以从该宫中其他所有单元格中排除这两个数字。显性数对是最常用的中级数独技巧之一。它们出现频繁,常常能通过移除阻碍其他技巧的候选数来解锁重大进展。假设第1行有两个格子都只含有候选数{4,6},没有其他候选数:-R1C2的候选数:{4,6}-R1C7的候选数:{4,6}这两个格子中必有一个是4,另一个是6。我们尚不知道哪个是哪个,但可以确定4和6已被这两个格子完全占用。因此,第1行中其他任何单元格都不能含有4或6。如果R1C4的候选数为{3,4,6,9},通过移除4和6可缩减为{3,9}。如果R1C8的候选数为{2,6},可缩减为{2}。这种缩减为单一候选数本身就是一次裸单,能立即解出该单元格。扫描每个宫,寻找恰好只有两个候选数的格子。当你发现同一宫中有两个格子的双候选数集合完全相同时,你就找到了一个裸双。由于只有两个铅笔标记的格子视觉上很显眼,显性数对是最容易发现的中级技巧之一。一个有用的习惯:每当你注意到一个只有两个候选数的单元格时,立即检查同一行、列或宫中是否有其他单元格共享相同的数对。

裸三数:三个格子、三个候选数,一个微妙的转折

当同一宫中的三个单元格的候选数完全来自恰好三个数字的同一候选池时,就出现了裸三数。这三个单元格所有候选数的并集恰好包含三个不同的数字。这里有一个让许多解题者措手不及的关键点:每个单独的单元格并不需要包含全部三个数字。一个有效的裸三数可以包含只含有三个数字中两个的单元格。重要的是这三个单元格所有候选数的并集恰好是三个不同的值。许多玩家先学会显性数对,然后就想当然地认为显性三数组需要三个单元格各自都含有相同的三个候选数,比如三个单元格都是{1,3,7}。虽然那是裸三数的一种有效形式,但它并不是唯一的形式,甚至不是最常见的形式。看看第5列的这三个单元格:-R2C5:{1,3}-R4C5:{1,7}-R8C5:{3,7}合并后的候选数是{1,3,7},正好是三个单元格中的三个数字。这是一个有效的裸三数,尽管没有任何一个单元格包含全部三个数字。其逻辑与显性数对相同。这三个数字必须以某种顺序填入这三个单元格。一个单元格填1,一个填3,一个填7。因此,可以从第5列其他所有单元格中排除1、3和7。先从找出有两个或三个候选数的单元格开始。在给定的宫中,如果你发现三个单元格的候选数合并后恰好构成三个数字的集合,你就找到了一个裸三数。一个实用的方法:1.在每个宫中,列出所有候选数为三个或更少的未解单元格。2.任选三个这样的单元格的组合。3.取它们候选数的并集。如果并集恰好有三个数字,那就是一个裸三数。由于存在多种可能的组合,显性三数组比显性数对需要更仔细的扫描。这也是它们成为更高难度技巧的原因之一。

裸四数:四个单元格,四个候选数,最大复杂度

裸四数是最大的常用显性数组。当一个宫格中的四个单元格的候选数完全来自同一组恰好四个数字时,就构成了它。与三数组一样,各个单元格不必包含全部四个数字。关键条件是四个单元格候选数的并集恰好等于四个不同的值。其逻辑与较小的显性数组完全相同。四个数字必须填入四个单元格。这些数字不能出现在该宫格的任何其他地方。随手扫视很难发现显性四数组。四个单元格配四个数字,需要检查的可能组合要多得多。在一个有六个未解单元格的宫格中,从中选出四个共有15种可能方式。逐一在脑中检查十分繁琐。大多数能找到显性四数组的解题者,要么靠系统性地检查,要么先发现剩下的单元格构成了互补的隐性数组。尽管罕见,显性四数组确实会出现在真实谜题中,尤其是那些难度评为中等至困难的题目。掌握这项技巧能确保你在更简单的技巧用尽时不会卡住。

如何发现显性数组:实用扫视技巧

高效地发现显性数组需要有条理的方法,而非随意扫视。以下是经验丰富的解题者所用的技巧:从候选数少的单元格入手:候选数较少的单元格更可能参与显性数组。一个有两个候选数的单元格可以组成数对、三数组或四数组。一个有五个候选数的单元格用处较小,因为它给并集贡献了太多数字。先扫视每个宫格中候选数为两个的单元格。检查是否有匹配的数对。然后再一起查看候选数为两个或三个的单元格,以找出三数组。逐宫格进行:选一行、一列或一个区块,把其中所有未解单元格放在一起检查。列出它们的候选数。寻找候选数在小的数字池内相互重叠的单元格群。使用计数检查:对于任何你怀疑可能构成显性数组的N个单元格,数一数它们合并候选数中的不同数字。如果数量等于N,你就找到了一个显性数组。如果数量超过N,这些单元格就不是显性数组。每次排除后都重新检查:当其他技巧从单元格中移除候选数时,重新检查该单元格所在的宫格。这次排除可能创造出一个此前看不见的新显性数组。许多显性数对都是先前排除的副产物。寻找补集:如果一个宫格有K个未解单元格,而你怀疑存在显性数组却无法直接找到,不妨看看补集。找到一个大小为M的隐性数组,就自动意味着存在一个大小为K-M的显性数组。

显性数组与隐性数组之间的关系

显性数组和隐性数组是同一枚硬币的两面。理解它们的对偶性可以加深你对数独逻辑的掌握,并帮助你发现原本可能错过的模式。当一个宫内的N个数字只出现在N个特定单元格中时,就形成了隐性数组。这些数字之所以是“隐性”的,是因为那些单元格中可能还包含其他候选数。消除法会从这N个单元格中移除多余的候选数,只留下隐性数字。在任何有K个未解单元格的宫中,如果存在大小为N的显性数组,就必然存在大小为K-N的隐性数组。这两个数组是互补的:它们把未解单元格和剩余数字划分成两个互不重叠的组。例如,考虑一行有6个未解单元格。如果其中两个单元格构成一个裸双,那么剩下的四个单元格就构成一个隐藏四数(或者等价地说,在这四个单元格被排除的数字中存在一个裸四数)。你可以找到其中任意一个,并应用相应的消除。这种对偶性意味着你有两条通往同一消除的路径。如果一个宫有很多未解单元格,那么一个小的显性数组(数对或三数组)比一个大的隐性数组更容易被发现。反之,如果一个宫的未解单元格很少,那么隐藏数对可能比寻找互补的裸四数更容易。经验丰富的解题者会根据具体情况中哪种更实用,在显性和隐性视角之间切换。能够看到两面会给你带来显著的优势。

难度进阶:从初学者到高手

四种显性数组技巧跨越多个难度等级,反映出随着组规模增大,它们变得越来越难发现:裸单(N=1):等级2,简单裸双(N=2):等级3,简单裸三数(N=3):等级4,中等裸四数(N=4):等级5,有挑战性难度的提升并不在于逻辑,因为每个单元格中的逻辑都是相同的,而在于搜索的复杂度:裸单:你只需检查一个单元格。如果它只有一个候选数,就完成了。无需进行组合搜索。裸双:你需要找到两个候选数相匹配的单元格。在一个有六个未解单元格的宫中,有15种可能的数对需要检查。但由于你要找的是恰好具有两个相同候选数的单元格,其视觉模式十分独特,容易辨认。裸三数:你需要找到三个单元格,其候选数合并后正好是三个数字。在一个有六个未解单元格的宫中,有20种可能的三元组。搜索更难,因为这些单元格不必具有相同的候选数集合。裸四数:你需要从可能众多的未解单元格中找出四个单元格。组合数量不断增长,而且四数字的并集更难在脑中计算。大多数四元组都是间接找到的,要么通过系统地统计候选数,要么通过发现互补的隐藏数对。谜题难度评级往往取决于解题需要用到哪些技巧。一个只需显性唯一数和数对就能解出的谜题被评为简单。一个需要显性三数组的谜题则进入中等范畴。一个需要裸四数的谜题至少属于有挑战性。

常见错误及如何避免

错误1:以为所有单元格都包含所有数字裸三元组和裸四元组最常见的错误,是假设子集中每个单元格都必须包含全部N个数字。这是错的。一个裸三数的单元格为{1,3}、{1,7}和{3,7},即使没有任何一个单元格同时包含1、3和7,也完全成立。如何避免:始终检查候选数的并集,而不是单个单元格。数一数该组所有单元格中不同数字的个数。如果个数等于单元格数,那么无论这些数字如何在各个单元格中分布,它都是裸子集。错误2:混淆裸子集与隐性子集一个裸双有N个单元格,其候选数仅限于N个数字。一个隐藏数对有N个数字仅限于N个单元格,但这些单元格可能还有额外的候选数。对于裸双,你从该宫的其他单元格中排除这对数字。对于隐藏数对,你从这对数字自身的单元格中排除非这对的数字。如何避免:问自己:“我看的是候选数受限的单元格(裸),还是位置受限的数字(隐性)?”限制的方向决定了你找到的是哪种类型的子集。错误3:从错误的单元格中排除当你在单元格R1C2和R1C7中发现一个裸双{4,6}时,你要从第1行的其他单元格中排除4和6。你不要从R1C2和R1C7本身排除其他候选数。裸双的候选数在子集自身的单元格中保持不变。如何避免:记住规则:裸子集从子集之外的单元格中排除其数字。隐性子集从子集之内的单元格中排除非子集的数字。错误4:忘记检查所有共享的宫两个单元格可能共享不止一个宫。例如,R1C1和R1C3同时共享第1行和第1宫。如果它们构成一个裸双,你可以从第1行的其他单元格以及第1宫的其他单元格中排除这对数字。不要只限于在一个宫中排除。如何避免:对于你找到的每个裸子集,检查该子集所有单元格共享哪些宫。在每个共享的宫中都进行排除。

何时在解题流程中使用裸子集

显性数组应按从小到大顺序检查:1.先看显性单数。每次填数后,都要重新扫描是否有新的显性单数。它们无需额外推理,立即可得。2.其次看显性数对。当不再有显性单数时,在每一行、每一列和每一宫中扫描显性数对。它们是最常见的中级技巧,常常能解锁更多显性单数。3.第三看显性三数组。当数对不够用时,把搜索范围扩大到三数组。重点关注那些有多个格只剩两三个候选数的单元。4.最后看显性四数组。只有当更小的数组和其他技巧都已用尽时,才去搜索四数组。鉴于其难度,不妨先检查隐性数对或三数组,因为它们可能更容易找到,并通过对偶原理揭示同样的信息。按照这一顺序,你就能优先运用最简单、最有效的技巧,把脑力留到真正需要的时候。

摘要

显性数组是一类由四种数独技巧组成的家族,它们由同一条优雅的原则统一起来:一个单元中N个格恰好共有N个候选数,就把这些数字锁定在原位,从而可以从该单元的其他所有格中排除它们。从能直接解出一个单元格的简单裸单,到清除候选数的显性数对和三数组,再到需要仔细系统搜索的难以捉摸的裸四数,这些技巧构成了逻辑数独求解的骨干。掌握它们能为你提供适用于各种难度谜题的可靠工具,并为应对更高级的策略(如隐性数组、鱼形结构和链)打下基础。