1. Trang chủ
  2. » Giáo án - Bài giảng

các thuật tuán về đồ thị

56 666 0

Đ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

Định dạng
Số trang 56
Dung lượng 562 KB

Nội dung

CÁC THUẬT TOÁN TRÊN ĐỒ THỊ MỤC TIÊU • Một số khái niệm cơ bản • Biểu diễn đồ thị • Duyệt đồ thị • Thành phần liên thông và thành phần liên thông mạnh • Đồ thị định hướng không có chu trình • Sắp xếp topo • Các thuật toán đồ thị o Đường đi ngắn nhất o Cây bao trùm ngắn nhất MỘT SỐ KHÁI NIỆM CƠ BẢN • Đồ thị được sử dụng để mô hình hóa các bài toán bao gồm một tập các đối tượng có quan hệ với nhau theo 1 cách nào đó • Ví dụ o Một mạng truyền thông o Bản đồ đường đi giữa các thành phố • Việc giải quyết các bài toán trở thành việc giải quyết một bài toán trên đồ thị • Chẳng hạn o Tìm đường đi ngắn nhất o Tìm cây bao trùm ngắn nhất o Tìm các thành phần liên thông… MỘT SỐ KHÁI NIỆM CƠ BẢN • Một đồ thị định hướng G = <V, E> o V là tập các đỉnh, E là tập các cung nối các đỉnh o Mỗi cung là một cặp đỉnh có thứ tự (u,v), ký hiệu u->v o Nếu có cung (u,v) ta nói đỉnh v kề với đỉnh u u v a b c d Một cung của đồ thị Đồ thị định hướng MỘT SỐ KHÁI NIỆM CƠ BẢN • Một đồ thị vô hướng G = <V, E> o V là tập các đỉnh, E là tập các cạnh nối các đỉnh o Mỗi cạnh là một cặp đỉnh không có thứ tự (u,v) o Nếu có cạnh (u,v) ta nói đỉnh u và v kề nhau u v a b c d e Một cạnh của đồ thị Đồ thị vô hướng MỘT SỐ KHÁI NIỆM CƠ BẢN • Đồ thị có trọng số o Đồ thị mà mỗi cung/cạnh của đồ thị được gắn với một số c(u,v) o Số c(u,v) được gọi là trọng số (giá/độ dài) của cung/cạnh (u,v) • Đường đi đơn o Là một dãy hữu hạn các đỉnh (v0, v1, …, vk) khác nhau, ngoại trừ có thể v0 = vk, và vi+1 là đỉnh kề của vi (i=1,2…k-1) o Với đồ thị có trọng số độ dài đường đi được tính là tổng trọng số trên các cạnh trên đường đi o Với đồ thị không có trọng số độ dài đường đi là k MỘT SỐ KHÁI NIỆM CƠ BẢN • Đồ thị đơn Là đồ thị vô hướng có nhiều nhất một cạnh nối hai đỉnh Là đồ thị vô hướng mà hai đỉnh có thể được nối bởi nhiều hơn một cạnh • Đa đồ thị MỘT SỐ KHÁI NIỆM CƠ BẢN • Chu trình o Là đường đi khép kín, tức là đường đi (v0, v1, …, vk) có v0 = vk • Ví dụ o Trong đồ thị định hướng dưới đây thì (v4, v1, v2, v3) là một đường đi từ v4 đến v3, và (v4, v1, v2, v4) là một chu trình v1 v2 v4v3 MỘT SỐ KHÁI NIỆM CƠ BẢN • Đồ thị con o Đồ thị G’=<V’, E’> là đồ thị con của G=<V, E> nếu V’ V và E’ E • Ví dụ v1 v2 v4v3 v1 v2 v4 Đồ thị con Đồ thị BIỂU DIỄN ĐỒ THỊ • Để giải quyết các vấn đề của đồ thị, cần lưu trữ đồ thị trong bộ nhớ máy tính, vì thế cần phải biểu diễn CTDL của đồ thị. • Có hai cách biểu diễn o Biểu diễn bằng ma trận kề (lưu trữ đồ thị bằng mảng hai chiều) o Biểu diễn bằng danh sách kề (lưu trữ đồ thị bằng danh sách móc nối) [...]...BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ • Với đồ thị không có trọng số G=, với V={v1, v2, …, vn}, được lưu trữ trong mảng hai chiều A[1 n][1 n] trong đó: 0 1 1 1 0 1 Nếu (vi, vj) có cạnh nối 1 0 0 1 1 0 • Ví dụ: cho đồ thịNếu (vi, vj) không có cạnh nối vô hướng 1 0 0 1 0 A[i,j] = 1 1 0 1 0 1 1 1 0 1 0 2 5 3 4 Đồ thị vô hướng Mảng biểu diễn đồ thị BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ • Với đồ thị không có... cho đồ thị vô(vi, vj) không có cung/cạnh nối hướng 1 0 0 1 0 A[i,j] = 1 1 0 1 0 1 1 1 0 1 0 2 5 3 4 Đồ thị vô hướng Mảng biểu diễn đồ thị BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ • Ví dụ 2: cho đồ thị định hướng 1 2 0 1 0 1 0 0 0 0 1 1 0 0 0 1 0 0 1 3 • Nhận xét: 4 05 0 0 0 1 0  ƯuĐồ thị định hướng bất kỳ0ta biết ngay rằng có cung/cạnh nối điểm: Với 2 đỉnh 0 hay không trọng số của cung/cạnh Mảng biểu diễn thị. .. δ(v0,vk) =  c(vi,vi+1) i=0 • Xét hai thuật toán Tìm đường đi ngắn nhất từ một đỉnh nguồn đến các đỉnh còn lại của đồ thị o Tìm đường đi ngắn nhất giữa mọi cặp điểm của đồ thị o ĐƯỜNG ĐI NGẮN NHẤT TỪ MỘT ĐỈNH NGUỒN – THUẬT TOÁN Dijkstra • Thuật toán Dijkstra giải quyết bài toán các lộ trình ngắn nhất nguồn đơn trên đồ thị định hướng có trọng số • Thuật toán dựa trên kỹ thuật tham lam • Ta giả thiết G=... Trong đồ thị định hướng không liên thông mạnh ta gọi một đồ thị con liên thông mạnh cực đại của nó là một thành phần liên thông mạnh • Sử dụng thuật toán tìm kiếm theo chiều sâu, ta có thể xây dựng được thuật toán xác định thành phần liên thông mạnh, gồm các bước: TÌM THÀNH PHẦN LIÊN THÔNG MẠNH • Duyệt đồ thị theo chiều sâu và đánh số các đỉnh của nó theo thứ tự sau (post_visited) • Xây dựng đồ thị G’... của đồ thị G TÌM THÀNH PHẦN LIÊN THÔNG MẠNH Ví dụ: cho đồ thị G H C 6 5 A B B F 7 C A A 4 E D Đồ thị định hướng G D 2 DFS F 1 E 3 THÀNH PHẦN LIÊN THÔNG MẠNH • Ví dụ A F H Đồ thị G’ B C E D H A B C Các thành phần liên thông mạnh của G D F E TÌM ĐƯỜNG ĐI NGẮN NHẤT • Duyệt đồ thị theo chiều rộng để tìm đường đi ngắn nhất • Giả thiết G= là đồ thị định hướng có trọng số • Trọng số trên cung (u,v) là... điểm: muốn biết có cung/cạnh (vi, vj) hay không (và trọng số của nó) ta phải duyệt danh sách các đỉnh kề của vi BIỂU DIỄN ĐỒ THỊ BẰNG DANH SÁCH KỀ • Ví dụ : Mảng A cho đồ thị định hướng 1 1 9 12 10 3 6 2 4 10 4 25 5 12 2 25 3 6 1 9 4 27 25 5 5 4 3 27 Đồ thị định hướng 4 5 Mảng các danh sách kề BIỂU DIỄN ĐỒ THỊ BẰNG DANH SÁCH KỀ • Cấu trúc dữ liệu #define N 100 struct node { unsigned int index; //số... 0 0 12 0 0 0 27 0 25 5 5 4 27 Đồ thị định hướng Mảng biểu diễn đồ thị BIỂU DIỄN ĐỒ THỊ BẰNG DANH SÁCH KỀ • Cách biểu diễn o o o o Với mỗi đỉnh, lập một danh sách các đỉnh kề với nó Danh sách các đỉnh kề là một danh sách móc nối Mỗi thành phần trong danh sách gồm số hiệu đỉnh, trọng số của cung/cạnh nối Sử dụng mảng A[1 n], trong đó A[i] là con trỏ trỏ tới đầu danh sách các đỉnh kề của đỉnh thứ I • Nhận... biểu diễn thị trọng số) đó (nếu là đồ đồ thị  Nhược điểm: Lãng phí bộ nhớ (do chỉ có một số cung/cạnh) BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ • Với đồ thị có trọng số G=, với V={v1, v2, …, vn}, với c(vi, vj) là trọng số trên cung/cạnh (vi, vj), khi đó: 0 12 0 10 0 c (vi, vj) Nếu (vi, vj) có cung/cạnh nối 0 0 25 0 Nếu (vi, vj) không 0 cung/cạnh nối có 5 • Ví dụ 1: cho đồ thị định hướng 9 0 0 0 0 A[i,j]... đồ thị G’ từ đồ thị G bằng cách đổi hướng tất cả các cung • Áp dụng DFS(u) duyệt G’ bắt đầu từ đỉnh u có pre_visited[u] lớn nhất Khi đi từ u mà chưa thăm hết các đỉnh của G’ thì lại duyệt G’ bắt đầu từ đỉnh w có pre_visited[w] lớn nhất trong các đỉnh còn lại Lặp lại quá trình cho đến khi tất cả các đỉnh của G’ được thăm • Mỗi cây nhận được ở bước 3 là một thành phần liên thông mạnh của đồ thị G TÌM... pre_visite[u]=0 then DFS(u); } THÀNH PHẦN LIÊN THÔNG • Đồ thị vô hướng G= được gọi là liên thông nếu tồn tại đường đi nối mọi cặp đỉnh của nó • Nếu G không liên thông thì một đồ thị con liên thông cực đại của G được gọi là một thành phần liên thông • Áp dụng thuật toán tìm kiếm theo chiều sâu, sẽ tìm được tất cả các thành phần liên thông • Thủ tục Comp_Search(G), tìm các thành phần liên thông o o Biến c đếm . BẢN • Đồ thị con o Đồ thị G’=<V’, E’> là đồ thị con của G=<V, E> nếu V’ V và E’ E • Ví dụ v1 v2 v4v3 v1 v2 v4 Đồ thị con Đồ thị BIỂU DIỄN ĐỒ THỊ • Để giải quyết các vấn đề của đồ thị, . đỉnh u và v kề nhau u v a b c d e Một cạnh của đồ thị Đồ thị vô hướng MỘT SỐ KHÁI NIỆM CƠ BẢN • Đồ thị có trọng số o Đồ thị mà mỗi cung/cạnh của đồ thị được gắn với một số c(u,v) o Số c(u,v) được. CÁC THUẬT TOÁN TRÊN ĐỒ THỊ MỤC TIÊU • Một số khái niệm cơ bản • Biểu diễn đồ thị • Duyệt đồ thị • Thành phần liên thông và thành phần liên thông mạnh • Đồ thị định hướng không

Ngày đăng: 14/07/2014, 09:00

TỪ KHÓA LIÊN QUAN

w