第三章、 研究方法
3.2 核醣核酸結構描述語言
本研究針對核醣核酸的二級結構設計一套圖形表示的描述語言,語言的定義 如下:
1. 以 RNA dual graph 的概念表示核醣核酸的二級結構,以二維陣列儲存 RNA dual graph 的資訊,其中包含了結構拓樸及結構長度的資訊。
2. 結構拓樸中的莖幹辨別是根據前置器的設定而得到,不一定只是 C≣G、
A=U、G-U 三種鹼基配對。
3. 一個莖幹中可包含特定長度以下的內部環狀結構或突起結構,長度大小 可由使用者自由設定,系統預設值為 1。
4. 莖幹結構與每個環狀結構分別給一個長度範圍,表示該結構元所涵蓋的 結構大小。
5. 內部環狀結構或突起結構的長度不包含在莖幹長度中。
6. 環狀長度的結構可能為零,供區別相鄰的兩個莖幹。
透過上述定義,任何的二級結構能輕易的轉換為描述語言,以下舉例說明,
下頁圖 6 為 DF4600(tRNA)執行 Mfold 後所輸出的第一個候選結構:
圖 6. DF4600(tRNA)由 Mfold 產生之第一候選結構
我們將此結構圖轉為 RNA dual graph 的概念圖,所得的概念圖如下頁之圖 7。
轉換的方法則先分別將每個莖幹結構皆視為一個圖形(graph)的點(vertex),而上圖 中有四個莖幹,則可以轉換成四個點。上圖中的‧為 RNA 的 5'端,我們從 5'
端出發往 3'端走,根據先後遇到的莖幹分別命名為莖幹 1、莖幹 2、莖幹 3 與 莖幹 4,而其建立的對應點則為點 1、點 2、點 3 以及點 4。由於莖幹 1 到莖幹 2 之間有環狀結構,故建立一條由點 1 往點 2 的邊(edge);莖幹 2 到莖幹 3 之間有 環狀結構,故建立一條由點 2 往點 3 的邊;而從莖幹 3 走髮夾環狀結構回到莖幹 3 本身,故在點 3 建立一條自身邊(self-edge)回到點 3 自己。莖幹 3 走環狀結構到 莖幹 2,然後走環狀結構到莖幹 4,再走髮夾環狀結構回到莖幹 4 本身,於是我 們建立從點 3 到點 2 的邊、點 2 到點 4 的邊以及從點 4 走回到點 4 的自身邊。而 從莖幹 4 到莖幹 1,雖然其中沒有環狀結構,但為了區別莖幹 4 與莖幹 1,我們 建立了一條從點 4 到點 1 邊,雖然其長度為零,但仍視為存在此邊。
圖 7. 由圖 6 轉換之 RNA dual graph
根據此概念圖,我們欲建立一個資料結構來表示此圖,在圖學上,習慣以鄰 接串列(adjacency-list)表示有向圖(directed graph),如下圖 8 所示,最左邊的陣列依 照索引(index)分別表示點 1、點 2、點 3 與點 4,而陣列中每個點右邊的鏈結,其 內容表示該點可連結到的點,而內容為 0 則表示此點亦為 3'端終點。在此圖表 示點 1 可以連結到點 2,而點 1 亦為終點;點 2 根據由 5'端到 3'端的走法,第 一次走到點 2 時接下來則連結到點 3,而第 2 次走到點 2 時則連結到點 4;點 3 的第一個連結則是回到點 3 自己,第二個連結則是到點 2;點 4 的第一個連結則 是回到點 4 自己,第二個連結則是到點 1。如此便可由此鄰接串列清楚的表達其 RNA dual graph 的概念圖。
圖 8. 以鄰接串列表示圖 7
然而 RNA dual graph 的缺點便是缺少了點跟邊的長度資訊,我們將此鄰接串 列擴充,根據前面的二級結構圖,把點跟邊的長度資訊納進資料結構中,所得新 的鄰接串列如下圖 9。
圖 9. 將圖 8 的表示法擴充之鄰接串列表示法
最左邊的陣列內容表示該點(即莖幹)的長度,而其中會有兩個值則指的是長 度範圍,[X,Y]表示其長度最小為 X,長度最大為 Y,在此的鄰接串列表示的是一 個確切的結構,因此 X 與 Y 值會相同。由於我們的資料結構是為了找出共同結 構元所設計,而共同結構元意指會出現在序列上的相似結構,所以我們將長度擴 展為長度區間來表示長度範圍,如下頁圖 10 中表示,例如點 1 的長度範圍變為 [6, 8],以較有彈性的資料結構來進行基因規劃法。
而陣列的第一個鏈結(link)內容表示到下一個點的邊(即環狀結構)的長度範 圍,陣列的第二個鏈結內容則表示第一個可連結的點。第三個鏈結內容表示到達 第二個連結點的邊的長度範圍,第四個鏈結內容則表示第二個連接點。在上圖 中,取陣列中索引為 2 的點舉例說明:陣列中的值為 5,表示點 2(即莖幹 2)的長 度為 5;第一個鏈結內容為 8,第二個鏈結內容為 3,表示點 2 可以經過長度為 8 的邊到達點 3;第三個鏈結內容為 1,第四個鏈結內容為 4,表示點 2 可以經過 長度為 1 的邊到達點 4。
圖 10. 將圖 9 表示法中各點與邊隨機擴展長度後之表示法
由於在實作時需要不斷的取出資料結構中的值來使用,在演化過程中亦會不 斷的改變資料結構中的內容,而鄰接串列中的鏈結串列在資料存取時較為不便,
需花費很多時間,也需要額外的空間來做鏈結。因此我們想到利用陣列有隨機存 取(random access)的優點,以陣列(array)模擬鄰接串列實作。
以下圖 11 的陣列表示法即模擬實作了鄰接串列,相對的位置則代表著相同 的意義。陣列中的每一列儲存著與每一個點相關的資訊,例如從第二列,我們可 以知道:點(莖幹)2 的長度範圍為[3, 7],在經過長度範圍為[6, 10]的邊(環狀結構) 可以到達點 3,而點 2 亦可由經過長度範圍為[1, 4]的邊到達點 4。
圖 11. 以矩陣表示法表示圖 10 中之鄰接串列