on tap.lt thuat giai

26
Bài Tập Độ Phức Tạp Thuật Toán [email protected] Bài 1: Viết một thuật toán (thủ tục) để tính giá trị của f n trong hệ thức hồi f n = f n-1 + f n-2 , n 2, f 0 = 1, f 1 = 1 . Đánh giá độ phức tạp về thời gian của thuật toán vừa viết. Có thuật toán khác hiệu quả hơn không?. Giải : TONG_TRUYHOI(F, n) 1. for i 0 to n 2. do if i < 2 3. then F[0] 1 4. F[1] 1 5. else F[n] F[n-1] + F[n-2] 6. return F Gọi α, β và γ lần lượt là thời gian thực hiện của phép gán, phép so sánh và phép trả về của thuật toán. Khi đó, có n+1 phép so sánh ở dòng 2, do đó tương ứng có n+1 phép gán ở các dòng lệnh 3, 4, 5; cuối cùng là một phép trả về ở dòng 6. Suy ra, thời gian để thực thi của thuật giải này là: T(n) = (n+1)α + (n+1)β + γ = O(n) Bài 2: Viết thuật toán tính tích của hai ma trận vuông cấp n và đánh giá độ phức tạp về thời gian của thuật toán này. Giải: Tích của hai ma trận vuông A B cấp n với A có chiều là n n (“ma trận n hàng n cột”) B có chiều là n n là một ma trận C có chiều là n n MATRIX-MULTIPLY(A, B, n) 1. for i 1 to n 2. do for j 1 to n 3. do C[i, j] 0 4. for k 1 to n 5. do C[i, j] C[i, j] + A[i, k]B[k, j] 6. return C

Upload: storiescat

Post on 05-Dec-2014

23 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: On Tap.lt Thuat Giai

Bagravei Tập Độ Phức Tạp Thuật Toaacuten

Haidt3fptcomvnBagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng

GiảiTONG_TRUYHOI(F n)1 for i 0 to n 2 do if i lt 2 3 then F[0] 14 F[1] 15 else F[n] F[n-1] + F[n-2]6 return F

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)

Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey

GiảiTiacutech của hai ma trận vuocircng A vagrave B cấp n với

A coacute chiều lagrave n n (ldquoma trận n hagraveng n cộtrdquo)B coacute chiều lagrave n n

lagrave một ma trận C coacute chiều lagrave n n

MATRIX-MULTIPLY(A B n)1 for i 1 to n 2 do for j 1 to n 3 do C[i j] 04 for k 1 to n5 do C[i j] C[i j] + A[i k]B[k j]6 return C

Gọi α vagrave γ theo thứ tự lagrave thời gian thực hiện của pheacutep gaacuten vagrave pheacutep trả về của thuật toaacuten Ta coacute n2 pheacutep gaacuten ở dograveng 3 n3 pheacutep gaacuten ở dograveng lệnh 5 vagrave một lệnh trả về ở dograveng lệnh 6 Do đoacute tổng thời gian thực thi của thuật giải lagrave T(n) = n2α + n3α + γ = O(n3)

Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey

GiảiTiacutech của hai ma trận A vagrave B với

A coacute chiều lagrave p q (ldquoma trận p hagraveng q cộtrdquo)B coacute chiều lagrave q r

lagrave một ma trận C coacute chiều lagrave p r

MATRIX-MULTIPLY(A B)1 if columns[A] rows[B]2 then error ldquocaacutec chiều khocircng tương thiacutechrdquo3 else for i 1 to rows[A] 4 do for j 1 to columns[B] 5 do C[i j] 06 for k 1 to columns[A]7 do C[i j] C[i j] + A[i k]B[k j]8 return C

Ta coacute thể giải như bagravei 2 vagrave cụ thể lagrave thời gian để tiacutenh C tỉ lệ với số pheacutep nhacircn vocirc hướng thực thi trong dograveng 7 tức lagrave p q r

Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp

GiảiBINARY_SEARCH(A n x)1 left 1 2 right n3 while left right4 do mid (left + right)25 if x = A[mid]6 then return mid7 else if x lt A[mid]8 then right mid ndash 1 9 else left mid + 1 10return NIL

Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey

Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacuteGiảiFACTORIAL(n)1 if n = 0 or n = 12 then return 13 else if n gt 14 then return nFACTORIAL(n-1)

Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute

Đặt c = O(1) Ta coacuteT(n) = T(n-1) + c

= (T(n-2) + c) + c = T(n-2) + 2c = (T(n-3) + c) + 2c = T(n-3) + 3c

helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc

Suy ra thời gian chạy của thuật giải lagrave O(n)

Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave NộiGiải

Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian

HANOI_TOWER(A B C n)1 if n = 12 then MOVE(A B 1)3 else HANOI_TOWER(A C B n-1)4 MOVE(A B 1)5 HANOI_TOWER(C B A n-1)

Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute

Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1

= 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1 helliphelliphelliphelliphelliphelliphelliphelliphellip

= 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1

Vậy độ phức tạp của thuật giải lagrave O(2n)

Bagravei Tập Heapsort

Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h

GiảiVới h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy

Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22 Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave

Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1 Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute

mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h

h=2

Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgnHướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1) Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn

GiảiGọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao hKhi đoacute m n M 2h n 2h+1-1

Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12 GiảiBiểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]

Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap

Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12

GiảiGọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]

Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap

GiảiMIN_HEAPIFY(A i)1 l left(i)2 r right(i)3 if l HEAP_SIZE[A] and A[l] lt A[i]4 then smallest l5 else smallest i

6 if r HEAP_SIZE[A] and A[r] lt smallest7 then smallest r8 if smallest i9 then exchange A[i] A[smallest]10 MIN_HEAPIFY(A smallest)

Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9 Giải

Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4

GiảiHEAPSORT(A)1 BUILD_MAX_HEAP(A)2 for i length[A] downto 2

3 do exchange A[1] A[i]4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1 5 MAX_HEAPIFY(A 1)

Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i

GiảiTừ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )

Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an

GiảiMAX_ELEMENT(A)1 BUILD_MAX_HEAP(A)2 return A[1]

Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)

Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap GiảiThủ tục HEAP-MAXIMUM thực thi trả về giaacute trị MAXIMUM với chi phiacute Θ(1)

HEAP-MAXIMUM(A)1 return A[1]

Thủ tục HEAP-EXTRACT-MAX thi hagravenh thao taacutec EXTRACT-MAX Noacute giống với phần thacircn của vograveng lặp for từ dograveng 3 đến dograveng 5 trong giải thuật HEAPSORT

HEAP-EXTRACT-MAX(A)1 if heap-size[A] lt 12 then error heap underflow3 max larr A[1]4 A[1] larr A[heap-size[A]]5 heap-size[A] larr heap-size[A] - 16 MAX-HEAPIFY(A 1)7 return max

Thời gian chạy của HEAP-EXTRACT-MAX lagrave O(lg n) vigrave noacute thực thi chỉ một số lượng thao taacutec khocircng đổi ở phần trecircn của O(lg n) thời gian chạy cho MAX-HEAPIFY

HEAP-INCREASE-KEY(A i key)1 if key lt A[i]2 then error new key is smaller than current key3 A[i] larr key4 while i gt 1 and A[PARENT(i)] lt A[i]5 do exchange A[i] harr A[PARENT(i)]6 i larr PARENT(i)

Thời gian chạy của HEAP-INCREASE-KEY trecircn một heap n phần tử lagrave O(lg n)

MAX-HEAP-INSERT(A key)1 heap-size[A] larr heap-size[A] + 12 A[heap-size[A]] larr -infin3 HEAP-INCREASE-KEY(A heap-size[A] key)

Thời gian chạy của MAX-HEAP-INSERT trecircn một heap n phần tử lagrave O(lg n)Toacutem lại một heap coacute thể hỗ trợ bất cứ thao taacutec nagraveo của hagraveng đợi ưu tiecircn trecircn một tập kiacutech thước n trong O(lg n) thời gian

Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey

GiảiXeacutet node coacute chỉ số i = n2+1Giả sử node i coacute con traacutei lagrave lKhi đoacute l = 2i = 2(n2+1)Magrave n2-1 lt n2 n2Suy ra l gt 2((n2 ndash 1) + 1)Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZEDo vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phảiSuy ra node coacute chỉ số n2+1 lagrave một node laacuteChứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n

Bagravei Tập Quicksort

Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6

GiảiPARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 2: On Tap.lt Thuat Giai

lagrave một ma trận C coacute chiều lagrave p r

MATRIX-MULTIPLY(A B)1 if columns[A] rows[B]2 then error ldquocaacutec chiều khocircng tương thiacutechrdquo3 else for i 1 to rows[A] 4 do for j 1 to columns[B] 5 do C[i j] 06 for k 1 to columns[A]7 do C[i j] C[i j] + A[i k]B[k j]8 return C

Ta coacute thể giải như bagravei 2 vagrave cụ thể lagrave thời gian để tiacutenh C tỉ lệ với số pheacutep nhacircn vocirc hướng thực thi trong dograveng 7 tức lagrave p q r

Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp

GiảiBINARY_SEARCH(A n x)1 left 1 2 right n3 while left right4 do mid (left + right)25 if x = A[mid]6 then return mid7 else if x lt A[mid]8 then right mid ndash 1 9 else left mid + 1 10return NIL

Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey

Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacuteGiảiFACTORIAL(n)1 if n = 0 or n = 12 then return 13 else if n gt 14 then return nFACTORIAL(n-1)

Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute

Đặt c = O(1) Ta coacuteT(n) = T(n-1) + c

= (T(n-2) + c) + c = T(n-2) + 2c = (T(n-3) + c) + 2c = T(n-3) + 3c

helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc

Suy ra thời gian chạy của thuật giải lagrave O(n)

Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave NộiGiải

Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian

HANOI_TOWER(A B C n)1 if n = 12 then MOVE(A B 1)3 else HANOI_TOWER(A C B n-1)4 MOVE(A B 1)5 HANOI_TOWER(C B A n-1)

Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute

Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1

= 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1 helliphelliphelliphelliphelliphelliphelliphelliphellip

= 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1

Vậy độ phức tạp của thuật giải lagrave O(2n)

Bagravei Tập Heapsort

Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h

GiảiVới h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy

Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22 Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave

Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1 Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute

mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h

h=2

Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgnHướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1) Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn

GiảiGọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao hKhi đoacute m n M 2h n 2h+1-1

Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12 GiảiBiểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]

Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap

Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12

GiảiGọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]

Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap

GiảiMIN_HEAPIFY(A i)1 l left(i)2 r right(i)3 if l HEAP_SIZE[A] and A[l] lt A[i]4 then smallest l5 else smallest i

6 if r HEAP_SIZE[A] and A[r] lt smallest7 then smallest r8 if smallest i9 then exchange A[i] A[smallest]10 MIN_HEAPIFY(A smallest)

Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9 Giải

Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4

GiảiHEAPSORT(A)1 BUILD_MAX_HEAP(A)2 for i length[A] downto 2

3 do exchange A[1] A[i]4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1 5 MAX_HEAPIFY(A 1)

Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i

GiảiTừ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )

Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an

GiảiMAX_ELEMENT(A)1 BUILD_MAX_HEAP(A)2 return A[1]

Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)

Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap GiảiThủ tục HEAP-MAXIMUM thực thi trả về giaacute trị MAXIMUM với chi phiacute Θ(1)

HEAP-MAXIMUM(A)1 return A[1]

Thủ tục HEAP-EXTRACT-MAX thi hagravenh thao taacutec EXTRACT-MAX Noacute giống với phần thacircn của vograveng lặp for từ dograveng 3 đến dograveng 5 trong giải thuật HEAPSORT

HEAP-EXTRACT-MAX(A)1 if heap-size[A] lt 12 then error heap underflow3 max larr A[1]4 A[1] larr A[heap-size[A]]5 heap-size[A] larr heap-size[A] - 16 MAX-HEAPIFY(A 1)7 return max

Thời gian chạy của HEAP-EXTRACT-MAX lagrave O(lg n) vigrave noacute thực thi chỉ một số lượng thao taacutec khocircng đổi ở phần trecircn của O(lg n) thời gian chạy cho MAX-HEAPIFY

HEAP-INCREASE-KEY(A i key)1 if key lt A[i]2 then error new key is smaller than current key3 A[i] larr key4 while i gt 1 and A[PARENT(i)] lt A[i]5 do exchange A[i] harr A[PARENT(i)]6 i larr PARENT(i)

Thời gian chạy của HEAP-INCREASE-KEY trecircn một heap n phần tử lagrave O(lg n)

MAX-HEAP-INSERT(A key)1 heap-size[A] larr heap-size[A] + 12 A[heap-size[A]] larr -infin3 HEAP-INCREASE-KEY(A heap-size[A] key)

Thời gian chạy của MAX-HEAP-INSERT trecircn một heap n phần tử lagrave O(lg n)Toacutem lại một heap coacute thể hỗ trợ bất cứ thao taacutec nagraveo của hagraveng đợi ưu tiecircn trecircn một tập kiacutech thước n trong O(lg n) thời gian

Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey

GiảiXeacutet node coacute chỉ số i = n2+1Giả sử node i coacute con traacutei lagrave lKhi đoacute l = 2i = 2(n2+1)Magrave n2-1 lt n2 n2Suy ra l gt 2((n2 ndash 1) + 1)Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZEDo vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phảiSuy ra node coacute chỉ số n2+1 lagrave một node laacuteChứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n

Bagravei Tập Quicksort

Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6

GiảiPARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 3: On Tap.lt Thuat Giai

= (T(n-2) + c) + c = T(n-2) + 2c = (T(n-3) + c) + 2c = T(n-3) + 3c

helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc

Suy ra thời gian chạy của thuật giải lagrave O(n)

Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave NộiGiải

Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian

HANOI_TOWER(A B C n)1 if n = 12 then MOVE(A B 1)3 else HANOI_TOWER(A C B n-1)4 MOVE(A B 1)5 HANOI_TOWER(C B A n-1)

Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute

Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1

= 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1 helliphelliphelliphelliphelliphelliphelliphelliphellip

= 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1

Vậy độ phức tạp của thuật giải lagrave O(2n)

Bagravei Tập Heapsort

Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h

GiảiVới h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy

Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22 Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave

Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1 Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute

mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h

h=2

Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgnHướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1) Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn

GiảiGọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao hKhi đoacute m n M 2h n 2h+1-1

Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12 GiảiBiểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]

Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap

Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12

GiảiGọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]

Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap

GiảiMIN_HEAPIFY(A i)1 l left(i)2 r right(i)3 if l HEAP_SIZE[A] and A[l] lt A[i]4 then smallest l5 else smallest i

6 if r HEAP_SIZE[A] and A[r] lt smallest7 then smallest r8 if smallest i9 then exchange A[i] A[smallest]10 MIN_HEAPIFY(A smallest)

Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9 Giải

Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4

GiảiHEAPSORT(A)1 BUILD_MAX_HEAP(A)2 for i length[A] downto 2

3 do exchange A[1] A[i]4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1 5 MAX_HEAPIFY(A 1)

Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i

GiảiTừ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )

Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an

GiảiMAX_ELEMENT(A)1 BUILD_MAX_HEAP(A)2 return A[1]

Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)

Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap GiảiThủ tục HEAP-MAXIMUM thực thi trả về giaacute trị MAXIMUM với chi phiacute Θ(1)

HEAP-MAXIMUM(A)1 return A[1]

Thủ tục HEAP-EXTRACT-MAX thi hagravenh thao taacutec EXTRACT-MAX Noacute giống với phần thacircn của vograveng lặp for từ dograveng 3 đến dograveng 5 trong giải thuật HEAPSORT

HEAP-EXTRACT-MAX(A)1 if heap-size[A] lt 12 then error heap underflow3 max larr A[1]4 A[1] larr A[heap-size[A]]5 heap-size[A] larr heap-size[A] - 16 MAX-HEAPIFY(A 1)7 return max

Thời gian chạy của HEAP-EXTRACT-MAX lagrave O(lg n) vigrave noacute thực thi chỉ một số lượng thao taacutec khocircng đổi ở phần trecircn của O(lg n) thời gian chạy cho MAX-HEAPIFY

HEAP-INCREASE-KEY(A i key)1 if key lt A[i]2 then error new key is smaller than current key3 A[i] larr key4 while i gt 1 and A[PARENT(i)] lt A[i]5 do exchange A[i] harr A[PARENT(i)]6 i larr PARENT(i)

Thời gian chạy của HEAP-INCREASE-KEY trecircn một heap n phần tử lagrave O(lg n)

MAX-HEAP-INSERT(A key)1 heap-size[A] larr heap-size[A] + 12 A[heap-size[A]] larr -infin3 HEAP-INCREASE-KEY(A heap-size[A] key)

Thời gian chạy của MAX-HEAP-INSERT trecircn một heap n phần tử lagrave O(lg n)Toacutem lại một heap coacute thể hỗ trợ bất cứ thao taacutec nagraveo của hagraveng đợi ưu tiecircn trecircn một tập kiacutech thước n trong O(lg n) thời gian

Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey

GiảiXeacutet node coacute chỉ số i = n2+1Giả sử node i coacute con traacutei lagrave lKhi đoacute l = 2i = 2(n2+1)Magrave n2-1 lt n2 n2Suy ra l gt 2((n2 ndash 1) + 1)Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZEDo vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phảiSuy ra node coacute chỉ số n2+1 lagrave một node laacuteChứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n

Bagravei Tập Quicksort

Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6

GiảiPARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 4: On Tap.lt Thuat Giai

Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgnHướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1) Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn

GiảiGọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao hKhi đoacute m n M 2h n 2h+1-1

Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12 GiảiBiểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]

Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap

Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12

GiảiGọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]

Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap

GiảiMIN_HEAPIFY(A i)1 l left(i)2 r right(i)3 if l HEAP_SIZE[A] and A[l] lt A[i]4 then smallest l5 else smallest i

6 if r HEAP_SIZE[A] and A[r] lt smallest7 then smallest r8 if smallest i9 then exchange A[i] A[smallest]10 MIN_HEAPIFY(A smallest)

Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9 Giải

Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4

GiảiHEAPSORT(A)1 BUILD_MAX_HEAP(A)2 for i length[A] downto 2

3 do exchange A[1] A[i]4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1 5 MAX_HEAPIFY(A 1)

Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i

GiảiTừ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )

Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an

GiảiMAX_ELEMENT(A)1 BUILD_MAX_HEAP(A)2 return A[1]

Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)

Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap GiảiThủ tục HEAP-MAXIMUM thực thi trả về giaacute trị MAXIMUM với chi phiacute Θ(1)

HEAP-MAXIMUM(A)1 return A[1]

Thủ tục HEAP-EXTRACT-MAX thi hagravenh thao taacutec EXTRACT-MAX Noacute giống với phần thacircn của vograveng lặp for từ dograveng 3 đến dograveng 5 trong giải thuật HEAPSORT

HEAP-EXTRACT-MAX(A)1 if heap-size[A] lt 12 then error heap underflow3 max larr A[1]4 A[1] larr A[heap-size[A]]5 heap-size[A] larr heap-size[A] - 16 MAX-HEAPIFY(A 1)7 return max

Thời gian chạy của HEAP-EXTRACT-MAX lagrave O(lg n) vigrave noacute thực thi chỉ một số lượng thao taacutec khocircng đổi ở phần trecircn của O(lg n) thời gian chạy cho MAX-HEAPIFY

HEAP-INCREASE-KEY(A i key)1 if key lt A[i]2 then error new key is smaller than current key3 A[i] larr key4 while i gt 1 and A[PARENT(i)] lt A[i]5 do exchange A[i] harr A[PARENT(i)]6 i larr PARENT(i)

Thời gian chạy của HEAP-INCREASE-KEY trecircn một heap n phần tử lagrave O(lg n)

MAX-HEAP-INSERT(A key)1 heap-size[A] larr heap-size[A] + 12 A[heap-size[A]] larr -infin3 HEAP-INCREASE-KEY(A heap-size[A] key)

Thời gian chạy của MAX-HEAP-INSERT trecircn một heap n phần tử lagrave O(lg n)Toacutem lại một heap coacute thể hỗ trợ bất cứ thao taacutec nagraveo của hagraveng đợi ưu tiecircn trecircn một tập kiacutech thước n trong O(lg n) thời gian

Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey

GiảiXeacutet node coacute chỉ số i = n2+1Giả sử node i coacute con traacutei lagrave lKhi đoacute l = 2i = 2(n2+1)Magrave n2-1 lt n2 n2Suy ra l gt 2((n2 ndash 1) + 1)Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZEDo vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phảiSuy ra node coacute chỉ số n2+1 lagrave một node laacuteChứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n

Bagravei Tập Quicksort

Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6

GiảiPARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 5: On Tap.lt Thuat Giai

6 if r HEAP_SIZE[A] and A[r] lt smallest7 then smallest r8 if smallest i9 then exchange A[i] A[smallest]10 MIN_HEAPIFY(A smallest)

Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9 Giải

Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4

GiảiHEAPSORT(A)1 BUILD_MAX_HEAP(A)2 for i length[A] downto 2

3 do exchange A[1] A[i]4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1 5 MAX_HEAPIFY(A 1)

Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i

GiảiTừ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )

Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an

GiảiMAX_ELEMENT(A)1 BUILD_MAX_HEAP(A)2 return A[1]

Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)

Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap GiảiThủ tục HEAP-MAXIMUM thực thi trả về giaacute trị MAXIMUM với chi phiacute Θ(1)

HEAP-MAXIMUM(A)1 return A[1]

Thủ tục HEAP-EXTRACT-MAX thi hagravenh thao taacutec EXTRACT-MAX Noacute giống với phần thacircn của vograveng lặp for từ dograveng 3 đến dograveng 5 trong giải thuật HEAPSORT

HEAP-EXTRACT-MAX(A)1 if heap-size[A] lt 12 then error heap underflow3 max larr A[1]4 A[1] larr A[heap-size[A]]5 heap-size[A] larr heap-size[A] - 16 MAX-HEAPIFY(A 1)7 return max

Thời gian chạy của HEAP-EXTRACT-MAX lagrave O(lg n) vigrave noacute thực thi chỉ một số lượng thao taacutec khocircng đổi ở phần trecircn của O(lg n) thời gian chạy cho MAX-HEAPIFY

HEAP-INCREASE-KEY(A i key)1 if key lt A[i]2 then error new key is smaller than current key3 A[i] larr key4 while i gt 1 and A[PARENT(i)] lt A[i]5 do exchange A[i] harr A[PARENT(i)]6 i larr PARENT(i)

Thời gian chạy của HEAP-INCREASE-KEY trecircn một heap n phần tử lagrave O(lg n)

MAX-HEAP-INSERT(A key)1 heap-size[A] larr heap-size[A] + 12 A[heap-size[A]] larr -infin3 HEAP-INCREASE-KEY(A heap-size[A] key)

Thời gian chạy của MAX-HEAP-INSERT trecircn một heap n phần tử lagrave O(lg n)Toacutem lại một heap coacute thể hỗ trợ bất cứ thao taacutec nagraveo của hagraveng đợi ưu tiecircn trecircn một tập kiacutech thước n trong O(lg n) thời gian

Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey

GiảiXeacutet node coacute chỉ số i = n2+1Giả sử node i coacute con traacutei lagrave lKhi đoacute l = 2i = 2(n2+1)Magrave n2-1 lt n2 n2Suy ra l gt 2((n2 ndash 1) + 1)Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZEDo vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phảiSuy ra node coacute chỉ số n2+1 lagrave một node laacuteChứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n

Bagravei Tập Quicksort

Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6

GiảiPARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 6: On Tap.lt Thuat Giai

3 do exchange A[1] A[i]4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1 5 MAX_HEAPIFY(A 1)

Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i

GiảiTừ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )

Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an

GiảiMAX_ELEMENT(A)1 BUILD_MAX_HEAP(A)2 return A[1]

Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)

Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap GiảiThủ tục HEAP-MAXIMUM thực thi trả về giaacute trị MAXIMUM với chi phiacute Θ(1)

HEAP-MAXIMUM(A)1 return A[1]

Thủ tục HEAP-EXTRACT-MAX thi hagravenh thao taacutec EXTRACT-MAX Noacute giống với phần thacircn của vograveng lặp for từ dograveng 3 đến dograveng 5 trong giải thuật HEAPSORT

HEAP-EXTRACT-MAX(A)1 if heap-size[A] lt 12 then error heap underflow3 max larr A[1]4 A[1] larr A[heap-size[A]]5 heap-size[A] larr heap-size[A] - 16 MAX-HEAPIFY(A 1)7 return max

Thời gian chạy của HEAP-EXTRACT-MAX lagrave O(lg n) vigrave noacute thực thi chỉ một số lượng thao taacutec khocircng đổi ở phần trecircn của O(lg n) thời gian chạy cho MAX-HEAPIFY

HEAP-INCREASE-KEY(A i key)1 if key lt A[i]2 then error new key is smaller than current key3 A[i] larr key4 while i gt 1 and A[PARENT(i)] lt A[i]5 do exchange A[i] harr A[PARENT(i)]6 i larr PARENT(i)

Thời gian chạy của HEAP-INCREASE-KEY trecircn một heap n phần tử lagrave O(lg n)

MAX-HEAP-INSERT(A key)1 heap-size[A] larr heap-size[A] + 12 A[heap-size[A]] larr -infin3 HEAP-INCREASE-KEY(A heap-size[A] key)

Thời gian chạy của MAX-HEAP-INSERT trecircn một heap n phần tử lagrave O(lg n)Toacutem lại một heap coacute thể hỗ trợ bất cứ thao taacutec nagraveo của hagraveng đợi ưu tiecircn trecircn một tập kiacutech thước n trong O(lg n) thời gian

Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey

GiảiXeacutet node coacute chỉ số i = n2+1Giả sử node i coacute con traacutei lagrave lKhi đoacute l = 2i = 2(n2+1)Magrave n2-1 lt n2 n2Suy ra l gt 2((n2 ndash 1) + 1)Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZEDo vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phảiSuy ra node coacute chỉ số n2+1 lagrave một node laacuteChứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n

Bagravei Tập Quicksort

Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6

GiảiPARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 7: On Tap.lt Thuat Giai

Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i

GiảiTừ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )

Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an

GiảiMAX_ELEMENT(A)1 BUILD_MAX_HEAP(A)2 return A[1]

Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)

Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap GiảiThủ tục HEAP-MAXIMUM thực thi trả về giaacute trị MAXIMUM với chi phiacute Θ(1)

HEAP-MAXIMUM(A)1 return A[1]

Thủ tục HEAP-EXTRACT-MAX thi hagravenh thao taacutec EXTRACT-MAX Noacute giống với phần thacircn của vograveng lặp for từ dograveng 3 đến dograveng 5 trong giải thuật HEAPSORT

HEAP-EXTRACT-MAX(A)1 if heap-size[A] lt 12 then error heap underflow3 max larr A[1]4 A[1] larr A[heap-size[A]]5 heap-size[A] larr heap-size[A] - 16 MAX-HEAPIFY(A 1)7 return max

Thời gian chạy của HEAP-EXTRACT-MAX lagrave O(lg n) vigrave noacute thực thi chỉ một số lượng thao taacutec khocircng đổi ở phần trecircn của O(lg n) thời gian chạy cho MAX-HEAPIFY

HEAP-INCREASE-KEY(A i key)1 if key lt A[i]2 then error new key is smaller than current key3 A[i] larr key4 while i gt 1 and A[PARENT(i)] lt A[i]5 do exchange A[i] harr A[PARENT(i)]6 i larr PARENT(i)

Thời gian chạy của HEAP-INCREASE-KEY trecircn một heap n phần tử lagrave O(lg n)

MAX-HEAP-INSERT(A key)1 heap-size[A] larr heap-size[A] + 12 A[heap-size[A]] larr -infin3 HEAP-INCREASE-KEY(A heap-size[A] key)

Thời gian chạy của MAX-HEAP-INSERT trecircn một heap n phần tử lagrave O(lg n)Toacutem lại một heap coacute thể hỗ trợ bất cứ thao taacutec nagraveo của hagraveng đợi ưu tiecircn trecircn một tập kiacutech thước n trong O(lg n) thời gian

Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey

GiảiXeacutet node coacute chỉ số i = n2+1Giả sử node i coacute con traacutei lagrave lKhi đoacute l = 2i = 2(n2+1)Magrave n2-1 lt n2 n2Suy ra l gt 2((n2 ndash 1) + 1)Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZEDo vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phảiSuy ra node coacute chỉ số n2+1 lagrave một node laacuteChứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n

Bagravei Tập Quicksort

Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6

GiảiPARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 8: On Tap.lt Thuat Giai

HEAP-INCREASE-KEY(A i key)1 if key lt A[i]2 then error new key is smaller than current key3 A[i] larr key4 while i gt 1 and A[PARENT(i)] lt A[i]5 do exchange A[i] harr A[PARENT(i)]6 i larr PARENT(i)

Thời gian chạy của HEAP-INCREASE-KEY trecircn một heap n phần tử lagrave O(lg n)

MAX-HEAP-INSERT(A key)1 heap-size[A] larr heap-size[A] + 12 A[heap-size[A]] larr -infin3 HEAP-INCREASE-KEY(A heap-size[A] key)

Thời gian chạy của MAX-HEAP-INSERT trecircn một heap n phần tử lagrave O(lg n)Toacutem lại một heap coacute thể hỗ trợ bất cứ thao taacutec nagraveo của hagraveng đợi ưu tiecircn trecircn một tập kiacutech thước n trong O(lg n) thời gian

Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey

GiảiXeacutet node coacute chỉ số i = n2+1Giả sử node i coacute con traacutei lagrave lKhi đoacute l = 2i = 2(n2+1)Magrave n2-1 lt n2 n2Suy ra l gt 2((n2 ndash 1) + 1)Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZEDo vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phảiSuy ra node coacute chỉ số n2+1 lagrave một node laacuteChứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n

Bagravei Tập Quicksort

Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6

GiảiPARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 9: On Tap.lt Thuat Giai

Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21

Giải

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 10: On Tap.lt Thuat Giai

Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r

Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21

GiảiQUICKSORT(A p r)1 if p lt r2 then q larr PARTITION(A p r)3 QUICKSORT(A p q - 1)4 QUICKSORT(A q + 1 r)

Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1Vậy ta thực hiện QUICKSORT(A p q - 1) như sau

Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần

Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trịHướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)

if i= j+1 (i=r) then return q=(p+r)2else exchange (A[i+1] A[r])

return i+1Giải

Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau

PARTITION(A p r)

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 11: On Tap.lt Thuat Giai

1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] le x5 then i larr i + 16 exchange A[i] harr A[j]7 if i = j + 1 or i = r 8 then return (p+r)2 9 else exchange A[i + 1] harr A[r]10 return i + 1

Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất

Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)Giải

Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tửTa coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave

2α + (n-1)β + α + γCograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave

2α + (n-1)β + 2(n-1)α + α + γGọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tửSuy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γHay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)Vậy T(n) = (n)

Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăngGiải PARTITION(A p r)1 x larr A[r]2 i larr p - 13 for j larr p to r - 14 do if A[j] x5 then i larr i + 16 exchange A[i] harr A[j]7 exchange A[i + 1] harr A[r]8 return i + 1

Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị

GiảiĐặt n = r ndash p + 1Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]Suy ra thời gian chạy của QUICKSORT(A p r) lagrave

Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 12: On Tap.lt Thuat Giai

Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần

GiảiTrường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần

GiảiĐacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r] Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)

Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn) GiảiTrường hợp phacircn hoạch tốt nhất (best-case partitioning)

bullTrường hợp nagravey xảy ra khi kết quả phacircn hoạch lagrave hai bagravei toaacuten con kiacutech thước khocircng lớn hơn n2 bullChi phiacute cho thủ tục PARTITION lagrave Θ(n)bullHệ thức truy hồi cho thời gian chạy của Quicksort lagrave1048766Trsquo(n) le 2Trsquo(n2) + Θ(n) = O(nlgn)1048766Quicksort chạy nhanh nhất trong trường hợp nagravey

Suy ra thời gian chạy chậm nhất của QUICKSORT lagraveT(n) 2T(n2) + Θ(n) = O(nlgn)

Vậy T(n) = (nlgn)

Bagravei Tập Chương 4

Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau

Giải

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 13: On Tap.lt Thuat Giai

Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh

Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau

VERTEX_DEGREE(G u)1 S 02 for k 1 to Gn3 do S S + GA[u][k]4 return S

Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnhGiải

Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh

Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau

OUTER_DEGREE(G u)5 S 06 for k 1 to Gn7 do S S + GA[u][k]8 return S

Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau

INNER_DEGREE(G u)9 S 010for k 1 to Gn11 do S S + GA[k][u]12return S

Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 14: On Tap.lt Thuat Giai

GiảiBFS(G s)1 for each vertex u V[G] ndash s2 do color[u] WHITE3 d[u] 4 [u] NIL5 color[s] GRAY6 d[s] 07 [s] NIL8 Q 9 ENQUEUE(Q s)10while Q 11 do u DEQUEUE(Q)12 for each v Adj[u]13 do if color[v] = WHITE14 then color[v] GRAY15 d[v] d[u] + 116 [v] u17 ENQUEUE(Q v)18 color[u] BLACK

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 15: On Tap.lt Thuat Giai

Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau

giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh

GiảiDFS(G)1 for each vertex u V[G]2 do color[u] WHITE3 [u] NIL4 time 05 for each vertex u V[G]6 do if color[u] = WHITE7 then DFS_VISIT(u)

1 color[u] GRAY2 time time + 13 d[u] time4 for each each v Adj[u]

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 16: On Tap.lt Thuat Giai

5 do if color[v] = WHITE6 then [v] u7 DFS_VISIT(v)8 color[u] BLACK9 f[u] time time + 1

Theo đề bagravei ta bắt đầu duyệt từ node 1

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 17: On Tap.lt Thuat Giai

Bagravei Tập Chương 5

Bagravei 1 Cho đồ thị vocirc hướng liecircn thocircng G=(VE) Gọi e=(uv)E lagrave cạnh coacute trọng số beacute nhất trong G Cm coacute một cacircy bao trugravem beacute nhất chứa e

Giải

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 18: On Tap.lt Thuat Giai

Xeacutet đồ thị trecircn ta coacute e = 2 = (u v) = (x y)Giả sử khocircng tồn tại cacircy bao trugravem beacute nhất chứa cạnh eXeacutet Trsquo = T (u v) ndash (m n)với (m n) lagrave cạnh thuộc chu trigravenh đatilde tạo ra khi thecircm (u v) vagraveo TKhi đoacute W(Trsquo) = W(T) + W(u v) ndash W(m n)Magrave W(u v) lt W(m n) vigrave (u v) lagrave cạnh coacute trọng số beacute nhấtSuy ra W(Trsquo) lt W(T) (macircu thuẫn)Vậy cacircy bao trugravem beacute nhất luocircn chứa cạnh e

Bagravei 2 G lagrave một rừng gồm k cacircy n đỉnh Tigravem số cạnh của GGiải

Gọi Ti (i [1 k]) lagrave cacircy thứ cacircy thứ k trong rừng GVagrave n(Ti) e(Ti) lagrave số đỉnh vagrave số cạnh của Ti

Số cạnh của G lagrave

Viacute dụ với rừng coacute 3 cacircy 11 đỉnh thigrave số cạnh lagrave 11 ndash 3 = 8

Bagravei 3 Cho G lagrave đồ thị vocirc hướng coacute số cạnh bằng số đỉnh Chứng minh G coacute iacutet nhất một chu trigravenhGiảiGiả sử G khocircng coacute chu trigravenh Theo giả thiết đề bagravei G lagrave đồ thị vocirc hướng coacute số cạnh bằng số

đỉnh ( ) necircn G lagrave một rừng coacute k cacircy (kgt1)Theo kết quả chứng minh Bagravei 2 ta coacute (macircu thuẫn)Vậy G coacute iacutet nhất một chu trigravenh

Bagravei 4 Cho đồ thị coacute trọng số G=(EV) ( Higravenh vẽ) Hatildey dugraveng thuật toaacuten Kruskal để tigravem cacircy bao trugravem beacute nhất của G

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 19: On Tap.lt Thuat Giai

GiảiMST_KRUSKAL(G w)1 A 2 for each vertex v V[G]3 do MAKE_SET(v)4 sort the edges of E into nondecreasing order by weigh w5 for each edge (u v) E taken in nondecreasing order by weigh6 do if FIND_SET(u) FIND_SET(v)7 then A A (u v)8 UNION(u v)9 return A

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 20: On Tap.lt Thuat Giai

Bagravei 5 Hatildey dugraveng thuật toaacuten Prim để tigravem cacircy bao trugravem beacute nhất của đồ thị G trong bagravei tập 6GiảiMST_PRIM(G w r)1 for each vertex u V[G]

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 21: On Tap.lt Thuat Giai

2 do key[u] 3 [u] NIL4 key[u] 05 Q V[G]6 while Q 7 do u EXTRACT_MIN(Q)8 for each v Adj[u]9 do if v Q and w(u v) lt key[v]10 then [v] u11 key[v] w(u v)

Giả sử duyệt node gốc r tại s

  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s
Page 22: On Tap.lt Thuat Giai
  • Bagravei Tập Độ Phức Tạp Thuật Toaacuten
  • Haidt3fptcomvn
  • Bagravei 1 Viết một thuật toaacuten (thủ tục) để tiacutenh giaacute trị của fn trong hệ thức hồi fn = fn-1 + fn-2 n 2 f0 = 1 f1 = 1 Đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten vừa viết Coacute thuật toaacuten khaacutec hiệu quả hơn khocircng
  • Giải
  • TONG_TRUYHOI(F n)
  • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten Khi đoacute coacute n+1 pheacutep so saacutenh ở dograveng 2 do đoacute tương ứng coacute n+1 pheacutep gaacuten ở caacutec dograveng lệnh 3 4 5 cuối cugraveng lagrave một pheacutep trả về ở dograveng 6 Suy ra thời gian để thực thi của thuật giải nagravey lagrave T(n) = (n+1)α + (n+1)β + γ = O(n)
  • Bagravei 2 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vuocircng cấp n vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten nagravey
  • Giải
  • Bagravei 3 Viết thuật toaacuten tiacutenh tiacutech của hai ma trận vagrave đaacutenh giaacute độ phức tạp về thời gian chạy của của thuật toaacuten nagravey
  • Giải
  • Bagravei 4 Viết vagrave đaacutenh giaacute độ phức tạp của thuật toaacuten tigravem kiếm nhị phacircn trecircn một datildey số thực đatilde được sắp xếp
  • Giải
  • BINARY_SEARCH(A n x)
  • 1 left 1
  • 2 right n
  • 3 while left right
  • 4 do mid (left + right)2
  • 5 if x = A[mid]
  • 6 then return mid
  • 7 else if x lt A[mid]
  • 8 then right mid ndash 1
  • 9 else left mid + 1
  • 10 return NIL
  • Thuật giải coacute độ phức tạp lagrave O(lgn) vagrave cũng lagrave trường hợp xấu nhất khi khocircng coacute phần tử x trong datildey Trường hợp tốt nhất O(1) khi tigravem được x ngay giữa datildey cograven trường hợp trung bigravenh O(lgn2) khi tồn tại phần tử x trong datildey
  • Bagravei 5 Viết thuật toaacuten tiacutenh n vagrave đaacutenh giaacute độ phức tạp về thời gian của noacute
  • Giải
  • FACTORIAL(n)
  • 1 if n = 0 or n = 1
  • 2 then return 1
  • 3 else if n gt 1
  • 4 then return nFACTORIAL(n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Đặt c = O(1) Ta coacute
  • T(n) = T(n-1) + c
  • = (T(n-2) + c) + c = T(n-2) + 2c
  • = (T(n-3) + c) + 2c = T(n-3) + 3c
  • helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellip
  • = T(n-(n-1)) + (n-1)c = T(1) + (n-1)c = c + (n-1)c = nc
  • Suy ra thời gian chạy của thuật giải lagrave O(n)
  • Bagravei 6 Viết vagrave đaacutenh giaacute độ phức tạp về thời gian của thuật toaacuten Thaacutep Hagrave Nội
  • Giải
  • Giả sử muốn chuyển n caacutei đĩa từ cọc A sang cọc B lấy cọc C lagravem trung gian
  • HANOI_TOWER(A B C n)
  • 1 if n = 1
  • 2 then MOVE(A B 1)
  • 3 else HANOI_TOWER(A C B n-1)
  • 4 MOVE(A B 1)
  • 5 HANOI_TOWER(C B A n-1)
  • Gọi T(n) lagrave thời gian chạy của thuật giải Ta coacute
  • Giả sử cho O(1) = 1 (Việc giả sử nagravey khocircng lagravem thay đổi tiacutenh tổng đuacuteng đắn)
  • Ta coacute T(n) = 2T(n-1) + 1 = 2(2T(n-2) + 1) + 1 = 22T(n-2) + 2 + 1
  • = 22(2T(n-3) + 1) = 23T(n-3) + 22 + 2 + 1
  • helliphelliphelliphelliphelliphelliphelliphelliphellip
  • = 2n-1T(n-(n-1)) + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1
  • = 2n-1 + 2n-2 +2n-3 + hellip + 23 + 22 + 2 + 1 = 2n ndash 1
  • Vậy độ phức tạp của thuật giải lagrave O(2n)
  • Bagravei Tập Heapsort
  • Bagravei 1 Số phần tử nhiều iacutet nhất trong một heap chiều cao h lagrave bao nhiecircu
  • Hướng dẫn Heap chiều cao h coacute số node lớn nhất M khi caacutec con ở mức h-1 đều coacute 2 con lagrave laacute M=2h+1-1 Số node iacutet nhất m = [2(h-1)+1-1]+1 =2h
  • Giải
  • Với h = 2 ta coacute hai higravenh sau biểu diễn cho số node nhiều nhất vagrave số node iacutet nhất của cacircy
  • Khi đoacute Số node nhiều nhất của cacircy khi h = 2 chiacutenh lagrave tổng số node được lấp đầy ở tất cả caacutech mức từ 0 đến 2 lagrave 7 = 1 + 2 + 4 = 20 + 21 + 22
  • Tổng quaacutet Ta coacute số node nhiều nhất của một heap chiều cao h lagrave
  • Mh = 20 + 21 + 22 + hellip + 2h = 2h+1 ndash 1
  • Tương tự ta thấy số node iacutet nhất của heap chiều cao h chiacutenh lagrave số node nhiều nhất của heap chiều cao h-1 rồi thecircm 1 Do đoacute
  • mh = Mh-1 + 1 = [2(h-1)+1 ndash 1] + 1 = 2h
  • Bagravei 2 Chứng minh 1 heap n phần tử thigrave coacute chiều cao lagrave lgn
  • Hướng dẫn Theo bagravei 1 2h n 2h+1-1 suy ra lg(n+1) -1 h lgn vigrave lgn lt lg(n+1)
  • Necircn lg(n) -1 h lgn Nghĩa lagrave h = lgn
  • Giải
  • Gọi m M theo thứ tự lagrave số node iacutet nhất vagrave số node nhiều nhất của heap coacute chiều cao h
  • Khi đoacute m n M 2h n 2h+1-1
  • Bagravei 3 Datildey sau đacircy coacute lagrave một max-heap hay khocircng 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Biểu diễn heap trecircn cacircy nhị phacircn ta thấy vi phạm tiacutenh chất max-heap tại node thứ tư vigrave A[4] lt A[9]
  • Do vậy datildey số cho trecircn khocircng phải lagrave một max-heap
  • Bagravei 4 Sử dụng higravenh trecircn như một mocirc higravenh biểu diễn thao taacutec MAX-HEAPIFY(A 4) trecircn mảng A = 23 17 14 6 13 10 1 5 7 12
  • Giải
  • Gọi hagravem MAX_HEAPIFY(A 4) exchange A[4] A[9]
  • Bagravei 5 Dựa trecircn thủ tục MAX-HEAPIFY(A i) hatildey viết matilde giả cho thủ tục MIN-HEAPIFY(A i) thực hiện thao taacutec duy trigrave tiacutenh chất heap trecircn một min-heap
  • Giải
  • MIN_HEAPIFY(A i)
  • 1 l left(i)
  • 2 r right(i)
  • 3 if l HEAP_SIZE[A] and A[l] lt A[i]
  • 4 then smallest l
  • 5 else smallest i
  • 6 if r HEAP_SIZE[A] and A[r] lt smallest
  • 7 then smallest r
  • 8 if smallest i
  • 9 then exchange A[i] A[smallest]
  • 10 MIN_HEAPIFY(A smallest)
  • Bagravei 6 Sử dụng higravenh 63 như một mocirc higravenh biểu diễn thao taacutec BUILD-MAX-HEAP(A) trecircn mảng A = 5 3 17 10 84 19 6 22 9
  • Giải
  • Bagravei 7 Sử dụng mocirc higravenh biểu diễn thao taacutec HEAPSORT(A) trecircn mảng A = 5 13 2 25 7 17 20 8 4
  • Giải
  • HEAPSORT(A)
  • 1 BUILD_MAX_HEAP(A)
  • 2 for i length[A] downto 2
  • 3 do exchange A[1] A[i]
  • 4 HEAP_SIZE[A] HEAP_SIZE[A] ndash 1
  • 5 MAX_HEAPIFY(A 1)
  • Bagravei 8 Phacircn tiacutech thời gian chạy của MAX-HEAPIFY(A i) trecircn cacircy con kiacutech thước n định gốc tại node i
  • Giải
  • Từ giải thuật MAX_HEAPIFY(A i) ta coacute số bước thực hiện lời gọi đệ quy nhỏ hơn hoặc bằng chiều cao h của cacircy Magrave mỗi lần thực hiện MAX_HEAPIFY coacute chi phiacute lagrave O(1)
  • Suy ra T(n) = hO(1) = O(1)lgn = O(lgn )
    • Bagravei 9 Sử dụng max-heap biểu diễn datildey caacutec số thực a1 a2 hellip an để viết một thuật toaacuten tigravem max a1 a2 hellip an
      • Giải
      • MAX_ELEMENT(A)
      • 1 BUILD_MAX_HEAP(A)
      • 2 return A[1]
      • Thời gian chạy của MAX_ELEMENT lagrave T(n) = O(n) + O(1) = O(n)
      • Bagravei 10 Đaacutenh giaacute thời gian thực hiện caacutec thao taacutec trecircn hagraveng được ưu tiecircn dựa trecircn mocirc higravenh dữ liệu max-heap
      • Giải
      • Bagravei 11 Giả sử heap được bởi một mảng a1 a2 hellip an Chứng tỏ caacutec phần tử coacute chỉ số n2+1 n2+2hellip n lagrave caacutec laacute của heap nagravey
      • Giải
      • Xeacutet node coacute chỉ số i = n2+1
      • Giả sử node i coacute con traacutei lagrave l
      • Khi đoacute l = 2i = 2(n2+1)
      • Magrave n2-1 lt n2 n2
      • Suy ra l gt 2((n2 ndash 1) + 1)
      • Hay l gt n điều đoacute chứng tỏ l vượt quaacute HEAP_SIZE
      • Do vậy node i khocircng coacute con traacutei suy ra node i cũng khocircng coacute con phải
      • Suy ra node coacute chỉ số n2+1 lagrave một node laacute
      • Chứng minh tương tự ta coacute caacutec node n2+2 n2+3hellip n cũng lagrave caacutec laacute của heap kiacutech thước n
      • Bagravei Tập Quicksort
      • Bagravei 1 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6
      • Giải
      • Bagravei 2 Sử dụng mocirc higravenh biểu diễn thao taacutec PARTITION trecircn mảng A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Thực hiện tương tự cho 10 bước tiếp theo vagrave nhận xeacutet đacircy lagrave trường hợp đặc biệt với mọi j r ta coacute A[j] x (x = A[r]) do vậy sau khi thực thi xong giải thuật PARTITION thigrave thứ tự caacutec phần tử khocircng coacute sự thay đổi Kết quả PARTITON chia ra 2 mảng con gồm n-1 phần tử nhỏ hơn hoặc bằng x vagrave 0 phần tử lớn hơn x Kết quả trả về của PARTITION lagrave r
      • Bagravei 3 Biểu diễn quaacute trigravenh thực hiện giải thuật QUICKSORT trecircn A = 13 19 9 5 12 8 7 4 11 2 6 21
      • Giải
      • Dựa vagraveo kết quả Bagravei 2 ta thấy dograveng 2 kết quả pheacutep gaacuten q = r Vậy coacute nghĩa lagrave ta chỉ thực hiện tiếp lời gọi đệ quy QUICKSORT(A p q - 1) ở dograveng 3 thocirci cograven lời gọi đệ quy QUICKSORT(A q + 1 r) ở dograveng 4 khocircng thực thi tiếp vigrave khocircng thoả điều kiện ở dograveng 1
      • Vậy ta thực hiện QUICKSORT(A p q - 1) như sau
      • Luacutec nagravey bagravei toaacuten thực hiện PARTITION trecircn đoạn (p q-1) Kết hợp kết quả Bagravei 1 vagrave tiếp tục thực hiện QUICKSORT trecircn caacutec mảng con mới Kết quả cuối cugraveng ta được datildey sắp xếp tăng dần
      • Bagravei 4 PARTITION trả về giaacute trị q gigrave khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị sửa PARTITION sao cho q = (p+r)2 khi tất cả caacutec phần tử của A[pr] coacute cugraveng giaacute trị
      • Hướng dẫn kết thuacutec vograveng lặp for cần thecircm lệnh (đuacuteng cho cả trường hợp caacutec phần tử coacute giaacute trị tăng dần)
      • if i= j+1 (i=r)
      • then return q=(p+r)2
      • else exchange (A[i+1] A[r])
      • return i+1
      • Giải
      • Khi tất cả caacutec phần tử của mảng A[pr] coacute cugraveng giaacute trị thigrave PARTITION trả về giaacute trị q = r Vigrave với mọi j r ta coacute A[j] x (x = A[r])
      • Để giaacute trị trả về q = (p+r)2 của PARTITION trong trường hợp nagravey ta phải sửa lại giải thuật PARTITION như sau
      • Vậy luacutec nagravey thời gian chạy QUICKSORT trecircn mảng caacutec phần tử cugraveng giaacute trị lagrave tốt nhất
      • Bagravei 5 Chứng tỏ thời gian chạy của PARTITION lagrave (n)
      • Giải
      • Gọi α β vagrave γ lần lượt lagrave thời gian thực hiện của pheacutep gaacuten pheacutep so saacutenh vagrave pheacutep trả về của thuật toaacuten PARTITION trecircn mảng coacute n phần tử
      • Ta coacute thời gian chạy tốt nhất khi caacutec phần tử trong mảng A[p(r-1)] đều khocircng lớn hơn A[r] lagrave
      • 2α + (n-1)β + α + γ
      • Cograven thời gian chạy xấu nhất khi tất cả caacutec phần tử trong mảng A[p(r-1)] đều lớn hơn A[r] lagrave
      • 2α + (n-1)β + 2(n-1)α + α + γ
      • Gọi T(n) lagrave tổng thời gian chạy của PARTITION trecircn mảng coacute n phần tử
      • Suy ra 2α + (n-1)β + α + γ le T(n) le 2α + (n-1)β + 2(n-1)α + α + γ
      • Hay C1n le T(n) le C2n (Với C1 C2 lagrave caacutec hằng số)
      • Vậy T(n) = (n)
      • Bagravei 6 Sửa quicksort để sắp xếp mảng A[pr] theo trật tự khocircng tăng
      • Giải
      • Bagravei 7 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute cugraveng giaacute trị
      • Giải
      • Đặt n = r ndash p + 1
      • Do A[i] = A[j] = A[r] với mọi i j [p r-1] necircn PARTITION(A p r) trả về giaacute trị r vagrave chia ra 2 mảng con với mảng con thứ nhất coacute n-1 phần tử nhỏ hơn hoặc bằng A[r] cograven mảng con thứ hai coacute 0 phần tử lớn hơn A[r]
      • Suy ra thời gian chạy của QUICKSORT(A p r) lagrave
      • Suy ra thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 8 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự tăng dần
      • Giải
      • Trường hợp nagravey cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn nhỏ hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute mảng con traacutei coacute n-1 phần tử nhỏ hơn A[r] vagrave mảng con phải coacute 0 phần tử lớn hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 9 Đaacutenh giaacute thời gian thực hiện quicksort trong trường hợp tất cả caacutec phần tử của mảng coacute coacute giaacute trị theo trật tự giảm dần
      • Giải
      • Đacircy cũng lagrave trường hợp xấu nhất vigrave caacutec phần tử trong mảng A[p r-1] luocircn lớn hơn A[r] necircn PARTITION chia thagravenh 2 mảng trong đoacute một mảng con phải coacute n-1 phần tử lớn hơn A[r] vagrave mảng con traacutei coacute 0 phần tử nhỏ hơn A[r]
      • Do đoacute thời gian chạy QUICKSORT trong trường hợp nagravey lagrave O(n2)
      • Bagravei 10 Chứng minh rằng thời gian chạy của quicksort trong trường hợp xấu nhất lagrave (nlgn)
      • Giải
      • Bagravei Tập Chương 4
      • Bagravei 1 Hatildey vẽ đồ thị được biểu diễn bởi ma trận trọng số sau
      • Giải
      • Bagravei 2 Cho đồ thị vocirc hướng viết chương trigravenh xaacutec định bậc của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị vocirc hướng coacute n đỉnh Chuacute yacute ma trận nagravey coacute tiacutenh chất đối xứng qua đường cheacuteo chiacutenh
      • Ta coacute Bậc của đỉnh u nagraveo đoacute chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh bậc của đỉnh như sau
      • VERTEX_DEGREE(G u)
      • 1 S 0
      • 2 for k 1 to Gn
      • 3 do S S + GA[u][k]
      • 4 return S
      • Bagravei 3 Cho đồ thị coacute hướng viết chương trigravenh xaacutec định baacuten bậc ra (vagraveo) của mỗi đỉnh
      • Giải
      • Xeacutet ma trận kề A biểu diễn đồ thị coacute hướng coacute n đỉnh
      • Ta coacute Baacuten bậc ra của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của dograveng thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc ra của đỉnh như sau
      • OUTER_DEGREE(G u)
      • 5 S 0
      • 6 for k 1 to Gn
      • 7 do S S + GA[u][k]
      • 8 return S
      • Cograven baacuten bậc vagraveo của đỉnh u nagraveo đoacute trong đồ thị coacute hướng chiacutenh lagrave tổng caacutec số của cột thứ u Do vậy ta lập thuật toaacuten để tiacutenh baacuten bậc vagraveo của đỉnh như sau
      • INNER_DEGREE(G u)
      • 9 S 0
      • 10 for k 1 to Gn
      • 11 do S S + GA[k][u]
      • 12 return S
      • Bagravei 4 Sử dụng đỉnh 3 như lagrave đỉnh nguồn chỉ ra caacutec giaacute trị của d vagrave khi thực thi thuật toaacuten tigravem kiếm theo chiều rộng trecircn đồ thị sau
      • Giải
      • BFS(G s)
      • 1 for each vertex u V[G] ndash s
      • 2 do color[u] WHITE
      • 3 d[u]
      • 4 [u] NIL
      • 5 color[s] GRAY
      • 6 d[s] 0
      • 7 [s] NIL
      • 8 Q
      • 9 ENQUEUE(Q s)
      • 10 while Q
      • 11 do u DEQUEUE(Q)
      • 12 for each v Adj[u]
      • 13 do if color[v] = WHITE
      • 14 then color[v] GRAY
      • 15 d[v] d[u] + 1
      • 16 [v] u
      • 17 ENQUEUE(Q v)
      • 18 color[u] BLACK
      • Bagravei 5 Biểu diễn quaacute trigravenh thực thi của thuật toaacuten tigravem kiếm theo chiều sacircu trecircn đồ thị sau
      • giả sử vograveng lặp for 5-7 của DFS coi caacutec đỉnh trong trật tự alphabe vagrave danh saacutech kề của mỗi đỉnh cũng coacute thứ tự alphabe Chỉ ra thời gian phaacutet hiện vagrave hoagraven thagravenh của mỗi đỉnh vagrave sự phacircn loại của mỗi cạnh
      • Giải
      • DFS(G)
      • 1 for each vertex u V[G]
      • 2 do color[u] WHITE
      • 3 [u] NIL
      • 4 time 0
      • 5 for each vertex u V[G]
      • 6 do if color[u] = WHITE
      • 7 then DFS_VISIT(u)
      • 1 color[u] GRAY
      • 2 time time + 1
      • 3 d[u] time
      • 4 for each each v Adj[u]
      • 5 do if color[v] = WHITE
      • 6 then [v] u
      • 7 DFS_VISIT(v)
      • 8 color[u] BLACK
      • 9 f[u] time time + 1
      • Theo đề bagravei ta bắt đầu duyệt từ node 1
      • Giả sử duyệt node gốc r tại s