Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
2,32 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ PHẠM HẢI ĐĂNG TỐIƯUHÓATRUYVẤNTÌMĐƯỜNGNGẮNNHẤTTRÊNĐỒTHỊĐỘNGQUYMÔLỚN Ngành: Hệ thống thông tin Chuyên ngành: Hệ thống thông tin Mã số: 60480104 TÓM TẮT LUẬN VĂN THẠC SĨ NGÀNH HỆ THỐNG THÔNG TIN Hà Nội – 2016 Giới thiệu chung Động lực nghiên cứu Hiện nay, sống thời đại bùng nổ công nghệ công tin bùng nổ mạng xã hội Một số mạng điển mạng xã hội (Facebook, Twitter), mạng sinh học, mạng phân tán nội dung, mạng lưới giao thông, mạng thông tin… có số lượng liệu tăng nhanh chóng mặt Để giải thách thức mặt liệu lớn trên, có nhiều phương pháp tiếp cận, phương pháp tiếp cận dựa đồthị cho trực quan phù hợp [8] Với việc sử dụng lý thuyết đồ thị, với đỉnh biểu diễn thực thể cạnh biểu diễn mối liên hệ chúng Trong đồ thị, tìmđường (ngắn nhất) vấn đề tìm kết nối hai đỉnh đồthị đảm bảo đườngngắn dựa số yêu cầu cho trước Đây vấn đề tảng áp dụng nhiều ứng dụng thực tế tìmđườngngắn hai địa điểm sử dụng GPS hay tìm mối liên kết hai người mạng xã hội [6] Vấn đề bình thường đơn giản, bối cảnh số lượng đỉnh, cạnh đồthịlớn (vài triệu đỉnh) thay đổi nhanh (thêm cạnh, bớt cạnh), làm để tốiưuhóa trình tìmđườngngắn thách thức lớn [21] Mục tiêu nội dung luận văn Với mục tiêu trên, luận văn trình bày giải pháp để cải thiện hiệu trình tốiưutruyvấnđồthị động, quymôlớn có hướng, không trọng số Phương pháp tốiưu dựa ý tưởng: cấu trúc liệu phù hợp, tốiưu không gian tìm kiếm cài đặt phù hợp Tổ chức luận văn Nội dung luận văn tổ chức sau: Mở đầu: Đặt vấn đề Chương 1: Giới thiệu sở lý thuyết, vấn đề liên quan đến đồthị toán tìmđườngngắnđồthị Chương 2: Trình bày toán, cách tiếp cận phương pháp giải toán Chương 3: Thực nghiệm kết đạt Kết luận chung: Kết luận đưa hướng phát triển Chương Cơ sở lý thuyết vấn đề liên quan 1.1 Đồthị Trước tìm hiểu lý thuyết đồ thị, xét ví dụ mạng xã hội nhỏ [7] sau: Hình 1.1: Mạng xã hội Đây ví dụ đồthị Tên người đỉnh, đường liên kết hai người cạnh Chúng ta thường biểu diễn liên kết hai đỉnh u v cặp (u, v) Bởi quan hệ “biết nhau” quan hệ hai chiều, nên ví dụ đồthị vô hướng Trong đồthị vô hướng cạnh (u, v) tương tự cạnh (v, u) Trong đồthị có hướng, quan hệ “biết nhau” không hai chiều nữa, người A biết người B chưa người B biết người A Nhìn đồ thị, An Sơn biết thông qua Linh Hạnh Đây đườngngắn hai đỉnh An Sơn Chúng ta đánh dấu đườngngắn Hình 1.2 Hình 1.2: Đường mạng xã hội Khi đường xuất phát từ đỉnh quay lại nó, gọi chu trình Ví dụ từ An Bình tới Cường, Linh cuối quay lại An Thực ra, có chu trình ngắn từ An qua Bình tới Linh quay lại An Hình 1.3: Chu trình mạng xã hội Trong mạng xã hội, sử dụng trọng số để xác định mức độ biết hai người Một ví dụ cụ thể khác đồthị có trọng số đồđường Giả sử tất đường hai chiều, đồđườngđồthị vô hướng, giá trị trọng số số biểu diễn khoảng cách thành phố Ví dụ Hình 1.4 mô tả khoảng cách số tỉnh thành phía Bắc nước Việt Nam Hình 1.4: Bản đồ khoảng cách số tỉnh thành phía Bắc Trong trường hợp đồđường đi, muốn tìmđườngngắn vị trí, phải tìm kiếm đường qua vị trí trung gian cho tổng trọng số nhỏ Ví dụ đồ Hình 1.4, đườngngắn từ Hà Nội tới Hạ Long, qua Hải Dương, Hải Phòng Tổng cộng đoạn đường có chiều dài 163km Mối quan hệ hai đỉnh lúc hai chiều Lấy ví dụ, đồđường đi, gặp đường chiều Để biểu diễn có hướng này, cạnh thêm dấu mũi tên cuối đồthị gọi đồthị có hướng Ví dụ Hình 1.5 mô tả mạng xã hội có hướng Dễ nhận thấy, đồthị Hình 1.5 chu trình, đồthị gọi có hướng không chu trình Hình 1.5: Mạng xã hội có hướng Như thấy, đồthị có nhiều ứng dụng biểu diễn vật, mối quan hệ vật giới thực Phần tiếp theo, luận văn trình bày số lý thuyết tảng đồthị 1.1.1 Giới thiệu đồthịĐồthị (G), kí hiệu G = (V, E) bao gồm tập đỉnh (V) tập cạnh (E) Trong cạnh E nối hai đỉnh thuộc tập đỉnh (V) kí hiệu E = (u, v) (Đỉnh u nối với đỉnh v) Ví dụ đồthị đưa Hình 1.6 Hình 1.6: ĐồthịĐồthị phân loại dựa sau: Đơn đồthị vô hướng, Đa đồthị vô hướng, Giả đồthị vô hướng, Đơn đồthị có hướng, Đa đồthị có hướng 1.1.2 Một số thuật ngữ Bậc đỉnh Bậc đỉnh v đồthị G = (V, E) ký hiệu deg(v) số cạnh liên thuộc với nó, riêng khuyên đỉnh tính hai lần cho bậc Trong đồthị có hướng, bậc đỉnh v chia thành bậc (số lượng cạnh nối tới đỉnh v, kí hiệu deg+(v)) bậc (số lượng cạnh nối từ đỉnh v, kí hiệu deg-(v)) Đường chu trình, đồthị liên thông Trong đồthị vô hướng, đườngđộ dài n từ đỉnh u đến đỉnh v, n số nguyên dươngđồthị vô hướng G = (V, E) dãy x0, x1, …, xn-1, xn | u = x0, v = xn, (xi, xi+1) ∈ E, i = 0, 1, , n-1 dãy cạnh: (x0, x1), (x1, x2), , (xn-1, xn) Đỉnh u gọi đỉnh đầu, đỉnh v gọi đỉnh cuối đườngĐường có đỉnh đầu trùng với đỉnh cuối (tức u = v) gọi chu trình Đường hay chu trình gọi đơn cạnh bị lặp [1] Đồthị vô hướng G = (V, E) gọi liên thông tìmđường hai đỉnh 1.1.3 Biểu diễn đồthị Trong phần này, luận văn giới thiệu bốn cấu trúc liệu để biểu diễn đồthị Trong cấu trúc, phần biểu diễn đỉnh giữ nguyên, nhiên phần biểu diễn cạnh lại hoàn toàn khác Đồthị Hình 1.7 sử dụng cho toàn ví dụ phần 1.1.3 Hình 1.7: Đồthị có hướng Danh sách cạnh (Edge list) Trong biểu diễn đồthị theo danh sách cạnh, tất cạnh e thuộc E lưu dạng hai phần tử (vi, vj) danh sách lưu trữ Danh sách kề (Adjacency list) Trong biểu diễn đồthị danh sách kề, với đỉnh u, ta lưu trữ tất đỉnh v kề với Ma trận liên thuộc (Incidence matrix) Ma trận liên thuộc đỉnh – cạnh đồthị G = (V, E) đồthị |V| x |E|, phần tử hàng thứ i cột thứ j i đỉnh đầu cung thứ j, -1 i đỉnh cuối cung thứ j trường hợp lại Ma trận kề (Adjaceny matrix) Ma trận kề đồthị G = (V, E) đồthị |V| x |V|, phần tử hàng thứ i cột thứ j tồn cung (i, j) đồ thị, trường hợp ngược lại Một số thống kê độ phức tạp số phương phức trình bày Bảng 1.1 Giả sử n: số đỉnh, m: số cạnh, dv: bậc đỉnh v Bảng 1.1: Một số thống kê độ phức tạp số phương phức đồthị [9] Phương thức Danh sách Danh sách Ma trận Ma trận kề cạnh kề liên thuộc numVertices( ) Trả số lượng đỉnh đồthị O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(n) O(n) O(n) O(n) O(m) O(m) O(m) O(m) O(m) O(min(du , dv)) O(m) O(1) numVertices( ) Trả số lượng cạnh đồthị vertices( ) Trả phép duyệt tất đỉnh đồthị edges( ) Trả phép duyệt tất cạnh đồthị getEdge(u, v) Kiểm tra xem cạnh (u, v) có tồn không? outDegree(v) inDegree(v) Trả số lượng đỉnh vào đỉnh nốt v O(m) O(1) O(m) O(n) O(m) O(dv ) O(m) O(n) O(1) O(1) O(m×n) O(n2) O(m) O(dv) O(m×n) O(n2) O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) Θ(n) Θ(m+n) Θ(m×n) Θ(n2) outgoingEdges(v) incomingEdges(v) Trả phép duyệt tất đỉnh vào đỉnh nốt v insertVertex(x) Thêm đỉnh vào đồthị removeVertex(v) Xóa đỉnh đồthị insertEdge(u, v) Thêm cạnh vào đồthị removeEdge(u, v) Xóa cạnh đồthị Không gian lưu trữ 1.1.4 Các thuật toán tìm kiếm đồthị ứng dụng Trong đồ thị, toán duyệt qua tất đỉnh đồthị cho đỉnh thăm lần toán quan trọng thu hút quan tâm nghiên cứu nhiều nhà khoa học Trong mục này, luận văn trình bày hai thuật toán duyệt đồthị bản: thuật toán tìm kiếm theo chiều sâu (Depth First Search – DFS) thuật toán tìm kiếm theo chiều rộng (Breadth First Seach – BSF) Hai thuật toán làm sở để giải số toán quan trọng lý thuyết đồthị 1.2 Bài toán tìmđườngngắn Trong ứng dụng thực tế, toán tìmđườngngắn hai đỉnh đồthị có ý nghĩa to lớn Ví dụ, toán tìmđườngngắn hai điểm đồ (có thể ngắn thời gian, khoảng cách…) Hiện nay, có nhiều phương pháp để giải toán thông thường, thuật toán xây dựng sở lý thuyết đồthịdường cho hiệu cao Trong phần luận văn đề cập đến số toán tìmđườngngắn Bài toán tìmđườngngắn áp dụng cho đồthị G = (V, E) có hướng, có trọng số với trọng số hàm w: Ε ⟹ % ánh xạ cạnh với giá trị thực Khi đó, chi phí w(p) đường p = (v0, v1, …, vk) tổng trọng số cạnh kết hợp thành đường / & ' = & *+,- , *+ +0- Tổng quát phát biểu: tìmđườngngắn xuất phát từ đỉnh đầu s đến đỉnh cuối t, (s,t ∈ V) Độ dài đường ký hiệu d(s,t) (khoảng cách từ s đến t) Nếu không tồn đường từ s tới t d(s,t)=∞ Vấn đề tìmđườngngắnđồthị có toán bản: tìmđườngngắn xuất phát từ đỉnh tìmđườngngắn tất cặp đỉnh Phần lớn thuật toán tìm khoảng cách xây dựng nhờ kỹ thuật tính toán từ ma trận trọng số w[u, v], u,v ∈ V, cận d[v] khoảng cách từ s đến tất đỉnh v ∈ V tính Mỗi biểu thức sau thỏa mãn d[u] + w[u, v] < d[v] ta gán d[v] = d[u] + w[u, v] Quá trình tiếp tục tất đỉnh kề với cạnh bước duyệt Kết d[v] khoảng cách ngắn s t Sau đây, luận văn trình bày chi tiết thuật toán tìmđườngngắn BELLMAN-FORD, DIJKSTRA’S, FLOYDWARSHALL, BFS, BBFS 1.3 Tổng kết chương Chương trình bày vấn đề tổng quát đồ thị, số thuật ngữ đồ thị, đường chu trình, đồthị liên thông, biểu diễn đồthị máy tính, thuật toán tìm kiếm đồthị ứng dụng Phần cuối chương, luận văn đề cập đến toán tìmđườngngắn giải thuật để giải toán Điều làm sở để tiếp cận giải toán trình bày chương Chương Bài toán, cách tiếp cận phương pháp giải Trong phần luận văn trình bày chi tiết toán, cách tiếp cận toán sâu vào hướng giải toán 2.1 Định nghĩa toán Tổng quát Mục tiêu toán trả lời truyvấntìmđườngngắn đơn đồ thị, động, có hướng không trọng số, với quymô liệu lớn nhanh Sự động (thay đổi) đồthị có nghĩa có kiện thay đổi liệu cấu trúc đồ thị, cụ thể hai kiện thêm cạnh (Addition) xóa cạnh (Deletion) Từ đó, có tất ba kiện xảy đồthị miêu tả cụ thể đây: Sự kiện 1: [Query: u v (Q u v)]: Sự kiện truyvấn khoảng cách ngắn từ đỉnh u đến đỉnh v Nếu đường hai đỉnh không tồn đỉnh u hay v đồthị kết trả -1 Khoảng cách từ đỉnh tới Sự kiện 2: [‘A’/add: u v (A u v)]: Sự kiện mô tả thay đổi đồthị thêm cạnh từ đỉnh u đến đỉnh v Nếu cạnh tồn tại, đồthị không thay đổi Nếu hai đỉnh cạnh thêm chưa có phải thêm vào đồthị Sự kiện 3: [‘D’/delete: u v (D u v)]: Sự kiện mô tả thay đổi đồthị xóa cạnh nối từ đỉnh u đến đỉnh v Nếu cạnh không tồn tại, đồthị không thay đổi Dữ liệu vào ban đầu Dữ liệu vào ban đầu biểu diễn dạng danh sách cạnh, cạnh bao gồm cặp hai định danh hai đỉnh (đỉnh bắt đầu đỉnh kết thúc cạnh) Định danh biểu thị số nguyên dương Định danh lớn biểu diễn 232-1 Đầu vào chương trình dòng biểu diễn cạnh đồ thị, dòng chứa xác hai số nguyên dương theo định dạng chuẩn ASCII ngăn cách dấu cách Kí tự ‘S’ dòng cuối báo hiệu kết thúc trình nhập liệu đồthị Ví dụ: Hình 2.1, liệu đầu vào bên trái biểu diễn đồthị bên phải vấn đề phân tán vấn đề tính toán song song Tuy nhiên, giống NetworkX SNAP C++, chúng không thích hợp cho toán tìmđườngngắn hai điểm đồthị thay đổi, trường hợp nhiều cạnh đỉnh liên tục thêm vào xóa Liên quan đến đồthị thay đổi, nhiều nhà nghiên cứu trọng đến vấn đề [15] [19] [21] cho thấy khối lượng công việc toán tìmđườngngắnlớn Để áp dụng sức mạnh xử lý đa luồng [2] [3] [13] [14], miêu tả cấu trúc phù hợp song song hóa thuật toán duyệt đồthị theo chiều rộng đồthịlớn Nhưng hành động thêm cạnh hay xóa cạnh chưa ý hệ thống Các thư viện xử lý song song ngôn ngữ lập trình C/C++ OpenMP Hình 2.3: Giới thiệu OpenMP Pthread (POSIX Thread) Hình 2.4: Giới thiệu Pthread Intel Cilk Plus Hình 2.5: Song song hóatruyvấn Cilk Plus 11 2.3 Cách tiếp cận giải toán Để giải toán này, bước phải tìm cấu trúc liệu để biểu diễn đồthị máy tính Sau tìm cấu trúc liệu phù hợp, phải tìm phương pháp để ba phép toán tìm khoảng cách ngắn nhất, thêm cạnh, xóa cạnh chạy nhanh Cuối cùng, dựa vào công nghệ đa luồng máy tính có nhiều chíp xử lý, tận dụng để song song hóa trình tìmđườngngắntruyvấn liên tiếp Chi tiết phương pháp giải toán trình bày phần 2.4 Cấu trúc liệu phù hợp Hiện nay, việc xử lý lệnh bên CPU nhanh nhiều so sánh với việc lấy liệu từ nhớ Dựa kiến trúc nhớ đệm CPU, chương trình xử lý liệu lớn, liệu tổ chức liên tiếp dường cách tốt để tăng tỉ lệ cache hit Bảng 2.1: Độ trễ nhớ 2016 Thời gian (ns) L1 cache 0.5 Branch mispredict L2 cache reference Mutex lock/unlock 17 Main reference 100 memory Ghi >2 ALU instruction latency x L1 cache 25xL2 cache, 200xL1 cache Trong đồ thị, cách đơn giản thuận tiện để biểu diễn đỉnh đồthị định nghĩa dạng số nguyên dươngDo vậy, đồthị có |V| đỉnh đỉnh có định danh từ đến |V| - Trong phương pháp trình bày phần 1.1.3, danh sách kề cách thích hợp để biểu diễn đồthịđộngquymôlớn không gian lưu trữ tương đối nhỏ Θ(|V| + |E|) thuận tiện để thêm xóa đỉnh, cạnh Với danh sách kề đồthị biểu diễn theo hai cách sau: Danh sách kề đỉnh vào đồthịĐồthị biểu diễn danh sách đỉnh vào nốt liên tiếp (incoming_edges) mảng số vào (incoming_index) để lấy danh sách đỉnh vào nốt 12 Danh sách kề đỉnh đồthị Tương tự danh sách kề đỉnh vào đồ thị, đồthị biểu diễn danh sách đỉnh nốt liên tiếp (outgoing_edges) mảng số (outgoing_index) để lấy danh sách đỉnh nốt Hình 2.6: Cấu trúc liệu đồthị Cụ thể, đồthị G biểu diễn mảng incoming_edges, incoming_index, outgoing_edges, outgoing_index Nhờ vào việc sử dụng danh sách đỉnh vào đỉnh nốt, duyệt đồthị từ hai phía (Bi-directional BFS) 2.5 Tốiưu trình thêm xóa cạnh đồthị 2.5.1 Thêm cạnh Vấn đề đặt làm cạnh thêm vào đồthị với thời gian nhanh Khi sử dụng danh sách liền kề truyền thống để biểu diễn đồ thị, chiến lược dùng để thêm cạnh sau Chèn vào mảng Trước thêm cạnh vào đồ thị, vị trí phần tử đỉnh vào/ra nốt xác định Tất phần tử đỉnh vào/ra nốt dịch sang phải ví trị để dành vị trí trống cho đỉnh vào/ra cạnh thêm vào Quá trình miêu tả Hình 2.7 Hình 2.7: Thêm cạnh cách chèn vào mảng 13 Thực tế cho thấy rằng, phương pháp thích hợp với đồthị có kích thước nhỏ Vì liệu đồthị lớn, số cạnh lên đến hàng triệu, số lượng đỉnh đỉnh vào nhiều, chi phí để di chuyển tất phần tử nốt sang phải vị trí không nhỏ Cấp phát trước khoảng trống Để giảm bớt chi phí di chuyển tất phần tử nốt sang phải vị trí thêm đỉnh vào/ra, khoảng trống đỉnh vào/ra nốt cấp phát trước Điều cho phép tốiưu trình thêm cạnh Quá trình miêu tả Hình 2.8 Hình 2.9 Hình 2.8: Cấu trúc liệu danh sách kề cấp phát trước khoảng trống Hình 2.9: Thêm cạnh cách cấp trước khoảng trống Tuy nhiên, mảng danh sách cạnh liền kề biểu diễn đồthị bị hổng nhiều, dẫn đến tăng tỉ lệ cache miss duyệt đồthị Di chuyển phần tử xuống cuối mảng Hình 2.10: Quá trình thêm cạnh 14 Trước thêm vào đỉnh vào/ra nốt, tất phần tử nốt chuyển xuống cuối mảng, sau thêm đỉnh Quá trình miêu tả Hình 2.10 Đối với toán cụ thể này, phương án "Di chuyển phần tử xuống cuối mảng" cho kết tốt phương án "Cấp phát trước khoảng trống" Bởi cấu trúc liệu đỉnh xếp liền kề, phương án cho phép đỉnh nằm vị trí liên tiếp nhiều hơn, phương án cho nhiều khoảng trống đỉnh Dựa vào phân tích tốiưu phần trên, phương án cho tỉ lệ cache miss hơn, tăng hiệu hệ thống Và cuối cùng, phương án lựa chọn để sử dụng trình thêm cạnh 2.5.2 Xóa cạnh Dựa cấu trúc đồthị trên, cần thay đổi giá trị số lượng đỉnh vào/ra mảng số incoming_index /outgoing_index xóa đỉnh nối mảng danh sách đỉnh vào/ra Quá trình miêu tả Hình 2.11 Hình 2.11: Quá trình xóa cạnh 2.6 Tốiưu trình xử lý truyvấntìmđườngngắn Trong trình xử lý truyvấntìmđườngngắn nhất, thuật toán duyệt đồthị theo chiều rộng sử dụng Thuật toán xem phương pháp tốiưuđồthịquymô lớn, có hướng, có/không trọng số [3] [11] Một điểm cần ý với thuật toán khả song song hóa chạy nhiều luồng, nhiều CPU Bởi vậy, chiến lược để giải toán xử lý song song truyvấn liên tiếp Chiến lược giải thích chi tiết 15 2.6.1 Cải thiện thuật toán tìmđườngngắn từ hai hướng Thuật toán duyệt đồthị theo chiều rộng sử dụng với trình duyệt từ hai hướng (đỉnh đầu đỉnh kết thúc) sử dụng hai mảng đỉnh vào (incoming_array) đỉnh (outgoing_array) Dự đoán hướng lần lặp Trong thuật toán duyệt đồthị theo chiều rộng từ hai hướng bình thường, nhánh có số lượng đỉnh hàng đợi duyệt ưu tiên Ví dụ Hình 2.12, cần tìmđườngngắn đỉnh đỉnh Khi sử dụng thuật toán bản, tổng cộng + + = đỉnh phải cho danh sách hàng đợi duyệt Thay duyệt theo hướng đỉnh ra, duyệt theo hướng đỉnh vào Khi đó, số lượng đỉnh cần phải cho vào danh sách hàng đợi duyệt lại + = Do vậy, không so sánh tổng số đỉnh vào đỉnh mức 1, mà so sánh với mức thứ Điều giảm thiểu thời gian tìmđườngngắn Hình 2.12: Thứ tự duyệt đỉnh thuật toán duyệt đồthị theo chiều rộng từ hai hướng 2.6.2 Song song hóatruyvấntìmđườngngắn Cilk Plus sử dụng cho trình song song hóa Trong trình thực hiện, OpenMP Pthread đượ thử nghiệm Tuy nhiên, toán cụ thể trình bày luận văn này, Cilk Plus cho kết tốt Cilk Plus thực trình song song hóa theo Hình 2.5 2.7 Tổng kết chương Chương trình bày chi tiết toán cần giải vấn đề liên quan đến toán Phần luận văn trình bày cách tiếp cận giải toán phương pháp giải toán dựa cấu trúc liệu, trình thêm, xóa cạnh trình truy cấn tìmđườngngắn Dựa vào phân tích chương 2, chương trình bày cụ thể phương pháp cài đặt kết thực nghiệm giải thuật 16 Chương Thực nghiệm đánh giá Để kiểm nghiệm phương pháp tìmđườngngắnđồthị động, quymô lớn, thuật toán sử dụng để tham gia thi lập trình ACM Sigmod năm 2016 (ACM Sigmod Programming Contest 2016) chọn năm đội xuất sắc giải Bên cạnh đó, liệu lớn từ SNAP [5] dùng để đánh giá phương pháp 3.1 Cài đặt Ba kiện cài đặt hàm exec_queries, add_edge, del_edge Chi tiết cài đặt miêu tả Thủ tục Thủ tục 1: Xử lý tổng hợp kiện Để tích hợp trình song song hóatruyvấntìmđườngngắn nhất, trước thêm cạnh, tất truyvấntìmđườngngắn danh sách trước thực Thủ tục để thêm cạnh (u, v) vào đồthị G mô tả Thủ tục 2: Thêm cạnh (u, v) vào đồthị G Để tích hợp trình song song hóatìm khoảng cách ngắn nhất, trước thực xóa cạnh, tất truyvấntìmđườngngắn danh sách trước thực Thủ tục xóa cạnh (u, v) đồthị G mô tả 17 Thủ tục 3: Xóa cạnh (u, v) đồthị G Thủ tục quan trọng tìmđườngngắn hai đỉnh (u, v) mô tả cụ thể Thủ tục Thủ tục 4: Tìmđườngngắn hai đỉnh (u, v) theo phương pháp duyệt đồthị theo chiều rộng từ hai hướng cải tiến 18 Sử dụng cách thức thao tác trực tiếp đến bit, dùng thứ tự bit để đánh dấu đỉnh đồthị (đỉnh chưa xét giá trị bit=0, đỉnh xét giá trị bit=1) thay dùng mảng giảm không gian nhớ thơi gian thi hành Hình 3.1: Thời gian thực thi hai phép toán thao tác mảng bit Cilk Plus dùng để song song hóa thủ tục tìmđườngngắn Thủ tục 5: Xử lý song song truyvấn liên tiếp đồthị G 3.2 Thực nghiệm 3.2.1 Cuộc thi ACM Sigmod Contest 2016 Trong thi này, liệu đồthịlớn dùng để đánh giá giải pháp đội Mỗi bao gồm tập trình thêm cạnh, xóa cạnh, truyvấntìmđườngngắn liên tục Bảng 3.1 thống kê chi tiết thông số liệu kiểm tra ACM Sigmod Bảng 3.1:Thống kê liệu ACM Sigmod Thông số Small Medium X-Large XX-Large Đỉnh 1574074 2000000 1971281 6009555 Cạnh 3232855 5000000 5533214 16518948 Bậc lớn 114557 90412 12 779 Bậc lớn 114125 356364 12 770 Cấu hình máy kiểm nghiệm ban tổ chức 19 CPU: x Intel E5-2620v2 (12 cores / 24 threads), RAM: 20GB, Hệ điều hành: Ubuntu 14.04 Linux, Phần mềm: Automake 1.15, gcc5.2.1 Kết giải pháp cài đặt ngôn ngữ lập trình C Bảng 3.2: Kết thi ACM Sigmod (tính theo giây) Bộ liệu Đội Small Medium X-Large XX-Large 0.118 0.494 1.284 2.878 0.107 0.220 0.886 2.333 0.208 0.217 1.085 2.123 0.157 0.234 1.150 2.597 0.134 0.072 1.087 3.239 akgroup (giải pháp luận văn/đồng giải ba) H_minor_free (giải nhất) uoa_team (giải nhì) while1 (đồng giải ba) gStreamPKU (đồng giải ba) 3.2.2 Kiểm nghiệm với liệu từ SNAP Hai liệu phù hợp với mô hình chọn LiveJournal Pokec Chi tiết hai liệu miêu tả Bảng 3.3 Bảng 3.3: Thống kê liệu LiveJournal Pokec Thông số LiveJournal Pokec Đỉnh 4847571 1632803 Cạnh 68993773 30622564 16 11 Bậc lớn 20293 8763 Bậc lớn 13906 13733 Độ dài khoảng cách lớn Cấu hình máy kiểm nghiệm CPU: x Intel Xeon E7- 4850 (10 cores / 20 threads, RAM: 128GB, Hệ điều hành: CentOS 6.7 Linux, Phần mềm: Automake 1.15, gcc5.2.0 20 Khối lượng kiểm nghiệm Với đồ thị, kiểm thử khoảng 1.000.000 kiện sinh với tỉ lệ truy vấn/thêm cạnh/xóa cạnh 8/1/1 tương ứng Thực chất, có khoảng 800.000 truy vấn, 100.000 thêm cạnh 100.000 xóa cạnh Kết thử nghiệm Mỗi phương pháp chạy lần, sau lấy kết trung bình Giải pháp Bảng 3.4: Kết thử nghiệm (mili giây) Bộ liệu Sigmod Test Pokec Live Journal 787 17 985 42 876 825 674 903 068 53 235 981 Snap 48 741 49 316 108 ~ ngày H_minor_free 422 047 15 673 Uoa_team 110 17 526 14 724 Chưa xác Chưa xác Chưa xác 2918 134 12 085 Giải pháp luận văn Reference While1 gStreamPKU Bên cạnh đó, luận văn so sánh phương pháp giải pháp thay đổi số lượng luồng xử lý truyvấn Kết chi tiết miêu tả Hình 3.2, Hình 3.3 Hình 3.4 Milliseconds SIGMOD TEST 10000 5000 16 24 32 48 Number of Threads Thesis H_miror_free uoa_team gStreamPKU Hình 3.2: Kết thử nghiệm với liệu SIGMOD TEST 21 Milliseconds POKEC 100000 50000 16 24 32 48 Number of Threads Thesis H_miror_free uoa_team gStreamPKU Hình 3.3: Kết thử nghiệm với liệu POKEC Milliseconds LIVEJOURNAL 200000 100000 16 24 32 48 Number of Threads Thesis H_miror_free uoa_team gStreamPKU Hình 3.4: Kết thử nghiệm với liệu LIVEJOURNAL Kết thu cho phép kết luận giải pháp đưa luận văn đạt hiệu cao Dựa vào việc sử dụng cấu trúc liệu hợp lý, kiểm tra tổng số đỉnh vào đỉnh mức thuật toán duyệt đồthị theo chiều rộng từ hai hướng sử dụng Intel Cilk Plus để song song hóa trình truyvấn phương pháp để giảm tối thiểu thời gian xử lý truyvấntìmđườngngắnđồthịđộngquymôlớn 3.3 Tổng kết chương Chương trình bày chi tiết phương án cài đặt dựa phân tích chương Bên cạnh đó, luận văn so sánh kết thực nghiệm với hai thư viện NetworkX Snap, so sánh cụ thể với bốn đội đạt kết tốt thi lập trình ACM Sigmod 2016 Kết thu cho phép kết luận phương án luận văn đạt hiệu tốt 22 Kết luận chung Các đóng góp Sau thời gian nghiên cứu tìm hiểu đề tài, luận văn hoàn thành đạt nội dung đề với mục tiêu tốiưutruyvấntìmđườngngắn đơn đồ thị, động, có hướng, không trọng số với quymô liệu lớn Về lý thuyết, luận văn trình bày số kiến thức đồ thị, dạng đồthị ứng dụng lý thuyết đồthị toán cụ thể đời sống Tiếp theo, luận văn trình bày bốn mô hình liên quan đến việc cài đặt đồthị thực tế phân tích ưu, nhược điểm mô hình Bên cạnh đó, luận văn trình bày toán tìmđườngngắnđồ thị, thuật toán hay sử dụng ứng dụng toán thực tiễn Kế tiếp, luận văn trình bày công cụ mã nguồn mở, vấn đề liên quan xử lý toán liên quan đến đồ thị, kết hợp với đánh giá mặt thuận lợi khó khăn áp dụng với đơn đồ thị, động, có hướng, không trọng số với quymô liệu lớn Về thực nghiệm, luận văn đưa phương pháp để cải thiện trình tìmđườngngắn nhất, cài đặt hoàn chỉnh mã nguồn ngôn ngữ C Phương pháp kiểm nghiệm thi lập trình ACM Sigmod 2016 cho kết khả quan Thêm vào đó, thuật toán luận văn so sánh với số công cụ mã nguồn mở cho xử lý toàn liên quan đến đồthị tốt với bốn đội xuất sắc từ thi lập trình ACM Sigmod 2016 hai LiveJournal Pokec Kết cho thấy phương pháp đạt kết tốt dựa việc sử dụng cấu trúc liệu phù hợp, tốiưu thuật toán duyệt đồthị theo chiều rộng từ hai hướng, sử dụng công cụ Cilk Plus để song song hóa trình truyvấn Hướng phát triển Dựa đó, hướng phát triển đề tài tốiưuhóa thuật toán, áp dụng phương pháp khác vào trình tìm kiếm đườngngắn tính toán trước hay dự kiến đườngngắn hai đỉnh qua số đỉnh trung gian Từ giảm nhiều thời gian tính toán lần lại phải tính toán lại từ đầu đườngngắn Tiếp theo áp dụng kỹ thuật giảm tỉ lệ cache miss CPU cho toán cần hiệu cao khác xử lý giao dịch trực tuyến (Online Transaction Processing) 23 Danh mục công trình khoa học tác giả Phuong-Hanh DU, Hai-Dang PHAM, Ngoc-Hoa NGUYEN, "Optimizing the Shortest Path Query on Large-Scale Dynamic Directed Graph", Proceedings of the 3rd IEEE/ACM International Conference on Big Data Computing Applications and Technologies (BDCAT 2016), Shanghai, China, 2016 (Accepted) Tài liệu tham khảo Tiếng Việt [1] Nguyễn Đức Nghĩa, Nguyễn Tô Thành, Toán rời rạc Nhà xuất Đại học Quốc gia Hà Nội, 2006 Tiếng Anh [2] Dip Sankar Banerjee, Shashank Sharma, and Kishore Kothapalli, "Work efficient parallel algorithms for large graph exploration," in 20th Annual International Conference on High Performance Computing, 2013, pp 433 - 442 [3] Venkatesan T Chakaravarthy, Fabio Checconi, Fabrizio Petrini, and Yogish Sabharwal, "Scalable Single Source Shortest Path Algorithms for Massively Parallel Systems," in Parallel and Distributed Processing Symposium, 2014 IEEE 28th International, 2014, pp 889 - 901 [4] Cilk Plus [Online] https://www.cilkplus.org [5] Stanford Large Network Dataset http://snap.stanford.edu/data/index.html Collection [Online] [6] The ACM SIGMOD Programming Contest (2016) [Online] http://dsg.uwaterloo.ca/ sigmod16contest/ [7] Tom Cormen and Devin Balkcom KHANACADEMY [Online] https://www.khanacademy.org/computing/computerscience/algorithms/ [8] Jayanta Mondal and Amol Deshpande, "Managing large dynamic graphs efficiently," in ACM SIGMOD International Conference on Management of Data, 2012, pp 145-156 24 25 ... 2.6 Tối ưu trình xử lý truy vấn tìm đường ngắn Trong trình xử lý truy vấn tìm đường ngắn nhất, thuật toán duyệt đồ thị theo chiều rộng sử dụng Thuật toán xem phương pháp tối ưu đồ thị quy mô lớn, ... song hóa truy vấn tìm đường ngắn nhất, trước thêm cạnh, tất truy vấn tìm đường ngắn danh sách trước thực Thủ tục để thêm cạnh (u, v) vào đồ thị G mô tả Thủ tục 2: Thêm cạnh (u, v) vào đồ thị G... duyệt đồ thị theo chiều rộng từ hai hướng sử dụng Intel Cilk Plus để song song hóa trình truy vấn phương pháp để giảm tối thiểu thời gian xử lý truy vấn tìm đường ngắn đồ thị động quy mô lớn 3.3