Vấn đề LCS có thể được giải quyết bằng cách sử dụng các thuật toán lập trình động... Điều này có thể được thực hiện bằng cách sử dụng công thức đệ quy có tính đến độ dài của chuỗi con hi
Trang 1TONG LIEN DOAN LAO DONG VIET NAM
TRUONG DAI HQC TON DUC THANG
KHOA CONG NGHE THONG TIN
DO AN CUOI KY MON PHAN TICH THIET KE GIAI THUAT
Algorithm design strategies for solving Longest Common Subsequence problem
over multiple sequences
Người hướng dân: TS NGUYÊN CHÍ THIỆN Người thực hiện: PHẠM THANH TUẦN - 51900460
NGUYEN GIA BAO - 52000631 Lớp : 19050302, 20050281
Khoa : 23,24
THANH PHO HO CHI MINH, NAM 2023
Trang 2LOI CAM ON
Đầu tiên, chúng em bày tỏ lòng cảm ơn sâu sắc và chân thành nhất đến với giáo viên giảng dạy trực tiếp là thầy Nguyễn Chí Thiện trong Phân tích thiết kế giải thuật Thây là người giảng dạy và hướng dẫn chúng em trong quá trình làm bài thuyết trình, báo cáo hoàn thiện một cách xuất sắc nhất Do đó, nếu không có được những lời dạy bao tận tình đó, chung em e rang việc hoàn thiện bài báo cáo nay sé rất khó để hoàn thiện được một cách nhanh chóng, cũng như là việc hoàn thành một bài báo cáo hoàn chính
Khi bắt đầu học môn học thì đối với chúng em, đây là một môn học hoàn toàn mới, nên kiến thức của chúng em còn rất là hạn chế Bên cạnh đó là sự bỡ ngỡ, có thê còn rất nhiều điểm thiết sót trong quá trình học tập và trong bài báo cáo, điều này chắc chắn là không tránh khỏi Từ sự giúp đỡ từ quý Thầy Cô nói chung và từ thầy Nguyễn Chí Thiện nói riêng, đối với chúng em là một điều quý báu và đáng trân trọng Cuối cùng, chúng em rất mong nhận được nhiều những sự góp ý từ quý Thầy
Cô để chúng em có thê nâng cao, tim hiéu, biết thêm nhiều kiến thức mới và bồ ích hơn nữa trong lĩnh vực môn học này
Một lần nữa, chúng em xin chân thành cảm ơn thầy người đã hỗ trợ trực tiếp, quan tâm, và cũng như là người lái đò hướng dẫn chúng em hoàn thiện bài báo cáo một cách hoàn thiện nhất trong suốt thời gian vừa qua
Lời viết cuối cùng, chúng em xin chân thành kính chúc quý Thầy Cô trong khoa Công Nghệ Thông Tin, cũng như là gửi lời chúc cụ thể đến thầy Nguyễn Chí Thiện thật dồi dào sức khỏe và gặt hái được nhiều thành công trong con đường giảng dạy của minh
Trang 3il
ĐÔ ÁN ĐƯỢC HOÀN THÀNH “ TAI TRUONG DAI HOC TON BUC THANG
Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi / chúng tôi và được sự hướng dẫn của TS Nguyễn Chí Thiện; Các nội dung nghiên cứu, kết quá trong đề tải nay là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phân tài liệu tham khảo
Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả khác, cơ quan tô chức khác đều có trích dẫn và chú thích nguồn gốc
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm
về nội dung đồ án của mình Trường đại học Tôn Đức Thắng không liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có)
TP Hồ Chí Minh ngày tháng năm 2023
Tác giả (ý tên và ghỉ rõ họ tên)
Phạm Thanh Tuần
Nguyễn Gia Bảo
Trang 41H
PHẢN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
Phần xác nhận của GV hướng dẫn
Tp Hồ Chí Minh ngày tháng năm
(kí và phi họ tên)
Phần đánh giá của GV chấm bài
Tp Hồ Chí Minh ngày tháng năm
(kí và phi họ tên)
Trang 5TOM TAT Trinh bay tom tat vấn đề nghiên cứu, các hướng tiếp cận, cách giải quyết van dé
và một số kết quả đạt được, những phát hiện cơ bản trong vòng | -2 trang
Trang 6MUC LUC
PHAN XAC NHAN VA DANH GIA CUA GIANG VIEN u sseecssesssesseceseeeeteeseeeesees iti
¡90v iv )/I09 09 9 1 DANH MUC CAC BANG BIEU, HINH VẼ, ĐÔ THỊ -2:5522ccsvsvvsssrrvee 3 CHƯƠNG I— LONGEST COMMON SUBSEQUENCE 2552 2222 s22 4
li on - 4 1.2 Defne the problem mathematicalÏy - L S0 2212221222111 112 2tr ekey 5 I6 oi na 6 1.3.1 Lập trình động (Dynamie progTam1ng) - -: scs + ccss+scsxss2 6 1.3.2 Phương pháp đệ quy - 2c 122112211122 12 22tr ke 6 1.3.3 Chia dé tri (Divide and conquer) cc.ccccccscscsseseseesseeesesveeseeees 7 1.3.4 Thuật toán tham lam (Greedy algorithm) 0.00.00000 cece 7 1.3.5 Nhánh và giới hạn (branch and bound) 00 0 cece 8
1.3.6 Cay hau t6 (Suffix Tree) c.ccccccccccsccccesessessesessessvssestsseevseseteeevees 9
1.4 Algorithm compÏ€xIfy c2 221112112 1121511155115 18111 ke nay 10 1.4.I Thuật toán lập trình động 0 2222222 He 10
1.4.2 Thuật toán cây hậu tỐ 5.55 S1 TS rờn 10
Trang 7DANH MUC ki HIEU VA CHU VIET TAT
Trang 8DANH MUC CAC BANG BIEU, HINH VE, DO THI
Trang 9CHUONG I- LONGEST COMMON SUBSEQUENCE
1.1 Introduction
Trong Khoa hoc may tinh, the Longest Common Subsequence (LCS) la nhigém
vụ tìm chuỗi con dài nhất phô biến cho hai hoặc nhiều chuỗi (mảng hoặc chuỗi) Bài toán chuỗi con chung dài nhất là một trong những bài toán khoa học máy tính cô điền,
là cơ sở của các chương trỉnh so sánh dữ liệu như dif£ và có các ứng dụng trong ngôn ngữ học tính toán và tin sinh học Nó cũng được sử dụng rộng rãi bởi các hệ thống
quản lý phiên bản như Git đề điều chỉnh nhiều thay đổi được thực hiện cho một bộ sưu
tập tệp được kiểm soát sửa đổi Một dãy con là một chuỗi có thê được suy ra từ một chuỗi khác bằng cách xóa một số hoặc không có phần tử nào mà không thay đối thứ tự các phan tử còn lại
Ví dụ, hãy xem xét hai chuỗi sau:
Chuỗi 1 : ABCBDAB
Chuỗi 2 : BDCABA
Ở đây, một dãy con của dãy I là "ABD" và một dãy con của dãy 2 là "BDCA" Một dãy con phô biến của hai chuỗi nay la "BD", và nó cũng là dãy con dài nhất chung cho cả hai
Về mặt hình thức, bài toán LCS có thể được định nghĩa như sau: Cho hai hoặc
nhiều dãy X = {xI, x2, xm} và Y = ƒyl, y2, ., yn}, tìm dãy con chung dài nhat Z =
{2l, 22, ., zk} sao cho Z là một dãy con của X và Z cũng là một dãy con của Y Vấn
đề LCS có thể được giải quyết bằng cách sử dụng các thuật toán lập trình động
Trang 101.2 Define the problem mathematically
Vidu |:
Giả sử chúng ta có hai chuỗi X và Y:
X =[A, B, C, B, D, A, B]
Y =[B, D, C, A, B, A]
LCS cua X va Y là [B, C, A, BỊ, là dãy con của cả X và Y
Ví dụ 2:
Giả sử chúng ta có hai chuỗi X và Y:
X= [l, 2, 3, 4, 5, 6]
Y =[L, 3, 5, 7, 9]
LCS cua X va Y là [1, 3, 5], la day con cua ca X va Y
Ví dụ 3:
Giả sử chúng ta có hai chuỗi X và Y:
X= [a, b, c, d]
Y =[a, e, b, d,c]
LCS của X và Y là [a, b, c, đ], là dãy con của cả X va Y
Để giải quyết vấn đề LCS, chúng ta có thê sử dụng quy hoạch động Phương pháp lập trình động liên quan đến việc xây dựng một bảng trong đó mỗi ô (¡, j) chứa độ dài của LCS của các tiền tổ của X và Y cho đến chỉ số ¡ và j, tương ứng Sau đó, chúng
ta có thê sử dụng bảng này đề tự xây dựng LCS
Độ phức tạp về thời gian của giải pháp quy hoạch động là O(mn), trong đó m và
n lần lượt là độ dài của X và Y Tuy nhiên, có nhiều thuật toán hiệu quả hơn có thê giải bai toan LCS trong thoi gian O(m + n) sử dụng độ phức tạp không gian O(mm(m, n)) Một thuật toán như vậy là thuật toán Hirschberg
Trang 111.3 Literature review
Bài toán dãy con chung dài nhất (LCS) trên nhiều dãy là một bài toán cỗ điển
trong khoa học máy tính liên quan đến việc tìm dãy con dài nhất có mặt trong tất cả các
dãy đã cho Dưới đây là một số chiến lược thiết kế thuật toán để giải quyết vẫn đề này: 1.3.1 Lập trình động (Dynamic programing) : Dây là một cách tiếp cận phố biến nhất đề giải quyết vấn đề LCS trên nhiều trình tự Phương pháp lập trình động liên quan đến việc xây dựng một ma trận lưu trữ LCS của tất
cả các tiền tố có thể có của các chuỗi đầu vào Điều này có thể được thực hiện bằng cách sử dụng công thức đệ quy có tính đến độ dài của chuỗi con hiện tại và các ký tự khớp với các chuỗi đầu vào Phương pháp này có mức
độ phức tạp thời gian là O(mn), trong đó có m và n là độ dài của hai chuỗi Thuật toán quy hoạch động cho LCS hoạt động bằng cách xây dựng một
bảng hai chiều có kích thước (m+1) x (n+1), trong đó m và n lần lượt là
độ dài của các chuỗi đầu vào A và B Bảng này lưu trữ độ dài của LCS của tất cả các tiền tố có thể của A và B
Thuật toán quy hoạch động bắt đầu bằng việc khởi tạo hàng đầu tiên và cột đầu tiên của bảng bằng số không, vì LCS của một chuỗi rỗng và bất
kỳ chuỗi khác đều bằng không Sau đó, nó điền vào các mục còn lại của bảng bằng cách sử dụng một quan hệ đệ quy, dựa trên quan sát rằng LCS của A và B có thê được tạo ra bằng cách bao gồm ký tự cuối cùng của A
và không bao gồm ký tự cuối cùng của B, hoặc bao gồm ký tự cuối cùng của B và không bao gồm ký tự cuối cùng của A, hoặc không bao gồm cả hai ký tự cudi cung
1.3.2 Phương pháp đệ quy: Giai bai toan LCS bang phương pháp đệ quy là một trong những cách tiếp cận cô điền nhất để giải quyết bài toán này Phương pháp đệ quy tìm kiếm tất ca các chuỗi con của hai chuỗi đầu vào
và so sánh chúng đề tìm chuỗi con chung dài nhất
Trang 121.3.3 Chia dé tri (Divide and conquer): Mot cach tiép can khac là sử dụng thuật toán chia để trị Điều này liên quan đến việc chia nhỏ bài toán thành
các bài toán con nhỏ hơn và giải quyết từng bài toán con một cách độc lập
Chia đề trị có thể được sử dụng để tìm kiếm LCS của hai chuỗi đầu vào
Thuật toán sẽ chia các chuỗi thành các phần nhỏ hơn, đến khi các phần trở nên đơn giản và có thể giải quyết trực tiếp Sau đó, các kết quả con sẽ được kết hợp lại để tạo ra kết quả cho bài toán ban đầu
Cụ thẻ, thuật toán Chia đề trị trong bài toán LCS sẽ thực hiện các bước sau:
1 Chia các chuỗi đầu vào thành hai phần bằng cách chọn một vị trí tùy ý trong chuỗi đầu tiên Việc chọn vị trí nay co thê dựa trên các tiêu chí như
độ dài chuỗi, độ phức tạp của thuật toán, hoặc các tiêu chí khác
2 Tìm LCS của hai phần được chia nhỏ bằng cách sử dụng một thuật toán khác như Chương trình động (Dynamic Programming) hoặc Hirschberg, Sau đó, kết hợp các kết quả con để tạo ra kết quả cho bài toán ban đầu
Giải pháp cho vấn đề ban đầu sau đó có thê thu được bằng cách kết hợp các giải
pháp cho các vẫn đề con
1.3.4 Thuật toún tham lam (Greedy algorithm): Thuat toan tham lam là
một cách tiếp cận khác có thê được sử dụng đề giải quyết vẫn đề LCS trên nhiều chuỗi Thuật toán tham lam hoạt động bằng cách chọn lặp đi lặp lại
ký tự tiếp theo trong LCS dựa trên tần sô của nó trên tất cả các chuỗi đầu vảo
Cụ thẻ, thuật toán Grecdy trong bài toán LCS sẽ thực hiện các bước sau: Khởi tạo chuỗi LCS rỗng
1 Chọn một ký tự từ chuỗi đầu tiên và kiêm tra xem ký tự đó có xuất hiện trong chuỗi thứ hai hay không
Trang 132 Néu ký tự được chọn xuất hiện trong chuỗi thứ hai, thêm ký tự đó vào chuỗi LCS và tiếp tục tìm kiếm các ký tự tiếp theo
3 Nếu ký tự không xuất hiện trong chuỗi thứ hai, chọn một ký tự khác từ chuỗi đầu tiên và lặp lại bước 2 và 3
4 Lặp lại quá trình cho đến khi tìm được chuỗi LCS hoàn chỉnh
Cách tiếp cận này có thê hiệu quả đối với các chuỗi đầu vào nhất định, nhưng
không phải lúc nào nó cũng tạo ra một giải pháp tối ưu nên trong thực tế phương pháp này thường sử dụng như phương pháp tiền xử lý trước khi các sử dụng các thuật toán khac nhu Dynamic Programing hay Suffix Tree,
13.5 Nhánh và giới hạn (branch and bound): Dây là thuật toán tim kiém
có thê được sử dụng đề tìm giải pháp tối ưu cho vấn đề LCS trên nhiều chuỗi
Trong bài toán LCS, Nhánh và giới hạn có thê được sử dụng dé tim kiém LCS chính xác của hai chuỗi đầu vào Phương pháp này xây dựng một cây trạng thái, trong
đó mỗi nút đại diện cho một phương án tìm kiếm LCS của hai chuỗi đầu vào Các nút con của một nút được tạo ra bằng cách thêm một cặp ký tự mới vào LCS, hoặc không thêm vào Các nút được đánh giá dựa trên độ dài của LCS đã xác định được, va chỉ các nút tiềm năng có thể tìm kiếm được LCS có độ dài lớn hơn nút hiện tại được tiếp tục
xử ly
Kỹ thuật Nhánh và giới hạn trong bài toán LCS sử dụng một số hàm phụ trợ để giới hạn số lượng nút được xử lý, bao gồm:
Hàm giới hạn dưới (Lower Bound Function): Đây là hàm đánh giá ước tính LCS nhỏ nhất có thể tìm kiếm được từ một nút Hàm nảy giúp xác định các nút không thê tìm kiếm được LCS lớn hơn nút hiện tại, và được
sử dụng đề cắt ngắn các nhánh không tiềm năng
Ham gidi han trén (Upper Bound Function): Day la ham danh gia wéc tính LCS lớn nhất có thể tìm kiếm được từ một nút Hàm này giúp đánh
Trang 14gia cac nut tiém nang co thé tim kiếm được LCS lớn hơn nút hiện tại, và được sử dụng để ưu tiên xử lý các nhánh tiềm năng Cách tiếp cận này có thê tôn kém về mặt tính toán đổi với các chuỗi đầu vào lớn, nhưng nó được đám bảo để tìm ra giải pháp tôi ưu
13.6 Cây hậu tổ (Suffix Tree): Đây được cho là phương pháp giải quyết bài toán LCS nhanh nhất cho đến hiện tại
Ý tưởng chính của giải thuật suflix tree là xây dựng một cây có gốc, mỗi nút trên cây đại diện cho một chuỗi hậu tố của chuỗi ban đầu
Với mỗi nút, các cạnh đi từ nút đó đến các nút con đại điện cho các chuỗi hậu tố khác Tại mỗi nút lá, có một chỉ số được gắn kèm, chỉ số này là vị tri đầu tiên của chuỗi hậu tố đó trong chuỗi ban dau
Sử dụng cây hậu tô này, ta có thể tìm tất cả các chuỗi con chung của hai chuỗi trong thời gian tuyến tính Đầu tiên, ta sẽ xây dựng cây hậu tố cho chuỗi A và sau đó tìm kiếm tất cả các chuỗi con của chuỗi B trong cây hậu tô đó Trong khi tìm kiếm, ta
sẽ tạo ra một danh sách các chuỗi con chung và xác định chuỗi con chung dài nhất
Tuy nhiên, xây dựng Sufñx Tree là một quá trình đòi hỏi rất nhiều thời gian và không phải là phương pháp tốt nhất để giải quyết bài toán LCS nếu chỉ cần tìm một lần
Nhìn chung, việc lựa chọn chiến lược thiết kế thuật toán sẽ phụ thuộc vào các chuỗi đầu vào cụ thể đang được xem xét và các tài nguyên tính toán sẵn có đề giải quyết vẫn đề