数独高阶技巧之八——SDC
在本系列的第四篇“简单异数链”中,向大家介绍了XY-Wing等一系列Wing类技巧,并提到可以用(拐弯的)数组的观念来理解这些结构,经过第六篇ALS的学习之后,大家回过头再去看Wing,应该可以发现相关的实例都可以用ALS去解释。本篇则要介绍一种与上述结构类似的删除技巧——SDC(Sue de Coq)。
一、基本形态
Sue de Coq这个命名来自于SDC技巧最早发现者的论坛昵称,更正式的名称应该是Two-Sector Disjoint Subsets(双分离子集删除法),我们先来看SDC的两种基本形态。

图1中,B4和R5深色背景4个待解格中存在且仅存在(A、B、C、D)4个候选数,可将这4个候选数分成红(A、B)、绿(C、D)两个分离子集(红∩绿=Ø),将4个待解格按其所在单元分为宫B、行R两个子集,红色(A、B)存在于子集B三格中,绿色(C、D)存在于子集R三格中,两个待解格子集存在交集X(交叠区域两格,X=B∩R),X中的候选数为红、绿两个候选数分离子集的并集,若满足这些条件,红、绿两个子集可各自对所在单元其他格内的候选数进行摈除。
为什么可以这样删数呢?以ALS的视角来看原理很简单,将这四格按所在单元分为宫、行两组ALS(每组都是3格4数),此时:
1、若宫行相交区域的A、B都不成立,则R5深色3格中只能填入C、D两个候选数,违反数独规则,故宫行相交区域的A、B必须成立一个,这样就会与R4C1格构成AB数对,进而对AB数对所在的B4进行摈除;
2、若宫行相交区域的C、D都不成立,则B4深色3格中只能填入A、B两个候选数,违反数独规则,故宫行相交区域的C、D必须成立一个,这样就会与R5C5格构成CD数对,进而对CD数对所在的4进行摈除。
我们还可以用数组的视角来进行分析:在深色4格中,存在且仅存在(A、B、C、D)4个不同的候选数,虽然4格不在同一单元,但他们籍由交叠区域联结,并不影响(ABCD)数组的成立(在N格中存在且仅存在N个不同候选数),亦即(A、B、C、D)4个候选数锁定了这4格,只是由于这个数组拐了弯,分处不同单元,其删数方法也不同于正常的数组。在该数组中,仅存在于特定单元的候选数集只能对所在单元其他格进行摈除。
来看第2种基本形态:

与图1示例不同之处在于,相交区域多出了一个候选数E,相应的格数也增加了一格,深色5格存在且仅存在 A、B、C、D、E 5个候选数,我们仍可将这些候选数分为分处宫、行的两个分离子集(AB)与(CDE)或者(ABE)与(CD),并且,宫和行(列)相交区域的三格为两个分离子集的并集,与上例一样,大家可以分别用数组和ALS的视角来理解删数的逻辑,只是本例中由于候选数E仅位于相交区域内(亦即E同时存在于B4、R5两个单元),所以,E可以对B4和R5两个单元进行摈除。
来看实例:

图3盘势中,B7和R7中R7C137、R8C3四格仅含有(3、4、5、9)4个候选数,蓝色候选数(4、5)构成一个子集,紫色候选数(3、9)构成一个子集,两个分离子集相交于R7C13两格,且这两格为两个子集的并集,这4格形成SDC结构,每个子集可对其所在单元其他格内的候选数进行摈除(红色)。

图4则是基本形态2的一个实例,相交区域多出了候选数4,大家可以根据前面的介绍来理解本例的删数,具体过程不再赘述。
二、扩展形态
在基本形态的基础上,组成SDC的各单元待解格每增加一个新的候选数(不同单元可增加相同的候选数),都须相应在该单元增加一个仅含有SDC中候选数的待解格,SDC待解格中的所有候选数可按其所处单元分为若干个子集,每个单元的候选数子集须存在于其所含元素数+1的待解格中,且不同单元的待解格存在交叠区域(格数≧2),交叠区域内的候选数来自这些子集的并集(交叠区域候选数个数≧交叠区域格数+2),每个子集都可对自身所处单元内其他格中的候选数进行摈除。

图5的例子就是基本形态一的扩展,B6和C8中,绿框5格中仅存在候选数(3、5、7、8、9),这些候选数可分为宫(7、8、9)和列(3、5)两个分离子集,每个子集都存在于其所含元素数+1的待解格中,宫列交叠的两绿框格内的候选数(3、5、7、8)来自宫、列两个子集的并集(3、5、7、8、9),宫中的子集(7、8、9)可对B6其他格中的7、8、9进行摈除,列中的子集(3、5)可对C8其他格中的3、5进行摈除。
图6则是基本形态二的扩展,7格7数,大家可以对照定义自己揣摩一下删数的过程。

图7是基本形态一的扩展,特殊之处在于列和宫的待解格中增加了相同的候选数1,依然可以将其分为C7绿框四格(1、4、9),B9绿框四格(1、2、8)两个子集,这两个子集都是3数4格,交叠区域两格候选数为(2、4、8、9),其元素来自于两个子集的并集,可分别删去C7其他格中的1、4、9,B9其他格中的1、2、8。

图8的实例则是在图9的基础上再次扩展,请仔细体会。

以上都是可以分为两个子集的SDC,两个以上子集的SDC非常难观察,平时做题几乎用不到,就不介绍了。文末附上几个SDC的练习题,大家看看能不能找出来。



作者:零时四分_719b
链接:https://www.jianshu.com/p/673d43264984
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
数独高阶技巧之八——SDC的更多相关文章
- 数独高阶技巧入门之六——ALS
在这个系列的第一篇(链及其简单应用)以及第四篇(简单异数链)中已经简单介绍过ALS结构的定义,即n格中存在n+1个不同的候选数 (双值格可视为特殊的ALS结构) .根据数独规则,在组成ALS的候选数 ...
- 数独高阶技巧入门之七——AIC & Nice Loop
AIC(交替推理链,Alternate Inference Chain) 在简单异数链一文中我们介绍过XY-Chain技法,AIC可以看作是XY-Chain的扩展.有别于XY-Chain仅局限于双值格 ...
- 数独高阶技巧入门之三——Fish
术语Fish代表了一组工作原理相同的关于特定候选数的解题技巧(Fish技巧直接产生自数独规则——每个单元内的数字都不能重复),Fish家族成员包括“体型”从小到大的X-Wing.Swordfish. ...
- 读《实战 GUI 产品的自动化测试》之:第四步,高阶技巧
转自:http://www.ibm.com/developerworks/cn/rational/r-cn-guiautotesting4/ 定义测试控件库 本系列前几篇文章对 IBM 框架做了介绍, ...
- 高阶 CSS 技巧在复杂动效中的应用
最近我在 CodePen 上看到了这样一个有意思的动画: 整个动画效果是在一个标签内,借助了 SVG PATH 实现.其核心在于对渐变(Gradient)的究极利用. 完整的代码你可以看看这里 -- ...
- 《前端之路》之 JavaScript 进阶技巧之高阶函数(下)
目录 第二章 - 03: 前端 进阶技巧之高阶函数 一.防篡改对象 1-1:Configurable 和 Writable 1-2:Enumerable 1-3:get .set 2-1:不可扩展对象 ...
- JavaScript系列--JavaScript数组高阶函数reduce()方法详解及奇淫技巧
一.前言 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. reduce()方 ...
- 分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习. 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力: 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大 ...
- Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)
1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3. ...
随机推荐
- mongodb分片(七)
1.插入负载技术分片架构图 2.片键的概念和用处 看下面这个普通的集合和分片后的结果 3.什么时候用到分片呢? 3.1机器的磁盘空间不足 3.2单个的mongoDB服务器已经不能满足大量的插入操作 3 ...
- delphi BLE 学习
TBluetoothLE 控件 TBluetoothLE.FManager: TBluetoothLEManager; class constructor TBluetoothLEManager.Cr ...
- Dreamweaver 中文乱码
定义当前页面的编码属性 Ctrl+j 标题/编码 将编码改成UTF8即可 PhpStorm FILE->Setting->File Encoding->将U ...
- 【LUA table 移除操作非常慢】
LUA的表有插入和删除两种操作.插入操作非常快,100000次操作都在0.01S左右,而删除操作在表元素大于10000时却急速变慢,测试如下: t = {} local t1= os.clock() ...
- Dreamweaver基本操作
1.站点管理 在网站设计前,我们需要先建立站点,再进行网站设计. 站点 作用:用来归纳一个网站上所有的网页.素材及他们之间的联系. 站点根文件夹命名规则:由数字.字母.下划线组成,数字不能在开头. 首 ...
- 【SPOJ -NSUBSTR】Substrings 【后缀自动机+dp】
题意 给出一个字符串,要你找出所有长度的子串分别的最多出现次数. 分析 我们建出后缀自动机,然后预处理出每个状态的cnt,cnt[u]指的是u这个状态的right集合大小.我们设f[len]为长度为l ...
- Python 生成MYSQL inser语句
背景: 一般来说,navicat生成的insert已经够用了 如果说一张表有2,30个字段,每个字段还得一一对上,其实是很难的.所以抽空写了个小程序.用它完全不用担心字段对不上了.因为没有时间,需要手 ...
- nodemon 的坑
1. 我的系统是ubuntu18.04.2 的 在使用过程中不知道什么为题 nodemon 运行的项目不在前台打印了项目, 我监听的端口 9302 一直在运行, 前台看不到 我想停止掉用 ps -ef ...
- cocos2dx 触摸屏的使用
只要继承与CCLayer的类都可以实现触摸功能.CCLayer类的触摸事件的一些接口如下: // 单点触碰 virtual bool ccTouchBegan(CCTouch *pTouch, CCE ...
- 新手教程: 如何在新浪云计算SAE里部署代码
感谢 sou6 的投递 时间:2011-11-22 来源:老夏博客 SAE自2011-7-10日起,全面支持SVN代码部署,用户不仅可以通过任何SVN客户端部署代码,而且SAE现有的代码部署方式也已经 ...