Áp dụng giải thuật dijkstra cải biên để giải quyết bài toán định

Một phần của tài liệu Các thuật toán phân tán giải bài toán định tuyến đa đích (Trang 62 - 68)

tuyến đa đích.

Đầu vào:

- Một tập các nút mạng đã được kết nối, có thể biểu diễn như một đồ thị G = (V, E)

- V là tập các nút trong mạng.

- E là tập các liên kết giữa các nút trong mạng

- Chi phí giữa hai nút bất kỳ (u, v) E là trọng số w(u,v), và w(u,v)>0. - s là nút mạng nguồn.

- P là tập các nút đích (P là tập con của tập V)

Đầu ra:

Xác định cách truyền tin từ nút nguồn s đến các nút đích với tổng chi phí truyền tin là nhỏ nhất.

Các bước thực hiện:

- Nhập đồ thị G = (V,E) và đỉnh nguồn s

- Với v V, gọi nhãn d[v] là độ dài đường đi ngắn nhất từ đỉnh nguồn s đến đỉnh v. Ban đầu d[s] = 0, d[v] = với v s.

- S[i] = .

- P = {v1, v2, …,vk} V.

- Ban đầu ta gán tất cả tập P vào tập Q (Q , duyệt từng phần tử trong Q

o Bắt đầu từ đỉnh v có trọng số nhỏ nhất

o Kết nạp đỉnh v vào tập S (v đã được xử lý)

o Kiểm tra v có thuộc tập P hay không, gán nhãn ID[v] cho đỉnh v (ID[v] = 0 nếu v P, ID[v] = 1 nếu v ∉ P )

o Duyệt u thuộc các đỉnh kề của đỉnh v (u N(v)).

 Kiểm tra đỉnh u đã được xử lý chưa (nếu u ∉ S và d[u] > d[v].ID[v] + w(u,v)). Nếu chưa được xử lý thì cập nhật lại giá trị chi phí đỉnh v (d[u] = d[v].ID[v] + w(u,v)). Loại đỉnh v ra khỏi tập Q.

- Bước lặp kết thúc khi đỉnh v được cố định trong tập S. Khi đó tìm được đường đi ngắn nhất.

- Tính tổng trọng các đường đi từ s đến các đỉnh trong P = d[v1] + d[v2] + …+d[vk].

Một ví dụ nhỏ:

Một tập các nút mạng đã được kết nối, có thể biểu diễn như một đồ thị G = (V, E) với các trọng số như hình vẽ. Có một nút nguồn s cần gửi gói tin đến một tập P gồm các nút đích {1, 2, 3}. P là tập con của tập V. Xác định cách truyền tin từ nút nguồn s đến các nút đích với tổng chi phí truyền tin là nhỏ nhất

Đồ thị Biểu diễn ma trận dƣới dạng ma trận trọng số 7 9 s s 4 3 s 5 2 s 6 1 6 3 1 3 5 9 4 5 5 4 1 5 5 2 4 2 1 2 Hình: 3.3.1: Đồ thị G = (V, E) và nút nguồn s Bƣớc 1:

Khởi tạo đỉnh nguồn s có giá trị đường đi là d[s]=0.

Hình 3.3.2: Bƣớc 1

Bƣớc 2: Đỉnh s có các đỉnh kề {4, 5,6}.Cập nhật giá trị w(s,4) = 3,

w(s,5)=2, w(s,6) =1. Đường đi ngắn nhất từ đỉnh s đến đỉnh 6 có độ dài w(s,6) = 1. Cập nhật giá trị d[6] theo công thức d[6] = d[s].ID[s] + w(s,6) = 0*0 + 1 = 1, đánh dấu ID[6] = 1 (vì đỉnh 6 không phải là nút đích).

Hình 3.3.3: Bƣớc 2

Bƣớc 3: Đỉnh 6 có các đỉnh kề chưa được duyệt {3}. Cập nhật d[3] theo (adsbygoogle = window.adsbygoogle || []).push({});

đỉnh 3 có trong tập P. Danh sách các đỉnh kề với đỉnh 3 là {5}, w(3,5) = 9 > w(s,5) = 3 và (đỉnh 5 ∉ P) nên không cập nhật.

Hình 3.3.4: Bƣớc 3

Bƣớc 4: Từ đỉnh s có các đỉnh kề {4,5} chưa được cập nhật. w(s,4)=3,

w(s,5)=2. Cập nhật giá trị d[5] theo công thức d[5] = d[s].ID[s] + w(s,5) = 0*0 + 2 = 2. Đánh dấu ID[5] = 1 (vì đỉnh 5 không phải là nút đích).

Hình 3.3.5: Bƣớc 4

Bƣớc 5: Từ đỉnh 5 có các đỉnh kề{4,2}. w(5,4) = 5, w(5,2) = 4. Cập

nhật giá trị d[2] theo công thức d[2]=d[5].ID[5] + w(5,2) = 2*1 + 4 = 6. Đánh dấu ID[2] = 0 (vì đỉnh 2 là đỉnh đích).

Hình 3.3.6: Bƣớc 5

Bƣớc 6: Từ đỉnh 2 có các đỉnh kề {1}, w(2,1) = 2. Cập nhật giá trị d[1]

theo công thức d[1] = d[2].ID[2] + w(2,1) = 6*0 + 2 = 2.

Hình 3.3.7: Bƣớc 6

Tổng độ dài các đường đi từ nút nguồn s đến các nút đích trong tập P là: d[3] + d[2] + d[1] = 2 + 6 + 2 = 10.

Tổng độ dài các đường đi từ s đến tập P gồm p nút đích =  d(i) với i (P)

Chƣơng 4: XÂY DỰNG CHƢƠNG TRÌNH VÀ CÀI ĐẶT THỰC NGHIỆM

Một phần của tài liệu Các thuật toán phân tán giải bài toán định tuyến đa đích (Trang 62 - 68)