Tải bản đầy đủ (.doc) (41 trang)

là tìm kiếm các thành phần lặp trong chuỗi genome

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (531.82 KB, 41 trang )

Lời cảm ơn
Đầu tiên, tôi xin chân thành cảm ơn tiến sĩ Lê Sỹ Vinh hiện đang công tác tại khoa
Khoa Học Máy Tính – Đại học Công Nghệ – Đại học Quốc Gia Hà Nội, người đã
động viên và giúp đỡ tôi rất nhiều trong quá trình thực hiện luận văn này. Thầy cũng
chính là người hướng dẫn trực tiếp và đưa ra những lời khuyên bổ ích cùng những ý
tưởng sáng tạo trong quá trình thực hiện nghiên cứu giúp tôi có thể hoàn thành luận
văn này một cách tốt nhất.
Tiếp theo là lời cảm ơn của tôi gửi đến gia đình tôi. Ba và anh trai là những người
đã luôn bên tôi trong suốt những năm học đại học và cũng luôn động viên, giúp đỡ tôi
rất nhiều với những kinh nghiệm quý báu và là chỗ dựa vững chắc để tôi có thể hoàn
thành luận văn này.
Ngoài ra tôi cũng xin cảm ơn ba người bạn cùng nhóm nghiên cứu được thầy Vinh
hướng dẫn trong năm nay đó là: Hà Tuấn Cường, Nguyễn Hoàng Dũng, và Nguyễn Hà
Anh Tuấn. Các bạn đã giúp đỡ, và động viên tôi rất nhiều từ khi mới bắt đầu tới khi
hoàn thành. Đồng thời cũng xin cảm ơn các bạn học cùng lớp, các anh chị học khóa
trên vì những lời khuyên bổ ích.
Hà Nội, 21 tháng 5 năm 2010
Sinh viên
Nguyễn Hoàng Sơn
Tóm tắt nội dung
Cùng với sự phát triển với tốc độ chóng mặt của sinh học phân tử, chúng ta đã có
thêm những hiểu biết không nhỏ về cấu trúc và thành phần các hệ gene của các loài
sinh vật. Kết quả là dữ liệu di truyền học ngày càng được hoàn thiện và các nhà khoa
học có thể truy cập vào một lượng khổng lồ thông tin trong các ngân hàng gene để tiến
hành phân tích và tìm hiểu sâu thêm về bí ẩn hệ sinh vật. Do đó yêu cầu về những
công cụ tin học có thể xử lý lượng thông tin dạng chuỗi với kích thước rất lớn trong
thời gian hợp lý được đặt ra trong lĩnh vực tin sinh học.
Một trong những bài toán lớn được đặt ra hiện nay đó là tìm kiếm các thành phần
lặp (repeat finding) trong chuỗi genome, khi mà chúng đóng nhiều vai trò quan trọng
với sự tiến hóa ở sinh vật nhân chuẩn và kỹ thuật đánh giấu đoạn lặp (repeat masking)
được áp dụng trước tiên trong phân tích và sắp hàng hai hệ gene. Hiện nay có không ít


các công cụ tìm kiếm đoạn lặp hiệu quả sử dụng các phương pháp khác nhau xuất
hiện. Trong nội dung khóa luận này, tôi sẽ giới thiệu qua một số phương pháp và công
cụ này, đồng thời dựa trên cơ sở cải tiến và kết hợp thuật toán MMR của REPuter và
thuật toán phân cụm trong RepeatFinder để đưa ra một công cụ mới có tên RF-MMR.
Kết quả của việc chạy chương trình RF-MMR và một số công cụ phổ biến khác
trên tập dữ liệu tạo ra từ tập dữ liệu oryza sativa sẽ được đưa ra để so sánh và rút ra
một cái nhìn tổng quát. Nhìn chung chương trình đề xuất chạy với thời gian được rút
ngắn đáng kể với một độ chính xác hợp lý so với các công cụ khác. Nội dung chi tiết
sẽ được đề cập đến ngay sau đây.
Mục lục
Lời cảm ơn 1
Tóm tắt nội dung 2
Mục lục 3
Chương 1: Giới thiệu chung 1
Chương 2: Các phương pháp hiện tại 5
Chương 3: Phương pháp đề xuất 12
Chương 4: Phương pháp thí nghiệm, kết quả thực nghiệm và đánh giá 24
Chương 5: Kết luận chung và xu hướng phát triển trong tương lai 35
Tài liệu tham khảo: 37
Chương 1: Giới thiệu chung
Nội dung chương này sẽ đưa ra cái nhìn chung, các khái niệm sinh học cơ bản về
genome (bộ gene), các thành phần lặp trong và vai trò của chúng trong nghiên cứu về
chuỗi genome.
1.1 Khái niệm cơ bản.
Genome (bộ gene hay hệ
gene) là tập hợp chứa đựng toàn
bộ các thông tin di truyền của
một cơ thể sinh vật được mã hóa
trong DNA (hoặc ở một số virus
là RNA). Genome bao gồm

những vùng chứa gene lẫn những
đoạn không phiên mã.
Hình 1: Genome trong mô hình máy phân tử (nguồn: Joanne Fox)
Hiểu một cách đơn giản, đối với tế bào nhân chuẩn genome bao gồm tập các
nhiễm sắc thể chứa trong nhân tế bào, được biểu diễn bằng các chuỗi DNA (gồm các
thành phần A, C, G, T) với kích thước rất lớn , có thể lên đến hàng tỷ ký tự. Cùng với
việc hệ gene ngày càng hoàn thiện nhờ tiến bộ sinh học phân tử, sự thách thức trong
lĩnh vực nghiên cứu tin sinh cũng ngày càng tăng khi người ta nhận ra yêu cầu xử lý
phân tích các chuỗi genome khổng lồ được đặt ra.
Một trong những lĩnh vực cơ bản nhất và cũng không kém phần quan trọng đó là
bài toán tìm kiếm các thành phần lặp trong chuỗi genome. Phần tiếp theo sẽ cho cái
1
nhìn chung về các thành phần lặp và vai trò của nó trong phân tích và khám phá đặc
tính hệ gene sinh vật.
1.2. Thành phần lặp trong chuỗi genome.
Từ những năm 60 của thế kỷ trước, các nhà khoa học đã khám phá ra trong các
chuỗi genome trong tế bào nhân chuẩn không chỉ bao gồm các gene, mà còn gồm một
số không nhỏ các chuỗi không phiên mã (tức là không đóng vai trò trong việc mã hóa
protein). Hơn thế nữa, họ còn tìm thấy trong các chuỗi genome có chứa nhiều đoạn
DNA lặp đi lặp lại, mà thực ra sau này được gọi là các thành phần lặp chiếm đa số
trong thành phần DNA của hầu hết các tế bào nhân chuẩn (trong hệ gene người chiếm
hơn 50%). Trong một chuỗi DNA có các loại đoạn lặp sau đây[15]:
• Tandem repeat (lặp bộ): là họ các đoạn lặp thường là ngắn và xuất hiện liên tiếp
nhau trong chuỗi genome. Loại này lại chia ra: satellite DNA, minisatellite,
microsatellite.
• Interspersed repetitive DNA (các thành phần lặp rời rạc): các thành phần lặp
xuất hiện một cách rải rác trên chuỗi genome. Loại này lại được chia thành các họ lặp
sau: SINEs (short interspersed nuclear element), LINEs (long interspersed nuclear
element), Long Terminal Repeat (LTR)
• Các thành phần lặp có thể đổi chỗ (có thể dịch chuyển vị trí trên chuỗi

genome).
Trong nội dung của khóa luận, ta chỉ quan tâm đến các công cụ tìm kiếm các thành
phần lặp rời rạc, tức loại thứ hai.
Các thành phần lặp đã và đang tiếp tục đóng vai trò cốt yếu trong sự tiến hóa về
gene của loài. Hơn thế nữa, trong so sánh bắt cặp trình tự các chuỗi genome (một lĩnh
vực nghiên cứu rất quan trọng trong tin sinh học), việc tìm kiếm và loại bỏ các đoạn
lặp là bước cần được thực hiện đầu tiên. Các đoạn lặp không được nhận biết và đánh
dấu trước khi thực hiện bắt cặp trình tự sẽ có thể ảnh hưởng sai lệch đến kết quả (do
thực hiện tìm kiếm trong các đoạn lặp các đoạn giống nhau!).
2
Vì thế yêu cầu về một công cụ có khả năng tìm kiếm tự động các đoạn lặp trong
một chuỗi genome kích thước lớn là tất yếu. Một chương trình như thế phải thỏa mãn
các điều kiện cơ bản sau:
• Tính hiệu quả: có thể phân tích một chuỗi genome có kích cỡ hàng triệu base
pairs (bp), với thời gian tuyến tính theo độ dài chuỗi.
• Tính linh hoạt: không chỉ có khả năng nhận biết các đoạn lặp giống hệt nhau,
mà còn có khả năng nhận biết các đoạn lặp suy biến (cho phép sai khác nhỏ hơn một
ngưỡng nào đó), các đoạn lặp ngược (reverse complemented repeat),
• Tính bộ phận: bởi vì tìm kiếm đoạn lặp thường là một bước cơ sở trong việc
phân tích cấu trúc hệ gene, chương trình cần có một giao diện đơn giản để có thể gọi
lại và sử dụng như một mô đun trong một project khác lớn hơn.
Trong phần còn lại của khóa luận, tôi chỉ xin giới thiệu một số phương pháp tìm
kiếm đoạn lặp áp dụng được với các chuỗi genome có kích thước hàng triệu bp trở lên,
với thời gian tìm kiếm hợp lý và cho kết quả tương đối tốt (phép đánh giá sẽ trình bày
sau), đồng thời đưa ra một công cụ mà nền tảng là dựa trên các công cụ RepeatFinder
và Reputer, đã qua một số cải tiến về phương pháp. Phương pháp tập trung vào
việc đưa ra một kết quả hợp lý so với các phương pháp hiện tại, với yếu tố thời gian
chạy được rút ngắn đáng kể. Kết quả được đưa ra dưới dạng text, công cụ đồ họa thể
hiện kết quả đạt được có thể sử dụng mô đun repVis trong gói chương trình
REPuter [8].

1.3. Định dạng dữ liệu
Trong nội dung của khóa luận, ta sẽ đề cập đến các công cụ thao tác các file
genome trên hai định dạng: chuỗi genome hợp (assembled reads) và genome đa chuỗi
(multiple sequence reads). Trong định dạng thứ nhất, file dữ liệu sẽ chứa một chuỗi
liên tục DNA tương đối dài, ví dụ toàn bộ một nhiễm sắc thể hay một vùng nhiễm sắc
thể liên hợp. Ở định dạng đa chuỗi, file dữ liệu sẽ chứa nhiều chuỗi DNA rời rạc nhau
(mà mỗi chuỗi bắt đầu bằng ký tự '>' đối với định dạng fasta); định dạng này thường
được sử dụng khi các vùng gene mã hóa được quan tâm, khi đó không phải toàn bộ
3
chuỗi genome được thể hiện (vì chuỗi genome bao gồm cả những đoạn không phiên
mã!).
Một ví dụ file genome hợp theo định dạng fasta:
>a segment in human chromosome…
GGGAAGTGACTGGGAGAAGGCCTTATAGCAGCTCCTTACAGCCTCTGATCTTCTT
GTGTTCTGGGAGGATCACAAATTAACCAAAACTCAGATTAGCTGCAGTTCAAGCCT
ACATGGATATATGCAAGGGTGCCAGGCCATCATGGAGGAGCCCCTACAACTCCA
CTCTCCTTTCATATATCCACCTAAGGATTCTTTTTACAAACATAAGCCACCTGTTGT
GGCCACTCTAAAGATACAGAATGGACCCCATGCAAAATTTGGTTTAGATATCAAGA
GCGATAATGCTGTATATACATCAACAGGGCAAAGGTTTATTACTCGCATAATGAGG
CTCTTTTGGGAGAGCAAGGCAGGCTTCCAAAGCTGATCTGAAAATGTCTTGAGAG
CTAGGAAAGGAGACTAGCTTACAGTTTTTATGGTGGTTAGGGGTGCTGGGGTGAG
GGTTCCAATGTGCAGCTGACTTGCATGGTTTGAAACTCCTTTCAACAACAAAGGAG
AGAGCACCCAGGAAT
Ví dụ cho 1 file đa chuỗi (multi-fasta):
>the first interested segment in oryza sativa chromosome 10…
TAAGGAGAACTGAGGTGAGGCTTAGATGCTGTCAGCAAACATCCAAAAAAAAAAA
AAAGACAGCTTCCTTATTAACTCCTGATGTTCGAGAAATAAAATGTACTACGTTTTT
GTAGTTGAATTCAAACAGAT
> the second interested segment in oryza sativa chromosome 10…
CTATGAGGTCTGTAGCCTGATACCTGTAAGAAAGATGAAAGTTCCATCAACTGTCT

CATTCTAGAGCTCAGCATTGT
> the third interested segment in oryza sativa chromosome 10…
TTCTGGGAAGTGAAATGAATGTCTTGGTGGCAATAAATGGCATCTGGAACTCTAAC
GGCAGTAACGAGTGTCTTAATGGCCTTGTATTATAGTTTTATTATATGTAAAGGCAT
GTATGGTATTGACTTATATTTT

4
Chương 2: Các phương pháp hiện tại
Nội dung chương này sẽ giới thiệu các phương pháp tiếp cận và một số công cụ
phổ biến được dùng trong tìm kiếm và nhận dạng đoạn lặp trong chuỗi genome hiện
nay. Những trình bày dưới đây được tổng hợp và tóm tắt qua quá trình tham khảo [12].
Do nhu cầu cấp thiết về một công cụ tìm kiếm đoạn lặp nên một số không nhỏ các
chương trình đã được phát triển, ví dụ: RepeatMasker, REPuter, RepeatFinder, REPO,
…Mỗi một chương trình có các hướng tiếp cận khác nhau, mang lại hiệu quả khác
nhau và áp dụng cho các chuỗi genome tương ứng cũng mang lại các kết quả khác
nhau. Nhìn chung, có 2 hướng tiếp cận chính để giải quyết vấn đề tìm kiếm đoạn lặp,
đó là kỹ thuật tìm kiếm dựa vào thư viện, và kỹ thuật tìm kiếm đoạn lặp ngay từ đầu
(ab initio).
2.1. Phương pháp tìm kiếm đoạn lặp dựa vào thư viện.
Theo cách tiếp cận này, đoạn lặp được định nghĩa là một chuỗi con mà xuất hiện
rất thường xuyên trong một chuỗi genome. Các hệ thống dựa vào thư viện sẽ nhận
diện chuỗi các thành phần lặp bằng cách so sánh tập dữ liệu đầu vào với một tập tham
khảo các chuỗi lặp, hay được gọi là một thư viện. Những chuỗi con này có ảnh hưởng
xấu đến các chương trình phân tích chuỗi và cần được ốp mặt nạ(tức là đánh dấu lại)
để tránh các kết quả không mong muốn. Chương trình RepeatMasker sử dụng một từ
điển các dãy lặp đã được xây dựng trong một thư viện có sẵn để thực hiện tìm kiếm
chính xác hoặc gần đúng trên chuỗi cần ốp mặt nạ với các entry của từ điển đấy (máy
tìm kiếm có thể là crossmatch hoặc BLASTX). Mức độ tương đồng cần thiết giữa
chuỗi truy vấn với các chuỗi tham khảo được chọn bởi người dùng. Do việc nhận dạng
các đoạn lặp bởi RepeatMasker dựa hoàn toàn vào sự tương tự giữa các chuỗi lặp

trong thư viện và các chuỗi truy vấn nên bất cứ vùng nào trong chuỗi truy vấn với độ
tương đồng thích hợp với một chuỗi tham khảo trong thư viện lặp sẽ được đánh dấu là
một thành phần lặp cho dù nó xuất hiện nhiều lần trong chuỗi genome hay không. Cả
thông tin về chuỗi cho các vùng lặp và các kết quả chú thích đưa ra bởi RepeatMasker
đều được định dạng một cách đơn giản và thân thiện với người sử dụng. RepeatMasker
là một công cụ rất phổ biến hiện nay, thư viện REPbase (một thư viện lặp chứa lượng
lớn dữ liệu của động vật nhân chuẩn) cũng ngày được hoàn thiện, tăng tính chính xác
5
và hiệu quả trong tìm kiếm đoạn lặp. Tuy nhiên, kỹ thuật tìm kiếm phụ thuộc thư viện
có hạn chế là không tìm được các đoạn repeat thực sự có trong chuỗi genome nhưng
chưa được biết đến trong thư viện. Thực tế trong xử lý chuỗi genome, chương trình
RepeatMasker được gọi trước hết như một công cụ tiền xử lý để loại bỏ các đoạn lặp
một cách cơ bản, các xử lý tinh vi hơn có thể gọi phía sau nếu cần thiết.
2.2. Phương pháp tìm kiếm đoạn lặp ngay từ đầu (ab initio repeat)
Nhằm khắc phục nhược điểm của phương pháp phụ thuộc thư viện và cũng nhằm
hoàn thiện bộ thư viện cho kỹ thuật trên, phương pháp tìm kiếm đoạn lặp ngay từ đầu
sử dụng các thuật toán string matching để tìm kiếm đoạn lặp mà không cần biết trước
các đoạn lặp có sẵn. Một ví dụ của phương pháp này là chương trình REPuter, sử dụng
cấu trúc suffix tree để tìm kiếm các hạt giống (seed) tức là các từ lặp lại chính xác
trong chuỗi, và sau đó mở rộng để thu được các cặp repeat suy biến (có độ sai khác
không vượt quá một ngưỡng cho trước) trong chuỗi genome. Ngoài ra một số công cụ
khác như RepeatScout, RepeatFinder, PILER cũng sử dụng kỹ thuật tìm kiếm ngay
từ đầu, kết quả trả về là họ các đoạn repeat (repeat family), có thể sử dụng để hoàn
thiện dần các thư viện cho phương pháp đầu tiên. Nội dung khóa luận sẽ tập trung
nghiên cứu các công cụ này, đồng thời từ đó so sánh tìm ra một hướng mới cho tìm
kiếm đoạn lặp.
Chúng ta xem xét quá trình tìm kiếm các đoạn lặp thành theo 2 giai đoạn. Giai
đoạn thứ nhất có nhiệm vụ thực hiện những tìm kiếm đầu tiên của các đoạn lặp. Giai
đoạn thứ hai, xác định ra họ các thành phần lặp, được tập trung vào việc nhận biết các
biên của các thành phần lặp và từ đó rút ra đoạn tổng hợp cho mỗi họ (tức là đoạn

DNA “phân tử giả” tổng hợp lại và đại diện cho tất cả các thành phần trong một họ,
trong đó mỗi một nucleotide trong chuỗi tổng hợp được đặc trưng bởi base có khả
năng xuất hiện cao nhất ở vị trí ấy, so sánh giữa tất cả các đoạn lặp trong họ với
nhau) . Dưới đây chúng ta sẽ xem xét các thuật toán và công cụ thực hiện tìm kiếm
đoạn lặp với cái khung là hai giai đoạn đã được nói tới ở trên.
2.2.1. Giai đoạn một: Nhận dạng bước đầu các đoạn lặp
Để khám phá ra các họ thành phần lặp trong phương pháp tìm kiếm ngay từ đầu,
tất cả đều phải bắt đầu với việc nhận dạng các đoạn tương đối ngắn có xuất hiện một
6
số lần (lớn hơn hay bằng 2) trong chuỗi hay tập chuỗi truy vấn. Có năm nhóm cách
tiếp cận cơ bản (nhưng chưa phải tất cả) trong việc nhận dạng ban đầu và phân cụm
các đoạn lặp.
Tự so sánh: so sánh chuỗi DNA với chính nó để từ đó phân cụm được thành các
đoạn tương tự nhau.
RECON, một trong số các công cụ được dùng rộng rãi hiện nay, cũng là dựa vào
việc tìm kiếm bởi BLAST. RECON bắt đầu với việc phân tích BLAST tất cả các đoạn
với nhau (RECON có khả năng làm việc với định dạng multi-fasta, tức nhiều chuỗi
genome trong cùng một file) sử dụng công cụ WU-BLASTN.
PILER sử dụng thủ tục bắt cặp cục bộ hai chuỗi PALS để nhận dạng các thành
phần lặp trong các vùng genome hợp (chuỗi genome duy nhất, liên tiếp, không bị chia
nhỏ). Để tăng tính hiệu quả, chỉ có tọa độ vị trí của những “hit” (những vùng được bắt
cặp) là được ghi lại. PALS sử dụng tìm kiếm theo dải, tức là bắt cặp cục bộ các chuỗi
có vị trí nằm trong một vùng nào đó của chuỗi còn lại.
K-mer: liệt kê rõ ràng các chuỗi con xuất hiện một cách thường xuyên (gọi là các
k-mer hay “từ”) trong chuỗi truy vấn.
Cách tiếp cận này (gọi là k-mer hay đếm từ) coi một đoạn lặp là một chuỗi con w
có độ dài k xuất hiện nhiều hơn một lần trong một chuỗi S có độ dài n. Một chuỗi con
lặp đi lặp lại w không thể mở rộng thêm nữa mà không được xảy ra sai khác gọi là một
lặp lớn nhất (maximal repeat). Bởi vì có tất cả 4
k

từ với độ dài k, các cách tiếp cận theo
hướng này thường yêu cầu k nhỏ nhất phải là log
4
(n), trong đó n là độ dài của chuỗi
genome hay của cả tập hợp các chuỗi mà ta quan tâm. Ví dụ các công cụ dựa k-mer
như ReAS, RepeatScout đều khuyến cáo một giá trị k lớn hơn log
4
(n). Giá trị k được
yêu cầu trong genome hợp của cây là khoảng từ 12 đến 19, dựa trên đánh giá về kích
thước của chúng. Tăng giá trị của k sẽ giảm độ nhạy (sensivity) của thủ tục tìm kiếm
đoạn lặp, trong khi giảm kích thước của seed sẽ tăng độ phức tạp trong tính toán của
thuật toán và xác suất xảy ra nghiệm ngẫu nhiên.
REPuter[7] là một trong số những công cụ đầu tiên áp dụng một thuật toán tìm
kiếm k-mer để tìm các đoạn lặp. Thành phần máy tìm kiếm của nó, REPfind, sử dụng
một cấu trúc dữ liệu cây hậu tố hiệu quả phát triển bởi Weiner [17] để lưu trữ tất cả
7
các k-mer lặp chính xác trong chuỗi, có độ dài lớn hơn hoặc bằng một ngưỡng do
người sử dụng đặt ra trước đấy. Cấy hậu tố có thể được sử dụng trong tìm kiếm chuỗi
với thời gian và không gian lưu trữ tuyến tính với độ phức tạp O(n+z) trong đó z là số
lặp lớn nhất. Điều đó cho phép thuật toán áp dụng được với các chuỗi rất lớn trong
genome của tế bào nhân chuẩn. Cách tiếp cận k-mer của REPuter cũng được sử dụng
trong các công cụ khác. Ví dụ, cả RepeatFinder[16] và RepeatGluer[10] đều sử dụng
REPuter để sinh ra danh sách ban đầu của các lặp lớn nhất. RepeatFinder cũng có thể
sử dụng output của các công cụ sử dụng cây hậu tố khác như RepeatMatch, một
module trong MUMmer[2].
Trong khi REPuter xây dựng các cụm ban đầu bởi việc tìm tất cả các thành phần
lặp có độ dài lớn hơn một giá trị ngưỡng, các công cụ sử dụng k-mer khác nhóm các
đoạn dựa vào đoạn k-mer chung có tấn số xuất hiện cao với độ dài đã được định trước.
Các chuỗi được nhận dạng bởi một k-mer cụ thể sau đó được mở rộng bởi một số cơ
chế nào đó. Sử dụng k-mer có độ dài cố định giảm được độ phức tạp về thời gian và

không gian lưu trữ của quá trình tìm kiếm. RepeatScout xây dựng một thư viện các k-
mer có độ dài cố định và tần số xuất hiện cao, sau đó sử dụng chúng như là các seed
cho thuật toán tìm kiếm tham lam trong giai đoạn xác định họ lặp[11]. RepeatScout sử
dụng một phiên bản đã được cải tiến của thuật toán gióng hàng cục bộ bởi việc kết hợp
thêm một hệ thống tính điểm phạt. Chi tiết hơn về các công cụ này sẽ được trình bày
trong phần sau.
Seed có cách quãng (spaced seed): tương tự như cách tiếp cận k-mer trừ việc các
seed sử dụng trong quá trình matching có một mức độ sai khác được xác định từ trước.
Nói cách khác, đây là một mở rộng của cách tiếp cận k-mer. Thay vì phải tìm kiếm các
nghiệm lặp một cách chính xác có độ dài k, thuật toán seed có cách quãng đúng như
tên gọi, thực hiện tìm kiếm sử dụng các seed có chứa một mức độ biến thiên trong tính
đồng nhất hay về độ dài.
Ma trận điểm: xây dựng biểu đồ điểm giữa chuỗi đầu vào với chính nó. Đây là
một trong số các kỹ thuật tìm kiếm đoạn lặp xuất hiện sớm nhất và đơn giản nhất.
Tính chu kỳ: biến đổi dữ liệu chuỗi từ vùng chuỗi (thời gian) sang vùng tần số và
thực hiện phép phân tích trên dữ liệu tần số này. Đây là một hướng tiếp cận khác hoàn
toàn so với những kỹ thuật đã nói ở trên. Kỹ thuật này sử dụng biến đổi Fourier để
8
phân tích chuỗi DNA trong vùng tần số thay vì vùng thời gian thường được sử dụng
hơn (vùng mà một chuỗi chữ cái được xem như là một dãy thời gian). Phổ công suất
của chuỗi sinh ra từ biến đổi Fourier được sử dụng để nhận dạng sự tự tương quan cả
ngắn hạn và dài hạn của chuỗi với chính nó. Các cực đại có cường độ cao trong phổ
công suất của chuỗi thể hiện những khả năng xuất hiện các thành phần lặp. Các khả
năng này sau đó được dùng như seed trong một tìm kiếm gióng hàng cục bộ để tìm ra
các thành phần tương tự và quyết định chuỗi tổng hợp của họ lặp. Do độ mạnh của tín
hiệu bị giảm đối với các đoạn lặp rời rạc, phương pháp này chỉ thích hợp nhất đối với
các đoạn lặp bộ (tandem repeat), cho dù vẫn có thể được dùng để nhận dạng một số
các đoạn lặp rời. Độ phức tạp về thời gian cho thuật toán này là O(n
2
).

2.2.2. Giai đoạn hai: Định nghĩa họ các thành phần lặp
Các phương pháp mô tả ở các phần trên được sử dụng để sinh ra các tập các thành
phần tương tự nhau, trong khi các phần tiếp theo sẽ thảo luận về các kỹ thuật được sử
dụng để mở rộng và kết nối các thành phần lại thành các họ lặp khi có thể, và sau đó
rút ra các mô tả về chuỗi tổng hợp (hay chuỗi nguyên mẫu) cho mỗi họ lặp. Có hai
cách tiếp cận cho giai đoạn này, đó là phân cụm và mở rộng xâu.
Phân cụm: Một số công cụ thực hiện việc nhận dạng các họ lặp bởi việc phân
cụm sâu hơn để định ra họ lặp cuối cùng.
RepeatFinder [16] bắt đầu với một tập các lặp chính xác ban đầu (sử dụng cấu trúc
suffix tree như đã nói ở trên) sau đó gộp các đoạn lặp chính xác đứng gần nhau (gộp
với tham số khoảng cách) hay chồng lên nhau (gộp sử dụng tham số overlap) để sinh
ra một tập các đoạn lặp đã được gộp. Các đoạn lặp này sau đó được phân nhóm vào
các mục; hai tập các đoạn lặp gộp là cùng một mục nếu nó chứa ít nhất cùng một lặp
chính xác. Vòng cuối cùng của quá trình phân cụm được thực hiện mà trong đó
BLAST được sử dụng để so sánh mỗi mục với tất cả các mục còn lại. Sau vòng cuối
cùng này, một thành phần lặp sẽ được chọn ra từ mỗi mục kết quả như một chuỗi đại
diện (gọi là nguyên mẫu) cho họ lặp; một hàm mục tiêu sẽ được xác định cho mỗi giao
thức phân cụm (gộp sử dụng chồng hay gộp sử dụng khoảng cách) và một nguyên mẫu
mục sẽ được đưa ra mà làm cho hàm mục tiêu tương ứng nhỏ nhất. Phép toán phân
cụm được thực hiện với việc chỉ sử dụng những tọa độ vị trí (là một cấu trúc dữ liệu
9
gọn gàng hơn) do đó nâng cao hiệu quả về thời gian và bộ nhớ. Thời gian chạy của
RepeatFinder phụ thuộc chủ yếu vào bước so sánh các mục với BLAST và yêu cầu bộ
nhớ của thuật toán REPuter [16]. Yêu cầu bộ nhớ cho cấu trúc cây hậu tố có thể tăng
lên vài gigabyte cho các chuỗi genome có kích thước từ trung bình trở lên.
PILER[3] tuân theo một hướng tiếp cận heuristic mới để nhận dạng và mô tả đoạn
lặp trong một vùng genome hợp. Thuật toán PILER được thiết kế để phân tích một
vùng genome hợp và chỉ tìm những họ lặp mà cấu trúc của chúng chính là đặc điểm
của các lớp con của các chuỗi lặp đã biết. PILER hoạt động với tiền đề toàn bộ chuỗi
DNA được hợp lại với một số lỗi nhỏ hợp lý vì thuật toán hoàn toàn phụ thuộc vào vị

trí các đoạn lặp trong chuỗi genome cho tất cả sự phân lớp. Output của bước phân cụm
được ghi lại theo tọa độ bắt đầu và kết thúc . Các thành phần tương tự sau đó sẽ được
phân cụm thành các “đống”. Các đống này thực ra là các tập của các lặp chồng nhau
tương tự như các mục trong RepeatFinder. Thời gian cần thiết để tạo ra các đống tăng
tuyến tính với độ dài của chuỗi genome. Các đặc điểm của các thành phần lặp được
phân vào một đống sau đó được so sánh với bốn lược tả (profile) được tác giả định
nghĩa trước (các mảng lặp theo bộ, các họ lặp rời, pseudosattelite, và các lặp cuối).
Chương trình gióng hàng MUSCLE được sử dụng sau đó để sinh ra chuỗi tổng hợp
cho mỗi họ lặp tìm ra được trong bước phân loại. Những chuỗi tổng hợp này sau đó
được sử dụng để tạo ra các thư viện cho RepeatMasker hoặc BLAST để thực hiện tìm
kiếm các thành phần lặp hoàn toàn hay bộ phận trong chuỗi genome[3].
Mở rộng xâu: đối với thuật toán được nói đến trong phần này, phân cụm các k-
mer có tần số xuất hiện cao là bước đầu tiên, sau đó triển khai kỹ thuật mở rộng xâu là
bước thứ hai trong quá trình tìm họ lặp.
REPuter là một trong các cộng cụ tìm kiếm đoạn lặp đầu tiên sử dụng phương
pháp này[7]. Tác giả thực hiện một cách tiếp cận thuần toán học, không heuristic để
tìm các đoạn lặp. Đầu ra của REPfind, mô đun tìm kiếm của REPuter, được xử lý sâu
hơn để tìm ra các đoạn lặp suy biến, trong mô hình khoảng cách Hamming (còn gọi là
mismatch distance) hay mô hình khoảng cách thêm bớt (edit distance). Tiếp cận theo
khoảng cách thêm bớt (hay còn gọi là khoảng cách Levenshtein) sẽ có độ phức tạp về
thời gian là O(n+zk
3
), trong đó n là độ dài chuỗi và z là số k-mer được phát triển.
REPuter phát triển các lặp lớn nhất sang cả hai phía với một số sai khác được định ra
10
trước như một ngưỡng không thể vượt qua.

Mỗi một chuỗi tổng hợp riêng biệt sẽ được
gán một giá trị E [9]. Cụ thể về thuật toán của chương trình này sẽ được nghiên cứu
trong chương sau, khi mà phương pháp tôi đưa ra có áp dụng và đề cập đến REPuter.

RepeatScout[11] sinh chuỗi tổng hợp bằng cách trước hết là tìm ra một tập lặp đi
lặp lại nhiều lần các k-mer có độ dài cố định trong một vùng genome hợp như đã mô tả
ở trên. Thuật toán rút ra một trong số mỗi k-mer và vùng xung quanh nó, sau đó mở
rộng một cách tham lam các biên ở cả hai đầu, tạo ra một chuỗi tổng hợp của họ lặp
chứa k-mer đấy. RepeatScout xử lý mỗi thành phần lặp sử dụng RepeatMasker để tìm
tất cả các thành phần tương tự cho họ lặp và điều chính lại các tần số của các k-mer
khác trong trường hợp bị chồng nhau. Tập hợp các chuỗi tổng hợp cuối cùng tìm ra
bởi RepeatScout có thể lại được so sánh với các file chứa tọa độ chú thích vùng gene
cho các cơ thể sinh vật để lọc ra các họ lặp được đặt trong các vùng gene hay các đoạn
bị nhân đôi (gene duplication) sử dụng một script được đưa ra bởi tác giả.
11
Chương 3: Phương pháp đề xuất
Qua tham khảo và đánh giá thực nghiệm các phương pháp và hướng tiếp cận của
các công cụ tìm kiếm đoạn lặp đã được chỉ ra ở các phần trước, tôi đề xuất phát triển
một chương trình thực hiện tìm kiếm các đoạn lặp rời trên một chuỗi genome hợp.
Chương trình cũng bao gồm hai bước: tìm ra tập các đoạn lặp ban đầu (sử dụng spaced
seeds), sau đó phân cụm các đoạn lặp và xác định ra các họ lặp, đồng thời tìm ra được
các chuỗi tổng hợp đại diện cho mỗi họ.
Bước thứ nhất sẽ sử dụng thuật toán phát triển xâu của chương trình REPuter, sau
khi đã tìm được các lặp lớn nhất bởi module RepeatMatch.
Sau đó ở bước hai sử dụng thuật toán phân cụm của RepeatFinder để tìm ra các họ
lặp từ tập các đoạn lặp trả về ở bước đầu tiên.
Để có cái nhìn tổng quan về phương pháp nghiên cứu, ta hãy tìm hiểu kỹ hơn về
các thuật toán trong từng giai đoạn.
3.1. Thuật toán tìm kiếm đoạn lặp trong REPuter
Trong phần này ta sẽ tìm hiểu 2 thuật toán mở rộng xâu MMR và MDR, từ đó có
so sánh giữa hai phương pháp và quyết định hướng đi của phương pháp nghiên cứu.
Dưới đây sẽ sử dụng nội dung được trình bày trong [7] và [8] để giới thiệu 2 thuật toán
này.
Các ký hiệu và thuật ngữ

Giả sử S là một chuỗi có độ dài |S| = n trong một bộ chữ cái ∑.
- S[i] : chỉ ra ký tự thứ i trong S
- S
-1
: chuỗi đảo của chuỗi S.
- S[i][j]: chuỗi con của S, bắt đầu từ ký tự thứ i và kết thúc bởi ký tự j - viết tắt
là (i, j).
12
- S[0] và S[n+1] là 2 ký tự biên của chuỗi, không xuất hiện ở bất kỳ đâu trong
chuỗi S.
- Ta nói chuỗi con (i
1
,j
1
) chứa (i
2
,j
2
) khi i
1
≤ i
2
và j
2
≤ j
1
.
- Một cặp 2 chuỗi con R = ((i
1
,j

1
), (i
2
,j
2
)) là một lặp chính xác
⇔ (i
1,
j
1
) ≠(i
2,
j
2
) và S[i
1,
j
1
] = S[i
2,
j
2
].
- Một lặp chính xác được gọi là tối đa nếu S[i
1
-1] ≠S[i
2
-1] và S[j
1
-1] ≠S[j

2
-1]
- Khoảng cách Hamming của 2 chuỗi S
1
và S
2
có độ dài bằng nhau: d
H
(S
1
, S
2
)
là số vị trí mà ở đó S
1
khác S
2
.
- Khoảng cách soạn thảo (edit distance) hay khoảng cách Levenshtein của S
1
và S
2
ký hiệu là d
E
(S
1
, S
2
), cũng chính là số các bước edit nhỏ nhất (chèn, xóa
, sửa) để chuỗi S

1
trở thành chuỗi S
2
.
3.1.1. Tìm kiếm các lặp chính xác
Cách tiếp cận chuẩn của việc tính các lặp chính xác tối đa là dựa vào phương pháp
băm. Thông thường là lập bảng cho mỗi chuỗi DNA w có độ dài cố định r các vị trí
P(w) trong S mà w xuất hiện. Với mỗi w và i, j thuộc P(w), i < j, ((i, i+r-1), (j, j+r-1))
là một lặp chính xác với độ dài r. Để tìm các lặp chính xác tối đa mà độ dài ít nhất là l,
mỗi lặp chính xác phải được mở rộng sang trái và sang phải để kiểm tra xem nó có
được bao trong một lặp chính xác tối đa với độ dài yêu cầu hay không. Sự mở rộng
được thực hiện bới các phép so sánh ký tự trong bắt cặp chuỗi, và do đó thời gian chạy
không chỉ phụ thuộc vào số lặp chính xác, mà còn vào độ dài của chúng. Thực tế, r
khoảng từ 10 đến 13 do giới hạn của kỹ thuật băm. Mặt khác, l thường có độ dài ít
nhất là 20, vì thế lặp để mở rộng lớn hơn nhiều so với các lặp tối đa thực tế thu được.
Vì thế tỷ lệ “hit” thường là thấp, gây lãng phí tài nguyên.
Sử dụng cấu trúc suffix tree cho S (mô đun Repeatmatch trong MumMer),
chúng ta không cần phải lọc ra số ít các đoạn lặp tối đa từ rất nhiều trường hợp như
trên. Thay vào đó, chúng ta sử dụng thuật toán của Gusfield để tính trực tiếp các lặp
tối đa với độ phức tạp O(n+z) với z là số lặp tối đa. Vì thế thời gian chạy được tối ưu
13
và không phụ thuộc vào độ dài của các lặp. Chi tiết về thuật toán và cài đặt có thể
tham khảo trong [4][8].
Sau đây chúng ta sẽ nghiên cứu các thuật toán để tìm các lặp suy biến dựa vào 2
mô hình khoảng cách: khoảng cách Hamming và khoảng cách Levenshtein, với
ngưỡng lỗi là k ≥ 0 và ngưỡng độ dài l > 0 đã được cho.
3.1.2. Thuật toán MMR (Maximal mismatches repeat)
Các lặp k-mismatch(k-khác biệt) dựa theo mô hình khoảng cách Hamming. Một
cặp các xâu con có độ dài bằng nhau R = ((i
1

, j
1
), (i
2
, j
2
)) là một lặp k-khác biệt khi và
chỉ khi (i
1
, j
1
) ≠(i
2
, j
2
) và d
H
(S[i
1
, j
1
], S[i
2
, j
2
]) = k.
Độ dài của R, ký hiệu l(R) = j
1
– i
1

+ 1 = j
2
– i
2
+ 1.
Một lặp k-khác biệt là phủ tối đa nếu nó không bị chứa bới bất kỳ một lặp k-khác
biệt khác nào.
Vấn đề đặt ra là liệt kê tất cả các lặp k-khác biệt phủ tối đa có độ dài ngắn nhất là l
xuất hiện trong S. Thuật toán tìm MMR dựa vào quan sát sau: nếu R = ((i
1
, j
1
), (i
2
, j
2
))
là một lặp k-khác biệt, thì các khác biệt sẽ chia S[i
1
, j
1
] và S[i
2
, j
2
] thành các lặp chính
xác tối đa w
0
, w
1,

w
k
. Các lặp chính xác w
0
và w
k
xuất hiện ở 2 biên của các xâu là tối
đa vì R là phủ tối đa; các lặp khác hiển nhiên cũng là tối đa. Mà max
i

[0,k]
|w
i
| là đạt giá
trị nhỏ nhất nếu các cặp ký tự khác biệt được phân phối đều trên R. Hiển nhiên rằng
với phân phối đều như thế độ dài của w
i
lớn nhất, ký hiệu là li
max
sẽ thỏa mãn:
li
max
≥⎾(l-k)/(k+1)⎾= ⎾l/(k+1)⎾.
Vì thế, mọi đoạn lặp k-khác biệt R phủ tối đa có độ dài l sẽ chứa một lặp chính xác
tối đa với độ dài li
max
≥⎾l/(k+1)⎾. Nói cách khác, ta có thể tìm ra các lặp k-khác biệt
phủ tối đa bằng cách phát triển các seed có độ dài lớn hơn một ngưỡng nào đấy.
Bài toán có thể phát biểu như sau:
Đối tượng: chuỗi genome truy vấn S cùng một danh sách các lặp chính xác có độ dài

vượt quá một ngưỡng cho trước (gọi là các seed).
14
Vấn đề: từ các lặp chính xác (seed), tìm tất cả các cặp lặp với k-khác biệt (tính theo
khoảng cách Hamming) xuất hiện trong chuỗi truy vấn.
Giải pháp : duyệt qua tất cả các seed và kiểm tra mỗi seed xem nó có thể mở rộng
thành một lặp k-khác biệt hay không.
Nói một cách chi tiết hơn, với mỗi seed ((i
1
, j
1
), (i
2
, j
2
)), tính toán các bảng H
left

H
right
với kích thước k+1 sao cho với mỗi q ∈[0,k]:
H
right
(q) là số p lớn nhất sao cho d
H
(S[j
1
+1, j
1
+p], S[j
2

+1,j
2
+p]) = q, tức là S[j
1
+1,
j
1
+p] và S[j
2
+1,j
2
+p] bắt cặp với nhau với q khác biệt.
Tương tự, H
left
(q) là số lớn nhất p sao cho d
H
(S[i
1
-p, i
1
-1], S[i
2
-p,i
2
-1]) = q.
Sau đó với mỗi q ∈[0,k], kiểm tra xem j
1
– i
1
+ 1 + H

left
(q) + H
right
(k-q) ≥ l hay
không. Nếu có, in ra kết quả lặp k-khác biệt phủ tối đa
(i
1
- H
left
(q), j
1
+ H
right
(k-q)), i
2
- H
left
(q), j
2
+ H
right
(k-q))
Độ phức tạp chung cho cả thuật toán là O(n+zk).
Mô phỏng thuật toán bởi mã giả được thể hiện như sau:
Thuật toán MMR
INPUT: chuỗi S cùng danh sách L các seed
OUTPUT: danh sách các cặp lặp k-khác biệt
1 for each seed ((i
1
, j

1
), (i
2
, j
2
)) in L
2 for q = 0 to k
3 pl ← HL[q-1]+1 or pl ← 0 if q ==0;
4 while (d
H
(S[i
1
-pl, i
1
-1], S[i
2
-pl,i
2
-1]) == q) pl++;
5 HL[q] ← pl-1;
6 // đồng thời tính H
right
15
7 pr ← HR[q-1]+1 or pr ← 0 if q ==0;
8 while (d
H
(S[j
1
+1, j
1

+pr], S[j
2
+1,j
2
+pr]) == q) pr++;
9 HR[q] ← pr-1;
10 for q = 0 to k
11 if(j
1
– i
1
+ 1 + HL(q) + HR(k-q) ≥ l)
12 print ((i
1
- HL(q), j
1
+ HR(k-q)), (i
2
- HL(q), j
2
+ HR(k-
q)));
3.1.3. Thuật toán MDR (Maximal diffrences repeat)
Chúng ta mở rộng kỹ thuật trên bởi việc cho phép thao tác chèn và xóa. Một cặp R
= ((i
1
,

j
1

), (i
2
, j
2
)) 2 xâu con là một lặp k-differences (k-hiệu chỉnh) khi và chỉ khi
(i
1
, j
1
) ≠(i
2
, j
2
) và d
H
(S[i
1
, j
1
], S[i
2
, j
2
]) = k.
Độ dài của R là l(R) = min(j
1
-i
1
+1, j
2

-i
2
+1). Một lặp k-hiệu chỉnh là phủ tối đa nếu
nó không bị chứa trong bất kỳ một lặp k-hiệu chỉnh nào khác.
Vấn đề tìm kiếm lặp sửa đổi là liệt kê ra tất cả các lặp k-hiệu chỉnh phủ tối đa mà
có độ dài bé nhất là l. Thuật toán này cũng dựa vào quan sát như trên, tức là với mỗi
lặp k-hiệu chỉnh phủ tối đa R với độ dài l luôn chứa một lặp chính xác tối đa có độ dài
lớn hơn hoặc bằng⎾ l/(k+1)⎾ .
Đối tượng: chuỗi genome truy vấn S cùng một danh sách các lặp chính xác có độ dài
vượt quá một ngưỡng cho trước ( các seed).
Vấn đề: từ các lặp chính xác (seed), tìm tất cả các cặp lặp với k-hiệu chỉnh (tính
theo khoảng cách Levenshtein) xuất hiện trong chuỗi truy vấn.
Giải pháp : tính toán tất cả các seed và cố gắng mở rộng chúng thành các lặp k-hiệu
chỉnh như trong hình 2.
Nói một cách chính xác hơn như sau, với mỗi seed ((i
1
, j
1
),(i
2
, j
2
)) tính các bảng
E
left
và E
right
được xác định như sau:
16
E

right
(q) là tập tất cả các cặp (x
r
, y
r
)∈[1,m]x[1,n] sao cho :
d
E
(S[j
1
+1, j
1
+x
r
], S[j
2
+1,j
2
+y
r
]) = q
tức là S[j
1
+1, j
1
+x
r
] và S[j
2
+1,j

2
+y
r
] bắt cặp với nhau với q sửa đổi.
Một cách tương tự, E
left
(q) là tập tất cả các cặp (x
l
, y
l
)∈[1,m]x[1,n] sao cho d
E
(S[i
1
-
x
l
, i
1
-1]
-1
, S[j
1
-x
l
, j
1
-1]
-1
) = d

E
(S[i
1
-x
l
, i
1
-1], S[j
1
-x
l
, j
1
-1]) = q.
Sau đó với mỗi q∈[0,k], với mỗi cặp (x
l
, y
l
)∈E
left
(q) và (x
r
, y
r
)∈E
right
(k-q) nếu j
1
-
i

1
+1 + x
r
+ x
l
≥ l và j
2
- i
2
+1 + y
r
+ y
l
≥ l thì in ra các lặp k-hiệu chỉnh phủ tối đa:
((i
1
- x
l
, j
1
+ x
r
), (i
2
- y
l
, j
2
+ y
r

))
Hình 2(nguồn [7]) : mở rộng một seed.
Sử dụng thuật toán quy hoạch động chuẩn để mở rộng seeds sẽ có độ phức tạp
theo thời gian O(n
2
). Tuy nhiên chúng ta có thể sử dụng một thuật toán của Ukkonen
trong bài báo của ông về bắt cặp chuỗi xấp xỉ (1985)[14] để tính E
left
và E
right
trong thời
gian O(kn) nhờ tính toán được front(k) của ma trận quy hoạch động. Nhờ đó khâu mở
17
rộng của thuật toán MDR có độ phức tạp O(k
3
) mỗi seed, do đó thời gian tổng thể cho
thuật toán sẽ là O(n+zk
3
), trong đó z là số các seed.
Kết luận: So sánh hai thuật toán trên (MMR và MDR), có thể thấy thuật toán
MMR có độ phức tạp về thời gian và việc sử dụng bộ nhớ ít hơn; trong khi đó thuật
toán MDR sử dụng nhiều tài nguyên hơn nhưng nâng cao được sensivity trong tìm
kiếm đoạn lặp (vì khoảng cách Levenshtein cho phép tìm kiếm 2 đoạn lặp có độ dài
khác nhau). Cân nhắc giữa hiệu năng tìm kiếm và tài nguyên yêu cầu trong mỗi thuật
toán, tôi đã chọn cài đặt theo thuật toán MMR bởi tính đơn giản và hiệu quả trong sử
dụng tài nguyên, đồng thời các kết quả thu được (các đoạn lặp với một khoảng cách
Hamming cho trước) là chấp nhận được khi sử dụng để phân cụm sau này.
3.2. Thuật toán phân cụm và tìm họ lặp của RepeatFinder
Sau khi nhận được một danh sách các mismatch repeat thu được qua giai đoạn
đầu, ta sẽ dùng thuật toán gộp và phân lớp của RepeatFinder để tìm ra các họ lặp. Bởi

vì các đoạn lặp tìm được đầu vào không phải là lặp chính xác (cho phép khoảng cách
Hamming) nên chúng ta có thể bỏ qua bước cuối cùng là sử dụng BLAST để tìm kiếm
các mục tương đồng như đã nói ở trên. Điều này làm giảm đáng kể thời gian chạy
chương trình một cách đáng ngạc nhiên, như kết quả thực nghiệm sẽ được đưa ra ở nội
dung các phần sau. Bởi vậy, chỉ còn lại ba bước xử lý sẽ được tìm hiểu kỹ hơn dưới
đây, vốn là một phần nội dung của [9].
3.2.1. Tiền xử lý
Trong bước này, đầu ra từ giai đoạn một sẽ được sử dụng để phân mảng chuỗi
genome gốc. Với mỗi lặp bắt đầu ở tọa độ A
1
và A
2
, với độ dài l, danh sách đưa vào sẽ
bao gồm cả (A
1
, A
2
,l) và (A
2
, A
1
,l). Danh sách sau đó sẽ được sắp xếp dựa vào tọa độ
thứ nhất và thứ hai. Ta sẽ đưa ra một ví dụ tham khảo gồm 7 cặp đoạn lặp như hình
dưới.
Giả sử bảng bên trái là các cặp đoạn lặp tìm được bởi thuật toán MMR. Mỗi đoạn
lặp gồm thông tin về loại: lặp F (forward repeat) hoặc RC (reverse complemented
repeat), tọa độ bắt đầu (A
1
, A
2

) độ dài đoạn lặp l. Bảng bên phải là các điểm phân mảng
tương ứng với mỗi lặp bên trái.
18
Hình 3(nguồn [9]): Thủ tục tiền xử lý.
3.2.2. Gộp (merging) và sinh bản đồ lặp.
Giả sử 2 điểm phân mảng p
1
= (A
1
, A
2
, l
A
) và p
2
= (B
1
, B
2
, l
B
) với A
1
< B
1
, chúng ta
tính khoảng cách giữa các lặp không chồng lên nhau như sau:
d(p
1
,p

2
) = max (0, B
1
- A
1
- l
A
+ 1)
Tiếp theo cho khoảng cách lớn nhất G > 0, giao thức 'gộp với khoảng trống' sử
dụng luật sau để gộp hai đoạn p
1
và p
2
:
d(p
1
,p
2
) < G.
Giao thức 'gộp khi chồng lên nhau' thì chỉ gộp các đoạn mà chồng lên một đoạn
khác; tức là khi chúng có một bộ phận là tương đồng. Ký hiệu độ chồng lấn của hai
đoạn như sau:
o(p
1
,p
2
) = max(0, A
1
+ l
A

- B
1
+ 1) với A
1
< B
1
.
Thì khi đấy điều kiện để xảy ra 'gộp khi chồng nhau' sẽ là: cho một tỷ lệ chồng lấn
op với 0 ≤ op < 1, các điểm lặp (A
1
, A
2
, l
A
) và (B
1
, B
2
, l
B
) sẽ được gộp khi một trong
bốn đoạn lặp chồng lên nhau thỏa mãn o(p
1
,p
2
) > op min (l
A
, l
B
).

Ta đưa ra một ví dụ minh họa cho điều kiện trên: giả sử op = 0.75, chúng ta sẽ chỉ
gộp 2 đoạn nào chồng lên nhau và độ dài vùng chồng lấn phải ít nhất bằng 75% độ dài
của đoạn ngắn hơn.
19
Phần bên trái của hình dưới đây minh họa thủ tục gộp với G = 1. Những hình chữ
nhật xám đánh dấu các tọa độ khởi đầu của các đoạn lặp được gộp. Các tập hợp các
lặp bị chia bởi đường kẻ ngang thể hiện sự mở rộng của mỗi lặp gộp. Mũi tên chỉ ra sự
tương ứng giữa một nhóm hai lặp ngắn (6 bp) với lặp gộp của chúng với độ dài 11bp
có tọa độ bắt đầu là 77.
Hình 4(nguồn [9]): Thủ tục gộp.
Thủ tục này sẽ cập nhật và tạo các tham chiếu đến các lặp ban đầu, cuối cùng hình
thành nên bản đồ lặp được thể hiện ở phần bên phải của hình trên.
Các tham chiếu này định ra phép tương ứng giữa tất cả các lặp gộp. Mỗi lặp gộp
đều duy trì các tham chiếu đến các lặp gộp khác cùng chia sẻ với nó các đoạn lặp trong
danh sách các lặp ban đầu; mỗi lặp ban đầu sẽ được gán vào lặp gộp đầu tiên mà nó
xuất hiện. Trong ví dụ của chúng ta, lặp gộp bắt đầu với tọa độ 77 chỉ có một tham
chiếu đến chính nó, vì lặp ban đầu của nó không có tham chiếu nào trước cả. Lặp tiếp
theo, bắt đầu từ vị trí 116, có một tham chiếu đến chính nó và đến lặp gộp 77. Một cấu
trúc dữ liệu lưu giữ mỗi lặp gộp với tọa độ khởi đầu của nó, độ dài của nó (l
M
), số lặp
ban đầu chứa trong nó (n
M
), và một danh sách các tham chiếu đến nó và các lặp khác
(R
1
, R
2
, R
3

).
20
3.2.3. Phân nhóm tìm họ lặp.
Từ bản đồ lặp thu được như trên, chúng ta có thể bắt đầu xác định các lớp với chú
ý rằng nếu một lặp gộp có ít nhất một tham chiếu đến một lặp khác thì chúng sẽ thuộc
cùng một lớp. Hình dưới minh họa một bước của thủ tục này. Lặp gộp (M, l
M
) =
(126,8) có hai tham chiếu đến hai lớp khác nhau, lớp 1 và lớp 5. Những lớp này sau đó
sẽ được kết hợp lại với nhau thành một lớp 1 duy nhất, lớp này sẽ chứa tất cả các tham
chiếu từ các lớp gốc. Hình chữ nhật xám trong repeat map chỉ ra một lặp sau khi gộp
(gọi tắt là lặp gộp) với độ dài của nó, số các lặp ban đầu mà nó gộp lại với nhau, và
tham chiếu đến các lặp chứa trong nó. Các lặp tô đậm sẽ được thêm vào các lớp hiện
có. Nó chứa tham chiếu đến lớp 1 (16) và lớp 5 (116), được đánh dấu bằng màu xám
trong bảng phân lớp đầu tiên. Trong bước phân lớp tiếp theo, hai lớp này được gộp với
nhau và các tham chiếu còn lại của chúng cũng được thêm vào lớp 1. Các mũi tên chỉ
ra hướng của các quá trình gộp lớp này.
Hình 5(nguồn[9]): Ví dụ một bước trong thủ tục phân lớp.
Trong chương trình RepeatFinder chính thức, sau bước 3 sẽ là bước cuối cùng,
cũng là bước tốn nhiều thời gian nhất của thuật toán: sử dụng tìm kiếm BLAST trên
các chuỗi cơ sở của mỗi lớp (chuỗi tổng hợp của lớp đấy) tất cả với nhau. Các lớp sẽ
được gộp lại nếu một trong số các chuỗi cơ sở đó có một giá trị BLAST E, khi so sánh
với chuỗi cơ sở của lớp khác, nhỏ hơn một giá trị ngưỡng định ra trước bởi người sử
21
dụng. Nhưng chúng ta ngay từ đầu, như đã nói ở trên, sử dụng danh sách các lặp ban
đầu là các lặp xấp xỉ, tức là không cần giống nhau chính xác. Do đó chương trình của
chúng ta không cần so sánh các chuỗi tổng hợp lại với nhau để xem các lớp (hay mục)
có tương tự nhau hay không, bởi vì nếu có hai chuỗi tổng hợp tương tự nhau thì rất có
thể đã được phát hiện trong thuật toán tìm lặp ban đầu trước đó và được cho thành một
điểm lặp rồi, sau này khi thực hiện thủ tục phân lớp thì hai lớp chứa các lặp đấy sẽ

được gộp với nhau. Do vậy bước sử dụng BLAST có thể được bỏ qua, điều này làm
cho thời gian chạy của chương trình được cải thiện đáng kể so với chương trình gốc,
trong khi đó nhờ chọn tham số hợp lý thì độ sensivity của họ lặp không chênh lệch
nhiều quá so với kết quả của chương trình gốc.
Cuối cùng, chúng ta sẽ tìm hiểu cách tìm ra đoạn cơ sở cho một lớp (hay cũng
chính là đoạn tổng hợp cho một họ lặp) hay còn gọi là nguyên mẫu của lớp đối với hai
phương thức 'gộp với khoảng trống' và 'gộp khi có chồng lấn':
Với mỗi lớp, cho lặp gộp độ dài l (l
M
) và số các lặp con n (n
M
), độ dài lớn nhất
và nhỏ nhất trong số các lặp gộp trong lớp là l
max
và l
min
, và số nhỏ nhất và lớn nhất các
lặp ban đầu của mỗi lặp gộp trong lớp là n
min
và n
max
, ta định nghĩa hàm mục tiêu F(l,n)
với mỗi lặp gộp của lớp như sau:
max max
max min max min
( , )
l l n n
F l n
l l n n
− −

= +
− −
cho 'gộp với khoảng trống' và
max
min
max min max min
( , )
n n
l l
F l n
l l n n


= +
− −
cho phép 'gộp khi chồng lấn'.
Hàm không âm này là một đánh giá bao quát về độ biến thiên về độ dài và số lặp
con của mỗi lặp gộp trong lớp. Lặp gộp nào làm cho hàm mục tiêu đạt giá trị nhỏ nhất
sẽ được chọn làm đoạn nguyên mẫu cho lớp đó. Nếu chúng ta có một vài đoạn lặp gộp
làm hàm mục tiêu nhỏ nhất thì ta ưu tiên thành phần mà chứa số lượng lặp ban đầu lớn
nhất. Như trong ví dụ của chúng ta ở các hình trên, nguyên mẫu của lớp 1 là lặp dài
22

×