Tính cấp thiết của việc nghiên cứu Khi xây dựng thuật toán tuần tự cho các bài toán trên mạng đồ thị, bản thân các thuật toán là rất phức tạp, thời gian của thuật toán rất lớn.. Do đó,
Trang 1MỞ ĐẦU
1 Tính cấp thiết của việc nghiên cứu
Khi xây dựng thuật toán tuần tự cho các bài toán trên mạng đồ thị, bản thân các thuật toán là rất phức tạp, thời gian của thuật toán rất lớn Điều này, đòi hỏi phải song song hóa các thuật toán tuần tự tương ứng
Do đó, xây dựng các thuật toán tìm đường đi và các thuật toán tìm luồng cực đại theo hướng song song hóa từ các thuật toán tuần tự
là đòi hỏi hết sức cần thiết Xuất phát từ đó tác giả chọn vấn đề
“Song song hóa các thuật toán trên mạng đồ thị” làm đề tài
nghiên cứu của luận án
2 Đối tƣợng và phạm vi nghiên cứu
Đối tượng nghiên cứu
- Luận án nghiên cứu lý thuyết xử lý song song, các mô hình tính toán song song
- Nghiên cứu lý thuyết đồ thị, chủ yếu là bài toán tìm đường đi ngắn nhất, các thuật toán tìm luồng cực đại
3 Điểm mới của luận án
Trang 2- Đề xuất thuật toán song song tìm đường đi ngắn nhất trên đồ thị mở rộng Chúng tôi đề xuất thuật toán này để ứng dụng cho mạng giao thông phù hợp với thực tế
- Tối ưu thuật toán song song tìm luồng cực đại bằng phương pháp đẩy luồng trước từ thuật toán song song đã có Điểm mới ở đây
là phân tích dữ liệu, chia dữ liệu cụ thể cho các bộ xử lý Phần thực nghiệm được thực hiện rõ ràng,
- Đề xuất thuật toán song song tìm luồng cực đại bằng phương pháp hỗn hợp đẩy kéo luồng Chúng tôi kết hợp thuật toán đẩy luồng trước và thuật toán kéo luồng sau để xây dựng thuật toán song song
- Đề xuất thuật toán song song tìm luồng cực đại đồng thời chi phí giới hạn trên mạng giao thông mở rộng Để giảm thời gian tính toán của thuật toán, chúng tôi đã xây dựng thuật toán song song tìm luồng cực đại chi phí giới hạn
4 Kết quả nghiên cứu
- Luận án đã đề xuất được các thuật toán song song mới trên
cơ sở các yêu cầu thực tế đặt ra, chứng minh tính đúng đắn, phân tích
độ phức tạp thời gian của thuật toán Đồng thời, luận án cũng song song hóa thuật toán đã có, từ đó chỉ ra các ưu điểm so với thuật toán
5 Bố cục của luận án
Ngoài phần mở đầu, kết luận, tài liệu tham khảo, luận án được trình bày thành ba chương
Trang 3Chương 1 Xử lý song song
Chương 2 Các thuật toán tuần tự và song song trên mạng đồ thị truyền thống
Chương 3 Một số thuật toán song song tìm đường đi ngắn nhất và tìm luồng cực đại trên mạng đồ thị mở rộng
Trang 4CHƯƠNG 1 XỬ LÝ SONG SONG
1.1 Giới thiệu về xử lý song song
1.2 Kiến trúc máy tính song song
1.3 Thuật toán song song
1.4 Kết luận chương
Để giải những bài toán đặt ra một cách hiệu quả trên những máy tính mà chúng ta có, vấn đề chính làm thế nào để xây dựng được những thuật toán song song Cách làm khá thông dụng là biến đổi các thuật toán tuần tự về song song, hay chuyển từ một dạng song song
về dạng song song phù hợp hơn nhưng vẫn bảo toàn được tính tương đương trong tính toán
Để đánh giá được tính hiệu quả của thuật toán song song thường phải dựa vào độ phức tạp thời gian của thuật toán Độ phức tạp thời gian của thuật toán song song không chỉ phụ thuộc vào kích
cỡ của dữ liệu đầu vào mà còn phụ thuộc vào kiến trúc máy tính song song và số lượng các bộ xử lý được phép sử dụng trong hệ thống
Trang 5CHƯƠNG 2 CÁC THUẬT TOÁN TUẦN TỰ VÀ SONG SONG TRÊN MẠNG ĐỒ THỊ TRUYỀN THỐNG 2.1 Mạng và luồng
2.2 Bài toán luồng cực đại
2.3 Thuật toán đẩy luồng trước tìm luồng cực đại
2.3.1 Thuật toán tuần tự
2.3.1.1 Giới thiệu
2.3.1.2 Các khái niệm cơ bản
Mạng thặng dư (residual network) G f
Cho luồng f trên mạng G=(V, E, c) Ta định nghĩa mạng thặng
dư, ứng với luồng f là G f (V, E f , c f ) tập cung E fvà khả năng thông qua
c f được xác định như sau:
- (u, v)E, nếu f(u, v) > 0 thì (v, u)E f với khả năng thông
qua:c f (v, u)=f(u, v)
- (u, v) E, nếu c(u, v)f(u, v)>0 thì (u, v)E fvới khả năng
thông qua:c f (u, v)=c(u, v) f(u, v)
Luồng trước (pre-flow)
Cho ma ̣ng G = (V, E, c) Luồng trước là tập hợp các luồng trên
cung
f ={f i, j | (i, j) E} thỏa:
(i) 0 f i, j c i, j(i, j)E
(ii) Vơ ́ i mo ̣i đỉnh k không phải nguồn hoă ̣c đích, luồng vào
không nhỏ hơn luồng ra, tức là:
j k E
k i
k
f
)()
(
Trang 6G=(V, E, c) là tâ ̣p hơ ̣p các tro ̣ng số đỉnh không âm h(0), , h(|V|1) thỏa h(z) = 0 với đỉnh đích z và h(u)≤ h(v)+1 với mo ̣i cung (u, v)E f
Những cung (u, v) thỏa h(u) = h(v) + 1 gọi là các cung ưu tiên 2.3.1.3 Phương pháp đẩy luồng trước tổng quát
2.3.1.4 Thuâ ̣t toán đẩy luồng trước
- Đầu vào:Mạng G =(V, E,c) với nguồn a, đích z, khả năng thông qua
c={c i, j | (i, j) E}
- Đầu ra: Luồng cực đại
f={f i, j |(i, j) E}
- Các bước:
1 Khơ ̉i tạo: xây dựng luồng trước xuất phát với các cung đi từ đỉnh
nguồn có luồng bằng khả năng thông qua , còn các cung khác
có luồng bằng 0 Chọn hàm độ cao h(v) là độ dài đường đi ngắn nhất từ v đến đỉnh đích z
Đẩy các đỉnh lệch vào hàng đợi Q
2 Tiêu chuẩn dư ̀ ng: nếu Q = ∅, luồng trước f trở thành luồng cực đa ̣i Kết thúc Nếu Q ∅, sang bước 3
3 Xư ̉ lý đỉnh lê ̣ch: lấy đỉnh lê ̣ch u từ hàng đợi
- Duyệt các cung ưu tiên (u, v)E f Đẩy trên cung (u, v) một
luồng có giá tri ̣ min {delta,c f (u, v)}, trong đó delta là đô ̣ lê ̣ch
luồng của đỉnh u Cập nhật lại c f (u, v) theo khái niệm của mạng thặng dư, cập nhật lại độ lệch luồng của đỉnh u và v là e(u)=e(u)-c f (u, v), e(v)=e(v)+c f (u, v)
- Nếu đỉnh v là đỉnh lệch mới, thì đẩy đỉnh v vào Q
- Nếu u vẫn co ̀n lê ̣ch, thì tăng độ cao của u:
h(u)= 1 + min{h(v)|(u, v)E f }
Sau đó đẩy u vào hàng đợi Q Quay la ̣i bước 2
2.3.1.5 Ví dụ minh họa
Trang 72.3.2 Thuật toán song song
2.3.2.1 Giới thiệu
2.3.2.2 Ý tưởng của thuật toán song song
2.3.2.3 Xây dựng thuật toán song song
- Đầu vào:Mạng G =(V, E,c) với nguồn a, đích z, khả năng thông qua
(1.1) Khởi tạo: e: độ lệch luồng của các đỉnh trên mạng đồ thị G, h:
độ cao của các đỉnh trên mạng đồ thị G, f: luồng trên các cung của mạng đồ thị G, c: khả năng thông qua trong mạng G, c f:
khả năng thông qua trong mạng thặng dư G f , Q: tập các đỉnh hoạt động (không kể đỉnh a và z) là các đỉnh có độ lệch luồng
dương Việc khởi tạo giống như khởi tạo ở thuật toán tuần tự
(1.2) Chia tập đỉnh V thành m-1 tập con V i cho các bộ xử lý phụ
tương ứng P i (i=1, 2, …, m-1) sao cho:
Ngược lại sang bước 4
Bước 4: Bộ xử lý chính chuyển e, h, f, c, c f tương ứng với các
đỉnhđến các bộ xử lý phụ
Bước 5: m-1 bộ xử lý phụ thực hiện
Trang 8(5.1) Nhận các tham số e, h, f, c, c ftương ứng cho các đỉnh trên các
Bước 6: Bộ xử lý chính thực hiện một số công việc khác
(6.1) Nhận e, h, f, c f , từ bộ xử lý phụ gửi về từ bước 5.3, Thay đổi
tham số của các cung, các đỉnh mà hai đỉnh của các cung đó không nằm trên cùng một bộ xử lý
(6.2) Đây là bước khác biệt so với thuật toán tuần tự để đồng bộ hóa
dữ liệu, sau khi nhận dữ liệu ở (6.1) thì bộ xử lý chính kiểm tra
nếu với mọi cung (u, v) E, nếu h(u)>h(v)+1 thì bộ xử lý chính sẽ đổi nhãn cho đỉnh u, v như sau:
f(u, v)= f(u, v)+min{delta, c f (u, v); //deltalà độ lệch luồng của
đỉnh u
e(u)= e(u)–c f (u, v); e(v)= e(v)+c f (u, v)
Đưa đỉnh lệch mới vào tập Q
(6.3) Nếu u V mà e(u)=0 thì loại u ra khỏi tập Q
Quay lại bước 3
2.3.2.4 Ví dụ minh họa
2.3.2.5 Phân tích độ phức tạp thời gian
2.3.2.6 Kết quả thực nghiệm thuật toán
Trang 92.3.2.7 Kết luận
2.4 Thuật toán hỗn hợp đẩy kéo luồng
2.4.1 Thuật toán tuần tự kéo luồng sau
2.4.1.1 Giới thiệu
2.4.1.2 Các khái niệm cơ bản
Luồng sau (post-flow)
Cho ma ̣ng G =(V, E,c).Luồng sau là tập hợp các luồng trên
cung
f={f i, j |(i, j) E}
thỏa mãn
(i)0 f i, j c i, j(i, j)E
(ii) Vơ ́ i mo ̣i đỉnh k không phải nguồn hoă ̣c đích , luồng ra
không nhỏ hơn luồng vào, tức là:
j k E
k i
k
f
) ( )
(
Hình 2.13 Biểu diễn mức độ tăng tốc trên các bộ xử lý của
đồ thị 7000 đỉnh(nét liền) và 5000 đỉnh (nét đứt)
Trang 10Hàm độ sâu (depth function) của luồng sau trong mạng G=(V,
E, c) là tâ ̣p hơ ̣p các tro ̣ng số đỉnh không âm d(0), , d(|V|1) thỏa
d(a)= 0 vơ ́ i đỉnh nguồn a và d(u) + 1 d(v) vơ ́ i mo ̣i cung (u, v) trong mạng thặng dư Những cung (u, v) thỏa d(u) + 1 = d(v) gọi là các cung ưu tiên
2.4.1.3 Phương pha ́ p kéo luồng sau tổng quát
2.4.1.4 Thuâ ̣t toán kéo luồng sau
1 Khơ ̉i tạo: Xây dựng luồng sau xuất phát với các cung đi đến đỉnh
đích có luồng bằng khả năng thông qua , còn các cung khác có
luồng bằng 0 Chọn hàm độ sâu h(v) là độ dài đường đi ngắn nhất từ đỉnh nguồn a đến đỉnh v Đẩy các đỉnh lệch vào hàng đợi Q
2 Tiêu chuẩn dư ̀ ng : Nếu Q = ∅, luồng trước f trở thành luồng cực
đa ̣i Kết thúc Nếu Q ∅, sang bước 3
3 Xư ̉ lý đỉnh lê ̣ch: Lấy đỉnh lê ̣ch v từ hàng đợi
- Duyệt các cung ưu tiên (u, v)E f Kéo trên cung (u, v) một luồng
có giá trị min {delta, c f (u, v)}, trong đó delta (< 0) là độ lệch
luồng của đỉnh v Nếu đỉnh u là đỉnh lệch mới, thì đẩy đỉnh u vào hàng đợi Q
- Nếu đỉnh v vẫn còn lê ̣ch, thì tăng độ sâu của đỉnh v như sau:
d(v)=1+min{d(u) | (u, v) E f} Sau đó đẩy v vào hàng đợi Q Quay la ̣i bước 2
2.4.1.5 Ví dụ minh họa
2.4.2 Thuật toán tuần tự hỗn hợp đẩy kéo luồng tìm luồng cực đại
2.4.2.1 Phương pháp hỗn hợp đẩy kéo luồng tổng qua ́ t
Đây là phương pháp mới tìm luồng cực đại Kết hợp phương pháp đẩy luồng trước và phương pháp kéo luồng sau ở trên để xây dựng phương pháp hỗn hợp đẩy kéo luồng tổng quát như sau:
Trang 112.4.2.2 Thuâ ̣t toán hỗn hợp đẩy kéo luồng
Đây là thuâ ̣t toán cu ̣ thể thuô ̣c phương pháp h ỗn hợp đẩy kéo
luồng Ở đây các đỉnh lệch dương được đẩy vào hàng đợi Q+ và các
đỉnh lê ̣ch âm được đẩy vào hàng đợi Q
Với mỗi đỉnh lê ̣ch dương lấy từ hàng đợi Q+, ta sẽ đẩy luồng vào các cung ưu tiên một cách tối đa cho tới khi đỉnh trở thành không
lê ̣ch hoă ̣c không còn cung ưu tiên nữa Nếu không còn cung ưu tiên
nữa và đỉnh còn lê ̣ch thì ta tăng đô ̣ cao và đẩy nó vào hàng đợi Q+
Với mỗi đỉnh lê ̣ch âm lấy từ hàng đợi Q, ta sẽ kéo luồng vào các cung ưu tiên một c ách tối đa cho tới khi đỉnh trở thành không
lê ̣ch hoă ̣c không còn cung ưu tiên nữa Nếu không còn cung ưu tiên
nữa và đỉnh còn lê ̣ch thì ta tăng đô ̣ sâu và đẩy nó vào hàng đợi Q
2.4.2.3 Ví dụ minh họa
2.4.3 Thuật toán song song hỗn hợp đẩy kéo luồng tìm luồng cực đại
2.4.3.1 Giới thiệu
Thuật toán đẩy luồng trước, kéo luồng sau và thuật toán hỗn
hợp đẩy kéo luồng đều có độ phức tạp là O(|V|2|E|) Để giảm độ phức
tạp thời gian tính toán, ta xây dựng thuật toán song song hỗn hợp đẩy kéo luồng tìm luồng cực đại
2.4.3.2 Ý tưởng của thuật toán song song
Thuật toán song sẽ dùng 3 bộ xử lý, 1 bộ xử lý P0 quản lý dữ
liệu, gửi và nhận dữ liệu từ 2 bộ xử lý phụ (P1, P2) Trong 2 bộ xử lý phụ, một bộ xử lý P1 sẽ đẩy luồng từ Q+ và bộ xử lý P2 sẽ kéo luồng
từ Q- các bộ xử lý phụ kết thúc khi các Q+ và Q- là rỗng
2.4.3.3 Xây dựng thuật toán song song
-Đầu vào: Đồ thị G(V, E,c) với nguồn a, đích z, khả năng thông qua:
c={c |(i, j) E}
Trang 12- Bộ xử lý chính kiểm tra nếu Q + , Q - là rỗng và các bộ xử lý
P 1 và P 2 kết thúc, thì luồng f trở thành luồng cực đa ̣i, kết thúc
Ngược lại sang bước 3
Bước 3: Bộ xử lý chính thực hiện kiểm tra
- Bộ xử lý chính lấy đỉnh u từ Q + và y từ Q
Gửi h, e, f,u, Q + đến bộ xử lý P 1 Gửi d, e, f, đỉnh y, Q - đến bộ
xử lý P 2
- Bộ xử lý chính kiểm tra: Nếu với mọi cung ưu tiên (u, v) E f
và với mọi cung ưu tiên (x, y) E f mà u trùng với x hoặc y trùng với v thì sang bước 5 Ngược lại sang bước 4
Bước 4: Bộ xử lý phụ P 1 và P 2 thực hiện song song các công việc sau đây
- Hai bộ xử lý phụ nhận dữ liệu mà bộ xử lý chính P 0gửi đến
Trang 13Chuyển Q - , d, e, f về bộ xử lý chính
Quay lại bước 2
Bước 5: Hai bộ xử lý P 1 và P 2 thực hiện tuần tự
- Bộ xử lý phụ P 1 thực hiện
Nhận dữ liệu từ P 0 gửi đến ở bước 3
Đẩy luồng trước
đề và hệ quả liên quan đến các thuật toán đều được chứng minh rõ ràng Các thuật toán song song đều phân tích thời gian tính toán Đặc biệt, nội dung chính của chương này được chúng tôi công bố trong 3 bài báo chuyên ngành Công nghệ Thông tin và được liệt kê ở tài liệu [1], [3], [4] trong danh mục các công trình của tác giả
Trang 14CHƯƠNG 3 MỘT SỐ THUẬT TOÁN SONG SONG TÌM ĐƯỜNG ĐI NGẮN NHẤT VÀ TÌM LUỒNG CỰC
ĐẠI TRÊN MẠNG ĐỒ THỊ MỞ RỘNG
3.1 Đồ thị mở rộng
Cho đồ thị hỗn hợp G(V, E) với tập đỉnh V và tập cạnh E, trong
đó các cạnh có thể có hướng hoặc vô hướng Mỗi cạnh eE được gán trọng số w E (e) Với mỗi đỉnh vV, ký hiệu E v là tập các cạnh liên
thuộc đỉnh v Mỗi đỉnh v V và mỗi cạnh (e, e’)E vE v , e≠e’ được gán trọng số w V (v, e, e’)
Bộ (V, E, w E , w V) gọi là đồ thị mở rộng
3.2 Thuật toán tìm đường đi ngắn nhất trên đồ thị mở rộng
3.2.1 Thuật toán tuần tự
Thuật toán sử dụng các ký hiệu sau:
S là tập đỉnh đã tìm được đường đi ngắn nhất xuất phát từ s T=V-S;l(v) là độ dài đường đi ngắn nhất từ s đến v
VE={(v, e)|vV\{s}& eE v}{(s,∅)} là tập các đỉnh-cạnh
liên thuộc
SE là tập các đỉnh-cạnh bị loại khỏi VE
TE=VE-SE, L(v, e) là nhãn cặp đỉnh- cạnh (v, e)VE.P(v, e) là cặp đỉnh-cạnh trước (v, e)VE
Bước 1: (Khởi tạo)
Trang 15Đặt S =∅; T=V; VE={(v, e)|vV\{s}& eE V}{(s,∅)} SE=∅; TE=VE
Gán L(v, e)=∞,(v, e) VE, L(s, ∅):=0
Gán P(v, e)=∅(v, e) VE
Bước 2:Tính m = min{L(v, e)| (v, e)TE}
Nếu m=+∞, kết luận không tồn tại đường đi từ s đến t Kết thúc
Ngược lại, nếu m<+∞, chọn (vmin, emin)TE sao cho L(vmin,
emin)=m, đặt TE=TE-{(vmin, emin)}, SE=SE{(vmin, emin)}, sang
bước 3
Bước 3:Nếu vminS,thì đặt le(vmin) = emin, S = S vmin , l(vmin) = L(vmin, emin), T=T-{vmin}
Nếu t= vmin, sang bước 5, ngược lại sang bước 4
Bước 4:Với mỗi (v, e)TE kề (kề sau) (vmin, emin)
Đặt L ‟ (v, e) = L(vmin, emin) + w E(vmin, v)+ w V (vmin, emin, e) nếu
vmin s và L’(v, e) = L(s,∅) + w E (vmin, v) nếu vmin = s
Nếu L(v, e)>L’(v, e),thì gán L(v, e)=L ‟ (v, e) và P(v, e)= (vmin,
emin)
Quay về bước 2
Bước 5: (Tìm đường đi ngắn nhất)
Gán l(t)=L(t, le(t)) là chiều dài đường đi ngắn nhất từ s đến t
Từ t lần ngược theo đỉnh-cạnh trước ta nhận được đường đi
v
s k k1 1 Kết thúc
Định lý 3.1: Thuật toán tìm đường đi ngắn nhất giữa hai đỉnh trong
Trang 163.2.2.2.Ý tưởng của thuật toán song song
Thuật toán song song được xây dựng trên k bộ xử lý (P0, P1,…,
P k-1 ) Trong k bộ xử lý đó có một bộ xử lý chính (P0) quản lý dữ liệu,
chia dữ liệu cho k-1 bộ xử lý phụ (P1 ,…, P k-1) Các bộ xử lý phụ
nhận dữ liệu và tìm L(v, e) nhỏ nhất trên các đỉnh mà mình nắm giữ
và gửi về bộ xử lý chính Bộ xử lý chính sẽ tìm L(vmin, emin)=min(L i (v, e)), i=0 ,…, k-1) của các bộ xử lý phụ gửi đến Sau đó bộ xử lý chính
sẽ gửi (vmin, emin ) đến các bộ xử lý phụ để các bộ xử lý tiếp tục tính toán
3.2.2.3 Xây dựng thuật toán song song