• 沒有找到結果。

密碼的計數

N/A
N/A
Protected

Academic year: 2022

Share "密碼的計數"

Copied!
9
0
0

加載中.... (立即查看全文)

全文

(1)

密碼的計數

柳柏濂

一. 編碼, 把“水”攪混。

提起密碼, 讓我們立即想起了一個充滿 奧妙的世界。 “破密”和“保密”就好像矛和盾, 轟炸機和高射砲, 一直貫穿在有形和無形的 戰爭中。

我們考察這樣的一種密碼。 它的本質是 一種字母的代換 (Substitution cipher): 把 表達信息通常所用的字母, 用一個密碼本中 的特殊字母代替。 例如, 一個信息 MISSIS- SIPPI。 如果我們用一個特殊密碼表—把英 文 26 個字母按順時針方向排在一個圓周上, 成一個密碼表。 把原信息的每一個字母, 用密 碼表中該字母按順時針方向走第三個位置所 在的字母代替。 按這個密碼置換規則, MIS- SISSIPPI 變成 PLVVLVVLSSL, 這類密 碼稱為 Caesar 碼。

編碼 (encipherment) 就是把“水”攪 渾, 把通常字母表達信息用字母表的特殊置 換產生密碼, 而解碼 (decipherment), 就是 上述置換的逆過程。

現在, 我們採用如下的一種規則: 以一篇 用字母撰寫的命令為例。 我們用 A 置換第一 個出現的字母, 以及在整篇命令中出現此字 母的所有位置, 用 B 置換命令中下一個不同 的字母以及出現此字母的所有位置, 如此繼 續, 這樣得到的密碼稱為正規密碼。(normal- ized cyptogram)。

於 是, 按 照 這 一 算 法, 不論 信 息 MISSISSIPPI, 還是它的 Caesar 密碼 PLVVLVVLSSL, 都可導出同一個正規密 碼 ABCCBCCBDDB。

一般地, 如果 p 是任一個通常的信息, c 是 p 的一個密碼, 則 c 和 p 都有一個正規密 碼 N。

我們把一個字 (或正規密碼) 中含有的 字母的個數稱為字 (或正規密碼) 的長度。 一 個值得探索的問題是: 有多少個不同的長為 n 的正規密碼字?

讓我們考察一些簡單的情形。

若字的長度是 1, 則它的正規密碼必是 A。

74

(2)

75

若字的長度是 2, 則它的正規密碼是 AA, AB。

若字的長度是 3, 則所有不同的正規密 碼是 AAA, AAB, ABA, ABB, ABC。

若字的長度是 4, 則它的正規密碼是 AAAA, AAAB, AABA, ABAA, AABB, ABAB, ABBA, AABC, ABAC, ABCA, ABBB, ABBC, ABCB, ABCC, ABCD

我們看到, 正規密碼只著眼於所含字母 的類數和分段的長度與相對位置。

一般地, 設 b(n) 表示長為 n 的不同正 規密碼的個數, 則上述簡單情況給出了如下 結果:

b(1) = 1, b(2) = 2, b(3) = 5, b(4) = 15。

那麼, 如何求出 b(n)?

我們不妨把問題提得更細一點, 考慮長 為 n 的恰有 k 個不同字母的不同正規密 碼, 它的個數為 S(n, k)。 從上面討論可知, S(4, 1) = 1, S(4, 2) = 7, S(4, 3) = 6, S(4, 4) = 1。

如果我們在一個有 q 字母的密碼表上, 考慮長為 n 的正規密碼。 把所有長為 n 的不 同正規密碼的個記為 b

q

(n)。

顯然, b

q

(n) =

min

(n,q)

X

j=1

S(n, j) (1) 於是, 當 q ≥ n 時,

b

q

(n) =

n

X

j=1

S(n, j) = b(n) (2) 例如, 用英文表達的一個長為 n 的句子, q = 26, 當 n ≤ 26 時, 它的不同正規密碼

個數是

b

26

(n) =

n

X

j=1

S(n, j)

而當 n > 26 時, 它的不同正規密碼個數是 b

26

(n) =

26

X

j=1

S(n, j)。

讀者耐著性子讀到這裡, 誰都會忍不住 發問: 究竟 S(n, k) 怎樣求出來?

從 S(n, k) 的上述定義, 當然我們知道 了它的實際含義。 數學家的任務是通過數學 的抽象和技巧把它解出來。 然而, 為了更易於 解決問題, 我們可以把它轉化為一個更容易 直接思考的模型。

二. 分組, 一個“平凡”的問題

據說, 美國數學教育專家的一項調查表 明, 成年人用到的數學不超過初中二年級教 材的內容。 然而, 如果隨便留心一下周圍的生 活。 你幾乎都可以提出一個“平凡”的問題, 它 需要數學, 並且令大學生也為如何去解答它 弄得搔首托腮。

“十個學生 (他們的名字當然各不相同), 恰分成三組。 有多少不同的分法?”現在, 我就 提出這樣一個平凡的問題。

當你動手在紙上, 把鄭一, 吳二, 張三, 李四, 王五, 陳六, 何七, 趙八, 梁九, 劉 十· · ·擺弄成三堆的時候, 你會覺得, 這個問 題不勝其繁。

讓我們把十個人看作一個長為十的字, 三個小組看作是三種不同字母。 於是, 長為十 的恰會三個不同字母的正規密碼一一對應於 十個人的分三組的一種方案。 例如

(3)

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

.. .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .

鄭一 吳二 張三 李四 王五 陳六 何七 趙八 梁九 劉十 (1) (1) (2) (3) (1) (3) (3) (2) (2) (1)

(不計較組的標號) AABCACCBBA ⇐⇒

沒想到, 這個平凡的問題竟然就是求 S(10, 3), 讓你不覺一驚。 然而, 換一個角 度看問題, 當你意識到求 S(n, k) 只不過是 把“n 個人分成 k 組”這個如此平凡的問題 時, 你難道不覺得心中大喜嗎?

就用這個模型, 我們去探索 S(n, k)。

顯然, S(0, 0) = 1 (無人, 又不分組)。

約定 S(n, 0) = S(0, k) = 0, n 6= 0, k 6= 0。

要這種分組能夠進行, 必須且僅須人數 不少於組數, 因此

S(n, k) > 0, n ≥ k ≥ 1 S(n, k) = 0, n < k。

易見 S(n, 1) = 1。

考察 S(n, 2)。 把 n 個人 (n ≥ 2) 恰 分成兩組, 每個人都可有 2種選擇。 由乘法原 理, n 個人共有 2

n

種選擇, 但這裡可能出現 所有人選第一組, 或所有人選第 2 組的情形, 這就不符合“恰分成兩組”的要求。 於是, 應有 (2

n

− 2) 種選擇。 但不計較組的標號, 故應 S(n, 2) =

1 2

(2

n

− 2) = 2

n−1

− 1。

用類似方法, 讀者可練習, 求得 S(n, 3) = 1

3!(3

n

− 3 · 2

n

+ 3) S(n, n − 2) = n

3

!

− 3 n 4

!

S(n, n − 1) = n 2

!

現在, 讓我們借助分組模型, 用遞歸的方 法, 求 S(n, k) 的表達式。

更直接地, 我們把“ n 個人恰分成 k 組”看作“n 個有標號 1, 2, . . . , n 的球放到 k 個無標號的盒子裡, 且無一盒空”, 它的方 法數便是 S(n, k)。

我們著眼於球 n。 若球 n 獨佔一盒, 則 剩下的 n − 1 個球須放 (k − 1) 個盒, 放法數 S(n − 1, k − 1)。 若球 n 不獨佔一盒 (即球 n 所在盒至少有2個球), 則可這樣操作: 先把 其餘的 n − 1 個球放 n 個盒, 無一盒空, 方 法數 S(n − 1, k), 然後, 再把這個球 n, 隨 意放一盒, 有 n 種放法, 即共 nS(n − 1, k) 種放法, 於是得

S(n, k) = S(n − 1, k − 1) + nS(n − 1, k) (3) 眾所周知, 電腦最擅長於遞歸運算。 因 此, 從初值 S(0, 0) = 1, S(0, 1) = 0 開 始, 我們用電腦, 按遞歸關係 (3), 對任一對 特定的 (n, k), 不難算出 S(n, k)。 於是, 可 編製出下列一個關於 S(n, k) 的數值表 (1 ≤ n ≤ 10)

(4)

77

...

.. . .. .. . .. .. .. . .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. . .. .. .. . .. . .. .. .. . .. .. . .. . .. .. .. . .. . ...

10 9 8 7 6 5 4 3 2 1

1 511 9330 34105 42525 22827 5880 750 45 1 115975 1 255 3025 7770 6951 2646 462 36 1 21147 1 127 966 1701 1050 266 28 1 4140

1 63 301 350 140 21 1 877

1 31 90 65 15 1 203

1 15 25 10 1 52

1 7 6 1 15

1 3 1 5

1 1 2

1 1

1 2 3 4 5 6 7 8 9 10

k

n B (n) = P n

k=1 S (n, k)

從表中可見, S(10, 3) = 9330。 怪不 得我們試圖拼拼湊湊, 去回答本節開頭的那 個“平凡”問題, 顯得如此力不從心了。

至此, 對於 S(n, k), 我們總算有了一個 算法, 然而, 對追求完美的數學家來說, 仍然 試圖求出 S(n, k) 的顯式來。

一個自然的想法是: 從遞歸關係 (3), 用 逐步遞降方法求出 S(n, k) 的顯式。 然而, 因 為 (3) 式右邊第二項多乘了一個變係數 n。

因此, 要從 (3) 直接導出 S(n, k) 變成不可 能。

我們採用組合數學的另一個技巧—相容 排斥原理。

先退一步考察“n 個有標號的球放到 k 個有標號的盒中, 無一盒空”的放法。 請注意, 這與我們的問題區別僅在於 k 個盒“有標 號”還是“無標號”而已。 既然盒子多了標號, 因此, 每一個無標號盒的放置可生成 k! 個有

標號盒的放置。 於是, 它的方法數應是 kS(n, k)。 (4) 從另一方面考察, 在 k 個有標號的盒 子中, 放 n 個有標號的球。 若至少 j 個 (0 ≤ j ≤ k) 盒是空盒, 它的放法數應是

 k

j



(k − j)

n

。這是因為: 先從 k 個盒中選出 j 個空盒有

 k j 

種方法, 剩下的 (k − j) 個 盒放 n 個標號球有 (k − j)

n

種放法的緣故。

由相容棑斥原理, 無空盒的放法應是

k

X

j=0

(−1)

j

k j

!

(k − j)

n

(5) 既然 (4), (5) 是同一個量, 便得

k!S(n, k) =

k

X

j=0

(−1)

j

k j

!

(k − j)

n

S(n, k) = 1 k!

k

X

j=0

(−1)

j

k j

!

(k − j)

n

(6)

(5)

於是, 我們得到了 S(n, k) 的顯表達式 (6)。

有興趣的讀者可以檢驗一下, (6) 式完全符合 遞歸關係 (3) 及它的初值。 因此, 可以說, (6) 也是 (3) 式的解。

在數學中, S(n, k) 是一個著名的組合 數, 稱為第 II 類 stirling 數, 而它們的和 B(n) =

P n k=1

S(n, k) 稱為 Bell 數, 以 紀念首先研究這類問題的數學家 J. Stirling (1692-1770) 和 E. T. Bell(1883-1960)。

第 II 類 stirling 數 S(n, k) 和 Bell 數 B(n) 有廣泛的應用。 用數學語言來闡述:

把集 A = {1, 2, . . . , n} 作 k 部分分拆 {S

1

, . . . , S

k

} (∪

k i=1

S

i

= A, S

i

∩ S

j

= φ, i 6= j)。 分拆數就是 S(n, k), 而 A 的所有 可能分拆數是 B(n)。 考慮有限集 X, Y , 其 中 |Z| = n, |Y | = k, 則由 X 到 Y 的滿射 (onto mappings) 個數便是 k!S(n, k)。

為了滿足讀者的好奇心, 我們不能不談 一下第 I 類 stirling 數, 雖然它跟本文的題 旨無關。

如果我們把 n 個有標號的球, 分放到恰 好 k 個無標號的圓周上排列, (0 ≤ k ≤ n)。

不同的排列方法數 s(n, k), 便稱為第 I 類 stirling 數。 (有些著作稱為第 I 類 stirling 數的絕對值)。

用組合方法不難得出 s(n, 0) = 1, (n ≥ 1), s(n, 1) = (n − 1)! 及遞歸式

s(n, k) = s(n − 1, k − 1)

+(n − 1)s(n − 1, k), k ≤ n。

令人驚異的是迄今還未能找到第 I 類 stir- ling 數 s(n, k) 的顯表達式。

三. 動真格, 搬出英文詞典

終於, 我們可以鬆一口氣, 滿懷信心回到 密碼問題來。

由 (3) 和 (6), 我們可以計算長為 n 的恰有 k 個不同字母的不同正規密碼數 S(n, k)。 再由 (1) 和 (2), 可以確定地回答:

長為 n 的不同正規密碼個數 b(n) = B(n)。

從編碼和語言學的角度, 我們不妨作一 點有趣的探索。 S(5, 4) = 10 告訴我們, 由 4 個不同字母組成的長度為 5 的單詞有 10 種類 型 (正規密碼)。 動真格, 我們搬出英文詞典 來。 確實, 英文單詞就有這 10種類型:

OOZED EVERY TASTE SPOTS WEEDS NEVER SPOON THERE SHALL SERVE。

然而, 對於 S(5, 3) = 25, 我們翻遍英文詞 典, 只找到 19 類由 3 個不同字母組成的長為 5 的單詞, 而其餘 6 類 AAABC, ABBBC, ABCCC, AABBC, AABCC, ABBCC 卻寄望於未來語言學家創造新詞時填補這一 空白。

如果我們考慮句子, 字與字之間就應留 空。 對於一些保密性能不高的密碼, 亦希望在 傳遞信息的單詞之間保留空白間隔。 這就給 密碼的計算提出了新的要求。 這種留空的限 制與我們日常書寫的習慣是基本一致的: 第 一、 留空的位置不能相鄰 (即僅留一個空格)。

第二、 首末位置不留空。 現在, 我們考慮這種 具有留空限制的長為 n 的正規密碼的計數。

如果僅僅考察一個長為 n 的句子的留空 方法數 f

n

。那麼, 只要考慮第 n − 1 個位置

(6)

79

是非空, 還是空, 兩種情形。 我們就立即得到 遞歸式

f

n

= f

n−1

+ f

n−2

f

1

= f

2

= 1 (7) 眾所周知, {f

n

} 是著名的費波那契 (Fi- bonacci) 數列。 當然, 如果更仔細地討論空 格的取法。 例如, 在長為 n 的句子中, 取出 r 個 (0 ≤ r ≤ ⌊(n − 1)/2⌋) 位置留空的方法 數: (⌊m⌋ 表不大於 m 的最大整數) 就可以 看作是在一個數列 1, 2, . . . , n − 2 中 (因句 子首末位不留空) 取出 r 個互不相鄰的元的 方法數, 其結果 (見 [2]) 是

(n − 1) − (r − 1) r

!

= n − r − 1 r

!

(8) 對照 (7), 這就恰好驗證了一個關於費波那契 數列的結論

f

n

=

[(n−1)/2]

X

r=0

n − r − 1 r

!

(9) 現在, 我們可以著手計算有留空限制的 正規密碼的個數。

設 m

q

(n) 為在一個有 q 個字母的碼 表上生成的長為 n 的正規密碼個數, 這裡, 碼 (句子) 的長度意味著字母數與空隔數的總 和。

如果考慮有 r 個空隔 (0 ≤ r ≤ ⌊

n−1 2

⌋) 的正規密碼。 那麼, 設想把那些空隔去掉, 即 讓所有字母向一邊擠緊而不留空白, 便得到 一個長為 n − r 面無空隔的正規密碼。

易見, 某 r 個位置取空隔的長為 n 的正 規密碼集與無空隔的長為 n − r 的正規密碼

集是一一對應的。 注意到 (8) 式, 便得

m

q

(n) =

⌊(n−1)/2⌋

X

r=0

n − r − 1 r

!

b

q

(n − r)。

如果我們所用的字母種類數不加限制。 這時 記 m

q

(n) 為 M(n) 便得

M(n) =

[(n−1)/2]

X

r=0

n − r − 1 r

!

B(n − r) (10) 下面給出一個 M(n) 數值表 (1 ≤ n ≤ 10)

n 1 2 3 4 5 6 7 8 9 10 M (n) 1 2 7 25 102 456 2219 11640 65364 390646

試看 M(4) 的 25個留空正規密碼

AAAA AAAB AABA AABB AABC ABAA ABAB ABAC ABBA ABBB ABBC ABCA ABCB ABCC ABCD AA A AA B AB A AB B AB C A AA A AB A BA A BB A BC

四. 更精確, 借助相伴碼

既然, 編碼和解碼都追求精確, 那麼, 我 們做碼的計數時, 也應追求更精密的計數。

當寫下一個正規密碼時, 最引起我們注 意的是, 同一個字母連續出現的碼段, 我們 稱它為貫 (run)。 一個貫所含的位置數稱為 貫的長。 一個正規密碼 (本節討論不帶空隔的 正規密碼) 由很多貫組成。 所有貫長中的最大 者, 稱為此正規密碼的貫長。

我們約定, 正規密碼的長用 n 表示, 所 含不同字母個數用 k 表示。 所含貫的個數用 d 表示, 而密碼的貫長表為 ℓ。 顯然, k ≤ d ≤ n, ⌈

n d

⌉ ≤ ℓ ≤ n, 這裡 ⌈m⌉ 表不小於 m 的

(7)

最小整數。 例如, ABCCBCCBDDB, 有 n = 11, k = 4, d = 8, ℓ = 2。 而所有 n = 5, k = 3, d = 3, ℓ = 2 的正規密碼是 AABBC, AABCC, ABBCC。

比上一節更精確的一個問題是: 有多少 個具有參數 n, k, d, ℓ 的不同的正規密碼?

為了解決這個問題, 我們引進一個相 伴正規密碼 (associated normal cryp- togram) 的概念, 簡稱 ANC。 如果把一個含 k 個不同字母的正規密碼 NC 的所有字母作 不同置換 (更數學化地說: 在 k 個字母的對 稱群作用下) 所得的所有密碼, 稱為 NC 的 相伴正規密碼 (ANC)。 例如, ABBAC 的 ANC 是 ABBAC, CBBCA, BAABC, CAACB, ACCAB, BCCBA。

為敘述更簡明, 我們約定下列符號 C

(≤k) (≤ℓ)

(n, d) — 長為 n, 貫數為 d, 且不同字

母數至多 k 個, 貫長至多 ℓ 的 ANC 個數。

C

(=k) (≤ℓ)

(n, d) — 長為 n, 貫數為 d, 不同字母 數 k 貫長至多 ℓ 的 ANC 個 數。

類似可知 C

(=k) (=ℓ)

(n, d)。 在上述記號中, 若 D 換為 C, 則表同類約束條件下, 正規密碼的個 數。

下面, 讀者將更多和符號打交道。 我們 的任務是求 D

(≤ℓ) (=k)

(n, d) 或 D

(≤ℓ) (≤k)

(n, d)。 由 ANC 定義, 易知

D

(=k) (≤ℓ)

(n, d) = 1

k!C

(=k) (≤ℓ)

(n, d) (11) 我們先求 C

(≤k) (≤ℓ)

(n, d)。

令 P

n,d (≤ℓ)

表正整數 n 分為 d 部分, 且 每部分不大於 ℓ 的分拆個數。 也即方程 x

1

+

x

2

+ · · · + x

d

= n, 1 ≤ x

i

≤ ℓ, ⌈

n d

⌉ ≤ ℓ ≤ n, 1 ≤ d ≤ n 的解 (x

1

, x

2

, . . . x

d

) 的個數。

於是

C

(≤k) (≤ℓ)

(n, d) = k(k − 1)

d−1

P

n,d (≤ℓ)

(12) 這是因為 n 分拆為 d 部分後, 在第一段 (貫) 有 k 種可能的字母選擇, 其餘 d − 1 段各 有 (k − 1) 種可能的字母選擇。 現在, 只須求 P

n,d (≤ℓ)

運用生成函數的技巧 (見 [4]), P

n,d (≤ℓ)

是 (t + t

2

+ · · · + t

)

d

展式中 t

n

項係數。

(t+t

2

+· · ·+d

)

d

= t

d

(1−t

)

d

(1−t)

−d

= t

d X

r≥0

(−1)

r

d r

!

t

ℓr X

r≥0

d + r − 1 d − 1

!

t

r

= t

d

X

n=d

h X

j≥0

(−1)

j

d j

!

· d + (n − d − ℓj) − 1 d − 1

! i

t

n−d

=

X

n=d

X

j≥0

(−1)

d

d j

!

n−ℓj −1 d − 1

!

t

n

。 注意到 j ≤ d 且 d − 1 ≤ n − ℓj − 1, 即 j ≤ min{d, (n − d)/ℓ}。 於是

P

n,d (≤ℓ)

=

min

(d,⌊(n−d)/l⌋)

X

j=0

(−1)

j

d j

!

· n − ℓj − 1 d − 1

!

(13) 由 (12), (13), 便得

C

(≤k) (≤ℓ)

(n, d) = k(k − 1)

d−1

min

(d,⌊(n−d)/ℓ⌋)

X

j=0

·(−1)

j

d j

!

n − ℓj − 1 d − 1

!

, (14)

(8)

81

由 (11), 我們的目標仍需求 C

(=k) (≤ℓ)

(n, d)。 注 意到

C

(≤k) (≤ℓ)

(n, d) =

k

X

i=1

k i

!

C

(=i) (≤ℓ)

(n, d) (15) 運用二項式反演技巧 (見 [5]) 即

a

n

=

n

X

r=1

n r

!

b

r

⇔ b

n

=

n

X

r=1

(−1)

n−r

n r

!

a

r

由 (15) 得 C

(=k) (≤ℓ)

(n, d)

=

k

X

i=1

(−1)

k−i

k i

!

C

(≤i) (≤ℓ)

(n, d)

= P

n,d (≤ℓ)

k

X

i=1

(−1)

k−i

k i

!

i(i − 1)

d−1

= P

n,d (≤ℓ)

k

X

i=2

(−1)

k−i

k i

!

i(i − 1)

d−1

(16) 由 (11) 便得

D

(≤ℓ) (=k)

(n, d)

= P

n,d (≤ℓ)

1 k!

k

X

i=2

(−1)

k−i

k i

!

i(i − 1)

d−1

= 1 k!

k

X

i=2

(−1)

k−i

k i

!

i(i − 1)

d−1

·

min

(d,⌊(n−d)/ℓ⌋)

X

j=0

(−1)

j

d j

!

· n − ℓj − 1 d − 1

!

(17) 對於另外的正規密碼, 顯然

D

(=k) (=ℓ)

(n, d) = D

(≤ℓ) (=k)

(n, d)

−D

(=k) (≤ℓ−1)

(n, d) (18) D

(≤k) (≤ℓ)

(n, d) =

k

X

j=1

D

(≤ℓ) (=j)

(n, d) (19)

回想起第一, 三節的結果, 我們可以檢驗

n

X

i=k

D

(=k) (≤n)

(n, i)=S(n, k)

n

X

i=k n

X

j=1

D

(=j) (≤n)

(n, i)=

n

X

j=1

S(n, j) = B(n)。

還可以得到關於 C

(≤k) (≤ℓ)

(n, d) 的下列遞歸關 係

C

(≤k) (≤ℓ)

(n, d)=(k−1)

k

X

j=1

C

(≤k) (≤ℓ)

(n−j, d−1), 1 ≤ ℓ < n (20) C

(≤k) (≤ℓ)

(n, d)= n − 1

d − 1

!

k(k − 1)

d−1

,

ℓ = n (21) 上述兩式可以如下證明: 設一個相伴正規密 碼的最後一個貫是 R 且 R 的長度是 j, 1 ≤ j ≤ ℓ, 1 ≤ ℓ ≤ n。 刪去 R, 便得一個帶參 數 n − j, d − 1, (≤ k), (≤ ℓ) 的相伴正規密 碼, 這類密碼的個數是 C

(≤k) (≤ℓ)

(n − j, d − 1) 注意到恢復 R 的方法有 k − 1 種。 對 j 求 和由 1 到 ℓ, 1 ≤ ℓ ≤ n − 1, 便得 (20)。

若 ℓ = n, n 的恰有 d 部分的有序分拆數是

 n−1

d−1



。而放 k 類字母在 d 部分的方法數是 k(k − 1)

d−1

, 便得 (21) 式。

下面試驗證我們的結果。 由 (17) 式, D

(≤2) (=3)

(5, 4)=1

3!

3

X

i=2

(−1)

3−i

3 i

!

i(i−1)

4−i

·(−1)

0

4 0

!

5 − 0 − 1 4 − 1

!

=12

符合條件的所有正規密碼是: AABAC, AABCA, AABCB, ABAAC, ABACC, ABBAC, ABBCB, ABCAA, ABC BB, ABCCA, ABCCB。

(9)

類似地, D

(=2) (≤2)

(5, 4) = 4, 它們是 AABAB, BAABA, ABAAB, BABAA,

D

(=1) (≤2)

(5, 4) = 0 D

(=3) (≤1)

(5, 4) = 0

由 (18) D

(=3) (=2)

(5, 4) = D

(≤2) (=3)

(5, 4) − D

(≤1) (=3)

(5, 4) = 12 − 0 = 12 由 (19)

D

(≤2) (≤3)

(5, 4) =

3

X

j=1

D

(j=2) (≤2)

(5, 4)

= D

(=1) (≤2)

(5, 4) + D

(≤2) (=2)

(5, 4) +D

(=3) (≤2)

(5, 4)

= 0 + 4 + 12 = 16

最後, 我們也可以考慮有空隔的帶參數 n, k, d, ℓ 的正規密碼的計數, 沿用上述記 號, 把 M 代替 C 表示增加如第三節的有空 隔制的計數, 用類似方法可得

M

(=k) (≤ℓ)

(n, d) =

⌊(n−1)/2⌋

X

r=0

n−r−1 r

!

D

(=k) (≤ℓ)

·D

(=k) (≤ℓ)

(n, d)

參考文獻

1. S. W. Golomb, On the Enumeration of Cryptograms, Mathematics mag- azine 53, No. 4 (1980), 219-221.

2. 柳柏濂, 欄柵前面的思考—不含定距元素 的組合問題, 數學傳播, 第二十一卷第一 期, 29-34。

3. Liu Bolian, A Note on the Enumera- tion of Cryptograms, Menemui Mat.

13(1991), 57-63.

4. 柳柏濂, 別瞧不起它, 那個中學教材中的 式子, 數學傳播, 第二十一卷第四期。

5. 柳柏濂, 阿凡提巧拆金環與完備分拆, 數 學傳播, 第二十一卷第三期, 73-79。

—本文作者任教於中國華南師範大學數學系 和廣東職業技術師範學院計算機系—

參考文獻

相關文件

這個題目簡單明瞭, 連國中生都可以動手做了。 若將題目改為 『將一組同花色的撲克牌 A ∼ K 分成三堆, 使每堆中的任兩張牌的點數差都不在該堆內。』 甚至可以當家庭的休閒益 智遊戲 了。

一、 動機與目的 二、 問題分析 三、 相關文獻 四、 行動設計 五、 實施程序 六、 結果與討論 七、 結論與建議 八、 檢討與省思.

「我把你當成兒子一樣看待,你怎麼 這樣想 …… 你不知道我是推動這個計 畫的人員之一嗎?」「有些事我無法 退讓,這是我的家鄉,我不要幾年後環

 初二三各六  四四五三品   六一七十一  八九各一品   初會世如普  世華舍那品   二會如四光  菩薩淨首品   三會昇須十  梵初明法品 

不 過, 仔細一想便覺得這 個問 題“不成問題”, 因為要把一大張未撕開 的郵票一張一張分開, 就是要把各郵票之間 的“連結線”撕開, 而“連結線”的總和是固定 的, 並不隨撕開的方式而有所改變,

廿一勝 廿二勝 廿三勝 廿四勝 (廿六). 季殿軍戰(廿七)

年齡滿七十五歲至未滿七十六歲 一點 年齡滿七十六歲至未滿七十七歲 二點 年齡滿七十七歲至未滿七十八歲 三點 年齡滿七十八歲至未滿七十九歲 四點

大師這篇論文把二十世紀以前佛教在中國的傳播,分成五個時期:秦漢