第 61 講:不飽和魚
接下來將為你介紹的是最后一種魚結構,之所以放在最后講,是因為這種結構難度非常大,而且有一些基本定式無法滿足,所以刪數(shù)的方式和原理有一些別扭。
試想一下,我們之前學到的魚結構,定義域區(qū)域數(shù)和刪除域區(qū)域數(shù)是相同的,即一樣多的,這種結構我們完全可以拿著它就可以用來刪數(shù),因為畢竟這種結構刪數(shù)的原理已經(jīng)通過理論嚴格證明了,只要滿足全覆蓋和區(qū)域數(shù)一致的要求,就可以刪數(shù)。那么,有沒有可能讓定義域區(qū)域數(shù)比刪除域區(qū)域數(shù)多,或者刪除域區(qū)域數(shù)比定義域區(qū)域數(shù)多,但依舊全覆蓋的情況呢?那么如果有,又應該如何刪數(shù)呢?本節(jié)就會討論全覆蓋要求下,定義域區(qū)域數(shù)和刪除域區(qū)域數(shù)不一樣多的時候的刪數(shù)情況。這種魚結構稱為不飽和魚(Unsaturated Fish)。
Part 1 不飽和魚的形成和原理
在進入正文技巧內(nèi)容的學習之前,我們先要掌握一個理論概念——秩(Rank)。這個詞匯實際上來自于線性代數(shù)里的矩陣的秩。這個詞被套用到魚結構里,又有什么特殊的用法和用途呢?
1-1?秩的概念
我們在之前的內(nèi)容里,提到過一個情況:自噬。在自噬的內(nèi)容里,我們說到過,當魚的定義域和刪除域區(qū)域總數(shù)相同,而且還全覆蓋的時候,魚是可以刪數(shù)的;而如果魚的某一部分位于兩個刪除域區(qū)域的交集上,而位于一個定義域區(qū)域的交集的話,假設它填入后,它會同時使得兩個刪除域區(qū)域消失,一個定義域區(qū)域消失,致使定義域區(qū)域數(shù)少于刪除域區(qū)域數(shù),這樣的話,填數(shù)就不再平衡了,因為定義域必須保證放入(n - 1)個數(shù),而刪除域卻必須保證最多放(n - 2)個數(shù)。這個最多放入的總個數(shù)竟然比必須放入的總個數(shù)還要少,所以出現(xiàn)了矛盾。
那么我們嘗試把這種說法包裝一下。我們使用刪除域區(qū)域總數(shù)減去定義域區(qū)域總數(shù),減下來的這個差值稱為魚結構的秩。那么上述內(nèi)容就變?yōu)檫@樣:當某個結構滿足全覆蓋要求,而且秩為0的時候,魚就可以刪數(shù)了;而如果某一處位置填入后導致秩為-1((n - 2) - (n - 1) = -1)的時候,出現(xiàn)矛盾。
這便就是秩的一個基本的敘述模式??梢钥吹?,有了這個說法之后,前面的說辭就會簡化一些了。
1-2?所以,前文都是在講秩為0的魚?
是的,前文介紹的內(nèi)容都是秩為0的魚結構,因為刪除域區(qū)域數(shù)和定義域區(qū)域數(shù)是相同的,所以減下來的差值必然為0。
但請注意,前文所說的是“區(qū)域數(shù)相同,則秩為0”,而秩為0的結構不代表一定能在所有刪除域進行刪數(shù)。我們之前發(fā)現(xiàn)的所有秩為0的魚結構是可以刪數(shù)的,這是因為結構涉及了全覆蓋,且每一個候選數(shù)都只被使用過一次,但有些時候,某個(或某些)候選數(shù)將會被重復使用,此時的分析將會更復雜一些,而這一點在后續(xù)的一些例題里會出現(xiàn)。
1-3 那么,秩可以為負數(shù)嗎?
可以從剛才的說法里看到,一個結構是不允許秩為負數(shù)的,哪怕剛才說到的-1,也是不允許的;比如秩為-2則表示的是定義域區(qū)域數(shù)只有(n - 1)個,但是刪除域區(qū)域數(shù)卻只有(n - 3)個。定義域保證結構還必須填入(n - 1)個x,但刪除域保證最多還只能放(n - 3)個x。顯然,只要后面這個數(shù)值(即最多能放置的個數(shù))如果比前面這個數(shù)(即必須放置的)要小,不管小多少,就一定會矛盾。因為我們無法達成這里給出的要求。
那么用秩的說法就是,一個魚結構的秩必須大于或等于0才有效,即使無法刪數(shù),或者其它原因沒有刪數(shù),但起碼不會像是秩為負數(shù)那樣立刻矛盾。
1-4?好了,秩可以怎么用呢?
所以,我們可以基于這一點,產(chǎn)生一些有關秩這個理論的一些基礎用法。我們把魚作一個推廣。之前我們要求的魚的定義域區(qū)域數(shù)要必須等于刪除域區(qū)域數(shù),是為了保證魚內(nèi)部的所有刪除域都是有效的。但如果我們沒有必要刪除那么多,或者目的并非是找這種刪數(shù)多的魚的時候,或者甚至是根本找不到刪數(shù)多的魚結構的時候,我們可以試試找找,刪除域區(qū)域數(shù)比定義域區(qū)域數(shù)多的魚結構。
當刪除域區(qū)域數(shù)比定義域區(qū)域數(shù)多,那么這個差值,即魚的秩一定就會大于0,雖然我們不能得到結論,但是起碼它不是負數(shù),就意味著結構是可能成立的,只是刪數(shù)不知道在哪里罷了。
那么總的來說,不飽和魚結構的使用方式是這樣的。我們?nèi)绻业揭粋€結構,經(jīng)過全覆蓋要求后發(fā)現(xiàn)刪除域區(qū)域比定義域區(qū)域多,就算找到了不飽和魚結構。此時只要我們找到某一處位置,假設它填入后,能使得魚的剩余結構的秩變?yōu)樨摂?shù)時,我們就可以認為結構產(chǎn)生矛盾了,故原假設錯誤,刪掉它。
實際上,在有時候不一定能立刻找到秩為負數(shù)的矛盾,因為有些時候結構秩看起來為0,實際上并不是真正的0。這些結構都非常麻煩,而且大多數(shù)例子直接使用秩來理解都不是很方便,反而還不如通過代入試填來推導矛盾來得快。所以在有些時候,試填和利用同數(shù)技巧來獲得結構內(nèi)部的矛盾的過程,稱為飽和性測試(Saturation Test)。雖說試填有一些暴力,但依舊通過邏輯層面推導,所以在邏輯層面,我們是可以接受的。下面我們將拿出眾多的示例給大家分析。
那么我們嘗試使用這個方式來理解一些常見的不飽和魚結構吧。
Part 2?不飽和魚的示例
2-1?不飽和四鏈列

如圖所示,我們嘗試找到c1389的所有數(shù)字6,并尋找新的區(qū)域來執(zhí)行全覆蓋要求??梢园l(fā)現(xiàn),此時我們找到了r13589b4一共6個區(qū)域,才覆蓋完所有的數(shù)字。一般來說,我們都會去刪除域上找刪數(shù),所以此時我們對于每一個刪除域上的含有候選數(shù)6的單元格執(zhí)行假設操作。
此時發(fā)現(xiàn),假設r5c2 = 6的時候,我們將有下圖這樣的構型。

如圖所示,這樣的構型好像看似沒有什么問題,因為定義域區(qū)域依舊是4個,而刪除域區(qū)域則變?yōu)榱?個。雖然變少了,但是刪除域區(qū)域數(shù)依舊和定義域區(qū)域數(shù)一樣多,起碼它并非變?yōu)橹刃∮?的情況,即定義域區(qū)域比刪除域區(qū)域數(shù)量還多的情況。不過請你注意一個地方。由于我們假設到r5c2 = 6的時候,結構剩下的部分變?yōu)榱艘粋€看起來很像是四鏈列的構型??雌饋黼m然沒有什么異樣,但請你仔細思考一下,這個結構真的存在嗎?我們可以發(fā)現(xiàn)到的是,不論你怎么放置這些填數(shù),任取其中三處填入,最終都必然會有一個定義域區(qū)域無法填數(shù),這便產(chǎn)生了矛盾??赡銜?,這是為什么呢?


我們嘗試盡量使用簡單的思路來解釋。我們可以通過結構找到兩條摩天樓結構,且它們共用一個定義域區(qū)域作為強關系產(chǎn)生的區(qū)域。之所以這么做,是為了后面證明出現(xiàn)矛盾作出鋪墊。
我們可以觀察圖上的兩種填數(shù)模式,就可以發(fā)現(xiàn),此時已經(jīng)產(chǎn)生了不對勁。左圖的刪數(shù)和右圖的刪數(shù)能夠對應到c9的唯一的兩處填數(shù)位置,而這兩處位置都被刪除了。這便使得c9就不能填數(shù)了。因為鏈是同時可以成立的,所以刪數(shù)也都是同時成立的。而刪數(shù)導致了c9無法填入6,所以出錯。
那么既然錯誤了,這便就說明了這樣的結構不存在,就得到了原本的假設(r5c2 = 6的說法)自然就是錯誤的了,所以r5c2 <> 6。
可是你會思考,這也只能說明這一個例子才能滿足這個要求,而其它的例子不一定。實際上,其它的例子也都符合這種要求,只要我們能形成上述形狀的構型的話。由于結構的特殊性,結構只會涉及8個單元格,而且8個單元格分屬于四行四列,且兩個一組,出現(xiàn)在同一個并排三宮里。這句話有點繞,具體的意思指的是,比如c13這兩處定義域區(qū)域,它們都處于b147這樣并排的三個宮里;同理,c89也是一樣。這樣一來,我們還有c1389都是共軛對這一個條件,這就使得結構產(chǎn)生了非常多的摩天樓,并且能互相刪除自己的某一個端點。當我們給出的鏈合適時,刪除的位置就應當會排除掉同一個定義域區(qū)域下的所有情況,使得結構出錯。
可能你還是有問題的地方在于,定義域區(qū)域數(shù)和刪除域區(qū)域數(shù)此時是一致的,那么秩為0,根據(jù)理論,秩為0的結構是可以直接把刪除域區(qū)域的所有位置都看作刪數(shù)的地方來刪數(shù)的,可這個例子怎么就不行了呢。實際上,我們在論證摩天樓存在和刪數(shù)的時候,用到了過多的定義域區(qū)域來論證:首先,我們用到了四個定義域區(qū)域,是結構本身存在的;而b13是隱藏的,因為b13在6排除了r1389c2(6)的刪數(shù)。所以,定義域區(qū)域比刪除域區(qū)域數(shù)還多2個,所以秩為-2,導致矛盾的出現(xiàn),而b13實際上我們在結構論證矛盾(就是剛才摩天樓技巧的互相刪數(shù)那里)是用到了它的,要不你自己獨立想一想?
接下來我們再來看一則不飽和四鏈列的示例。

如圖所示,這個結構看起來比較簡單,但刪數(shù)很“離奇”:不飽和魚按道理是通過假設得到的刪數(shù)結論,而這個例子卻巧合地刪除了四個數(shù)字之多。下面我們就來挨個進行分析和討論。
假如r6c2 = 7,則c2和b4兩個刪除域區(qū)域就會由于填數(shù)假設而直接被去掉,但這個假設并不會影響到任何定義域區(qū)域(當然,b7此時可以出數(shù),但是我們考慮通過秩的邏輯來說明,所以這里我們不繼續(xù)往下假設)。
顯然,定義域區(qū)域數(shù)依舊是4個,但刪除域區(qū)域數(shù)變?yōu)榱?個(原本有5個,但c2和b4消失,所以只剩下3個)。但是,此時刪除域區(qū)域數(shù)比定義域區(qū)域數(shù)還少,秩為-1。我們說過,秩為負的時候,結構出錯,所以這個結構便產(chǎn)生了矛盾。故r6c2 <> 7。
而其余三個刪數(shù),是通過普通魚的視角得到的,這一點其實在之前的例子里已經(jīng)說明了它們的刪數(shù)緣由。

如圖所示。如果我們把定義域區(qū)域b6的視角改變到r4的話,定義域就和不飽和魚所給的定義域完全一樣了。
當然了,至于為什么可以這么切換視角,你可以嘗試自己論證這一點,你可以通過秩在切換視角后依舊不產(chǎn)生變化這一點來論證它。

我們再來看一則示例,這一則示例則更像是第一例里那樣的刪數(shù)邏輯樣式。
如圖所示,細數(shù)定義域區(qū)域和刪除域區(qū)域,定義域區(qū)域一共4個,分別是b2356;而刪除域區(qū)域則是r23456,一共5個區(qū)域。如果r5c23(3)其中有一個為真,都會使得結構只剩下{r2c57, r3c69, r4c59, r6c67}(3),不論如何填入3,都會出現(xiàn)錯誤。因為原本r789c5679都是不含有候選數(shù)3的,這使得3只能放在上面的單元格里;而由于r5c23(3)其一成立的關系,使得3的位置變?yōu)轭愃朴谥暗谝粍t示例的樣子,導致無法填數(shù)。當然,通過秩來解釋就是,結構涉及的定義域和刪除域個數(shù)發(fā)生了變化,導致差值為負數(shù),出現(xiàn)了矛盾。
當然,這個題更為簡單的理解方式就是轉化為之前看到過的一定矛盾的構型:我們嘗試把b2356的定義域改變?yōu)閏5679,就會發(fā)現(xiàn),實際上結構就變?yōu)榱酥澳菢拥拿艿臉嬓停憧梢宰约涸囋嚳础?/p>
2-2?不飽和五鏈列


如左圖所示,我們需要找到r345689b1一共7個刪除域區(qū)域才能實現(xiàn)全覆蓋。所以此時的魚的秩為7 - 5 = 2。假設r3c1 = 8,則結構將會消失兩個刪除域區(qū)域b1和r3,而定義域區(qū)域不會消失。
似乎看起來秩變?yōu)?了。實則不然。它同時還影響著b47兩個宮,使得在b47里填入8的位置分別只能在{r4c3, r56c2}和{r8c3, r9c2}里。那么,這樣一來,仔細觀察c45填入8的地方,就可以發(fā)現(xiàn),不論b6里填入8的位置在哪里,左側c23和c45填8的位置都能形成和之前示例完全一樣的構型,而這種構型在之前都已經(jīng)講得比較清楚了,所以這種結構不用再去推導,就知道它一定是錯誤的。所以,原假設錯誤。
我們再來看一些這樣的示例。

如圖所示,這個結構看起來好像秩為0,對吧。實際上你可以看到,如果照著結構給出的樣子的話,r1c4(6)和r9c6(6)是無法覆蓋到的。所以,這個結構的刪除域實際上是r34678b28,一共7個刪除域區(qū)域。
我們嘗試對兩個刪數(shù)逐個進行討論。假設r7c8(6)為真,則會如何呢?

我們畫出這樣的一個推導過程。注意著不是鏈,所以沒有用實線虛線表達強弱關系。顯然,這樣畫出來后,打勾的就是我們假設填入的地方,打叉的則是不能填入的地方。那么我們再次針對剩余的部分執(zhí)行推導。
結構因為填入了r6c9(6),所以少了一個定義域區(qū)域,而刪除域區(qū)域少了幾個呢?r6是肯定會消失的,而原假設r7c8(6)使得r7刪除域區(qū)域消失,所以少了兩個?,F(xiàn)在依然沒有矛盾,我們還得繼續(xù)去發(fā)現(xiàn)。


接著我們觀察左圖,圖中有一個在c34上的摩天樓,于是得到r3c56 <> 6的結果,此時觀察c5,發(fā)現(xiàn)6有出數(shù),于是變?yōu)橛覉D的狀況。此時就可以發(fā)現(xiàn),c6無法填入數(shù)字6,出現(xiàn)錯誤。所以,原本的假設r7c8(6)是錯誤的,應當刪除掉。
別急,這個示例還有一個r8c1(6)的刪數(shù)我們還沒有說明。

如圖所示,似乎設定r8c1(6)為真,更難分析得到結論。是的,確實它比較復雜,因為我們假設到的第一步就遇到了瓶頸:我們好像無法繼續(xù)推導了,因為沒有一處可以出數(shù)。不過我們不能灰心,實際上是有辦法解決掉這個瓶頸的。


先看左圖,可以看到,結構里有一個同數(shù)環(huán)結構。而刪數(shù)是通過環(huán)結構的定義得到的,即弱關系對應的區(qū)域,所以結構里可以刪除的地方是r3c6(6)和r7c4(6)。在刪除了它們后,我們再來看右圖。右圖里由于刪除了剛才給出的兩處地方,所以剩余的部分里可以找到兩個摩天樓,得到刪數(shù)r3c5(6)和r7c5(6)。
此時就可以發(fā)現(xiàn)問題了:定義域區(qū)域c5里無法找到合適的地方填6了,所以出現(xiàn)了矛盾,所以原假設r8c1(6)錯誤,應當刪除掉。
看了這么多例子了,我相信你應該有所感受。我們尋找刪數(shù)矛盾,總是通過試填的方式來證明矛盾的出現(xiàn),矛盾的出現(xiàn)也都只是利用結構內(nèi)部(即定義域里)的所有候選數(shù)而已,并未涉及外部的任何其它的候選數(shù)。這也算作一種約定俗成的方式。
實際上,我們完全可以利用外部的數(shù)字來推導矛盾,但涉及的東西就比較多了,而且顯得比較暴力。就好比UR里,我們通過強制UR的思路可以得到,實際上它也僅僅是利用了UR結構內(nèi)部的候選數(shù)和共軛對來推導矛盾的,并沒有涉及外部的其它任何數(shù)字。
我們再來看一則相對熟悉的例子。

如圖所示。我們假設r3c2(5)或r6c3(5)其一成立的話,它們的位置看起來似乎是影響差不多的。比如r3c2(5)如果為真,則顯然會使得r12c3(5)和r45c2(5)同假,而r6c3(5)也會導致一樣的情況出現(xiàn)。所以我們可以斷言,如果r3c2(5)可以刪除,那么r6c3(5)也可以刪除,我們就不必兩個候選數(shù)都推理一遍了。
我們假設r3c2(5)為真,則可以得到下面圖中給出的樣子。

看起來定義域區(qū)域是5個,刪除域區(qū)域也是5個,但結構出錯了嗎?確實是出錯了。我們嘗試觀察b9,任意一處填數(shù)都會使得上方給出的r1245四行定義域區(qū)域出現(xiàn)類似于之前遇到過很多次的出錯構型。所以,整體這個結構必然是錯誤的。這便得到了最開始假設的矛盾,故r3c2(5)是可以刪除的;當然,r6c3(5)也是一樣的。
和上面差不多的出錯方式的示例還有下面這一個。


如左圖所示,如果我們嘗試假設r3c3(4)為真,則由于r4共軛對的關系,直接可以得到r5c4(4)為真,于是依然出現(xiàn)了如右圖所示的出錯構型。
所以,這些例子都還是比較清晰和神奇的。我們再來看一則利用魚鰭推導的。

如圖所示,這個結構飽和五個定義域區(qū)域和五個刪除域區(qū)域,不過含有四個魚鰭,而且四個魚鰭不都能直接得到刪數(shù)的成立。不過我們依然可以嘗試利用試填的方式來得到矛盾。首先,兩個外魚鰭是可以直接對應刪數(shù)的,所以我們就不再討論它們了。接著我們來討論兩個內(nèi)魚鰭的情況。


如左圖所示,假設r5c5(7)成立,則我們可以依次得到r4c7(7)和r8c1(7)為真的結果,由于r8c1(7)的成立,所以此時是可以刪除r6c1(7)的。
如右圖所示,假設r8c5(7)成立,則排除掉一些情況,我們發(fā)現(xiàn)剩余部分里,r59形成了一個二鏈列結構,而這個二鏈列依舊可以刪除r6c1(7)。
所以實際上,兩個內(nèi)魚鰭依舊可以對應到刪數(shù),所以刪數(shù)r6c1(7)不論哪個魚鰭成立都可以刪除掉;而且魚結構的刪除域也包含r6c1(7),所以它可以安全地被刪除。
這一則示例之所以放在不飽和魚里講解,是因為這一則示例也是通過不飽和魚的結構包裝得到的構型。如果你在做題過程之中能發(fā)現(xiàn)這樣的形式的結構,我們就可以通過利用魚鰭的方式來討論,把結構變?yōu)橹葹?的飽和魚結構,這樣看起來邏輯比起之前的示例要清晰一些。

如圖所示,這是一個交叉五鏈列,看起來還不錯,不過多了兩個內(nèi)魚鰭。我們嘗試逐個進行討論。


如圖所示,這是兩個討論情況??梢钥吹降氖?,不論哪種情況成立,刪數(shù)都是可以刪掉的,因為最終我們都會在b46里發(fā)現(xiàn)一組級聯(lián)區(qū)塊結構。級聯(lián)區(qū)塊可以當作X-Wing使用,而它們都會刪除r4這一個區(qū)域的6。


如左圖所示,我們找到一個交叉五鏈列結構,不過刪除域區(qū)域比較多,要想覆蓋完整就需要r1678b2368一共8個區(qū)域才行。不過不要緊,刪除域區(qū)域再多也不害怕,因為刪數(shù)一定是在刪除域區(qū)域上的。那么假設我們讓r6c9(5)為真,會如何呢?
如右圖所示,我們按照順序推導,就會發(fā)現(xiàn),b3里同時出現(xiàn)兩處填入5的地方,這便是產(chǎn)生了矛盾。所以原來的假設是錯誤的。
那么,我們給出了這么多例子,下面再給出兩則示例,希望你能夠自己理解它們。

這一則示例看起來比較麻煩,但實際上并不難。

這一則也是一樣。
2-3?不飽和六鏈列
接下來我們來看一些不飽和六鏈列的示例。


如左圖所示,這個示例看起來很漂亮,因為結構高度對稱。假設r6c5(9)為真,則變?yōu)橛覉D這樣。
右圖看起來似乎很麻煩,但實際上,它可以轉化為之前我們就講到過很多次的矛盾的構型。我們隨意拿出一處定義域區(qū)域的兩個情況來進行討論,就可以發(fā)現(xiàn)討論后一定會出現(xiàn)矛盾,這里我們就不重復給出示例的推導過程了,你可以自己試試看。

如圖所示,假設r5c2(2)為真,則會產(chǎn)生矛盾。這一則示例就自己理解了,我們不再重復敘述它的具體邏輯。
Part 3?最后的介紹
魚的內(nèi)容就全部說完了,最后我們需要介紹一些理論的內(nèi)容,以便編寫電腦程序,或者書寫參考文檔時使用。
3-1?為什么同數(shù)技巧全都可以叫做魚?
這一點我們其實看過眾多例子了,所以我們不必過多敘述就能明白這一點。二階的魚結構我們可以轉化變?yōu)殒溄Y構,例如雙強鏈,或者帶有區(qū)塊的雙強鏈結構;而三階的甚至更高階的,我們都可以通過魚鰭的包裝來得到推導;而包裝比較麻煩的,可以通過遠程試填來得到矛盾,或者甚至不用包裝魚鰭,直接上手就開始找內(nèi)部的矛盾。所以,所有同數(shù)技巧其實都可以包裝形成魚結構。
3-2 自噬為什么是魚的內(nèi)容,而不是其它技巧的內(nèi)容?
這一點我們也不必去過多敘述了。自噬就是通過刪除域區(qū)域的交集而產(chǎn)生的一種特殊刪數(shù)。如果它還在定義域區(qū)域上,那么刪除它的原因就是因為原本結構的秩為0,而因為填入后,定義域區(qū)域少一個,而刪除域區(qū)域少兩個,秩變?yōu)?1,出現(xiàn)了矛盾。
不過可以通過魚結構的理論知道,當魚結構本身的秩就已經(jīng)不是0的時候,我們并不難妄自下結論,說某個處于刪除域交集上的候選數(shù)依舊是自噬刪數(shù)。這樣是不對的,因為它即使填入,魚結構的秩也不能保證變?yōu)槎嗌?;更何況有一大部分魚結構的秩并不是結構得到0就必然能夠得到刪除域區(qū)域全刪的結論的。
3-3 魚的系統(tǒng)命名規(guī)則
我們先來說說飽和魚結構(即定義域區(qū)域和刪除域區(qū)域數(shù)相同,且全覆蓋的情況)的命名規(guī)則。
我們有如下的順序來修飾一個魚:
解釋如下:
鰭化修飾符:表示鰭影響到結構的類型。有三種鰭化類型:標準(Basic)、退化(Sashimi)和孿生(Siamese)。當為“標準”時,應當省略不寫。且“退化”一詞的位置應調(diào)整至鰭名修飾符之后。
鰭數(shù)量修飾符:表示有多少個鰭。如果有多種鰭,則按照外鰭、內(nèi)鰭、自噬鰭的順序排列。如果同一種鰭只有一個或兩個的,則使用單(Single)和雙(Double)修飾,超過兩個的,則使用漢字數(shù)字三(Triple)、四(Quadruple)、五(Quintuple)等表示。
鰭名修飾符:表示鰭的名字。有兩種鰭:外鰭(Exo-fin)、內(nèi)鰭(Endo-fin)。拼寫時應按照此順序排列,并配合鰭數(shù)量修飾符描述。
形狀修飾符:表示形狀。一共有三種形狀:標準(Basic)、宮內(nèi)(Franken)、交叉(Mutant);標準鏈列(標準魚)的“標準”一詞一般可以省略。
規(guī)格修飾符:表示規(guī)格。規(guī)格取自于結構的定義域區(qū)域數(shù)。一般一共有六種規(guī)格(范圍在 2 到 7 之間),使用漢字數(shù)字后添加“鏈列”二字即可。超過其規(guī)格的,仍使用數(shù)字,但結構本身一般不符合其標準;英文里一般有六種規(guī)格(范圍在2到7之間):X-Wing、Swordfish、Jellyfish、Squirmbag(或Starfish)、Whale、Leviathan。超過其規(guī)格的,使用“數(shù)字 + 連字符 + Fish”的寫法,如8-Fish,但結構本身一般不符合其標準。
合格的命名可以是如下的示例:
雙外鰭單內(nèi)鰭退化宮內(nèi)五鏈列
四外鰭三鏈列
當然,你也可以使用D\S描述(D\S Description)來描述魚結構。如:
rrb\ccc魚(三階、宮內(nèi))
ccbb\rrrc魚(四階、交叉)
其中用r表示一個行區(qū)域,c表示一個列區(qū)域,b表示一個宮區(qū)域。反斜杠左側的部分是魚的定義域涉及的區(qū)域的類型集合,右邊則是刪除域區(qū)域涉及的區(qū)域集合。
當然,也可以直接將定義域區(qū)域和刪除域區(qū)域、結構涉及的數(shù)字、甚至是魚鰭體現(xiàn)在其中。涉及的數(shù)字應寫在D\S描述的前面,而魚鰭應寫在D\S描述之后,用空格隔開,且使用字母f、ef前綴表示屬于外鰭還是內(nèi)鰭,并且以“外鰭、內(nèi)鰭”的順序排放。如:
2 r19b26\c578b1 fr3c6 fr9c3
1 r9c4b6\r47c8 fr9c3
9 c29b6\r468 efr4c9
這樣可以直接看出規(guī)格、形狀。其中的fr3c6就是指明有一個外鰭位于r3c6。第一個示例涉及的候選數(shù)是2,而第二個示例涉及的則是1。當詳細描述時,末尾的“魚”字可以被省略。
當魚的定義域區(qū)域數(shù)少于刪除域區(qū)域數(shù)時,稱為不飽和魚。這個術語詞已經(jīng)在之前提到過了。
當不飽和時,刪除域區(qū)域數(shù)大于定義域區(qū)域數(shù),此時應為魚名稱最前面添加“不飽和”一詞,規(guī)格按照定義域區(qū)域數(shù)計算。比如定義域區(qū)域有4個,而刪除域區(qū)域有5個,則我們認為結構是一個四鏈列,而不是五鏈列。
3-4 魚圖的符號規(guī)則
魚圖里一般想要表達出意思,需要不同的符號標識來表達。下面羅列出所有需要用到的符號。
永假符號/:放到單元格里,表示該單元格不能放入魚涉及的這個數(shù);
魚結構符號x:表示當前單元格可能填入這個數(shù)字;
刪數(shù)符號*:表示當前單元格可以通過結構刪除該單元格的這個數(shù)字;
外魚鰭符號F或&:表示當前單元格的這個數(shù)字是作為外魚鰭出現(xiàn)的;
內(nèi)魚鰭符號E或@:表示當前單元格的這個數(shù)字是作為內(nèi)魚鰭出現(xiàn)的;
自噬符號C或*x:表示當前單元格的這個數(shù)字是作為自噬刪數(shù)出現(xiàn)的;
重刪數(shù)符號**:表示當前單元格在一個飽和魚結構不論魚鰭是否成立,都能刪除的地方;
殘缺符號I或!:表示當前單元格是結構不一定必需涉及的地方,它可以不存在,結構照樣成立,且刪數(shù)成立;
未知符號?:表示當前單元格的刪數(shù)是否成立,并不清楚。