Để tính X N , trong đó N là số nguyên dương, có thể sử dụng một trong các thuật toán sau: function power1X,N; else returnX*power1X, N-1 end; function power2X,N; else begin HALF := N/2;
Trang 1http://caohoc.net/Forum/forum_posts.asp?TID=93&PN=1
Thiết kế và phân tích thuật toán
BÀI TẬP 1
1 Chứng minh rằng thuật toán sắp xếp Pigeonhole sắp xếp mảng gồm n số nguyên dương, mỗi số có giá trị không quá 10000, có độ phức tạp tính toán O(n).
procedure Pigeonhole (T[1 n])
(* Sắp xếp các số nguyên trong khoảng từ 1 đến 10000)
array U[1 10000];
for k:= 1 to 10000 do U[k] := 0;
for i := 1 to n do U[T] := U[T] + 1;
i := 0;
for k:= 1 to 10000 do
begin
while U[k] <> 0 do begin
i := i+1;
T := k;
U[k] := U[k]-1;
end;
end;
2 Hỏi phép cộng hay trừ hai số nguyên có độ dài m và n đòi hỏi thời gian tính là bao nhiêu? Mô tả thuật toán tương ứng.
3 Chứng minh rằng việc tính fn sử dụng hàm Fibrec đòi hỏi fn-i+1 lần gọi Fibrec(i) với i=1,2,…,n, và fn-1 lần gọi hàm Fibrec(0):
function Fibrec(n)
Trang 2if n<2 then return n
else return Fibrec(n-1) + Fibrec(n-2)
4 Gọi g(n) là số xâu nhị phân độ dài n không chứa hai số 0 liền nhau Chứng minh rằng g(n) = fn+2.
5 Giả sử f, g: N → R + Chứng minh rằng
a) O(f(n)) = O(g(n)) khi và chỉ chi f(n) ÎΘ(n) khi và chỉ khi Θ(f(n)) = Θ(g(n)).
b) O(f(n)) + O(g(n)) = O(f(n)) + O(g(n))
= O(max(f(n), g(n)) = max (O(f(n), O(g(n))
6 Giả sửt t: N → R + xác định theo công thức đệ quy
t(1) = a,
t(n) = 4 t(én/2ù) + b n, n>2,
trong đó a và b là các hằng số dương Chứng minh bằng quy nạp: t(n) là không giảm.
7 Sắp xếp các hàm sau đây theo thứ tự tốc độ tăng từ thấp đến cao Nếu có hai (hoặc nhiều hơn) hàm có cùng tốc độ tăng, hãy chỉ rõ điều đó (Không cần chứng minh).
8 Xét thuật toán sau
procedure waste(n)
for i := 1 to n do
for j := 1 to i do
writeln(i, j, n)
if n > 0 then
for i := 1 to 4 do
Trang 3waste( n div 2)
Gọi T(n) là số dòng ở đầu ra của lệnh gọi waste(n) Xây dựng công thức đệ quy để tính T(n) Sử dụng Định lý thợ để chỉ ra bậc chính xác của T(n).
9 Để tính X N , trong đó N là số nguyên dương, có thể sử dụng một trong các thuật toán sau:
function power1(X,N);
else returnX*power1(X, N-1) end;
function power2(X,N);
else begin HALF := N/2;
HALFPOWER := power2(X, HALF);
if 2*HAFL = N {N chẵn};
then return (HALFPOWER*HALFPOWER)
else return (HALFPOWER*HALFPOWER*X) {N lẻ}
end;
end;
function power3(X,N);
Trang 4begin if N = 1 then return(X)
else
if 2*HAFL = N {N chẵn }
then return (power3(X,HALF)*power3(X,HAFL))
else return ((power3(X,HALF)*power3(X,HAFL)*X {N lẻ}
end;
end;
Hãy tìm công thức đệ quy cho T1(N), T2(N), T3(N) là thời gian tính trong tình huống xấu nhất của power1, power2, power3, theo thứ tự tương ứng Để đơn giản, được phép giả thiết N là số mũ của 2, nghĩa là N = 2 k , với K nguyên dương nào đó Từ đó đánh giá tốc độ tăng của chúng trong ngôn ngữ
ký hiệu O lớn.
10 Xét hàm trên Pascal
function Recursive(n: integer): longint;
var x, y: integer;
begin
if n <= 1 then
begin
Recursive := 0;
exit;
end;
x := Recursive(n-1);
y := Recursive(n-1);
Recursive := x+y;
end;
Trang 5Ký hiệu T(n) là thời gian tính của việc thực hiện lệnh gọi
z := Recursive(n)
Hãy đưa ra đánh giá của T(n) trong kí hiệu O.
11 Giải công thức đệ quy
t0 = 0, t1 = 1,
tn = 5 tn-1 - 6 tn-2, n ≥ 2.
Viết so sánh bậc của tn trong ngôn ngữ ký hiệu Θ.
12 Giải công thức đệ quy
T(0) = a, T(1) = a,
T(n) = T(n-1) + T(n-2) + c, n ≥ 2.
trong đó a, c là các hằng số dương.
Viết so sánh bậc của Tn trong ngôn ngữ ký hiệu Θ.
13 Giải công thức đệ quy
T(0) = a, T(1) = a,
T(n) = T(n-1) + T(n-2) + cn, n ≥ 2.
trong đó a, c là các hằng số dương.
Viết so sánh bậc của Tn trong ngôn ngữ ký hiệu Θ.
Bài tập chương 5 QUY HOẠCH ĐỘNG
1 Tìm trình tự nhân tối ưu để tính tích của dãy ma trận
A 1 ×A 2 ×A 3 ×A 4 ×A 5 , trong đó kích thước của các ma trận lần lượt là:
Trang 62 Xét bài toán sau: Cho dãy gồm n số nguyên dương a 1 ,
a 2 , , a n 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 đã cho có tổng chia hết cho k Sử dụng phương pháp quy hoạch động thiết kế thuật toán giải bài toá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 = {(a 1 ,b 1 ), , (a n ,b n )} Đoạn thẳng (a i ,b i ) được gán với trọng số c i , 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âu A, B, C:
Input: 3 xâu A, B, 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 tùy ý 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
Trang 7số 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 hỏa tốc Trên tuyến đường đi từ địa điểm xuát phát đánh số là 1 đến địa đ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-1 Tại địa đ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ị.
Ví dụ: Khi n = 5 và thời gian t(i,j) cho trong bảng
T(i,j) 1 2 3 4 Thời gian cần tìm sẽ là 5.
1 0 2 3 7 Cách đi:
2 0 2 4 + Thuê xe ở điểm 1 đến điểm 3 (mất 3 phút),
3 0 2 + Từ 3 tiếp tục thuê xe về đích (mất 2 phút).
Giải bài tập chương 3 THUẬT TOÁN THAM LAM
Bài 1 Xét bài toán
INPUT: tập S = {(xi, yi) | 1 £ i £ n} – các khoảng trên trục số thực OUTPUT: Tập con với các lực lượng lớn nhất S* của S sao cho không
có 2 khoảng nào trong S* là có điểm chung
Xét thuật toán sau:
Lặp lại cho đến khi S là rỗng các thao tác sau:
Trang 81. Chọn khoảng I có điểm chung với một số ít nhất các khoảng khác
2. Bổ sung I vào tập cần tìm S*
3. Loại bỏ mọi khoảng có điểm chung với I
Hãy chứng minh tính đúng đắn của thuật toán hoặc nêu phản ví dụ cho nó
Giải:
Giải thuật này không giải quyết được bài toán đặt ra Hãy quan sát
ví dụ sau:
E A B C D
Rõ ràng, phương án tối ưu là {A, B, C, D} Tuy nhiên, khoảng có ít điểm chung nhất với các khoảng khác là E, và giải thuật đề ra sẽ chọn E đầu tiên, khi đó sẽ phải bỏ qua hai khoảng B và C và sẽ không đạt được phương án tối ưu
Trang 9Bài 2 Xét bài toán tô màu khoảng (Interval Coloring
Problem).
INPUT: Tập S = {(xi,yi) | 1 ≤ i ≤ n} - các khoảng trên trục số thực
Hãy coi rằng mỗi khoảng (xi,yi) tương ứng với một yêu cầu sử dụng phòng học bắt đầu từ thời điểm xi, kết thúc tại yi
OUTPUT: Tìm các phẩn bổ lớp vào phòng sao cho số phòng cần sử dụng là ít nhất Chú ý là mỗi yêu cầu sử dụng phòng cần được thỏa mãn và không có 2 lớp nào sử dụng cùng một phòng tại cùng một thời điểm
(a) Xét thuật toán lặp sau đây: Phân bổ một số nhiều nhất có thể
được các lớp phòng thứ nhất, sau đó phân bổ một số nhiều nhất có thể các lớp vào phòng thứ hai, rồi đến phòng thứ ba…v…v… Hỏi rằng thuật toán vừa nêu có cho lời giải đúng của bài toán tô màu khoảng? Giải thích câu trả lời của bạn
(b) Xét thuật toán sau: Lầm lượt xét các lớp theo thứ tự tăng dần
của thời điểm bắt đầu Giả sử đang xét lớp C, nếu có phòng R đã được sử dụng để xếp một lớp nào đấy và C có thể xếp vào phòng này mà không mâu thuẫn với các lớp đã xếp vào R trước đó thì xếp
C vào R Nếu trái lại xếp C vào phòng mới Hỏi rằng thuật toán vừa nêu có cho lời giải đúng của bài toán tô màu khoảng? Giải thích câu trả lời của bạn
Giải:
(a) Giải thuật này không giải quyết được bài toán tô màu khoảng
Hãy xem xét các khoảng cho dưới đây
Giải pháp tối ưu là đặt A vào một phòng, {B, C, D}vào phòng khác,
và {E, F, G} vào phòng khác nữa, tổng cộng là sử dụng 3 phòng Tuy nhiên, nếu đưa số lượng lớn nhất các lớp vào phòng đầu tiên, kết quả sẽ đặt {B, C, F, G} vào cùng một phòng, còn các lớp A, D,
Trang 10và G mỗi lớp sẽ phải đặt trong một phòng riêng, tổng cộng là 4
phòng
(b) Giải thuật này giải quyết được bài toán tô màu khoảng Lưu ý rằng nếu giải thuật tham lam này sử dụng N phòng để sắp cho cho tập các lớp C, khi đó rõ ràng phải có N lớp muốn họp ở cùng một lúc
Do đó, N phòng là số lượng ít nhất có thể sử dụng để sắp xếp C lớp
3 Xét bài toán đổi tiền sau: Đầu vào là số nguyên L Đầu ra là số
lượng ít nhất các đồng tiền để đổi lượng tiền L Các đồng tiền có mệnh giá là 1, 2, 22, … , 21000 Giả thiết rằng số lượng đồng tiền của mỗi mệnh giá là không hạn chế Xét thuật toán đổi tiền sau đây:
Sử dụng nhiều nhất đồng tiền có mệnh giá cao nhất Ví dụ L = 31: Sử dụng 1 đồng tiền 24; còn lại giá trị 15, lại lấy 1 đồng tiền 23; còn lại giá trị 7, lấy 1 đồng tiền 22; giá trị còn lại 3 cần đổi bởi một đồng 21 và 1 đồng 20
Hỏi thuật toán này có cho lời giải tối ưu của bài toán không? Giải thích câu trả lời của bạn
Trang 11Giải thuật tham lam này là đúng cho bài toán đổi tiền với số lượng ít nhất các đồng tiền khi mà các loại tiền là lũy thừa của số nguyên p nào đó Chúng ta chứng tỏ điều này bằng phản chứng Giả sử rằng
có một số số nguyên D mà giải thuật tham lam đề ra không cho kết quả tối ưu với một tập các đồng tiền D0, D1, …, Dm khi đổi lượng tiền
x Cho i = 0,…, n, gọi gi là số lượng các đồng tiền Di thu được từ giải thuật tham lam, và gọi ti là số lược các đồng tiền Di trong phương án tối ưu Chúng ta có:
Xuất phát từ n, gọi k là chỉ số đầu tiên mà gk ¹ tk Giải thuật tham lam lấy nhiều đống tiền có trị giá Dk hơn cần thiết, vì vậy phải có gk
> tk Hơn nữa, cả hai phương án đều phải có cùng tổng giá trị là x; tổng giá trị của tk-1, tk-2, …, t0 phải bù đắp được giá trị thiếu của ít nhất một Dk Điều này không thể xảy ra Lưu ý rằng:
Điều này nói lên rằng nếu t0D0 + … + tmDm = x, thì một trong các ti
với i = 0,…, k-1 phải lớn hơn D-1 Tuy nhiên, nếu có bất cứ cái nào lớn hơn D-1 của một loại tiền tùy ý (ngoại trừ lớn nhất) thì D của các đồng tiền này có thể được thay bởi một đồng có mệnh giá lớn hơn kế tiếp Điều này mâu thuẫn với giải định của chúng ta rằng các ti là một phương án tối ưu vì nếu ti bất kỳ khác gi, thì phải có ít nhất D đồng tiền có mệnh giá nhỏ hơn trong số các ti
Trang 124 Xét bài toán sau đây: Đầu vào là n đôi giày với các kích thước
S1, S2, … , Sn và n học sinh với dãy yêu cầu về kích thước giày là p1, p2, … , pn Bài toán đặt ra là phân bố giày cho các học sinh sao cho tổng độ chênh lệch là cực tiểu, chính xác hơn nếu học sinh i nhận đôi giày a(i) thì độ lệch trung bình của cách phân giày này là:
(a) Xét thuật toán tham lam sau; Tìm học sinh và đôi giày có độ
chênh lệch nhỏ nhất Phân đôi giày tìm được cho học sinh này Lặp lại với các học sinh và các đôi giày còn lại Hãy chứng minh tính
đúng đắn của thuật toán hoặc nêu phản ví dụ cho thuật toán vừa mô tả
(b) Xét thuật toán tham lam sau: Đôi giày bé nhất cho học sinh có
yêu cầu giày bé nhất, đôi giày bé nhì cho học sinh có yêu cầu giày
bé nhì … Hãy chứng minh tính đúng đắn của thuật toán hoặc nêu phản ví dụ cho thuật toán vừa nêu
Giải:
(a) Thuật toán này là không đúng cho bài toán cực tiểu hóa độ lệch
trung bình giữa học sinh và đôi giầy của họ Cho p1 = 5, p2 = 10, s1
= 9 và s2 = 14 Thuật toán sẽ ghép cặp p1 với s2 và p2 với s1 và độ lệch trung bình: ½(1+9) = 5 Trong khi đó nếu ghép cặp p1 với s1 và
p2 với s2 thì độ lệch trung bình là ½(4+4) = 4
(b) Giải thuật là đúng cho bài toán cực tiểu hóa độ lệch trung bình giữa kích thước yêu cầu của học sinh với kích thước giầy Ta sẽ
chứng minh bằng phản chứng Giả sử học sinh và các đôi giày được đánh số theo kích thước tăng dần Nếu thuật toán tham lam đã cho
là không đúng, thì phải có p1,…, pn s1,…, sn mà thuật toán không cho lời giải tối ưu Giả sử
Trang 13là phương án tối ưu giống nhất với G = {(p1,s1),…,(pn, sn)} là đầu ra của thuật toán tham lam Bắt đầu với p1, so sánh T và G Giả sử pi là người đầu tiên bị phân giày trong G khác trong T Giả sử sj thuộc cặp được gán với pi trong T Tạo giải pháp T’ bằng cách đổi giày được gán của pi và pj Theo thuật toán tham lam thì si £ sj Tổng T’ được cho bởi:
Có 6 trường hợp cần quan tâm Trong mỗi trường hợp chúng ta cần chỉ ra rằng:
Trường hợp 1: pi £ pj £ si £ sj
Trường hợp 2: pi £ si £ pj £ sj
Trường hợp 3: pi £ si £ sj £ pj
Trường hợp 4: si £ sj £ pi £ pj
Trường hợp 5: si £ pi £ sj £ pj
Trường hợp 6: si £ pi £ pj £ sj
Vì vậy cost(T’) £ cost(T), mà T là phương án tối ưu vì vật T’ cũng phải là phương án tối ưu và T’ giống G hơn T (mâu thuẫn)
Chương 4 CHIA ĐỂ TRỊ Bài 1 Thiết kế thuật toán nhân 2 số nguyên dương, sử dụng thuật toán chia để trị, trong đó mỗi số nguyên
dương được chia làm 3 phần, và tích của 2 số đó sẽ tìm được sau 5 phép nhân số này với độ dài xấp xỉ n/3 Phân tích độ phức tạp tính toán trong thuật toán thu được.
Giải:
Phân tích độ phức tạp của thuật toán thu được:
Thời gian thực thi thuật toán 5 phép nhân đối với các số có n/3 chữ số có quan hệ truy toán như sau:
T(n) = 5T(n/3) + G(n)
trong đó, 5T(n/3) là thời gian để tính 5 phép nhân đệ qui và G(n) Θ(n) là thời gian cần thiết để thực hiện các phép công, dịch chuyển và nâng lên Áp dụng trường hợp 1 của định lý thợ, ta có T(n) Θ(n log ), và log = 1.465
Do vậy, thuật toán này tốt hơn thuật toán hai phép nhân.
Trang 14Chương 5 QUY HOẠCH ĐỘNG Bài 1 Tìm trình tự nhân tối ưu để tính tích của dãy ma trận A1 ×A 2 ×A 3 ×A 4 ×A 5 , trong đó kích thước của các ma trận lần lượt là:
Giải:
Bảng giá trị m ị được cho trong hình vẽ dưới đây:
1 0 200 1200 320 1320
Tại mỗi bước, giá trị h ij tìm được là:
M[1][5] h15 = 4 M[1][4] h14 =1 M[2][4] h24 =2
Do vậy, trình tự nhân tối ưu là: (A1(A2(A3(A4)))A5
Trang 15Bài 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âu A, B, C:
Input: 3 xâu A, B, C.
Output: Xâu con chung dài nhất S của 3 xâu A, B và C.
Giải:
Lời giải cho bài toán tìm xâu con chung dài nhất của ba xâu kí tự về cơ bản cũng giống như lời giải trong trường hợp 2 xâu Bằng cách xem T(I,j,k) là một mảng đầu vào và cập nhật bảng một cách phù hợp, chúng ta có thểcó
được giải thuật có thời gian đa thức là O(n 3 ) như sau:
For i=0 to m do T(i,0,0)=0
For j=0 to n do T(0,j,0)=0
For k=0 to o do T(0,0,k)=0
For i=1 to m do
For j= 1 to n do
For k= 1 to o do
if a(i) = b(j) = c(k) then T(i,j,k)=T(i-1,j-1,k-1) + 1
else T(i,j,k)= MAX( T(i, j-1, k), T(i-1, j, k), T(I, j, k-1))
Trang 16Bài 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.
Giải:
Chúng ta đưa ra giải thuật tìm xâu ngắn nhất phủ hai xâu A và B:
o Đặt A = a 1…am và B = b 1…bn
o Gọi M[i,j] là độ dài của xâu ngắn nhất phủ hai xâu a 1…ai và b 1…bj , trong đó 1≤i≤m, 1≤j≤n.
o Chú ý rằng kí tự sau cùng trong xâu ngắn nhất phủ hai xâu a 1…ai và b 1…bj có thể là a i hoặc b j Nếu kí
tự sau cùng là a i thì những kí tự trước đó là kết quả cho bài toán toán con của a 1,…,ai-1 và b1…bj Nếu
kí tự sau cùng là b j thì những kí tự trước đó là kết quả cho bài toán con của a 1,…,ai và b1…bj-1 Do
vậy, có M(i, j) =
Việc cập nhật bảng có thể nhúng vào hai vòng lặp lồng nhau, vòng thứ 1 chạy từ i = 1 đến m và vòng
vòng thứ 2 chạy từ j = 1 to n Từ đó có giải thuật với thời gian là Θ(n 2) Chú ý là xâu hiện thời có thể tính được bằng cách lấy các giá trị lưu giữ trong mảng M(m,n) Giải thuật như sau:
for i=1 to m do for j=1 to n do
if a i =b j then
M[i,j] = M[i-1,j-1] + 1
else