![báo cáo cuối kỳ toán rời rạc](https://123docz.net/image/doc_normal.png)
Đang tải... (xem toàn văn)
Thông tin tài liệu
liChương trình = Thuật toán + Cấu trúc dữ liệu Chứng minh tính đúng của thuật toán: o Chiến lược chứng minh tính đúng của thuật toán: - Kiểm thử: Chạy th thuử ật toán v i các dớ ữ liệ u
Trang 22 | T r a n g
MỤC LỤC
1 Tóm lược một số chủ đề đã lĩnh hội được từ môn học (về lí thuyết, thuật toán và
ứng dụng) 4
1.1 Một số ế ki n thức cơ sở ề thuậ v t toán 4
1.2 Một số phương pháp thiết kế thuật toán cơ bản 5
1.2.1 Giải thuật đệ quy 5
1.2.2 Phương pháp chia để trị 6
1.2.3.Phương pháp quay lui (Back tracking) 8
1.2.4 Phương pháp nhánh cận 10
1.2.5 Phương pháp quy hoạch động (Dynamic Programing – DP) 10
1.2.6 Phương pháp tham lam 11
1.3.3 Mô hình và ng d ng cứụủa đồ thị trong bài toán thực tiễn 19
1.4 Bài toán tìm đường đi ngắn nhất 20
1.4.1 Bài toán tìm đường đi trên đồ thị 20
1.4.2 Bài toán tìm đường đi ngắn nhất trên đồ thị 21
1.6.2 Ý tưởng và lược đồ thuật toán 27
1.7 Cây nh phânị 27
1.7.1 Khái niệm 27
1.7.2 M t s tính chộ ốất 28
Trang 44 | T r a n g
1 Tóm lược một số chủ đề đã lĩnh hội đượ ừ c t môn h c (v lí thuy t, thu t toán và ọềếậứng dụng)
1.1 Một số ế ki n thức cơ sở ề thuậ v t toán
“Giải bài toán bằng thuật toán” là quá trình thực hiện chương trình bằng cách dùng thuật toán kết hợp c u trúc d ấ ữ ệu li
Chương trình = Thuật toán + Cấu trúc dữ liệu
Chứng minh tính đúng của thuật toán:
o Chiến lược chứng minh tính đúng của thuật toán: - Kiểm thử: Chạy th thuử ật toán v i các dớ ữ liệ u vào c ụ thể- Chứng minh tính đúng: Chứng minh bằng toán học - Kết hợp kiểm thử và chứng minh tính đúng => hiệu quả hơn
Trang 55 | T r a n g
o Các phương pháp chứng minh tính đúng: - Đố ới v i thuật toán đệ quy: Dùng quy nạp
- Đố ới v i thuật toán không đệ quy: Tính đúng nằm các vòng lặp, sử d ng bất ở ụbi n vòng l p ế ặ
Xác định tính hiệu quả c a thuật toán: ủ
Độ phức tạp th i gian: S ờ ố lượng các bước tính toán
Độ phức tạp không gian: Tài nguyên sẽ được sử ụ d ng khi thu t toán thi hành ậ1.2 Một số phương pháp thiết kế thuật toán cơ bản
1.2.1 Giải thuật đệ quy
1.2.1.1 Các đặc trưng cơ bản
Giải thuật đệ quy
Nếu một bài toán T được th c hi n b ng gi i thu t c a mự ệ ằ ả ậ ủ ột bài toán T’ có dạng giống như T.
Tính dừng:
o T’ phải đơn giản hơn T
o T’ giải được (không cần đệ quy) trong một số trường hợp nào đó (suy biến) Đặc trưng của các bài toán có thể giải bằng đệ quy
Các bài toán ph thu c tham s ụ ộ ố
Ứng với các giá trị đặc biệt nào đó của tham số thì bài toán có giải thuật để giải (trường h p suy biến) ợ
Trong trường h p t ng quát bài toán có th quy v dợ ổ ể ề ạng tương tự với m t b giá tr ộ ộ ịmới của tham s và sau h u h n l n s d n tố ữ ạ ầ ẽ ẫ ới trường h p suy biợ ến.
Trang 66 | T r a n g
1.2.1.2 Lược đồ thuật toán
1.2.1.3 Xác định quan hệ truy hồi trong phép đệ quy
Gọi T(n) là độ phức tạp c a giủ ải thuậ ệt đ quy với kích thước bài toán n c = const là độ phức tạp trong trường hợp suy bi n khi n = ế 𝑛0; T(𝑛0) = c
Với f(n) là hàm biến đổi tham s n, n u gi i thuố ế ả ật được th c hi n a l n bài toán con ự ệ ầv i tham s f(n) ớ ố thì:
T(n) = a.T(f(n)) + g(n) v g(n) ới là độ phức tạ các thao tác ngoài lời gọi đệp quy Công thức truy hồi xác định độ phức tạp gi i thuả ậ ệt đ quy
𝑇(𝑛) = { 𝑐 khi n = n0
𝑎 𝑇(𝑓(𝑛))+ 𝑔(𝑛) trườ hợp ngược lạing
1.2.2 Phương pháp chia để trị
1.2.2.1 Ý tưởng:
Phương pháp thiết kế thuật toán dựa trên 2 thao tác chính:
Chia (divide): phân rã bài toán ban đầu thành các bài toán con có kích thước nhỏ hơn, có cùng cách giải
Trị (conque): giải từng bài toán con (theo cách tương tự bài toán đầu - qui) rđệ ồi t ng h p các l i giổ ợ ờ ải để nh n k t qu c a bài toáậ ế ả ủ n ban đầu
Trang 77 | T r a n g
Việc “Phân rã”: thực hiện trên miền dữ liệu (chia miền dữ liệu thành các miền nhỏ hơn tương đương 1 bài toán con)
1.2.2.2 Mô hình, lược đồ: Xét bài toán P trên miền d u R ữ liệ
Gọi D&C (R) là thu t giậ ải P trên miền d ữ liệu R
Nếu R có th phân rã thành n mi n con (R= R1ể ề ∪R2∪…∪Rn)
Với R0 là miền đủ nhỏ để D&C(R0) có lời giải thì lược đồ ải thuật chia để trị: gi
1.2.2.3 Phân tích và đánh giá độ phức tạp thuật toán :
Xây d ng công th c truy hự ứ ồi đánh giá độ phức tạp thu t toán ậ Giải công thức truy hồi xác định độ phức tạp thuật toán
Phép th liên ti p ế ế S dử ụng định lí chính 1.2.2.4 Bài toán
Ví dụ: Sắp x p b ng thu t toán merge sort:ế ẳ ậ
Bài toán: S d ng thuử ụ ật toán chia để trị để giải bài toán săp xếp m t dãy s b ng ộ ố ằphương pháp merge sort
Trang 88 | T r a n g
Ý tưởng thuật toán:
Chia m ng l n thành nh ng m ng con nhả ớ ữ ả ỏ hơn bằng cách chia đôi mảng l n và ớtiếp tục chia đôi các mảng con cho đến khi m ng con nh nh t ch còn 1 ph n t ả ỏ ấ ỉ ầ ử So sánh 2 m ng con có cùng mả ảng cơ sở (khi chia đôi mảng lớn thành 2 mảng con
thì m ng l n ả ớ đó gọi là mảng cơ sở ủ c a 2 mảng con đó).
Khi so sánh chúng v a s p x p v a ghép 2 mừ ắ ế ừ ảng con đó lại thành mảng cơ sở, tiếp t c so sánh và ghép các m ng con lụ ả ại đến khi còn l i m ng duy nhạ ả ất, đó là mảng đã được sắp xếp
Đánh giá độ phức tạp thuật toán:
T(n) = 2T(n/2) + θ(n)Suy ra, độ phức tạp thuật toán ~ O(n*log n)
1.2.3.Phương pháp quay lui (Back tracking)
Theo nguyên tắc vét cạn, nhưng chỉ xét những trường hợp “khả quan”.
Trang 9Dùng để ả gi i bài toán li t kê các c u hình: ệ ấ
Mỗi cấu hình được xây d ng bự ằng cách xác định t ng ph n t ừ ầ ử Mỗi phần t ử được chọn b ng cách th ằ ử các khả năng có thể Độ dài cấu hình tùy thu c bài toán ộ
o Xác định trước: sinh dãy độ dài n o Không xác định trước: đường đi
1.2.3.2 Lược đồ giải thuật
1.2.3.3 Đánh giá độ phức tạp
𝑇(𝑛) = { 1 𝑘ℎ𝑖 𝑛 ≤ 1𝑑𝑇(𝑛 − 1) + 1 𝑘ℎ𝑖 𝑛 > 1
d: max (hoặc giá trị trung bình) lực lượng c a t p kh ủ ậ ả năng của các thành ph n nghiầ ệm 𝑥𝑖
Trang 10Lược đ ồthuật toán như sau:
1.2.5 Phương pháp quy hoạch động (Dynamic Programing – DP)
Trang 1111 | T r a n g
Cách phát bi u khác: 1 bài toán gi i bể ả ằng QHĐ được phân rã thành các bài toán con và bài toán lớn hơn sẽ được gi i quy t thông qua các bài toán con này (b ng các ả ế ằphép truy hồi).
Phương pháp QHĐ thường dùng cho các bài toán tìm giá trị (hoặc giá trị tối ưu).
1.2.5.2 Các bước giải bài toán bằng QHĐ
Bước 1: Nhận dạng bài toán giải bằng QHĐ Bước 2: Xây dựng công thức truy h i ồBước 3: Xác định cơ sở QHĐ Bước 4: Dựng bảng phương ánBước 5: Tìm kết quả tối ưu
Bước 6: Truy vết liệt kê thành phần nghiệm
1.2.5.3 Đánh giá độ phức tạp
Độ phức tạp th i gian: ờ
Thời gian tính toán, xác định giá trị các phần tử trong bảng phương án, phụ thuộc vào s ố chiều của bảng phương án.
T(n) = O(𝑛𝑘) – k là s chiều cố ủa bảng phương án
Thời gian truy vết tìm nghiệm: Độ phức tạp thuật toán quay lui Độ phức tạp không gian
Kích thước bảng phương án - thường lớn
Giảm kích thước bảng phương án trong triển khai thuật toán
1.2.6 Phương pháp tham lam 1.2.6.1 Ý tưởng
Xây d ng l i gi i c a bài toán v i vi c ch p nh n nh ng l a chự ờ ả ủ ớ ệ ấ ậ ữ ự ọn “có vẻ” tốt nhất của từng giai đoạn
Lựa chọn tối ưu cục bộ => lời giả ối ưi t u toàn cục cho bài toán
Trang 1212 | T r a n g
Hai tính chất mang l i hi u qu c a chiạ ệ ả ủ ến lược tham
Tính ch t cấ ủa sự ự l a ch n tham lam: M t gi i pháp tọ ộ ả ối ưu toàn cục có thể đạt được b ng cách th c hi n nh ng ch n lằ ự ệ ữ ọ ựa tối ưu cục bộ
Tính ch t c u trúc con tấ ấ ối ưu: Một gi i pháp tả ối ưu của bài toán chưa trong nó các giải pháp tối ưu của bài toán con
Để đạ t đư c những hiệu quả ợ đó thì sự ựa ch l ọn mở ỗi bước cần th a mãn: ỏ Khả thi: Thỏa mãn các ràng buộc của bài toán
Tối ưu cục bộ: Là lựa ch n t t nh t trong các lọ ố ấ ựa chọn khả thi
Không thể thay đổi: Một khi đã chọn, thì lựa chọn không thể thay đổi ở các bước tiếp theo
1.2.6.2 Lược đồ thuật toán
1.2.6.3 Độ phức tạp của thuật toán
Hai giai đoạn c a thuủ ật toán tham Xử lí dữ liệ u: T o tạ ập đối tượng A
o S p x p: O(nlogn) n=|A| ắ ếo Tính toán, cắt tỉa: O(n) o
Sinh nghiệm tối ưu o O(n)
Trang 131.2.7.2 Độ phức tạp của thuật toán
Tuyến tính theo kích thước dữ liệ u vào do x lí lử ần lượt, liên ti p ế
1.2.8 Phương pháp ngẫu nhiên 1.2.8.1 Ý tưởng
Đưa yếu tố ngẫu nhiên vào mỗi bước thực hiện thuật toán
Trang 1414 | T r a n g
Có 2 dạng của thuật toán ng u nhiên: ẫ
Với bài toán tối ưu: đưa ra mộ ờt l i gi i t t nh t vả ố ấ ới th i gian trung bình tờ ốt nhất Với bài toán quyết định: lời giải có thể mắc sai sót nhưng với xác suất nh ph ỏ ụ
thuộc vào th i gian thực hiện ờ
Tính th a hi p: Ch p nh n k t qu v i m c tiêu hi u quỏ ệ ấ ậ ế ả ớ ụ ệ ả thời gian th c hi n thuự ệ ật toán
1.2.8.2 Phân lo i ạ
Thuật toán ng u nhiên Monte Carlo: ẫ
Thuật toán áp dụng đối với các bài toán quyết định
Luôn cho ra lời gi i cả ủa bài toán, nhưng kết qu ả có thể có sai sót Xác suất cho ra l i giờ ải đúng tỉ ệ ới thờ l v i gian thực hiện Thuật toán ng u nhiên Las Vegas ẫ
Thuật toán áp dụng đối với các bài toán tối ưu Lời giải nhận được là tốt nhất (chính xác)
Thời gian thực hiện trung bình c a thuủ ật toán có giới hạn (tốt)1.3 Lý thuyết đồ thị
Trang 2424 | T r a n g
1.4.2.3.2 Thuật toán Dijkstra
procedure Dijkstra(G: weighted connected simple graph, with all weights positive) {G has vertices a = v0, v1, , vn = z and lengths w(vi, vj ) where w(vi, vj ) = ∞ if {vi, vj } is not an edge in G}
for i := 1 n toL(vi) := ∞ L(a) := 0 S := ∅
{the labels are now initialized so that the label of a is 0 and all other labels are ∞, and S is the empty set}
while z ∈ S
u := a vertex not in S with L(u) minimal S := S {u} ∪
for all vertices v not in S
if L(u) + w(u, v) < L(v) then L(v) := L(u) + w(u, v)
{this adds a vertex to S with minimal label and updates the labels of vertices not in S}
return L(z) {L(z) = length of a shortest path from a to z} 1.5 Tô màu đồ thị
1.5.1 Định nghĩa
Trong Lý thuyết đồ thị, tô màu đồ thị (graph coloring) là trường hợp đặc bi t c a gán ệ ủnhãn đồ thị, mà trong đó mỗi đỉnh hay mỗi cạnh hay mỗi miền của đồ thị có thể được gán b i m t màu hay mở ộ ột tập hợp các màu nào đó Tô màu đồ thị có th là: ể
Tô màu đỉnh (vertex coloring) là gán cho mỗi đỉnh của đồ thị một màu nào đó sao cho không có hai đỉnh nào li n k l i trùng màu nhau; ề ề ạ
Trang 2626 | T r a n g
1.5.3 Ý tưởng và tóm tắt thuật toán: Ý tưởng: sử dụng thuật toán tham lam Tóm t t thuắ ật toán:
Các bước của thuật toán:
Bước 1: Tính giá trị bậc của các đỉnh trong V Lập danh sách V’= [v1, v2, , vn] là các đỉnh của đồ thị được sắp xếp theo thứ tự bậc giảm dần: d(v1) > d(v2) > > d(vn) Ban đầu tấ ảt c các đỉnh trong V (V’) đều chưa được tô màu
Gán i := 1;
Bước 2: Tô màu i cho đỉnh đầu tiên trong danh sách V’ Duyệ ần lượt các đỉt l nh khác trong V’(nếu có) và chỉ tô màu i cho các đỉnh không kề đỉnh đã có màu i Bước 3: Kiểm tra nếu tất cả các đỉnh trong V đã được tô màu thì thuật toán kết
thúc, đồ thị đã sử ụng i màu để tô Ngượ d c lại, nếu vẫn còn đỉnh chưa được tô thì chuyển sang bước 4.
Bước 4: Loại khỏi danh sách V’ các đỉnh đã tô màu Sắp xếp lại các đỉnh trong V’ theo thứ t bự ậc giảm dần Gán i := i + 1 và quay lại bước 2.
1.5.4 Định hướng ng d ng: ứụ
Tô màu bản đồ: Trên các bản đồ, các mi n khác nhau (mi n ề ề ở đây được hi u là các ểqu c gia trên bố ản đồ thế ớ gi i hay các t nh trong m t bỉ ộ ản đồ hành chính quốc gia) được tô màu sao cho 2 mi n có chung biên giề ới không trùng màu nhau Đố ới v i bản đồ có nhiều miền, n u ta dùng m t s ế ộ ố lượng l n màu thì s r t khó phân bi t các mi n có màu g n gi ng ớ ẽ ấ ệ ề ầ ốnhau, vì th ế người ta chỉ dùng một số lượng màu nhất định để tô màu bản đồ Một bài toán được đặt ra là: có thể dùng ít nhất bao nhiêu màu để tô màu một bản đồ sao cho các miền k nhau không cùng m t màu ề ộ
Trò chơi Sudoku: Sudoku là một loại trò chơi logic, cách chơi là điền số từ 1 đến 9 vào nh ng ô tr ng sao cho mữ ố ỗ ộ ọi c t d c, mỗi hàng ngang, m i phân vùng nh ỗ ỏ (ô 3x3) có đủ các s tố ừ 1 đến 9 mà không đượ ặ ại Trò chơi có bảng câu đốc l p l hình vuông, m i chiỗ ều có 9 ô nh , h p thành 9 cỏ ợ ột, 9 hàng và được chia thành 9 ô l n 3x3 M t vài ô nhớ ộ ỏ được
Trang 2727 | T r a n g
đánh số trước, đó là những manh mối duy nhất để bạn tìm lời giải Tuỳ theo mức độ nhiều hay ít c a các manh mủ ối, các câu đ được xếố p loại dễ, trung bình, khó hay c c khó ự
Một số ứ ng d ng khác: bài toán s p x p lụ ắ ế ịch thi,…
1.6 Thu t toán Fleury tìm chu trình Euler trong ậđồ thị liên thông bcó ậc của mọ ỉi đ nh
là chẵn
1.6.1 Khái ni m và các y u t liên quan ệếố
Xuất phát từ 1 đỉnh bất kỳ của đồ thị (G) và tuân theo 2 quy tắc sau:
Mỗi khi đi qua m t cạnh nào đó thì xóa nó đi, sau đó xóa đỉộ nh cô l p (n u có) ậ ế Không bao giờ đi qua ầu trừ khi không c c òn cách đi nào khác.
1.6.2 Ý tưởng và lược đồ thuật toán Cho G = (V, E) là một đồ thị Euler
Bước 1: Bắt đầu với i = 0 và định nghĩa 𝑇0= 𝑣0 Bước 2:
Đặt 𝑇𝑖= 𝑣0𝑒1𝑣1𝑒2… 𝑒𝑖𝑣𝑖𝑒𝑖 là đường đi giữa 𝑣0 và 𝑣 𝑖 tại bước th i, gứ ọi 𝐸𝑖= {𝑒1, 𝑒2… 𝑒𝑖}; G’ là đồ th con sau khi xóa các cạnh thuộc ị 𝐸𝑖 trong G: G’= G – 𝐸𝑖
Chọn m t c nh ộ ạ 𝑒 + 1𝑖 nối 𝑣𝑖 với 𝑣𝑖+ 1 ừ ật t p c nh ạ E – 𝐸𝑖 Lưu ý là nếu 𝑒𝑖+ 1 là một cạnh cầu trong đồ thị con G’, chỉ chọn nó khi và ch khi không còn lỉ ựa chọn nào khác C p nhậ ật 𝑇𝑖+1= 𝑇𝑖𝑒𝑖+1𝑣𝑖+1= 𝑣0𝑒1𝑣1𝑒2… 𝑒𝑖 𝑖𝑣 𝑒𝑖+1 𝑖+1𝑣 N u không còn l a ch n nào cho ế ự ọcạnh 𝑒𝑖+1thì dừng.
Bước 3 Gán i = i + 1, quay lại bước 2 1.7 Cây nh phân ị
Trang 28M t Binary Tree có L lá, s có ít nh t Log2(L) + 1 cộ ẽ ấ ấp độ (levels)
Trong m t Binary Tree mà mộ ọi node đều có 0 ho c 2 nodes con, thì sặ ố lượng các node lá (leaf nodes) s luôn nhiẽ ều hơn một đơn vị so v i sớ ố lượng các nodes có hai nodes con
1.7.3 Thuật toán duyệt cây nhị phân
Duy t cây là việ ệc thăm tất cả các nút, m i nút mỗ ột lần Phép duy t cây có thệ ể được th c hiự ện đệ quy Một số cách duy t cây: ệ
Pre-order Travesal
Kết quả: A B D H I E K C F G
In-order Travesal
Kết quả: H D I B K E A F C G
Trang 29Phân vùng không gian nh phân - ị Được sử d ng trong h u h t mụ ầ ế ọi trò chơi video 3D để xác định đối tư ng nào cợ ần được hiển th ị
Binary Trees - Được s d ng trong h u h t các b ử ụ ầ ế ộ định tuyến băng thông cao để lưu trữ các bảng bộ định tuyến.
Cây băm - được sử dụng trong các chương trình p2p và chữ ký hình ảnh chuyên dụng trong đó hàm băm cần được xác minh, nhưng toàn bộ ệ t p không có s n ẵ Heap sort - Được sử dụng để thực hiện các hàng đợi ưu tiên hiệu quả, lần lượt được
s dử ụng để ậ ị l p l ch cho các quy trình trong nhi u h ề ệ điều hành
Cây mã hóa Huffman (Chip Uni - ) được s d ng trong các thu t toán nén, chử ụ ậ ẳng hạn như các thuật toán được sử ụ d ng bởi các định d ng t p jpeg và mp3 ạ ệ
Cây GGM - Được sử d ng trong các ng dụ ứ ụng mã hóa để t o ra m t cây s gi ngạ ộ ố ả ẫu nhiên
1.8 Cây bao trùm tối thiểu 1.8.1 Khái niệm
Cây bao trùm c a mủ ột đồ thị là cây (gồm các đỉnh, c nh c a G) có ch a t t c các ạ ủ ứ ấ ảđỉnh c a G ủ
Trang 30Tính duy nh t ấ
Nếu m i c nh có tr ng s riêng bi t thì sỗ ạ ọ ố ệ ẽ chỉ có m t, và ch m t cây bao trùm nh ộ ỉ ộ ỏnh Có thất ể chứng minh phát bi u này b ng quy n p ho c ph n ch ngể ằ ạ ặ ả ứ Điều này đúng trong nhiều trường hợp thực tế, như ví dụ về công ty truyền hình cáp ở trên chẳng h n, khi ạđó rất hiếm khi hai con đường lại có chính xác cùng một chi phí Phát biểu này cũng được t ng quát hóa cho r ng bao trùm.ổ ừ
Đồ ị th có chi phí nh nhất ỏ
Nếu tr ng s ọ ố là số dương, thì m t cây bao trùm nh nhộ ỏ ất cũng chính là đồ thị con có chi phí nh nhỏ ất k t nế ối tấ ả đỉnh, vì các đồ thịt c con có ch a chu trình bao gi ứ ờ cũng có tổng trọng s lố ớn hơn.
Tính chất vòng
Với m t chu trình C b t k ộ ấ ỳ trong đồ thị, n u tr ng s c a c nh e ế ọ ố ủ ạ nào đó của C lớn hơn trọng s c a các cạnh còn lại của C, thì cạnh đó không thể ố ủ thuộc về cây bao trùm nhỏ nh ất Giả ử điều ngượ ạ s c l i, n u e ế thuộc v cây bao trùm nh nh t T1, khi chúng ta xóa e, ề ỏ ấnó sẽ phân T1 ra làm hai cây con mà hai đầu c a thu c v hai cây con khác nhau Các ủ e ộ ềcạnh còn lại c a sủ C ẽ gắn hai cây con này lại với nhau, do đó sẽ ồ t n tại một cạnh fthuộc C có hai đầu nằm trên hai cây con này, tức là nó sẽ kết n i hai cây con này lố ại m t cây T2 có tr ng s nh ộ ọ ố ỏ hơn T1, vì trọng s c a nhố ủ f ỏ hơn trọng s c a ố ủ e
Ngày đăng: 14/05/2024, 16:09
Xem thêm:
Tài liệu cùng người dùng
Tài liệu liên quan