Upd:回去仔細看了下知乎,發現有人掛了一篇文章(鏈接),更具參考性。##
前言(流水賬):事情的起因很簡單,生物課上講到鹼基互補配對原則,講到不限制鹼基對數目的情況下,\(n\) 對鹼基對組成的 DNA 序列理論上有 \(4^n\) 種。咋一看,\(4^n\) 從一端開始枚舉一條單鏈,乘法原理來解釋似乎沒有什么問題,但是我細心的同學(BeyondLimits 關鍵人物)發現事情不太對勁,認為數量應該要再除以 \(2\),即 \(\frac{4^n}{2}\),但是我覺得好像還是不太對,經過討論,我們覺得這個猜想也不太對...后來發現知乎上也有這個問題的討論(鏈接),卻沒有給出明確結論。
開始我們認為一個 DNA 序列會被計算 \(2\) 次。但是了手推 \(2\) 個鹼基對的 DNA 序列數量,發現和 \(\frac{4^n}{2}\) 的猜想不符合。我們又考慮到字符串有特殊性質,就開始考慮一些具有特殊性質的字符串,並且寫了一些錯誤的程序來模擬枚舉的過程...程序畢竟是錯的,折騰很久都沒什么進展。
從中午一路犯錯到晚上,凌晨我們又和另一位同學(thorn 關鍵人物)一起討論。又一番瞎折騰,才搞出了這個問題的結果。
打表發現:
\(n=2\) 時 DNA 序列有 \(10\) 種
\(n=3\) 時 DNA 序列有 \(32\) 種
\(n=4\) 時 DNA 序列有 \(136\) 種
\(n=5\) 時 DNA 序列有 \(512\) 種
\(n=6\) 時 DNA 序列有 \(2080\) 種
\(...\)
發現只有 \(n\) 為奇數滿足這個猜想,偶數則不行。
回到最初的觀點上,我們認為一個 DNA 序列會被計算 \(2\) 次。因為:
但是結果於猜想不符,我們猜測可能有其他的串被計算到的次數不是 \(2\) 次。
存在被統計次數大於 \(2\) 的串嗎?不存在,每條 DNA 從兩條鏈的 3‘ 端開始只有兩種結果。
但是這兩種結果可能會相同?
如果我們按照 \(4^n\) 來從 3’ 端逐個地枚舉一條 DNA 單鏈上的鹼基排列順序的話,會有這樣的一種“對稱”的串 \(S\) 從兩個 3‘ 端開始結果一樣,只會被枚舉到 \(1\) 次。
如圖所示是一個串 \(S\) 的例子:
且因為這個特殊性質,串 \(S\) 的長度只能為偶數,因為若長度為奇數,則最中間的鹼基從兩個 3‘ 端開始枚舉必然是不相同的。
還有一個問題就是怎么計算 DNA 序列的數目。
在枚舉到的 \(4^n\) 種情況中,有些事被枚舉到兩次的串,有些則是只被枚舉到一次的串。
只要計算出只被枚舉到一次的串的數量就可以算出偶數個鹼基對組成的 DNA 序列理論上的種類了。
可以確定 DNA 一條單鏈的前一半,再用前一半去確定后一半,如圖:
對於 \(n\)(偶數)個鹼基對 DNA 序列中,有 \(4^{\frac{n}{2}}\) 種串(序列)只會被統計到一次。
\(n\)(奇數)個則每個串(序列)都被統計兩次。
所以結論是這樣
\(a_n=\begin{cases}\frac{4^n}{2}\ \ \ \ \ \ \ \ n=2k+1\\\frac{4^n+4^{\frac{n}{2}}}{2}\ n=2k\ \ (k\in N^*)\end{cases}\)
但是事實上 DNA 更復雜,這個結論也只能是理論上的了。
最后感謝兩位朋友凌晨一起討論問題
@BeyondLimits
@thorn