Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
1,23 MB
Nội dung
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA TOÁN – TIN HỌC LẮP RÁP DE NOVO TRONG GIẢI TRÌNH TỰ GENE THẾ HỆ TIẾP THEO ĐỀ TÀI MÔN XỬ LÝ ĐA CHIỀU GIẢNG VIÊN HƯỚNG DẪN: PSG TS Phạm Thế Bảo SINH VIÊN THỰC HIỆN: Võ Hoàng Trọng THÀNH PHỐ HỒ CHÍ MINH, THÁNG 6, NĂM 2016 MỤC LỤC LỜI MỞ ĐẦU GIỚI THIỆU 1.1 Tổng Quan ADN Gene 1.2 Trình Tự Thế Hệ Gene Đầu Tiên 1.3 Trình Tự Thế Hệ Gene Tiếp Theo 1.4 Xử Lý Dữ Liệu THUẬT TOÁN LẮP RÁP BẰNG ĐỒ THỊ DE BRUIJN 2.1 Cơ Sở Lý Thuyết 2.2 Xây Dựng Đồ Thị de Bruijn 2.3 Áp Dụng Đồ Thị de Bruijn vào Lắp Ráp Gene 2.3.1 Xây Dựng Đồ Thị dựa 𝑘_𝑚𝑒𝑟 2.3.2 Kết Quả Thực Nghiệm 13 2.3.3 Xây Dựng Đồ Thị dựa 𝑘_𝑚𝑒𝑟 Kép 14 THỬ THÁCH 18 HƯỚNG PHÁT TRIỂN TIẾP THEO 19 TÀI LIỆU THAM KHẢO 20 PHỤ LỤC 1: KHẢO SÁT THỜI GIAN CHẠY CHƯƠNG TRÌNH SỬ DỤNG BFS VÀ 𝑘_𝑚𝑒𝑟 ĐƠN 21 LỜI MỞ ĐẦU Trong này, tơi trình bày phương pháp lắp ráp đoạn reads rời rạc thành đoạn ADN hoàn chỉnh sử dụng phép duyệt rộng duyệt sâu để tìm kiếm tất đường Euler đồ thị de Bruijn, đánh giá ưu, nhược điểm phương pháp đề xuất hướng nghiên cứu Nội dung gồm phần: - - Phần 1: Giới thiệu kiến thức ADN trình tự hệ gene tiếp theo, cách xử lý liệu trình tự gene hệ Phần 2: Trình bày sở lý thuyết phương pháp sử dụng đồ thị de Bruijn, cách lắp ráp chuỗi ADN sử dụng đồ thị kết hợp với phép duyệt rộng duyệt sâu Ngồi ra, phần cịn trình bày thêm phương pháp khác lắp ráp nhanh phương pháp đề lý thuyết Phần 3; Trình bày số thử thách thực tế lắp ráp Phần 4: Trình bày hướng phát triển đề tài Phần 5: Giới thiệu số tài liệu tham khảo mà sử dụng phục vụ cho đề tài Phần 6: Bảng phụ lục cho biết thời gian chạy chương trình qua liệu Từ khoá: Đồ thị de Bruijn, SPAdes, 𝑘_𝑚𝑒𝑟 kép, đồ thị de Bruijn kép GIỚI THIỆU 1.1 Tổng Quan ADN Gene Vì lồi vật có đặc điểm riêng biệt? Trong Linh trưởng, người khác đười ươi điểm nào? Nếu nhìn vào đặc điểm bên ngồi ta khơng khó để trả lời câu hỏi này, nhà khoa học họ muốn tìm hiểu sâu xa thế, họ muốn tìm hiểu sâu tạo nên hình dạng bàn tay người khác với tay đười ươi, hay phim viễn tưởng có cảnh chuột biến thành người, điều Sinh học xảy hay không? Vào kỷ 20, người ta khám phá ADN, khám phá có ý nghĩa quan trọng khoa học ADN ta hiểu nơm na thứ chứa thông tin di truyền, bàn tay người khác với bàn tay đười ươi cấu trúc ADN tay người khác với tay đười ươi, giống chương trình máy tính khác mã nguồn tạo nên chương trình khác Mỗi loài Trái Đất có trình tự ADN riêng biêt (giống dấu vân tay người), điều tao nên nét độc đáo sinh vật Do đó, muốn biến chuột thành người, ta việc biến cấu trúc ADN chuột thành cấu trúc ADN người (đương nhiên tơi nói lý thuyết) Nếu nói khái niệm ADN tuý khoa học phân tử Acid nucleic, ADN tên viết tắt từ Acid Deoxyribonucleic (một số nước gọi DNA – Deoxyribonucleic Acid), phân tử tạo từ base Adenin (A), Cytosine (C), Guanine(G) Thymine (T) Trong tế bào, ADN có dạng chuỗi xoắn kép (tức nhánh ADN xoắn lại với nhau), chuỗi liên kết liên kết hydro, base A liên kết với base T base G liên kết với base C Hình 1.1 Cấu trúc dạng xoắn kép phân tử ADN tế bảo, nhánh đơn liên kết với mối liên kết hydro (A – T, G - C) Nguồn ảnh: www.iptv.org Gene đoạn ADN nhằm quy định chức đó, ví dụ gene quy định màu tóc, màu mắt, kích thước bàn tay chẳng hạn Khái niệm ADN gene đơn giản thôi, nhà khoa học bỏ nhiều thời gian từ ngày sang ngày khác để nghiên cứu nó? Vì nghiên cứu gene (cũng ADN) có nhiều ứng dụng cho đời sống người Ví dụ người mang bệnh ung thư điều đồng nghĩa với “án tử” dành cho họ Cho đến nay, bệnh ung thư chưa có phương pháp hay liều thuốc trị triệt để Tuy nhiên, loài cá mập lại có khả đặc biệt: Chúng miễn dịch với tất loại bệnh, kể ung thư Điều khiến lồi cá mập có khả này? Cấu trúc gene loài cá mập quy định khả đó? Nếu ta biết cách “cấy” cấu trúc gene “ghép” tế bào bị ung thư q tuyệt diệu Hay ta tìm hiểu chức gene người thơng qua gene tương tự ruồi hay chí vi khuẩn 1.2 Trình Tự Thế Hệ Gene Đầu Tiên Năm 1977, Frederick Sanger lần xác định trình tự gene vi khuẩn 𝜑𝑋174 phương pháp ông tìm – phương pháp Sanger Ta có hiểu đơn giản cách ơng chép gnene thành phần, cho vào hũ A, C, G, T, hũ có nhiệm vụ phát base tương ứng gene, phát ra, hũ tạo phản ứng chuỗi trùng hợp (PCR) phóng xạ lên gel Cuối cùng, ta gel chứa vạch vị trí base ADN Ví dụ với chuỗi ATGCTCAG, sau phản ứng, ta gel sau: Hình 1.2 Ảnh gel sau phản ứng Từ hình 1.2, ta đọc từ lên thấy trình tự xác vạch suất ứng với base tương ứng A, T, G, C, T, C, A, G → ATGCTCAG Phương pháp lần chạy xác định 500 base có hạn chế tốc độ chậm, chi phí cao (Vào năm 2004, chi phí để xác định trình tự gene vào khoảng 10 triệu USD) độ xác phụ thuộc vào vật liệu phóng xạ Do đó, sử dụng phương pháp Sanger để xác định trình tự gene người (khoảng tỷ base) dùng 96 máy trình tự lần chạy, ta 48 000 base Do đó, ta cần chạy 96 máy 62 500 lần, lấy ngày chạy 10 lần (1 lần chạy khoảng tiếng) phải đến 17 năm sau ta có kết Vì vậy, nhà khoa học phải tìm phương pháp xác định trình tự cho tốc độ xác định nhanh với chi phí thấp 1.3 Trình Tự Thế Hệ Gene Tiếp Theo Nếu phương pháp Sanger xác định trình tự tồn gene lần chạy gây tốn nhiều thời gian hệ genen tiếp theo, người ta sử dụng phương pháp Sanger họ bẻ ADN thành nhiều đoạn nhỏ hơn, xác định lúc trình tự đoạn nhỏ ghép kết lại Quy trình gọi lại “Sắp xếp trình tự lớn song song – Massively Parallel Sequencing” giúp giảm chi phí từ 10 triệu USD xuống 000 USD đến 000 USD Năm 2005 đánh dấu kỷ nguyên trình phân giải DNA phương pháp đời đạt hiệu hướng: - Giảm chi phí phân giải Tăng tốc độ trình phân giải Tự động thực quy trình cịn lại Tăng độ xác kết phân giải Lần đầu phân giải gene người khoảng 10 năm với hàng triệu USD với phương pháp này, việc phân giải khoảng ngày với chi phí xấp xỉ 000 USD Hình 1.3 Sau trình tự hệ gene đời, từ khoảng năm 2007, chi phí phân giải giảm rõ rệt Như vậy, tốn đặt với đoạn ADN rời rạc, ta phải có cách lắp ráp để đoạn ADN hoàn chỉnh 1.4 Xử Lý Dữ Liệu Với trình tự hệ gene tiếp theo, sau phân giải, ta tập đoạn ADN rời rạc, nhiệm vụ ghép đoạn ADN rời rạc thành đoạn ADN hoàn chỉnh Input: Tập đoạn ADN rời rạc Output: Đoạn ADN hồn chỉnh Hiện có thuật tốn dùng để lắp ráp: OLC đồ thị de Bruijn, chủ yếu nói thuật tốn sử dụng đồ thị de Bruijn THUẬT TOÁN LẮP RÁP BẰNG ĐỒ THỊ DE BRUIJN 2.1 Cơ Sở Lý Thuyết Đồ thị de Bruijn nhà Toán học người Hà Lan tên Nicolaas Govert de Bruijn cộng phát triển nhằm giải toán sau: Cho tập 𝑇 gồm chuỗi 𝑡1 , 𝑡2 , … , 𝑡𝑛 , tìm chuỗi 𝑆 có độ dài nhỏ cho 𝑡𝑖 chuỗi chuỗi 𝑆 xuất lần 𝑆 Ví dụ: 𝑡1 = 𝐴𝐴, 𝑡2 = 𝐴𝐵, 𝑡3 = 𝐵𝐴, 𝑡4 = 𝐵𝐵, 𝑆 = 𝐴𝐴𝐵𝐵𝐴 Định nghĩa 2.1: Cho chuỗi 𝑆 - 𝑝𝑟𝑒 (𝑆, 𝑘 ): 𝑘 ký tự chuỗi 𝑆 𝑠𝑢𝑓(𝑆, 𝑘): 𝑘 ký tự cuối chuỗi 𝑆 - 𝑘_𝑚𝑒𝑟(𝑆): Tập tất chuỗi chuỗi 𝑆 có độ dài 𝑘 Định nghĩa 2.2: Hai chuỗi 𝑡1 𝑡2 gọi 𝑜𝑣𝑒𝑟𝑙𝑎𝑝 với 𝑘 ∈ ℕ, 𝑝𝑟𝑒 (𝑡1 , 𝑘 ) = 𝑠𝑢𝑓 (𝑡2 , 𝑘 ) hay 𝑠𝑢𝑓 (𝑡1 , 𝑘 ) = 𝑝𝑟𝑒 (𝑡2 , 𝑘 ) Định nghĩa 2.3: Một giá trị 𝑎 ∈ ℕ gọi 𝑜𝑣𝑒𝑟𝑙𝑎𝑝𝑚𝑎𝑥 (𝐴) 𝑎 giá trị lớn cho chuỗi 𝑡𝑖 , 𝑡𝑗 ∈ 𝐴 𝑝𝑟𝑒 (𝑡𝑖 , 𝑎) = 𝑠𝑢𝑓(𝑡𝑗 , 𝑎) hay 𝑝𝑟𝑒(𝑡𝑗 , 𝑎) = 𝑠𝑢𝑓(𝑡𝑖 , 𝑎) Nếu chuỗi 𝑡𝑖 , 𝑡𝑗 (𝑖 ≠ 𝑗) tập 𝑇 khơng overlap giải tốn khơng khó, đáp án ta ghép chuỗi nối đuôi chuỗi từ 𝑡1 đến 𝑡𝑛 Vấn đề cần giải tồn chuỗi 𝑡𝑖 𝑡𝑗 overlap, để giải tốn đó, ta xây dựng đồ thị de Bruijn 2.2 Xây Dựng Đồ Thị de Bruijn Giả sử ta có tập 𝑇 gồm: 𝑡1 = 𝐴𝑇𝐶𝐶𝑇𝐺 𝑡2 = 𝑇𝐶𝐶𝑇𝐺𝐺 𝑡3 = 𝐶𝐶𝑇𝐺𝐺𝐶 𝑡4 = 𝐶𝑇𝐺𝐺𝐶𝐴 𝑡5 = 𝑇𝐺𝐺𝐶𝐴𝑇 Ta thấy tập 𝑇, với 𝑘 = 𝑡1 overlap 𝑡2 , 𝑡2 overlap 𝑡3 , 𝑡3 overlap 𝑡4 , 𝑡4 overlap 𝑡5 Ngoài ra, với 𝑘 = 4,3,2,1 có cặp overlap ta ưu tiên chọn 𝑘 = 𝑜𝑣𝑒𝑟𝑙𝑎𝑝𝑚𝑎𝑥(𝑇) 𝐴𝑇𝐶𝐶𝑇𝐺 𝑇𝐶𝐶𝑇𝐺𝐺 𝐶𝐶𝑇𝐺𝐺𝐶 𝐶𝑇𝐺𝐺𝐶𝐴 𝑇𝐺𝐺𝐶𝐴𝑇 Với chuỗi 𝑡𝑖 , ta tách thành phần 𝑝𝑟𝑒(𝑡𝑖 , 5) 𝑠𝑢𝑓(𝑡𝑖 , 5), đó, ta 𝑡𝑖 = 𝑝𝑟𝑒 (𝑡𝑖 , 4) → 𝑠𝑢𝑓(𝑡𝑖 , 4), cụ thể: 𝐴𝑇𝐶𝐶𝑇𝐺 = 𝐴𝑇𝐶𝐶𝑇 → 𝑇𝐶𝐶𝑇𝐺 𝑇𝐶𝐶𝑇𝐺𝐺 = 𝑇𝐶𝐶𝑇𝐺 → 𝐶𝐶𝑇𝐺𝐺 𝐶𝐶𝑇𝐺𝐺𝐶 = 𝐶𝐶𝑇𝐺𝐺 → 𝐶𝑇𝐺𝐺𝐶 𝐶𝑇𝐺𝐺𝐶𝐴 = 𝐶𝑇𝐺𝐺𝐶 → 𝑇𝐺𝐺𝐶𝐴 𝑇𝐺𝐺𝐶𝐴𝑇 = 𝑇𝐺𝐺𝐶𝐴 → 𝐺𝐺𝐶𝐴𝑇 Tiếp theo, ta cố định 𝑠𝑢𝑓(𝑡𝑖 , 5), ta quan sát tất chuỗi 𝑝𝑟𝑒(𝑡𝑗 , 5), 𝑖 ≠ 𝑗, 𝑠𝑢𝑓 (𝑡𝑖 , 5) = 𝑝𝑟𝑒(𝑡𝑗 , 5) ta ghép chúng lại Từ đó, ta đồ thị de Bruijn sau: 𝐴𝑇𝐶𝐶𝑇 → 𝑇𝐶𝐶𝑇𝐺 → 𝐶𝐶𝑇𝐺𝐺 → 𝑇𝐺𝐺𝐶𝐴 → 𝐺𝐺𝐶𝐴𝑇 = 𝐴𝑇𝐶𝐶𝑇𝐺𝐺𝐴𝑇 Vậy 𝑆 = 𝐴𝑇𝐶𝐶𝑇𝐺𝐺𝐴𝑇 2.3 Áp Dụng Đồ Thị de Bruijn vào Lắp Ráp Gene 2.3.1 Xây Dựng Đồ Thị dựa 𝒌_𝒎𝒆𝒓 Để áp dụng đồ thị de Bruijn, ta cần có sở đảm bảo tính xác đồ thị Vì tơi tự cho đoạn ADN, sau lấy tất 𝑘_𝑚𝑒𝑟(𝐴𝐷𝑁) dùng đồ thị de Bruijn để lắp ráp lại thành đoạn ADN ban đầu Xét đoạn ADN: 𝑇𝐴𝐴𝑇𝐺𝐶𝐶𝐴𝑇𝐺𝐺𝐺𝐴𝑇𝐺𝑇𝑇 Tập 3_𝑚𝑒𝑟(𝐴𝐷𝑁) = {𝑇𝐴𝐴, 𝐴𝐴𝑇, 𝐴𝑇𝐺, 𝑇𝐺𝐶, 𝐺𝐶𝐶, 𝐶𝐶𝐴, 𝐶𝐴𝑇, 𝐴𝑇𝐺, 𝑇𝐺𝐺, 𝐺𝐺𝐺, 𝐺𝐺𝐴, 𝐺𝐴𝑇, 𝐴𝑇𝐺, 𝑇𝐺𝑇, 𝐺𝑇𝑇} Với cặp 𝑡𝑖 , 𝑡𝑗 3_𝑚𝑒𝑟 có tính chất 𝑝𝑟𝑒 (𝑡𝑖 , 2) = 𝑠𝑢𝑓(𝑡𝑗 , 2) 𝑝𝑟𝑒(𝑡𝑗 , 2) = 𝑠𝑢𝑓(𝑡𝑖 , 2) = 𝑜𝑣𝑒𝑟𝑙𝑎𝑝𝑚𝑎𝑥(3_𝑚𝑒𝑟(𝐴𝐷𝑁)), ta tách thành 𝑡𝑖 = 𝑝𝑟𝑒 (𝑡𝑖 , 2) → 𝑠𝑢𝑓(𝑡𝑖 , 2), cụ thể: Bảng 2.1 Tách 𝑡𝑖 thành 𝑝𝑟𝑒 (𝑡𝑖 , 2) → 𝑠𝑢𝑓 (𝑡𝑖 , 2) 𝑖 𝑝𝑟𝑒(𝑡𝑖 , 2) → 𝑠𝑢𝑓(𝑡𝑖 , 2) 𝑡𝑖 TA AA TAA AA AT AAT AT TG ATG TG GC TGC GC CC GCC CC CA CCA CA AT CAT AT TG ATG TG GG TGG 10 GG GG GGG 11 GG GA GGA 12 GA AT GAT 13 AT TG ATG 14 TG GT TGT 15 GT TT GTT Trong đồ thị de Bruijn, ta xem chuỗi 𝑝𝑟𝑒 (𝑡𝑖 , 2), 𝑠𝑢𝑓(𝑡𝑖 , 2) node, dấu mũi tên đường từ node sang node kia, đồ thị de Bruijn đồ thị có hướng Do node có node giống nên ta cần phải loại bớt số node giống Vì vậy, ta danh sách node xếp theo thứ tự bảng chữ là: Bảng 2.2 Danh sách node Node AA AT CA CC GA GC GG GT TA TG TT 10 11 Sử dụng thông tin bảng 2.1, ta hướng node bảng 2.2 Ví dụ xét node (GC) node 10 (TG), theo bảng 2.1, ta 𝑇𝐺 → 𝐺𝐶 nên ta có mũi tên có hướng từ node 10 sang node Dưới hình ảnh đồ thị de Bruijn xây dựng: Từ cách xây dựng ma trận, xét node 𝑖 bất kỳ, ta được: 11 𝑜𝑢𝑡_𝑑𝑒𝑔(𝑖) = ∑ 𝑀(𝑖, 𝑗) 𝑗=1 11 𝑖𝑛_𝑑𝑒𝑔(𝑖) = ∑ 𝑀(𝑗, 𝑖) 𝑗=1 Do đó, duyệt đồ thị theo đường chéo chính, ta 𝑜𝑢𝑡_𝑑𝑒𝑔(𝑇𝐴) = 𝑖𝑛_𝑑𝑒𝑔(𝑇𝐴) + 1, 𝑜𝑢𝑡_𝑑𝑒𝑔(𝑇𝑇) = 𝑖𝑛_𝑑𝑒𝑔(𝑇𝑇) − node 𝑥 lại có 𝑜𝑢𝑡_𝑑𝑒𝑔(𝑥) = 𝑖𝑛_𝑑𝑒𝑔(𝑥) Vậy đồ thị có đường Euler xuất phát từ TA kết thúc TT Dựa vào đồ thị, xét phần tử dịng node 𝑖, phần tử 𝑗 có giá trị khác tức 𝑀(𝑖, 𝑗) ≠ ta trừ giá trị 𝑀(𝑖, 𝑗) xuống đơn vị, lấy node 𝑗 làm chuẩn thực lại quy trình khơng thể tìm phần tử dịng có giá trị khác Xuất kết đường Euler ma trận thành ma trận không Ta áp dụng điều vào đồ thị: - Xuất phát từ 𝑇𝐴, xét dịng 𝑇𝐴 có 𝑀(𝑇𝐴, 𝐴𝐴) = ≠ 0, thực 𝑀(𝑇𝐴, 𝐴𝐴) = 𝑀(𝑇𝐴, 𝐴𝐴) − lấy 𝐴𝐴 làm chuẩn Xuất phát từ 𝐴𝐴, xét dịng 𝐴𝐴 có 𝑀(𝐴𝐴, 𝐴𝑇) = ≠ 0, thực 𝑀(𝐴𝐴, 𝐴𝑇) = 𝑀(𝐴𝐴, 𝐴𝑇) − lấy 𝐴𝑇 làm chuẩn Xuất phát từ 𝐴𝑇, xét dịng 𝐴𝑇 có 𝑀(𝐴𝑇, 𝑇𝐺 ) = ≠ 0, thực 𝑀(𝐴𝑇, 𝑇𝐺 ) = 𝑀(𝐴𝑇, 𝑇𝐺 ) − lấy 𝑇𝐺 làm chuẩn Xuất phát từ 𝑇𝐺, xét dịng 𝑇𝐺, có 𝑀 (𝑇𝐺, 𝐺𝐶 ) = 𝑀(𝑇𝐺, 𝐺𝐺 ) = 𝑀(𝑇𝐺, 𝐺𝑇) = ≠ 0, ta nên lấy 𝐺𝐶, 𝐺𝐺 hay 𝑇𝐺 làm chuẩn? Vấn đề phát sinh từ node có nhiều đường đến node khác Do để tìm tất đường Euler, tơi sử dụng ý tưởng phép tìm kiếm duyệt rộng (Breadth – First Search - BFS) tìm kiếm duyệt sâu (Deep – First Search - DFS) để thực với node tìm kiếm trạng thái ma trận 2.3.1.1 Sử Dụng BFS Thuật toán 2.1 Sử dụng BFS để tìm tất đường Euler input: Ma trận ban đầu (matrix), vị trí xuất phát (start), kích thước hàng ma trận (n) output: Tất đường Euler Tạo queue map,path; map.enqueue(matrix); path.enqueue(start); while(!matrix.empty() && path.empty()) { matrix = map.pop(); 11 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 start = path.pop(); flag = true; for i = to n - { if matrix[start][i] != { flag = false; map.enqueue(matrix); path.enqueue(start); } } if(!flag && matrix is zero) in kết hình } 2.3.1.2 Sử Dụng DFS Đối với DFS, tơi sử dụng đệ quy để thực Thuật toán 2.2 Sử dụng DFS kết hợp đệ quy để tìm tất đường Euler input: Ma trận ban đầu (matrix), vị trí xuất phát (start), kích thước hàng ma trận (n), đường (path) output: Tất đường Euler Function: DFSRecursion(matrix, n, start, path) if matrix ma trận { in kết đường hình; } else 10 { 11 for i = to n - 12 { 13 if matrix[start][i] > 14 { 15 map = matrix; 16 map[start][i] ; 17 path1 = path; 18 path1.push_back(i); 19 DFSRecursion(map, n, i, path1) 20 } 21 } 22 } 12 Đối với thuật tốn BFS tính với liệu lớn tốc độ chậm, cịn thuật tốn DFS cho tốc độ nhanh khơng thể tính liệu lớn gây nặng máy tính Sau thực thuật toán trên, ta kết quả: - Kết 1: 𝑇𝐴 → 𝐴𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝐶 → 𝐶𝐶 → 𝐶𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝐺 → 𝐺𝐺 → 𝐺𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝑇 → 𝑇𝑇 𝑇𝐴𝐴𝑇𝐺𝐶𝐶𝐴𝑇𝐺𝐺𝐺𝐴𝑇𝐺𝑇𝑇 - Kết 2: 𝑇𝐴 → 𝐴𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝐺 → 𝐺𝐺 → 𝐺𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝐶 → 𝐶𝐶 → 𝐶𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝑇 → 𝑇𝑇 𝑇𝐴𝐴𝑇𝐺𝐺𝐺𝐴𝑇𝐺𝐶𝐶𝐴𝑇𝐺𝑇𝑇 Ta thấy kết chuỗi ADN ban đầu ta đặt ra, ta có sở sử dụng đồ thị de Bruijn để lắp ráp 2.3.2 Kết Quả Thực Nghiệm Tơi xây dựng chương trình có chức nặng tạo chuỗi ADN có độ dài người dùng tự nhập (điều kiện độ dài lớn 25), chương trình tự động chọn 𝑘 18% độ dài chuỗi ADN, sau chương trình tính tồn tập 𝑘_𝑚𝑒𝑟 lưu vào tập tin reads.txt Chương trình tự động sử dụng nội dung tập tin xây dựng đồ thị de Bruijn áp dụng BFS để lắp ráp Cuối cùng, viết hàm để đối chiếu kết với chuỗi ADN ban đầu để xác định có tồn kết hay sai Kết quả: Hình 2.2 Kết khảo sát thời gian lắp ráp sử dụng BFS với chuỗi ADN có độ dài từ 25 đến 374, thời gian trung bình 8.1045 giây, độ xác 100% Xem thêm Phụ lục Sử dụng hàm polyfit MATLAB, ta có độ phức tạp thuật toán 𝑂(𝑁 ) 13 2.3.3 Xây Dựng Đồ Thị dựa 𝒌_𝒎𝒆𝒓 Kép Ở hướng trên, dù ta lắp ráp thành chuỗi ban đầu ta bị thừa kết quả, điều làm cho chương trình phải tốn thời gian để giải kết sai này, phần tơi trình bày cách khắc phục ý tưởng 𝑘_𝑚𝑒𝑟 kép, ý tưởng thực phần mềm SPAdes trường Đại học St Petersburg trường Đại học San Diego, California thực Ta xây dựng đồ thị de Bruijn cho đồ thị xuất kết tốt mà đảm bảo tính xác kết Một hướng để giảm số lượng kết giảm số lượng node đồ thị Định nghĩa 2.4: 𝑏𝑖𝑙𝑎𝑏𝑒𝑙(𝑎|𝑏) chuỗi kép tạo thành từ chuỗi 𝑎 𝑏 có độ dài Khi 𝑝𝑟𝑒 (𝑏𝑖𝑙𝑎𝑏𝑒𝑙 (𝑎|𝑏), 𝑟) = 𝑝𝑟𝑒 (𝑏𝑖𝑙𝑎𝑏𝑒𝑙 (𝑝𝑟𝑒 (𝑎, 𝑟)|(𝑝𝑟𝑒(𝑏, 𝑟)))) 𝑠𝑢𝑓 (𝑏𝑖𝑙𝑎𝑏𝑒𝑙 (𝑎|𝑏), 𝑡 ) = 𝑠𝑢𝑓 (𝑏𝑖𝑙𝑎𝑏𝑒𝑙 (𝑠𝑢𝑓 (𝑎, 𝑡 )|(𝑠𝑢𝑓 (𝑏, 𝑡 )))) Ví dụ: 𝑎 = 𝐴𝐴𝑇𝐺, 𝑏 = 𝑇𝐶𝐺𝐴𝐴𝑇, đó: 𝑏𝑖𝑙𝑎𝑏𝑒𝑙 (𝑎|𝑏) = 𝐴𝐴𝑇𝐺|𝑇𝐶𝐺𝐴𝐴𝑇 𝑝𝑟𝑒 (𝑏𝑖𝑙𝑎𝑏𝑒𝑙 (𝑎|𝑏), 3) = 𝐴𝐴𝑇|𝑇𝐶𝐺 𝑠𝑢𝑓 (𝑏𝑖𝑙𝑎𝑏𝑒𝑙 (𝑎, 𝑏), 2) = 𝑇𝐺|𝐴𝑇 Định nghĩa 2.5: Cho chuỗi 𝑆, với chuỗi 𝑡𝑖 , 𝑡𝑗 ∈ 𝑘_𝑚𝑒𝑟(𝑆), 𝑖 ≠ 𝑗, chuỗi 𝑘_𝑚𝑒𝑟 kép chuỗi 𝑆 với khoảng cách 𝑑 khi: (i) (ii) |𝑡𝑖 | = |𝑡𝑗 |, ký hiệu |𝑎| độ dài chuỗi 𝑎 Khoảng cách từ ký tự cuối chuỗi 𝑡𝑖 chuỗi 𝑆 đến ký tự cuối chuỗi 𝑡𝑗 chuỗi 𝑆 𝑑 Ta ký hiệu (𝑘, 𝑑 )_𝑚𝑒𝑟(𝑆) tập tất 𝑘_𝑚𝑒𝑟 kép chuỗi 𝑆 với khoảng cách 𝑑, chuỗi 𝑥 ∈ (𝑘, 𝑑)_𝑚𝑒𝑟(𝑆) có dạng 𝑥 = 𝑏𝑖𝑙𝑎𝑏𝑒𝑙(𝑡𝑖 |𝑡𝑗 ) Ta quan sát lại đáp án sau: - Kết 1: 𝐾1 = 𝑇𝐴𝐴𝑇𝐺𝐶𝐶𝐴𝑇𝐺𝐺𝐺𝐴𝑇𝐺𝑇𝑇 Kết 2: 𝐾2 = 𝑇𝐴𝐴𝑇𝐺𝐺𝐺𝐴𝑇𝐺𝐶𝐶𝐴𝑇𝐺𝑇𝑇 Ta thấy tập 3_𝑚𝑒𝑟(𝐾1) = 3_𝑚𝑒𝑟(𝐾2), nhiên ta xét phần tử tập (3,4)_𝑚𝑒𝑟(𝐾1) (3,4)_𝑚𝑒𝑟(𝐾2) thì: Bảng 2.3 Liệt kê phần tử tập (3,4)_𝑚𝑒𝑟(𝐾1) (3,4)_𝑚𝑒𝑟(𝐾2) (3,4)_𝑚𝑒𝑟(𝐾1) (3,4)_𝑚𝑒𝑟(𝐾2) (TAA|GCC) (TAA|GGG) 14 (AAT|CCA) (AAT|GGA) (ATG|CAT) (ATG|GAT) (TGC|ATG) (TGG|ATG) (GCC|TGG) (GGG|TGC) (CCA|GGG) (GGA|GCC) (CAT|GGA) (GAT|CCA) (ATG|GAT) (ATG|CAT) (TGG|ATG) (TGC|ATG) 10 (GGG|TGT) (GCC|TGT) 11 (GGA|GTT) (CCA|GTT) Hai tập (3,4)_𝑚𝑒𝑟(𝐾1) (3,4)_𝑚𝑒𝑟(𝐾2) khác nhau, đồng thời số lượng phần tử tập (3,4)_𝑚𝑒𝑟(𝐾1) tập 3_𝑚𝑒𝑟(𝐾1) Do ta hi vọng xây dựng đồ thị de Bruijn từ tập (3,4)_𝑚𝑒𝑟(𝐾1) với số node số đường hơn, số lượng đường đảm bảo tính xác Với 𝑥𝑖 ∈ (3,4)_𝑚𝑒𝑟(𝐾1), ta tách thành phần 𝑝𝑟𝑒, 𝑠𝑢𝑓 sau: Bảng 2.4 Tách 𝑥𝑖 thành 𝑝𝑟𝑒(𝑥𝑖 , 2) 𝑠𝑢𝑓(𝑥𝑖 , 2) định nghĩa 2.4 𝑖 𝑝𝑟𝑒 (𝑥𝑖 , 2) → 𝑠𝑢𝑓(𝑥𝑖 , 2) 𝑥𝑖 (TA|GC) (AA|CC) (TAA|GCC) (AA|CC) (AT|CA) (AAT|CCA) (AT|CA) (TG|AT) (ATG|CAT) (TG|AT) (GC|TG) (TGC|ATG) (GC|TG) (CC|GG) (GCC|TGG) (CC|GG) (CA|GG) (CCA|GGG) (CA|GG) (AT|GA) (CAT|GGA) (AT|GA) (TG|AT) (ATG|GAT) (TG|AT) (GG|TG) (TGG|ATG) 10 (GG|TG) (GG|GT) (GGG|TGT) 11 (GG|GT) (GA|TT) (GGA|GTT) 15 Ta xem chuỗi 𝑝𝑟𝑒, 𝑠𝑢𝑓 node, ta có danh sách node sau, xếp theo thứ tự bảng chữ cái: Bảng 2.5 Danh sách node Node (AA|CC) (AT|CA) (AT|GA) (CA|GG) (CC|GG) (GA|TT) (GC|TG) (GG|GT) (GG|TG) (TA|GC) (TG|AT) 10 11 Bây ta xây dựng đồ thị de Bruijn, biểu diễn máy tính ma trận kề sau: Bảng 2.6 Ma trận kề biểu diễn đồ thị de Bruijn → (AA| CC) (AT| CA) (AT| GA) (CA| GG) (CC| GG) (GA| TT) (GC| TG) (GG| GT) (GG| TG) (TA| GC) (AA| (AT| (AT| CC) CA) GA) (CA| (CC| GG) GG) (GA |TT) (GC| (GG| (GG| (TA| (TG| TG) GT) TG) GC) AT) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 (TG| AT) 0 0 0 0 0 Từ ma trận, ta được: 𝑖𝑛_𝑑𝑒𝑔(𝑇𝐴|𝐺𝐶 ) = 𝑜𝑢𝑡_𝑑𝑒𝑔(𝑇𝐴|𝐺𝐶 ) − 𝑖𝑛_𝑑𝑒𝑔(𝐺𝐴|𝑇𝑇) = 𝑜𝑢𝑡_𝑑𝑒𝑔(𝐺𝐴|𝑇𝑇) + 𝑖𝑛𝑑𝑒𝑔(𝑥) = 𝑜𝑢𝑡𝑑𝑒𝑔(𝑥), 𝑥 ≠ {𝑇𝐴|𝐺𝐶, 𝐺𝐴|𝑇𝑇} Áp dụng định lý 2.2, đường Euler xuất phát từ node TA|GC kết thúc GA|TT Hình 2.3 Đồ thị de Bruijn xây dựng từ bảng 2.4 bảng 2.5 Đồ thị de Bruijn có đường Euler là: 𝑇𝐴|𝐺𝐶 → 𝐴𝐴|𝐶𝐶 → 𝐴𝑇|𝐶𝐴 → 𝑇𝐺 |𝐴𝑇 → 𝐺𝐶 |𝑇𝐺 → 𝐶𝐶 |𝐺𝐺 → 𝐶𝐴|𝐺𝐺 → 𝐴𝑇|𝐺𝐴 → 𝑇𝐺 |𝐴𝑇 → 𝐺𝐺 |𝑇𝐺 → 𝐺𝐺|𝐺𝑇 → 𝐺𝐴|𝑇𝑇 Để ghép đường Euler, node, ta tách thành chuỗi trái phải, sau ghép chuỗi trái chuỗi phải lại sau: - Ghép chuỗi trái: 𝑇𝐴 → 𝐴𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝐶 → 𝐶𝐶 → 𝐶𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝐺 → 𝐺𝐺 → 𝐺𝐴 = 𝑇𝐴𝐴𝑇𝐺𝐶𝐶𝐴𝑇𝐺𝐺𝐺𝐴 Ghép chuỗi phải: 𝐺𝐶 → 𝐶𝐶 → 𝐶𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝐺 → 𝐺𝐺 → 𝐺𝐴 → 𝐴𝑇 → 𝑇𝐺 → 𝐺𝑇 → 𝑇𝑇 = 𝐺𝐶𝐶𝐴𝑇𝐺𝐺𝐺𝐴𝑇𝐺𝑇𝑇 Hai chuỗi trái phải overlap, ta tìm giá trị 𝑚 lớn cho 𝑠𝑢𝑓 (trái, 𝑚) = 𝑝𝑟𝑒(phải, 𝑚) Theo định nghĩa 2.5, xét chuỗi 𝑡𝑖 , 𝑡𝑗 ∈ (𝑘, 𝑑)_𝑚𝑒𝑟(𝑆), 𝑑 > 𝑘, vị trí ký tự cuối chuỗi 𝑡𝑖 chuỗi 𝑆 tịnh tiến thêm 𝑑 − 𝑘 + đơn vị trùng với vị trí chuỗi 𝑡𝑗 chuỗi 𝑆 Do đó, chuỗi trái, tính từ trái sang phải, lấy chuỗi 𝑇 gồm ký tự từ vị trí số đến vị trí số 𝑑 − 𝑘 + 𝑘 = 𝑑, chuỗi 𝑇′ ký tự cịn lại 𝑇′ chuỗi chuỗi phải, hay nói cách khác, chọn 𝑚 = |𝑇 ′ | giá trị lớn cho 𝑠𝑢𝑓(trái, 𝑚) = 𝑝𝑟𝑒(phải, 𝑚) Ở chuỗi trái, ta tách 𝑑 − 𝑘 + 𝑘 = 𝑑 = ký tự tạo thành chuỗi 𝑇 = 𝑇𝐴𝐴𝑇, ký tự cịn lại có độ dài 𝑚 = tạo thành chuỗi chuỗi tiền tố chuỗi phải, tức 𝑠𝑢𝑓 (trái, 9) = 𝑝𝑟𝑒 (phải, 9) = 𝐺𝐶𝐶𝐴𝑇𝐺𝐺𝐺𝐴 Như chuỗi kết chuỗi 𝑇 ghép với chuỗi phải: 17 𝑇𝐴𝑇𝑇 + 𝐺𝐶𝐶𝐴𝑇𝐺𝐺𝐺𝐴𝑇𝐺𝑇𝑇 = 𝑇𝐴𝑇𝑇𝐺𝐶𝐶𝐴𝑇𝐺𝐺𝐺𝐴𝑇𝐺𝑇𝑇 Đây chuỗi ADN ban đầu mà ta xác định Sử dụng ý tưởng 𝑘_𝑚𝑒𝑟 kép, ta xây dựng đồ thị de Bruijn có số lượng node đường mà đảm bảo kết xác, thời gian lắp ráp nhanh Hình 2.4 So sánh cấu trúc đồ thị Đồ thị de Bruijn bên trái sử dụng ý tưởng 𝑘_𝑚𝑒𝑟 kép, đồ thị de Bruijn bên phải sử dụng ý tưởng 𝑘_𝑚𝑒𝑟 đơn THỬ THÁCH Trong q trình nghiên cứu, tơi sử dụng liệu tốt, tức 𝑘_𝑚𝑒𝑟 chuỗi ADN có tập tin reads.txt liệu tập tin giả định khơng có sai sót trình phân giải nhà Sinh học Đồng thời, biết giá trị 𝑘 khoảng cách 𝑑 sử dụng 𝑘_𝑚𝑒𝑟 kép để lắp ráp đồ thị Nhưng thực tế, điều chưa xảy phát sinh thêm số vấn đề khác Đối với liệu tốt, ta sử dụng thiết bị hãng Illumina để phân giải 250_𝑚𝑒𝑟 đoạn ADN thiết bị phân giải lượng nhỏ, hay nói cách khác, có số chuỗi tập 250_𝑚𝑒𝑟(𝐴𝐷𝑁) khơng xuất kết phân giải Do đó, ta áp dụng đồ thị de Bruijn trường hợp Hình 3.1 Trong thực tế, tập 10_𝑚𝑒𝑟 chuỗi màu đỏ có chuỗi Trong trường hợp hình 3.1, ta sử dụng đồ thị de Bruijn cách bẻ chuỗi thành chuỗi nhỏ hơn, ví dụ tách thành 5_𝑚𝑒𝑟, ta sử dụng đồ thị de Bruijn tập 5_𝑚𝑒𝑟 18 Hình 3.2 Tách chuỗi tập 10_𝑚𝑒𝑟 bên trái thành 5_𝑚𝑒𝑟 bên phải Trong trình phân giải, đơi có sai sót khiến cho số chuỗi 𝑘_𝑚𝑒𝑟 bị lỗi, ví dụ hình 3.3, ký tự thứ 𝑘_𝑚𝑒𝑟 bị phân giải sai thành 𝐶, cần phải phát triển thuật tốn tìm lỗi chỉnh sửa (hoặc loại bỏ cần thiết) Hình 3.3 𝑘_𝑚𝑒𝑟 cuối bị lỗi ký tự thứ 𝐶 thay 𝑡 Thời gian chạy tơi cịn chậm, với chuỗi ADN dài 1000 ký tự, sau tách 180_𝑚𝑒𝑟 lắp ráp khoảng 10 phút, với thuật tốn Velvet 10 phút lắp ráp thành chuỗi ADN dài triệu ký tự HƯỚNG PHÁT TRIỂN TIẾP THEO Phát triển thuật toán sử dụng BFS kết hợp 𝑘_𝑚𝑒𝑟 kép để lắp ráp, nhận biết lỗi phân giải đề xuất thuật toán chọn 𝑘 𝑑 19 TÀI LIỆU THAM KHẢO Paul Medvedev, S P (2011, 11) NCBI Retrieved from Paired de Bruijn Graphs: A Novel Approach for Incorporating Mate Pair Information into Genome Assemblers: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3216098/ Reina, O (2014, 10 2) bitesizebio Retrieved from A Beginner’s Guide to Next Generation Sequencing (NGS) Technology: http://bitesizebio.com/21193/abeginners-guide-to-next-generation-sequencing-ngs-technology/ Rosen, K H (2012) Discrete Mathematics ADN Its Application New York: McGraw-Hill Sara El-Metwally, O M (2014) Next Generation Sequencing Technologies ADN Challenges in Sequence Assembly In O M Sara El-Metwally, Next Generation Sequencing Technologies ADN Challenges in Sequence Assembly (p 32) New York: Springer Sciences, S P (n.d.) bioinf.spbau.ru Retrieved from SPAdes 3.8 is released!: http://bioinf.spbau.ru/spades University of California, S D (2016, 3) coursera.org Retrieved from Genome Sequencing (Bioinformatics II): https://www.coursera.org/learn/genomesequencing Wong, L.-J C (2013) Next Generation Sequencing In L.-J C Wong, Next Generation Sequencing, Translation to Clinical Diagnostics (pp 7-8) Newyork: Springer 20 PHỤ LỤC 1: KHẢO SÁT THỜI GIAN CHẠY CHƯƠNG TRÌNH SỬ DỤNG BFS VÀ 𝒌_𝒎𝒆𝒓 ĐƠN Bảng Khảo sát thời gian chạy với 350 liệu ADN có độ dài từ 25 đến 374 Độ dài ADN 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Thời gian (giây) 0,071 0,343 0,078 0,062 0,063 0,312 0,078 0,094 0,062 0,062 0,094 0,063 0,094 0,079 0,078 0,094 0,094 0,109 0,142 0,125 0,109 0,125 0,111 0,125 0,125 0,125 0,143 0,218 0,156 0,156 0,171 0,171 0,172 0,187 0,203 0,204 Độ dài ADN 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 21 Thời gian (giây) 0,593 0,608 0,642 0,656 0,67 0,673 0,702 0,718 0,749 0,764 0,787 0,798 0,827 0,86 0,861 0,905 0,92 0,936 0,953 0,998 1,014 1,03 1,03 1,07 1,093 1,129 1,235 1,205 1,201 1,232 1,279 1,343 1,33 1,331 1,374 1,41 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 Độ dài ADN 165 166 167 168 0,218 0,22 0,218 0,234 0,25 0,249 0,265 0,282 0,279 0,297 0,28 0,312 0,296 0,328 0,343 0,343 0,359 0,359 0,374 0,39 0,406 0,422 0,437 0,422 0,471 0,469 0,485 0,5 0,499 0,515 0,543 0,562 0,593 0,593 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 Thời gian (giây) 2,741 2,792 2,888 2,878 Độ dài ADN 235 236 237 238 22 1,435 1,482 1,531 1,544 1,555 1,594 1,638 1,67 1,67 1,826 1,766 1,798 1,845 1,893 1,902 1,953 1,987 2,028 2,07 2,096 2,097 2,152 2,231 2,28 2,317 2,315 2,372 2,433 2,497 2,538 2,577 2,576 2,654 2,689 Thời gian (giây) 7,549 7,666 7,776 7,879 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 2,939 3,059 3,112 3,086 3,167 3,313 3,299 3,375 3,392 3,432 3,5 3,572 3,633 3,728 3,707 3,802 3,853 3,919 4,019 3,996 4,063 4,152 4,245 4,307 4,397 4,368 4,459 4,532 4,635 4,705 4,697 4,783 4,89 4,938 5,088 5,148 5,158 5,229 5,314 5,398 5,485 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 23 7,891 8,007 8,166 8,218 8,39 8,494 8,483 8,625 8,739 8,866 8,976 9,089 9,157 9,229 9,41 9,493 9,68 9,639 9,781 9,942 10,059 10,192 10,377 10,35 10,5 10,646 10,808 10,96 10,921 11,125 11,391 11,457 11,521 11,755 11,677 11,862 11,987 12,166 12,308 12,273 12,509 12,64 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 Độ dài ADN 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 5,561 5,588 5,636 5,758 5,86 6,009 5,937 6,046 6,138 6,274 6,358 6,502 6,463 6,57 6,687 6,785 6,883 6,902 7,004 7,101 7,262 7,536 7,514 7,43 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 12,814 12,968 13,082 13,14 13,226 13,441 13,631 13,785 13,811 13,987 14,124 14,276 14,5 14,691 14,656 14,798 15,026 15,219 15,351 15,344 15,516 15,705 15,904 16,165 Thời gian (giây) 16,28 16,258 16,46 16,694 16,844 17,063 17,218 17,24 17,429 17,626 17,825 18,037 18,087 18,243 18,483 Độ dài ADN 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 Thời gian (giây) 22,173 22,635 22,67 23,039 23,291 23,214 23,445 23,566 23,896 24,18 24,497 24,441 24,658 24,912 25,118 24 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 18,626 18,861 19,102 19,071 19,32 19,561 19,717 20,038 20,063 20,144 20,404 20,809 20,837 21,124 21,034 21,275 21,487 21,772 21,953 21,983 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 Tổng số liệu khảo sát: 350 Tổng thời gian khảo sát: 2838.558 giây Thời gian trung bình chạy liệu: 8.11 giây Độ phức tạp: 𝑂(𝑁 ) 25 25,432 25,414 26,028 25,927 26,218 26,576 26,765 26,686 26,972 27,649 27,461 27,97 27,775 27,997 28,349 28,623 28,935 29,191 29,218 29,465 ... CCA CA AT CAT AT TG ATG TG GG TGG 10 GG GG GGG 11 GG GA GGA 12 GA AT GAT 13 AT TG ATG 14 TG GT TGT 15 GT TT GTT Trong đồ thị de Bruijn, ta xem chuỗi