Các khái niệm

Một phần của tài liệu Tài liệu toán rời rạc (Trang 89)

II. Đồ thị HAMILTON

1. Các khái niệm

Trong chương này chỉ xét đồ thị có hướng G =(V,E), |V|=n, |E|=m. Mỗi cung (u,v) đặt tương ứng với một số thực a(u,v) gọi là trọng số của cung, a(u,v) = ∞ nếu (u,v) ∉ E.

Nếu dãy v0, v1, . . ., vp là một đường đi trên G, thì độ dài đường đi là tổng của các trọng số trên các cung của nó: ∑ = − p i i i v v a 1 1, ) (

(nếu gán trọng số cho tất cả cung bằng 1, thì độ dài của đường đi là số cung của đường đi.)

Đường đi ngắn nhất từ đỉnh s đến đỉnh t là đường đi có độ dài nhỏ nhất từ s đến t, và độ dài nhỏ nhất (còn gọi là khoảng cách) ký hiệu là d(s,t). Nếu không có đường đi từ s đến t thì đặt d(s,t)=∞.

Nếu biết d(s,t), trong trường hợp trọng số không âm, thì đường đi ngắn nhất từ s đến t có thể tìm được bằng cách để ý là đối với s, t ∈ V tuỳ ý (s ≠ t) luôn tìm được đỉnh v sao cho

d(s,t) = d(s,v) + a(v,t).

Thực vậy, đỉnh v như vậy chính là đỉnh đi trước đỉnh t trong đường đi ngắn nhất từ s đến t. Ta lại có thể tìm được đỉnh u sao cho d(s,v) = d(s,u) + a(u,v), . . . Từ đó ta có thuật toán sau đây để tìm đường đi ngắn nhất từ s đến t khi biết độ dài của nó.

void Find_Path() /*

Đầu vào:

d[v] là khoảng cách từ đỉnh s đến đỉnh v∈ V; t là đỉnh đích;

a[u,v], u, v ∈ V là ma trận trọng số trên các cung.

Đầu ra:

Mảng stack chứa dãy đỉnh xác định đường đi ngắn nhất từ s đến t */

{

stack=φ ; stack⇐ t; v=t;

while (v != s) {

u=đỉnh thoả mãn d[v]=d[u]+a[u,v]; stack⇐ u;

v=u; }

}

Nhận xét:

- Độ phức tạp tính toán của thuật toán là O(n2), do để tìm đỉnh u ta phải xét qua tất cả các đỉnh của đồ thị.

- Có thể dùng biến mảng Truoc[v], để ghi nhớ đỉnh đi trước v trong đường đi tìm kiếm (khong dùng mảng stack)

Một phần của tài liệu Tài liệu toán rời rạc (Trang 89)

Tải bản đầy đủ (DOCX)

(171 trang)
w