Professional Documents
Culture Documents
loại bỏ một số phần tử. Một cách hình thức, giả sử cho dãy X = <x1, x2, …, xm>,
dãy Z = <z1, z2, …, zk> được gọi là dãy con của dãy X nếu tìm được dãy các chỉ số
Thuật toán tìm dãy con chung dài nhất có thể mô tả như sau.
Procedure LCS(X,Y);
begin
for i :=1 to m do c[i,0]:=0;
forj: =1 to n do c[0,j]:=0;
for i: =1 to m do
for j: = 1to n do
if xi = yi then
begin
c[i,j]:=c[i-1,j-1]+1;
b[i,j]:=/;
end
else
if c [i-1,j]≥ c[i,j-1] then
begin
c[i,j]:=c[i-1,j];
b[i,j]:=;
end
else
begin
c[i,j]:=c[i,j-1];
b[i,j]:=←;
end;
end;
Trong thủ tục mô tả ở trên ta sử dụng biến b[i, j] để ghi nhận tình huống tối ưu khi
tính giá trị c[i, j]. Sử dụng biến này ta có thể đưa ra dãy con chung dài nhất của hai
dãy X và Y nhờ thủ tục sau đây:
Procedure Print LCS (b,X,i,j);
begin
if (i=0) or (j=0) then return;
if b[i,j]=/ then
begin
print LCS (b,X,i-1,j-1);
print xi; (* Đưa ra phân tử xi *)
end
else
if b[i,j]= then
PrintLCS (b,X,i-1,j)
else
Print LCS (b,X,i,j-1);
end;
Dễ dàng đánh giá được thời gian tính của thuật toán LCS là O(mn).
BÀI TẬP
Viết thuật toán cho bài toán tập độc lập lớn nhất trên cây với độ phức tạp O(n)
1. Tìm trình tự nhân tối ưu để tính tích của dãy ma trận A1x A2 x A3 x A4 x A5’
trong đó kích thước của A1 là 10 x 4, A2 - 4 x 5, A3 – 5 x 20, A4 -20 x 2, và
X5-2 x 50.
2. Xét bài toán sau: Cho dãy gồm n số nguyên dương a 1, a2,…an và số nguyên
dương k. cần tìm dãy con gồm nhiều phần tử nhất của dãy đã xho có tổng
chia hết cho k . Sử dụng phương pháp qui hoạch động thiết kế thuật toán
giải bài oán đặt ra. Đánh giá thời gian tính của thuật toán đề nghị.
3. Xét Bài toán về các đoạn thẳng không giao nhau có trọng số.
Đầu vào: Cho họ các đoạn thẳng mở: C = {(a1, b1), (a2,b2),…,(an,bn)}. Đoạn thẳng
(ai,bi) được gán với trọng số ci , i = 1,2,…n.
Đầu ra: Tập các đoạn không giao nhau có tổng các trọng số là lớn nhất.
Thiết kế thuật toán giải bài toán đặt ra. Phân tích thời gian tính và bộ nhớ của thuật
toán.
4. Phát triển thuật toán đa thức giải bài toán tìm xâu con chung dài nhất của
ba xâuA,B,C;
Input: 3 xâu A,B và C,
Output: Xâu con chung dài nhất S của 3 xâu A,B và C,
5. Phát triển thuật toán đa thức giải bài toán tìm xâu ngắn nhất phủ hai xâu A
và B. Xâu C được gọi là xâu phủ của A nếu A là xâu con của C.
6. Cho cây T với trọng số nguyên trên cạnh. Trọng số có thể là số dương, âm
hay bằng không tuỳ ý. Xây dựng thuật toán thời gian tuyến tính để tìm
đường đi đơn ngắn nhất trên cây T. Nhắc lại là đường đi đơn là đường đi
mà không có đỉnh nào xuất hiện trên nó quá một lần. Độ dài đường đi là
tổng trọng số của các cạnh trên đường đi. Lưu ý là không có hạn chế gì về
hai đỉnh đầu và cuối của đường đi.
7. Xét bài toán thuê xe sau đây. Bạn nhận nhiệm vụ chuyển công văn hoả tốc.
Trên tuyến đường đi từ địa điểm xuất phát đánh số là 1 đến điạ điểm cần
chuyển giấy mời đánh số là n có n-2 địa điểm trung gian được đánh số từ 2
đến n-. Tại điạ điểm i bạn có thể thuê xe ôm để đi đến địa điểm j>i với thời
gian t(i,j) (phút). Giả thiết rằng thời gian đổi xe là bằng 0. Hãy phát triển
thuật toán tìm cách đi bằng xe ôm để đạt đích với thời gian nhanh nhất và
đánh giá độ phức tạp tính toán của thuật toán đề nghị.