最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第 55 講:宮內(nèi)魚以及魚的理論

2021-09-07 08:07 作者:SunnieShine  | 我要投稿

在前面的基礎(chǔ)部分里我們介紹了魚的基本使用和定義,不過可以看到的是,這種例子結(jié)構(gòu)非常大,導(dǎo)致可能出現(xiàn)的頻率不高,所以不怎么實(shí)用;其次是結(jié)構(gòu)不好推理,雖說它和數(shù)組是同構(gòu)的,性質(zhì)和數(shù)組完全一致,除了表達(dá)上不一致以外。

這一個部分我們將為你介紹的是魚的完整體系,這個體系將魚的內(nèi)容完整地推廣到任意同數(shù)情況,所以我們經(jīng)??梢月牭揭恍┬』锇榈脑u價:“魚 = 所有同數(shù)技巧”。

不過在進(jìn)入正文之前,我們需要先介紹一下后續(xù)經(jīng)常用到的魚的基本定義以及魚的刪數(shù)原則,在介紹完畢之后,我們才會正式地進(jìn)入魚的篇章。

Part 1 魚的原理

首先,我們再次回顧一下魚的一些常見術(shù)語詞匯。

  • 定義域(或基準(zhǔn)域,Defining Set或Base Set):定義魚結(jié)構(gòu)推導(dǎo)的區(qū)域集合。

  • 刪除域(或刪數(shù)域覆蓋域,Secondary Set或Cover Set):可以提供刪除魚結(jié)構(gòu)的區(qū)域的集合。

那么,我們可以這么去思考一個魚結(jié)構(gòu)的刪數(shù)邏輯,例如下圖。

如圖所示,我們回顧一下之前的推導(dǎo)邏輯,我們可以發(fā)現(xiàn),r368這三行的4的填數(shù)恰在同樣的三列里,這使得我們無論如何放置數(shù)字4的位置,但由于r368里每一行都必須放一個4的緣故,使得三行肯定會放下三處4,但它們被框在同樣的c567三列里,所以恰好我們安放4的位置就只能是在c567的不同行列的三處,但也都肯定可以保證,c567里,每一列都會出現(xiàn)一個4在r368c567的其中三個單元格里。

所以,c567既然可以保證每一列都會有4在r368c567里,使得其余位置都不能放4,所以可以刪除其余位置的4。

可以從剛才的示例的邏輯里精簡出來,定義域的每一個區(qū)域必須保證填數(shù)“必須填入一個”;而刪除域則保證的是“最多有一處可填入”。

定義域保證,每一個區(qū)域都必須有一個單元格可以放這個數(shù)字,顯然是成立的。因?yàn)榻Y(jié)構(gòu)里只有這些位置可以放下它們,所以不填就必然會導(dǎo)致出錯;而刪除域的保證卻不太好說明。你可以當(dāng)作這是刪除域的規(guī)定:刪除域必須要求每一個區(qū)域都最多有一個單元格放這個數(shù)字,就可以了。

再來回顧這個例子,定義域r368即保證r3、r6和r8每一個區(qū)域都必須放下一個4在r3c567、r6c567和r8c567里;刪除域c567則保證c5、c6和c7每一個區(qū)域最多都只有一個4要填入到r368c5、r368c6和r368c7里。相信你應(yīng)該能夠明白這一點(diǎn)了。

現(xiàn)在我們來說說魚的刪數(shù)原理和機(jī)制。

顯然,我們找到了三處刪除域和三處定義域。魚要求,如果魚的定義域和刪除域的區(qū)域數(shù)相等,并且刪除域給定的所有區(qū)域都能夠完整包含到定義域能放下數(shù)字的所有位置的話,那么刪除域的非涉及單元格都可以刪除。這句話有些繞,我們來理解一下這句話的邏輯。

我們先找到定義域區(qū)域的所有涉及單元格(r368c567),而刪除域c567恰好能夠包含r368c567的所有單元格,并且定義域區(qū)域數(shù)和刪除域區(qū)域數(shù)相同(都是3個區(qū)域),此時刪除域上非r368c567的其余單元格的4都可以刪除。

那么,魚的整體內(nèi)容就講到這里。我們現(xiàn)在來看魚的正文內(nèi)容。

Part 2 宮內(nèi)魚

2-1 宮內(nèi)魚的形成

由于結(jié)構(gòu)的特殊性,我們先從三鏈列開始談起現(xiàn)在我們要講到的內(nèi)容。

首先,我們先使用三鏈列來進(jìn)行結(jié)構(gòu)的變換。先介紹一下,這個圖就是我們之前所謂的魚圖結(jié)構(gòu),斜杠表示當(dāng)前單元格不能填入某一種候選數(shù),而x表示當(dāng)前位置可以填入這種候選數(shù)。

我們移動其中一列,使得和右側(cè)的一列拼起來,所以結(jié)構(gòu)變?yōu)橛覉D這樣。當(dāng)然,邏輯還是原本的三鏈列的邏輯。

現(xiàn)在,我們開始變換結(jié)構(gòu)的形狀。我們現(xiàn)在嘗試把其中的r2變換到b3里,這一點(diǎn)很奇怪,但也很特殊。變換后,結(jié)果變?yōu)橄聢D這樣。

如圖所示。如果結(jié)構(gòu)變?yōu)檫@樣,還能推理和執(zhí)行刪數(shù)邏輯嗎?我們嘗試使用之前我們得到的邏輯進(jìn)行解釋。首先,定義域區(qū)域數(shù)量為3:r58b3,這保證了這三個區(qū)域必須填入三個x到里面去;而刪除域是我們規(guī)定的,也恰好是三個區(qū)域,而這三個區(qū)域都完全恰好包括了所有我們原本定義域里圈出來的所有x。我們知道,從理論上可以明白一點(diǎn),既然刪除域能完整容納下定義域原本所有的候選數(shù)x,而且定義域區(qū)域數(shù)和刪除域區(qū)域數(shù)一樣,那不論怎么放置這些x的位置,由于不能違背數(shù)獨(dú)規(guī)則,即行列宮內(nèi)不含重復(fù)數(shù)字,那么x的位置還要在每一個定義域里恰好放一個,那顯然每一個刪除域里,就也必須每一個區(qū)域都含有一個x。否則,候選數(shù)x必定會在某一個定義域區(qū)域里出現(xiàn)兩次。畢竟我們只能填入這么多x,如果少一個刪除域區(qū)域不出現(xiàn)x,那就必然會讓定義域區(qū)域多一個位置填x,而定義域區(qū)域數(shù)只有那么多,所以多余的填數(shù)位置必然就會擠到同一個區(qū)域里,導(dǎo)致違背數(shù)獨(dú)規(guī)則。所以這個結(jié)構(gòu)的刪數(shù),刪除域的每一個區(qū)域的其余位置(涂色單元格并不含任何符號的位置)就是刪數(shù)的區(qū)域了。

從理論上聽起來很空泛,所以我們針對于實(shí)際情況來對這個結(jié)構(gòu)作出分析。首先,我們先來按照特殊的定義域區(qū)域b3來討論填數(shù),我們把它劃分為r123c7(x)和r123c8(x)兩部分。首先,如果r123c7里有一個單元格填x,則由于r123c7(x)區(qū)塊的影響,此時在r58里必然會產(chǎn)生一個二鏈列結(jié)構(gòu)在r58c28。r58c28顯然是可以被刪除c28的,因?yàn)榇藭r它是一個完美的二鏈列結(jié)構(gòu)。而由于假設(shè)r123c7(x)區(qū)塊的成立,此時c7是可以由于這個區(qū)塊得到x的刪數(shù)的,所以我們還可以把c7算上,所以刪除域是c278;接著,如果假設(shè)r123c8(x)區(qū)塊成立,則下面的r58依然會產(chǎn)生一個完美的二鏈列結(jié)構(gòu),刪除域此時是c27,但由于r123c8(x)區(qū)塊的成立,所以c8其余位置也是不能放下x的,所以我們把c8也算上,整體的結(jié)構(gòu)刪除的地方還是c278。

所以,兩種情況肯定會至少有一種是對的,但它們都可以刪除c278的其余位置的x,所以我們完全可以認(rèn)為,這個結(jié)構(gòu)整體是可以刪除c278其余位置的x的,或者換句話說,把它看作一種新的魚結(jié)構(gòu),而定義域是r58b3,刪除域則是c278。

我們把這種定義域區(qū)域里同時包含行宮或列宮組合的,或者是刪除域區(qū)域里同時包含行宮或列宮組合的魚結(jié)構(gòu)稱為宮內(nèi)魚(或宮內(nèi)鏈列,F(xiàn)ranken Fish)。比如這個例子里,定義域含有r58b3,是同時含有行和宮兩種區(qū)域類型的,所以稱為宮內(nèi)魚。

2-2 原理進(jìn)一步剖析

因?yàn)閷m內(nèi)魚的結(jié)構(gòu)有一些奇怪,而且會有區(qū)域被壓縮到宮內(nèi),所以討論起來就會有一些地方比較麻煩。所以我們進(jìn)一步來分析這種結(jié)構(gòu)到底可以如何變換。

2-2-1?宮內(nèi)魚的殘缺情況

如圖所示,這個結(jié)構(gòu)是否是一個正確的宮內(nèi)魚結(jié)構(gòu)呢?答案是肯定的。從理論的角度來說,刪除掉原本宮內(nèi)魚完整版的一部分候選數(shù)是不影響魚的使用的,即使它們會變得各種奇形怪狀,這是因?yàn)?,刪除的部分并不會影響到定義域區(qū)域數(shù)和刪除域區(qū)域數(shù)相同的這一個特征。而我們之前從理論上和實(shí)際上都詳細(xì)闡述到了“只要它們的數(shù)量相同,并且刪除域區(qū)域包含所有定義域區(qū)域里圈出來的所有候選數(shù)x,就一定是可以刪數(shù)的”這一個看起來似乎很棒也很神奇的結(jié)論。

而從實(shí)際上來說,想要說明這一點(diǎn)也很簡單,我們依然通過b3來分情況討論。只是這一次,b3結(jié)構(gòu)變得更簡單了,這使得b3本身該有的兩個區(qū)塊都直接變?yōu)榱藘蓚€單獨(dú)的候選數(shù)。但實(shí)際上,它們的排除效果是不受影響的,所以實(shí)際上刪數(shù)依然可以得到保證。

之前,我們學(xué)到過了退化魚結(jié)構(gòu),這種魚結(jié)構(gòu)甚至只能依賴于鰭才能存在。我們先不考慮魚鰭的事情,我們嘗試在這個殘缺得看似無法再殘缺的結(jié)構(gòu)再刪除一些x。如果r5c7(x)和r8c8(x)此時也一并消失的話,如果看這個結(jié)構(gòu),實(shí)際上是可以存在的,只是巧妙的是,此時的每一個區(qū)域都僅剩下了兩處可以填入x的位置,所以這樣它們是可以構(gòu)成一個環(huán)結(jié)構(gòu)的,刪數(shù)也就恰好是刪除域所在的這三個區(qū)域。

2-2-2?宮內(nèi)二鏈列?

如左圖所示,結(jié)構(gòu)是這樣的,我們嘗試把結(jié)構(gòu)的x移動到r28c78里,然后把r2轉(zhuǎn)換到b3內(nèi),就可以變?yōu)橛覉D這樣。

但實(shí)際上,在中途的轉(zhuǎn)換時就可以發(fā)現(xiàn),它已經(jīng)變?yōu)榱艘粋€級聯(lián)區(qū)塊結(jié)構(gòu),所以宮內(nèi)二鏈列實(shí)際上已經(jīng)脫離了實(shí)際的應(yīng)用,所以它只存在于理論之中。

當(dāng)然,我們繼續(xù)觀察右圖,即使變?yōu)榱苏嬲膶m內(nèi)二鏈列,也會發(fā)現(xiàn),實(shí)際上它等效于c9和r8的兩個關(guān)于x的區(qū)塊結(jié)構(gòu),刪數(shù)是都可以刪掉的,因此依然不存在于實(shí)際的運(yùn)用里。當(dāng)然,實(shí)際上它也可以像是一般的宮內(nèi)魚那樣,變?yōu)闅埲钡那闆r,比如下面這樣。

那么它是環(huán),是宮內(nèi)二鏈列,還是級聯(lián)區(qū)塊呢?這就你自己來分析它了。

2-2-3 宮內(nèi)四鏈列的結(jié)構(gòu)

實(shí)際上,四鏈列因?yàn)楸热溋懈?,所以肯定會存在宮內(nèi)的版本。但是宮內(nèi)四鏈列比較特殊的地方在于,它具有四個定義域區(qū)域,這樣就可以有更多的區(qū)域轉(zhuǎn)變到宮內(nèi),例如我們可以把一個行改為宮,或者同時把兩個行改為宮,例如下面的這兩種不同的情況。

至于如何推理變?yōu)檫@樣,我就不再過多闡述了。

2-2-4?定義域能重疊嗎?

我們還有一種構(gòu)型依然可能出現(xiàn)在盤面里。由于宮內(nèi)魚的結(jié)構(gòu)有宮的區(qū)域,這就導(dǎo)致了可能出現(xiàn)行或?qū)m重疊的現(xiàn)象。

如圖所示,這個結(jié)構(gòu)就是我剛才說的重疊的情況。顯然,這種結(jié)構(gòu)里把原本b3的宮移動到了b6,但是其它的并未發(fā)生變化。

可是,仔細(xì)觀察就可以發(fā)現(xiàn),r5已經(jīng)產(chǎn)生了出數(shù)的結(jié)論,所以這樣的結(jié)構(gòu)在三階的情況下只有理論上是存在的。另外,這里也會產(chǎn)生一個問題。如果區(qū)域重疊了,那么r5c78如果也含有x,那應(yīng)該怎么考慮邏輯呢?畢竟當(dāng)r5c78其一填入x后,這將同時使得兩個定義域區(qū)域同時擁有填數(shù),而我們卻只填入了一個數(shù)就滿足了兩個定義域區(qū)域的要求。這種現(xiàn)象,我們將在后面的內(nèi)容討論到,我們大可直接將這個重疊的部分(即這里的r5c78)視為“不能放候選數(shù)x”,即圖上畫的“/”符號。

從理論上說明,我們可以發(fā)現(xiàn),此處的結(jié)構(gòu)依然存在三個定義域區(qū)域和刪除域區(qū)域,也確實(shí)滿足刪除域區(qū)域全部覆蓋了所有定義域里的x。那么這就保證了,x在定義域里只能放3個,而且還要想行列宮不產(chǎn)生違背數(shù)獨(dú)規(guī)則的情況,那么只能在每一個刪除域區(qū)域上也都保證一個x的出現(xiàn),而這一點(diǎn)內(nèi)容已經(jīng)在前文敘述過,這里就不作出說明了。

可以類比一下這個情況,我們將結(jié)構(gòu)提升到四階,看看宮內(nèi)四鏈列是否存在重疊區(qū)域的現(xiàn)象。實(shí)際上,宮內(nèi)四鏈列確實(shí)存在重疊的現(xiàn)象。例如下面的這種情況。

如圖所示,這種結(jié)構(gòu)就是典型成立的,首先定義域區(qū)域r6和b6有重疊部分,而重疊部分我們目前要求的是不能有x。而這樣一來,就不存在之前重疊區(qū)域里產(chǎn)生的“填入一個x同時滿足兩個區(qū)域”的特殊情況,就不必過多去探討。并且這樣放置的話,定義域區(qū)域保證要放下4個x,刪除域區(qū)域也是4個,這樣就滿足了刪數(shù)的原理,所以刪除域依然是可以成立的。

不過,這個示例如果從假設(shè)層面,就顯得很麻煩了,而理論是可以保證正確性的,所以我們就不再探討它的實(shí)際推導(dǎo)為何正確了。

2-2-5?什么?魚也可以轉(zhuǎn)置?

別著急,在進(jìn)入示例講解之前還要看一種情況。

仔細(xì)觀察兩個魚圖,可以發(fā)現(xiàn)它們涉及的單元格都是一樣的,但第一個的定義域變?yōu)榱说诙€的刪除域,而第一個的刪除域就變?yōu)榱说诙€的定義域。那么,變換到后面的這個情況,那么它是否成立,并且刪數(shù)可以正常刪除呢?

實(shí)際上,這種結(jié)構(gòu)依然是可以的。從理論上說明,這樣的行為并沒有引起定義域區(qū)域數(shù)和刪除域區(qū)域數(shù)的改變,也沒有引起“全覆蓋”要求的改變,所以刪數(shù)依舊是成立的;而從實(shí)際邏輯推理上來理解,你可以考慮隨意放置x,最后必然在c278里每一列都能找到一處x的放置,分屬于r58b3的每一個區(qū)域。

將定義域和刪除域交換的行為,在魚結(jié)構(gòu)里稱為轉(zhuǎn)置(Transpose)。當(dāng)然,這只在理論上才會出現(xiàn),在實(shí)際解題的結(jié)構(gòu)之中,結(jié)構(gòu)是無法轉(zhuǎn)置的,它只有互補(bǔ),這一點(diǎn)我們在后面的內(nèi)容會作出詳細(xì)的說明。

實(shí)際上,這種結(jié)構(gòu)依然叫做宮內(nèi)魚,因?yàn)樵趯m內(nèi)魚的定義里保證了,定義域或者刪除域的其中一個定義里出現(xiàn)行宮和列宮組合就滿足了要求。這就是為什么,宮內(nèi)魚的定義必須說明必須定義域或刪除域的其一,而并不是單純只有定義域的原因。

那么,講到了這么多的構(gòu)型,現(xiàn)在我們來看一些示例。

2-3?一些宮內(nèi)魚的示例

現(xiàn)在我們來看一些有關(guān)宮內(nèi)魚技巧的例子,來熟悉一下宮內(nèi)魚的使用。

2-3-1?宮內(nèi)三鏈列

下面來看若干宮內(nèi)三鏈列(Franken Swordfish)技巧的例子。

如圖所示,可以看到這個結(jié)構(gòu)的定義域是r34b9,刪除域是c489。顯然,定義域區(qū)域數(shù)和刪除域區(qū)域數(shù)一樣多,而且刪除域全部包含了定義域里的所有1。這樣一來,放下1的位置不論怎么安排,每一個刪除域區(qū)域都能保證有一個1的出現(xiàn)。所以所有刪除域的其余位置的1都可以被刪除。

接下來是第二則示例。這個結(jié)構(gòu)的定義域?yàn)閞19b5,刪除域則是c469。和剛才一樣,定義域區(qū)域和刪除域區(qū)域數(shù)一樣多,都是3,而且刪除域區(qū)域完全覆蓋了所有定義域涉及的6,所以刪除域的每一個其余位置的6都可以刪除。

如圖所示,我想讓你來理解這兩個示例。這兩則示例的邏輯和上兩個示例的邏輯是完全一樣的,所以我并不需要闡述什么東西,靠你自己了!

2-3-2 轉(zhuǎn)置的宮內(nèi)三鏈列

接著來看一則利用基本構(gòu)型轉(zhuǎn)置了的結(jié)構(gòu)。

如圖所示,這個魚結(jié)構(gòu)的定義域是r689,而刪除域是c15b9。

2-3-3?宮內(nèi)四鏈列

宮內(nèi)三鏈列已經(jīng)夠難找了,宮內(nèi)四鏈列(Franken Jellyfish)的例子就更難找到了,不過實(shí)際上它還是廣泛存在于題目里的,所以這里給出了一些情況。

如圖所示,這就是一個宮內(nèi)四鏈列的示例??梢钥吹?,這個結(jié)構(gòu)的構(gòu)型非常類似于之前說到的四階情況的重疊構(gòu)型。顯然,這個結(jié)構(gòu)此時是成立的,定義域區(qū)域和刪除域區(qū)域一樣多,都是4個,而且也滿足了“全覆蓋”的要求;并且,r6和b6重疊的單元格上也都沒有影響填數(shù)的額外的候選數(shù)6,所以結(jié)構(gòu)是成立的。

如圖所示,這是另外一則示例,它和上一個示例不同,它沒有重疊,所以直接不用考慮重疊的那個額外條件。刪數(shù)是完全成立的,這里就不再過多說明了。

那么,我們再給出四則示例,不過得你自己來思考了。不過它們的構(gòu)型都差不多。

如圖所示,這些示例都是之前我們提到過的構(gòu)型。所以邏輯我們就完全不用再去說明它了。第一個和第二個都是重疊的情況,第三個是原結(jié)構(gòu)的轉(zhuǎn)置的情況,第四個則是帶有兩個宮的定義域的宮內(nèi)四鏈列結(jié)構(gòu)。

那么,有沒有更高階的宮內(nèi)魚結(jié)構(gòu)呢?由于結(jié)構(gòu)的特殊性,它的互補(bǔ)并不像之前數(shù)組和標(biāo)準(zhǔn)魚構(gòu)型那樣,規(guī)格會發(fā)生變化,所以,它是可能出現(xiàn)五鏈列以及更高的情況的,不過例子就不好找了,所以這里就不再列舉了,后面將會廣泛出現(xiàn)這種情況的示例。


第 55 講:宮內(nèi)魚以及魚的理論的評論 (共 條)

分享到微博請遵守國家法律
酒泉市| 化隆| 二连浩特市| 秦安县| 南郑县| 富顺县| 嵊泗县| 阳信县| 手游| 苏尼特右旗| 桃源县| 贡觉县| 平安县| 会泽县| 大厂| 化德县| 泽州县| 千阳县| 浮山县| 杭锦后旗| 靖宇县| 紫云| 思茅市| 汾阳市| 工布江达县| 如东县| 炉霍县| 那曲县| 瑞昌市| 广昌县| 嘉鱼县| 东丰县| 县级市| 南阳市| 融水| 凤凰县| 墨竹工卡县| 阜新市| 绥芬河市| 鞍山市| 万山特区|