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
đỉ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