1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo cuối kỳ toán rời rạc

47 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo Cáo Cuối Kỳ Toán Rời Rạc
Tác giả Ngô Văn Khôi, Nguyễn Thị Hường, Nguyễn Trường Sơn
Trường học Đại Học Quốc Gia Hà Nội
Chuyên ngành Khoa Học Dữ Liệu
Thể loại báo cáo
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 47
Dung lượng 5,15 MB

Cấu trúc

  • 1.1. M ột số ế ki n th ức cơ sở ề v thuậ 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.2.7. Phương pháp trực tuyến (13)
    • 1.2.8. Phương pháp ngẫu nhiên (13)
  • 1.3. Lý thuy ết đồ thị (14)
    • 1.3.1. Nh ng khái ni ữ ệm cơ bản (14)
    • 1.3.2. C u trúc d ấ ữ liệ u bi u di ể ễn đồ thị (0)
    • 1.3.3. Mô hình và ng d ng c ứ ụ ủa đồ trong bài toán th thị ực tiễn (0)
  • 1.4. Bài toán tìm đường đi ngắn nhất (0)
    • 1.4.1. Bài toán tìm đường đi trên đồ thị (0)
    • 1.4.2. Bài toán tìm đường đi ngắ n nh ất trên đồ thị (0)
  • 1.5. Tô màu đồ thị (24)
    • 1.5.1. Định nghĩa (24)
    • 1.5.2. Các y u t liên quan: ế ố (25)
    • 1.5.3. Ý tưở ng và tóm t ắt th u t toán: ậ (26)
    • 1.5.4. Định hướng ứng dụng (0)
  • 1.6. Thu t toán Fleury tìm chu trình Euler trong ậ đồ thị liên thông b có ậc củ a m ọi đỉ nh là ch n .................................................................................................................... 27 ẵ 1. Khái ni m và các y u t liên quanệếố (27)
    • 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 (0)
    • 1.7.3. Thu t toán duy t cây nh phân ậ ệ ị (0)
    • 1.7.4. M t s ng d ng cây nh phân ộ ố ứ ụ ị (0)
  • 1.8. Cây bao trùm tối thiểu (29)
    • 1.8.1. Khái niệm (29)
    • 1.8.2. Các y u t liên quan ế ố (30)
    • 1.8.3. Thu t toán: ậ (0)
    • 1.8.4. Các hướng ứng dụng (0)
  • 1.9. Nh ng n ữ ội dung tóm lược về ậ m t mã h ọc (0)
    • 1.9.1. Khái niệm (37)
    • 1.9.2 M t s ộ ố thuậ t toán ph bi ổ ến (38)
    • 1.9.3 M t s ng d ng: ộ ố ứ ụ (0)
  • 2. Ứng d ng môn h ụ ọc (0)
    • 2.1. Gi i thi  u vấn đề ài toán: .................................................................................... 40 , b 2.2. Cơ sở l thuy ết, phương phá p, công c để giải quyết bài toán (40)
    • 2.3. L ời giải củ a b ài toá n (44)
    • 2.4. Code (44)
    • 2.5. Độ phức tp (47)

Nội dung

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

M ột số ế ki n th ức cơ sở ề v thuậ 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

Thuật toán là một dãy h u hữ ạn các thao tác đơn giản được sắp x p theo mế ột trình tự xác định dùng để giải một bài toán

Dãy các thao tác đơn giản, có thể “giao cho máy tính làm được” để ừ t input d n ra ẫ output một các tường minh

Một số phương pháp diễn đạt thuật toán

Nguyên t c diắ ễn đạt thuật toán:

Tính logic: Hiểu rõ tinh th nầ , các bước thuật toán

Tính có thể cài đặt: Kh ả năng có thể ậ l p trình

Pseudo code: S d ng ngôn ng t nhiên t– ử ụ ữ ự ựa ngôn ngữ ậ l p trình

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ớ ữ u vào c liệ ụ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

5 | 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

M ột số phương pháp thiết kế thuật toán cơ bản

Giả i thu ật đệ quy

1.2.1.1 Các đặc trưng cơ bản

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.

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ạp các thao tác ngoài lời gọi đệ quy Công thức truy hồi xác định độphức tạp gi i thuả ậ ệt đ quy

Phương pháp chia để trị

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

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)

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 để gi trị:

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

S dử ụng định lí chính

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

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)

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”.

Tại mỗi bước, n u có m t l a chế ộ ự ọn được ch p nh n thì ghi nh n l i l a ch n này và ấ ậ ậ ạ ự ọ tiến hành các bước tiếp theo Còn ngược lại không có lựa chọn nào thích hợp thì quay lại bước trước

Dù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.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 𝑥𝑖

Là trường hợp xấu nhất (vét cạn)

Trong triển khai thu t toán th i gian thậ ờ ực tế có th gi m xu ng ể ả ố for (v thuộc tập khả năng thành phần nghiệm 𝑥𝑖) if ( 𝑥𝑖chấp nhận được giá tr v) ị

Phương pháp nhánh cận

Lược đồthuật toán như sau:

Phương pháp quy hoạch động (Dynamic Programing – DP)

Quy hoạch động là phương pháp giải các bài toán b ng cách k t h p l i gi i c a các ằ ế ợ ờ ả ủ bài toán con theo nguyên tắc:

Giải t t cấ ả các bài toán con (mộ ần) t l

Lưu lời giải của bài toán vào một bảng

Phối hợp các bài toán con để nhận lời giải bài toán ban đầu

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 án

Bướ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

Phương pháp tham lam

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

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.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ữ u: T o tliệ ạ ậ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

Thường phụ thuộc vào giai đoạn xử lí dữ liệu

Trong trường h p sắp xếp: O(nlogn) ợ

So sánh với thuật toán sinh c u hình nghi m bấ ệ ằng phương pháp thử sai: O( ) 2 𝑛

Phương pháp trực tuyến

Dữ liệu input không được nhập một lần toàn bộ trước khi thuật toán thực hiện: Do điều kiện về không gian nh hoặc tính chất dữ liệu ớ

Tại mỗi bước th c hiự ện thuật toán phải có phương án kết quả mà không biết dữ liệu tiếp theo sẽ ra sao:

Dự đoán quy lu t phân b d u ậ ố ữliệ

Xử lí trong trường h p x u nh ợ ấ ất.

1.2.7.2 Độ phức tạp của thuật toán

Tuyến tính theo kích thước dữ u vào do x lí lliệ ử ần lượt, liên ti p ế

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

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

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)

Lý thuy ết đồ thị

Nh ng khái ni ữ ệm cơ bản

Định nghĩa 1 M t graph (hay mộ ột đồ thị) là tập các đỉnh và các c nh nạ ối mộ ố đỉnh t s với nhau Kí hiệu G = (V, E) v i V là tớ ập đỉnh và E là t p c nh ậ ạ

Ví d : Có 11 graph khác nhau v i tụ ớ ập đỉnh có 4 ph n t Bi u di n cầ ử ể ễ ủa các graph như hình v sau ẽ

Nếu 𝐶 1 xấu hơn (lớn hơn) BestCost hoặc không có khả năng nào chấp nhận được cho 𝑥 𝑖 thì lùi lại bước trư c đểớ xác định lại thành phần 𝑥𝑖−1

Nếu C1 tốt hơn (nhỏ hơn) BestCost thì chấp nh n ậ 𝑥𝑖theo khả năng v.

Tiếp tục xác định 𝑥𝑖+1, Đến khi gặp nghiệm (i = n + 1 & = S): 𝑥𝑖 o C p nhậ ật đường đi tốt nhất hiện tại đã tìm được o C p nh t giá tr BestCost m i: BestCost = ậ ậ ị ớ 𝐶1

Kết thúc tìm kiếm nếu BestCost = +∞ => không có đường đi

1.4.2.3.1.2 Mô tả dữ liệu Đánh chỉ ố s các nh cđỉ ủa đồ ị th từ 1 n

Biểu diễn đồ thị G b ng ma tr n k M = (ằ ậ ề 𝑐𝑖𝑗) cỡ n x n

𝑐 𝑖𝑗 = cost nếu có cạnh nối đỉnh i với đỉnh j với chi phí cost = ∞ nếu không có đường đi

Mảng: Daqua[1 n] đánh dấu đỉnh i đã được đi qua trên đường đi hay chưa?

Daqua[i] = true nếu đỉnh i đã có trên đường đi

Daqua[i] = false nếu ngược lại, đỉnh i chưa có trên đường đi

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 to

{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}

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 đồ có th là: thị ể

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; ề ề ạ

Tô màu c nh (edge coloring) là gán cho m i c nh cạ ỗ ạ ủa đồ thị một màu nào đó sao cho sao cho không có 2 cạnh nào trùng màu;

Tô màu mi n (face coloring) là gán cho m i mi n cề ỗ ề ủa đồ thị ph ng m t màu sao ẳ ộ cho không có 2 miền có chung đường biên lại cùng màu

S c sắ ố (chromatic number) c a mủ ột đồ thị: là s màu ít nhố ất để tô các đỉnh S c s cắ ố ủa đồ ị th G được ký hiệu là χ(G).

S màu cố ạnh (chromatic index) c a mủ ột đồ thị là số màu ít nhất dùng để tô các cạnh

S màu c nh cố ạ ủa đồ thị G được ký hiệu là χ'(G).

Các giá trị giới hạn của sắc số:

Sắc số ủ c a mộ ồt đ thị ẽ không vượ s t quá số đỉnh c a nó (bủ ậc của đồthị) Đồ ị th đơn G có bậc cực đại bằng Δ(G) thì sắc s cố ủa nó không vượt quá Δ(G)+1. Một số nh lý liên quan c a sđị ủ ắc số: Định lý 1: Bất cứ chu trình độ dài l ẻ nào cũng đều có sắc số ằ b ng 3 Định lý 2: Đồ thị đầy đủ n đỉnh Kn có sắc số bằng n Định lý 3: Nếu G có chứa 1 đồ ị th con đẳng cấu với Kn thì χ(G) ≥ n

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

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

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.

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

27 | 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 đồ Euler thị

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

Cây nh phân (Binary Tree) là m t c u trúc d ị ộ ấ ữliệu cây mà m i nút có nhi u nh t hai ỗ ề ấ nút con, được gọi là con trái (left child) và con phải (right child)

Cây nh ị phân đầy đủ (Full Binary Tree) là cây nh phân mà t t c các nút trong (level ị ấ ả

< h) có đủ hai con (h là chiều caocủa cây)

Cây nh phân hoàn ch nh (Complete Binary Tree) là cây nhị ỉ ị phân mà các nút điền đủ ớ t i mức h-1, mức h điền từ trái sang phải

S ố nút trên cây đầu đủ chiều cao h là N = 2h - 1

Chiều cao cây nh ị phân đầy đủ N nút là O (log N)

M 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: ệ

1.7.4 Một số ứng dụng cây nhị phân

Cây tìm ki m nh phân - ế ị Được sử dụng trong nhiều ứng dụng tìm kiếm trong đó dữ liệu liên t c vào/ ra, ch ng hụ ẳ ạn như map và set các đối tượng trong thư viện của nhi u ngôn ng ề ữ

Phâ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

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 ủ

Cây bao trùm t i thi u c a mố ể ủ ột đồ thị liên thông có tr ng s G là cây bao trùm có t ng ọ ố ổ trọng s các cạnh là nh nhấố ỏ t.

Có thể có một vài cây bao trùm nhỏ nh t có cùng tr ng s và có s c nh nh nh tấ ọ ố ố ạ ỏ ấ; cụ thể hơn, nếu t t c các c nh c a mấ ả ạ ủ ột đồ thị đều có tr ng s b ng nhau, thì t t c các cây bao ọ ố ằ ấ ả trùm của đồ thị đó đều là nh 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 đồt c thị con có ch a chu trình bao gi ứ ờ cũng có tổng trọng s lố ớn hơn.

Bài toán tìm đường đi ngắn nhất

Bài toán tìm đường đi ngắ n nh ất trên đồ thị

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 to

{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}

Tô màu đồ thị

Đị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 đồ có th là: thị ể

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; ề ề ạ

Tô màu c nh (edge coloring) là gán cho m i c nh cạ ỗ ạ ủa đồ thị một màu nào đó sao cho sao cho không có 2 cạnh nào trùng màu;

Tô màu mi n (face coloring) là gán cho m i mi n cề ỗ ề ủa đồ thị ph ng m t màu sao ẳ ộ cho không có 2 miền có chung đường biên lại cùng màu.

Các y u t liên quan: ế ố

S c sắ ố (chromatic number) c a mủ ột đồ thị: là s màu ít nhố ất để tô các đỉnh S c s cắ ố ủa đồ ị th G được ký hiệu là χ(G).

S màu cố ạnh (chromatic index) c a mủ ột đồ thị là số màu ít nhất dùng để tô các cạnh

S màu c nh cố ạ ủa đồ thị G được ký hiệu là χ'(G).

Các giá trị giới hạn của sắc số:

Sắc số ủ c a mộ ồt đ thị ẽ không vượ s t quá số đỉnh c a nó (bủ ậc của đồthị) Đồ ị th đơn G có bậc cực đại bằng Δ(G) thì sắc s cố ủa nó không vượt quá Δ(G)+1. Một số nh lý liên quan c a sđị ủ ắc số: Định lý 1: Bất cứ chu trình độ dài l ẻ nào cũng đều có sắc số ằ b ng 3 Định lý 2: Đồ thị đầy đủ n đỉnh Kn có sắc số bằng n Định lý 3: Nếu G có chứa 1 đồ ị th con đẳng cấu với Kn thì χ(G) ≥ n

Ý tưở ng và tóm t ắt th u t toán: ậ

Ý tưởng: sử dụng thuật toán tham lam

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

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.

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

Định hướng ứng dụng

đá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,…

Thu t toán Fleury tìm chu trình Euler trong ậ đồ thị liên thông b có ậc củ a m ọi đỉ nh là ch n 27 ẵ 1 Khái ni m và các y u t liên quanệếố

Ý tưởng và lược đồ thuật toán

Cho G = (V, E) là một đồ Euler thị

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.

Cây nh phân ị

Khái niệm

Cây nh phân (Binary Tree) là m t c u trúc d ị ộ ấ ữliệu cây mà m i nút có nhi u nh t hai ỗ ề ấ nút con, được gọi là con trái (left child) và con phải (right child)

Cây nh ị phân đầy đủ (Full Binary Tree) là cây nh phân mà t t c các nút trong (level ị ấ ả

< h) có đủ hai con (h là chiều caocủa cây)

Cây nh phân hoàn ch nh (Complete Binary Tree) là cây nhị ỉ ị phân mà các nút điền đủ ớ t i mức h-1, mức h điền từ trái sang phải

S ố nút trên cây đầu đủ chiều cao h là N = 2h - 1

Chiều cao cây nh ị phân đầy đủ N nút là O (log N)

M 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: ệ

M t s ng d ng cây nh phân ộ ố ứ ụ ị

1.7.4 Một số ứng dụng cây nhị phân

Cây tìm ki m nh phân - ế ị Được sử dụng trong nhiều ứng dụng tìm kiếm trong đó dữ liệu liên t c vào/ ra, ch ng hụ ẳ ạn như map và set các đối tượng trong thư viện của nhi u ngôn ng ề ữ

Phâ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.

Cây bao trùm tối thiểu

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 ủ

Cây bao trùm t i thi u c a mố ể ủ ột đồ thị liên thông có tr ng s G là cây bao trùm có t ng ọ ố ổ trọng s các cạnh là nh nhấố ỏ t.

Các y u t liên quan ế ố

Có thể có một vài cây bao trùm nhỏ nh t có cùng tr ng s và có s c nh nh nh tấ ọ ố ố ạ ỏ ấ; cụ thể hơn, nếu t t c các c nh c a mấ ả ạ ủ ột đồ thị đều có tr ng s b ng nhau, thì t t c các cây bao ọ ố ằ ấ ả trùm của đồ thị đó đều là nh 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 đồt c thị con có ch a chu trình bao gi ứ ờ cũng có tổng trọng s lố ớn hơn.

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 Ccó 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

Với nhát c t C b t k ắ ấ ỳ trong đồthị, n u tr ng s c a mế ọ ố ủ ột cạnh e c a C nh ủ ỏ hơn trọng s cố ủa các cạnh còn l i c a C, thì c nh này thuạ ủ ạ ộc về ất cả t các cây bao trùm nh nhỏ ất của đồ ị th Thực vậy, giả sử điều ngược lại, cạnh BC (có trọng s là 6) thu c về cây bao trùm ố ộ nh nh t T thay vì c nh e (tr ng s ỏ ấ ạ ọ ố 4) trong hình bên trái Khi đó thêm e vào T sẽ ạ t o thành m t chu trình, còn thay BC b ng e s t o ra m t cây bao trùm nh nh t có tr ng s ộ ằ ẽ ạ ộ ỏ ấ ọ ố nh ỏ hơn.

C nh có chi phí nh nh t ạ ỏ ấ

Nếu một cạnh của đồthị v i chi phí nh nh t là duy nhớ ỏ ấ e ất, thì cạnh này s ẽthuộc về bất kỳ ộ m t cây bao trùm nh nh t nào Thỏ ấ ật vậy, n u không n m trong cây bao trùm nh ế e ằ ỏ nh t, xóa mấ ột cạnh (có chi phí lớn hơn) trong chu trình tạo ra sau khi thêm vào cây, s e ẽ t o ra cây bao trùm có tr ng s nh ạ ọ ố ỏ hơn.

Thuật toán Prim: Ý tưởng: Thu t toán xu t phát t m t cây ch ậ ấ ừ ộ ỉchứa đúng một đỉnh và m r ng t ng ở ộ ừ bước một, mỗi bước thêm một cạnh m i vào cây, cho tớ ới khi bao trùm đượ ất cả c t các đỉnh của đồth ị

// Output: ET, t p các c nh c a cây bao trùm tậ ạ ủ ối thiểu c a G ủ

E = {} T for i =1 |V| − 1 tìm c nh có tr ng sạ ọ ố nhỏ nh t e =(v ,u ) trong t t c các c nh (v, u) mà v ấ ∗ ∗ ∗ ấ ả ạ ∈

Hình minh họa U Cạnh (u,v) V \ U Mô tả

D,E,F,G} Đây là đồ thị có trọng số ban đầu Các số là các trọng số của các cạnh

Chọn một cách tùy ý đỉnh Dlà đỉnh bắt đầu Các đỉnh , , và A B E Fđều được nối trực tiếp tới D bằng cạnh của đồ thị Alà đỉnh gần Dnhất nên ta chọn A là đỉnh thứ hai của cây và thêm cạnh AD vào cây

{B,C,E,F, G} Đỉnh được chọn tiếp theo là đỉnh gần Dhoặc A nhất B có khoảng cách tới Dbằng 9 và tới Abằng 7, E có khoảng cách tới cây hiện tại bằng 15, và F có khoảng cách bằng 6 Flà đỉnh gần

33 | T r a n g cây hiện tại nhất nên chọn đỉnh F và cạnhDF

Thuật toán tiếp tục tương tự như bước trước Chọn đỉnh Bcó khoảng cách tới Abằng 7.

{C, E, G} Ở bước này ta chọn giữa , , C E và cóG C khoảng cách tới B bằng

8, Ecó khoảng cách tới Bbằng 7, và G có khoảng cách tới F bằng

11 Elà đỉnh gần nhất, nên chọn đỉnh E và cạnhBE

(B,C) = 8 (D,B) = 9 chu trình (D,E) = 15 chu trình (E,C) = 5 V (E,G) = 9 (F,E) = 8 chu trình (F,G) = 11

{C, G} Ở bước này ta chọn giữa và C G Ccó khoảng cách tới Ebằng 5, và G có khoảng cách tới Ebằng 9 Chọn Cvà cạnhEC

(B,C) = 8 chu trình (D,B) = 9 chu trình (D,E) = 15 chu trình (E,G) = 9 V (F,E) = 8 chu trình (F,G) = 11

{G} Đỉnh Glà đỉnh còn lại duy nhất Nó có khoảng cách tới Fbằng 11, và khoảng cách tới Ebằng 9 Eở gần hơn nên chọn đỉnh G và cạnh EG

(B,C) = 8 chu trình (D,B) = 9 chu trình (D,E) = 15 chu trình (F,E) = 8 chu trình (F,G) = 11 chu trình

Hiện giờ tất cả các đỉnh đã nằm trong cây và cây bao trùm nhỏ nhất được tô màu xanh lá cây Tổng trọng số của cây là 39

Thuật toán Kruskal: Ý tưởng thuật toán: o Thuật toán Kruskal d a trên mô hình xây d ng cây khung nh nh t b ng thuự ự ỏ ấ ằ ật toán hợp nhất

- Thuật toán không xét các c nh v i th t ạ ớ ứ ựtuỳ ý

- Thuật toán xét các c nh theo th t ạ ứ ự đã sắp x p theo tr ng s ế ọ ố

35 | T r a n g o Để xây dựng tập n-1 cạnh c a cây khung nhỏ nhất - t m g i là t p K, Kruskal ủ ạ ọ ậ đề ngh cách kế ạị t n p lần lượt các cạnh vào tập đó theo nguyên tắc như sau: o Ưu tiên các cạnh có trọng số nhỏ hơn o Kết nạp c nh khi nó không t o chu trình vạ ạ ớ ập cạnh đã kếi t t nạp trước đó o Đó là một nguyên tắc chính xác và đúng đắn, đảm bảo tập K nếu thu đủ n - 1 cạnh sẽ là cây khung nh nhỏ ất

// Output: ET, tập các c nh c a cây bao trùm tạ ủ ối thiểu c a G ủ

E = {} T for i=1 n − 1 nh có tr ng s nh nh t e=(v,u) mà khi thêm vào tìm cạ ọ ố ỏ ấ

So sánh Prim và Kruskal:

Thuật toán c a Prim kh i t o v i m t nút, trong khi thu t toán c a Kruskal khủ ở ạ ớ ộ ậ ủ ởi t o v i mạ ớ ột cạnh

Các thu t toán c a Prim tr i dài t nút này sang nút khác trong khi thu t toán cậ ủ ả ừ ậ ủa Kruskal chọn các c nh theo cách mà v trí c a c nh không dạ ị ủ ạ ựa trên bước cu i cùng ố Trong thu t toán cậ ủa primer, đồ thị ph i là mả ột đồ thị được k t n i trong khi Kruskal ế ố cũng có thể hoạt động trên các đồ thị bị ngắt k t nối ế

Thuật toán của Prim có độ ph c t p thứ ạ ời gian là O (V2) và độ ph c t p th i gian ứ ạ ờ của Kruskal là O (logV)

Phân tích cluster: nhóm các điểm trong mặt phẳng, phân cụm liên kết đơn (một phương pháp của phân cụm phân c p), phân c m lý thuyấ ụ ết đồ , và phân c m bithị ụ ểu hi n gen d u ệ ữliệ

Xây d ng cây xanh cho phát thanh truy n hình trong m ng máy tính ự ề ạ Đăng ký hình ảnh và phân đoạn - xem phân đoạn dựa trên cây bao trùm tối thiểu Curvilinear khai thác tính năng trong tầm nhìn máy tính

Nhận d ng ch viạ ữ ết biểu thức toán học.

Thiết k m ch: th c hi n nhi u phép nhân h ng s hi u quế ạ ự ệ ề ằ ố ệ ả, như được s d ng trong ử ụ Đáp ứng xung h u hạn b lữ ộ ọc.

Khu v c hóa c a các khu vự ủ ực địa lý - xã h i, s phân nhóm các khu v c thành các ộ ự ự vùng đồng nhất, ti p giáp ế

So sánh sinh thái học dữ u liệ

Tôpô khả năng quan sát trong hệthống điện Đo tính đồng nhất c a vủ ậ ệt li u hai chiều

Minimax ki m soát quá trình ể

Cây bao trùm t i thiố ểu cũng có thể được sử ụng để mô tả d thị trường tài chính Một ma trận tương quan có thể được t o ra b ng cách tính toán m t h sạ ằ ộ ệ ố tương quan gi a hai c phi u b t k Ma tr n này có thữ ổ ế ấ ỳ ậ ể được bi u di n theo c u trúc liên kể ễ ấ ết

Nh ng n ữ ội dung tóm lược về ậ m t mã h ọc

Khái niệm

M t mã h c (Cryptography) là ngành khoa h c nghiên c u v viậ ọ ọ ứ ề ệc đảm b o an toàn ả thông tin M t mã h c g n li n vậ ọ ắ ề ới quá trình mã hóa nghĩa là chuyển đổi thông tin t d ng "có th hiừ ạ ể ểu được" thành d ng "không th hiạ ể ểu được" và ngượ ạc l i là quá trình giải mã Cryptography giúp đảm bảo những tính chất sau cho thông tin:

Tính bí m t (confidentiality): thông tin ch ậ ỉ được tiết lộ cho những ai được phép Tính toàn vẹn (integrity): thông tin không th b ể ị thay đổi mà không b phát hi n ị ệ Tính xác thực (authentication): người g i (hoử ặc người nh n) có thậ ể chứng minh đúng họ

Tính ch ng ch i b (non-ố ố ỏ repudiation): người g i ho c nh n sau này không th ử ặ ậ ểchối b viỏ ệc đã gửi hoặc nhận thông tin

Mã hóa đối xứng còn có một số tên gọi khác như Secret Key Cryptography (hay Private Key Cryptography), sử dụng cùng m t khóa cho c hai quá trình mã hóa và ộ ả gi i mã ả

Mã hóa bất đố ứng hay còn đượi x c g i v i m t cái tên khác là mã hóa khóa công ọ ớ ộ khai (Public Key Cryptography), nó được thiết kế sao cho khóa sử dụng trong quá trình mã hóa khác bi t vệ ới khóa được sử dụng trong quá trình giải mã Hơn thế nữa, khóa dùng trong quá trình gi i mã không thả ể được tính toán hay suy lu n t khóa ậ ừ dùng để mã hóa và ngược lại, tức là hai khóa này có quan hệ với nhau về mặt toán học nhưng không thể suy diễn được ra nhau

Hàm băm (Hash Function): là một mã hóa một chiều (không giải mã), cũng giống như các hàm băm thông thường, nó là m t thu t toán toán h c ánh x d ộ ậ ọ ạ ữliệu có kích thước tùy ý thành m t chuộ ỗi bit có kích thước cố đị nh (gọi là “giá trị băm”, “mã băm” hoặc “thông điệp băm”) Dữ liệu giống nhau cho giá trị băm giống nhau Dữ liệu khác nhau cho giá tr ị băm khác nhau

M t s ộ ố thuậ t toán ph bi ổ ến

DES vi t tế ắt của Data Encryption Standard Với DES, Plaintext được mã hóa theo t ng kh i 64 bits và s d ng mừ ố ử ụ ột khóa là 64 bits, nhưng thự ếc t thì ch có 56 bits ỉ là th c s ự ự được sự dụng để tạo khóa Là m t thuộ ật toán được s d ng r ng rãi nhử ụ ộ ất trên th gi i v i b dày l ch sế ớ ớ ề ị ử hơn 20 năm, được phát tri n b i IBM Team vào ể ở những năm 1970, sau đó được phát tri n b i NIST (National Institute of Standard ể ở and Technology) cho các ng dứ ụng thương mại Hiện tại DES không còn được đánh giá cao do kích thước của khóa là quá nhỏ 56 bit và nó dễ dàng bị phá vỡ chỉ trong vòng 24 tiếng đồng hồ

Triple DES (3DES) c i thiả ện độ m nh c a DES b ng vi c s d ng m t quá trìnạ ủ ằ ệ ử ụ ộ h mã hóa-gi i mã-mã hóa mà s d ng 3 khóa Kh i 64-ả ử ụ ố bit Plaintext đầu tiên được mã hóa s d ng khóa th nhử ụ ứ ất Sau đó, dữ liệu bị mã hóa được gi i mã b ng viả ằ ệc s d ng mử ụ ột khóa th hai Cu i cùng, s d ng khóa th ba và k t qu c a quá trình ứ ố ử ụ ứ ế ả ủ giải mã trên để mã hóa

AES: vi t t t c a Advanced Encryption Standard Xu t hi n theo l i kêu g i cế ắ ủ ấ ệ ờ ọ ủa NIST, c n ph i phát tri n m t thu t toán m i thay th cho DES AES chính thầ ả ể ộ ậ ớ ế ức thay thế cho DES vào tháng 11 năm 2001 Nó hỗ trợ độ ớ l n nh nh t c a khóa là ỏ ấ ủ

128, 192 và 256 bits Và hi n giệ ờ nó đang được sử ụ d ng ph bi n ổ ế

Mã hóa bất đối xứng:

RSA: Cái tên RSA là ba ch cái bữ ắt đầu t ba cái tên c a ba tác gi : Ron Rivest, ừ ủ ả Adi Shamir, Len Adleman S dử ụng đồng th i cho mã hóa khóa công khai và ch ờ ữ kí điện tử Độ an toàn của thuật toán mã hóa RSA dựa trên việc phân tích một số nguyên t rố ất lớn thành hai s nguyên t ố ố

1 Chọn 2 số nguyên tố lớn p,q

3 Chọn số u (nhỏ) sao cho: gcd(u,n) = 1

4 Tính số r sao cho: r.u ≡ 1 (mod n) (r.u)%n=1

Mã hóa và giải mã (M => C => M)

MD (Message Digets): MD2, MD4, MD5 (128bits)

SHA (Secure Hash Algorithm): SHA-1 (160bits), SHA-256 (256bits), SHA-384, SHA-512 (512bits)

1.9.3 Một số ứng dụng: Đảm bảo bí mật truyền thông Ứng dụng này xuất hiện từ thuở sơ khai của mật mã h c, khi m t b n tin bí mọ ộ ả ật được mã hóa truyền đi thì chỉ những người trong cuộc m i có th giớ ể ải mã để đọc bản tin đó Ứng dụng này đặc bi t quan tr ng trong quân ệ ọ s , chính , vự trị ới những thông tin bí m t chiậ ến lược quốc gia.

Chữ ký điệ ử Đốn t i v i các thông tin có b n quy n, ho c trong vớ ả ề ặ ấn đề xác nh n ch ậ ủ thể, tác giả thường ký s bằng chữ ố ký điện tử lên đó Mục đích của chữ ký điện tử không ph i là che d u d ả ấ ữliệu, mà nó quan tâm đến ngu n g c d ồ ố ữliệu Ph i nói thêm ả là chữ ký số chỉ là một trường h p riêng c a ch ợ ủ ữ ký điện t , tuy nhiên trong thử ực tế

Ứng d ng môn h ụ ọc

Gi i thi  u vấn đề ài toán: 40 , b 2.2 Cơ sở l thuy ết, phương phá p, công c để giải quyết bài toán

B i à toá ở n đây l thu t to n tà ậ á ìm đường đi trong trò chơi Pikachu, sau đây là link YouTube của trò chơi https://www.youtube.com/watch?v=-VIcbS9Wopo&t144s

Thuật toán tìm đường n y l i tim c a à àtrá ủ trò chơi, mục đích l à để ố n i được 2 h nh ì ảnh gi ng nhau v i số ớ ố đoạn th ng nhi u nh t l 3, v n c n l m hiẳ ề ấ à à ó ò à ện lên được h nh nh cì ả ác đoạn thẳng đó Khó khăn của bài toán l không h c code tham kh o hay thu t toà ề ó ả ậ án tương t ựtrên Google.

2.2 Cơ sở  l thuy ết, phương phá p, công c gi  để ả i quy ế à i to á n:t b

Thuật toán tìm kiếm theo chiều rộng (BFS)

Giải thuật tìm kiếm theo chiều rộng (Breadth First Search – viết tắt là BFS) duyệt qua một đồ thị theo chiều rộng và sử dụng hàng đợi (queue) để ghi nhớ đỉnh liền kề để bắt đầu việc tìm kiếm khi không gặp được đỉnh liền kề trong bất kỳ vòng lặp nào

Như trong hình ví dụ trên, giải thuật tìm kiếm theo chiều rộng duyệt từ A tới B tới E tới F sau đó tới C, tới G và cuối cùng tới D Giải thuật này tuân theo qui tắc:

Qui tắc 1: Duyệt tiếp tới đỉnh liền kề mà chưa được duyệt Đánh dấu đỉnh mà đã được duyệt Hiển thị đỉnh đó và đẩy vào trong một hàng đợi (queue)

Qui tắc 2: Nếu không tìm thấy đỉnh liền kề, thì xóa đỉnh đầu tiên trong hàng đợi

Qui tắc 3: Lặp lại Qui tắc 1 và 2 cho tới khi hàng đợi là trống

Bảng dưới đây minh họa cách giải thuật tìm kiếm theo chiều rộng làm việc với một ví dụ đơn giản sau:

1 Khởi tạo hàng đợi (queue)

2 Chúng ta bắt đầu duyệ đỉnh S(đỉnh bắt đầu) và đánh dấu đỉnh này là đã duyệt

3 Sau đó chúng ta tìm đỉnh liền kề v i ớ S mà chưa được duy t Trongệ ví dụ này chúng ta có 3 đỉnh, và theo th tứ ự chữ cái chúng ta chọ đỉnh Ađánh dấu là đã duyệt và x p ế Avào hàng đợi

4 Tiếp t c duyụ ệt đỉnh li n k ề ề v i ớ S là B Đánh dấu là đã duyệt và xếp đỉnh này vào hàng đợi

5 Tiếp t c duyụ ệt đỉnh li n k ề ề v i ớ S là C Đánh dấu là đã duyệt và xếp đỉnh này vào hàng đợi

6 Bây giờ đỉnh Skhông còn đỉnh nào li n kề ề mà chưa được duy t.ệ Bây gi chúng ta rút t hànờ A ừ đợi

7 Từ đỉnh Achúng ta có đỉnh liền kề là D và là đỉnh chưa được duyệt Đánh dấu đỉnh D là đã duyệt và xếp vào hàng đợi

44 | T r a n g Đến đây, chúng ta thấy rằng không còn đỉnh nào là chưa được đánh dấu (chưa được duy t v i ví d trong bệ ớ ụ ảng này) Nhưng giải thuật v n ti p t c, chúng ta v n ti p t c rút các ẫ ế ụ ẫ ế ụ đỉnh từ hàng đợi theo thứ tự tìm tất cả các đỉnh mà chưa đượđể c duyệt Khi hàng đợi là trống thì đó là lúc kết thúc giải thuật.

L ời giải củ a b ài toá n

Thuật toán s d ng m t c u trúc dử ụ ộ ấ ữ liệ hàng đợ để lưu trữ thông tin trung gian thu được u i trong quá trình tìm ki m, c ế ụthể à á l c c tuple bao gồm tọa độ ố ần đã đổi hướ, s l ng và hướng hi n t i cệ ạ ủa đường đi Ngoài ra, ch ng ta c n s d ng thêm m t thu t to n nh ú ò ử ụ ộ ậ á ỏ 𝒃𝒂𝒄𝒌𝒕𝒓𝒂𝒄𝒆 để lưu lại đường đi, với mục đích hi n thể ị đường nối giữa 2 h nh nh: ì ả Chèn tuple chứa đỉnh gốc và á c c thông s nố đã ói ở rên vào hàng đợ t i

Lấy ra tuple đầu tiên trong hàng đợi và quan sát nó

Nếu đỉnh trong tuple này chính là đỉnh đích, dừng quá trình tìm kiếm và trả về kết qu l l trả à ộ ình đường đi.

Nếu không ph thì chèn t t c các tuple m i ch a cải ấ ả ớ ứ ác đỉnh k về ới đỉnh vừa thăm thỏa mãn điều kiện km theo các thông s ốvào hàng đợi Điều kiện ở đây là số lần đổi hướng phải nhỏ hơn hoặc bằng 2 và tuple mới không nằm trong kho lưu trữ 𝒗𝒊𝒔𝒊𝒕𝒆𝒅

Nếu hàng đợi là rỗng, thì tất cả các đỉnh có thể đến được đều đã được quan sát – d ng vi c tìm ki m và tr v l trừ ệ ế ả ề ộ ình đường đi là ỗ r ng

Nếu hàng đợi không rỗng thì quay về bước 2.

Code

def bfs(board, boxy1 boxx1 boxy2 boxx2 , , , ): def backtrace(parent, boxy1 boxx1 boxy2 boxx2 , , , ): start = (boxy1, boxx1, , 0 'no_direction') end = 0 for node in parent: node[: ] if 2 == (boxy2, boxx2): end = node

45 | T r a n g path = [end] while path[ ] start: -1 != path.append(parent[path[ -1]]) path.reverse() for i in range len ( (path)): path[i] = path[i][: ] 2 return path board[boxy1][boxx1] board[boxy2][boxx2]: if != return [] n = len(board) m = len(board[0]) import collections q = collections.deque() q.append((boxy1, boxx1, 0, 'no_direction')) visited = set() visited.add((boxy1, boxx1, 0)) parent = {} while len(q) > : 0 r, c, num_turns, direction = q.popleft()

(r, if c) != (boxy1, boxx1) and (r, c) == (boxy2, boxx2): return backtrace(parent, boxy1, boxx1, boxy2, boxx2)

46 | T r a n g dict_directions = {(r + , c): 1 'down', (r - 1, c): 'up' , (r, c - 1 ): 'left',

(r, c + 1): 'right'} for neiborX, neiborY dict_directions: in if0

Ngày đăng: 14/05/2024, 16:09

HÌNH ẢNH LIÊN QUAN

Hình minh họa  U  Cạnh (u,v)  V \ U  Mô tả - báo cáo cuối kỳ toán rời rạc
Hình minh họa U Cạnh (u,v) V \ U Mô tả (Trang 32)
Bảng dưới đây minh họa cách giải thuật tìm kiếm theo chiều rộng làm việc với một ví  dụ đơn giản sau: - báo cáo cuối kỳ toán rời rạc
Bảng d ưới đây minh họa cách giải thuật tìm kiếm theo chiều rộng làm việc với một ví dụ đơn giản sau: (Trang 42)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w