Những vấn đề cơ bản và một số thuật toán trên đồ thị (

49 138 0
Những vấn đề cơ bản và một số thuật toán trên đồ thị (

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI KHOA TOÁN ************* NGUYỄN THÚY LINH NHỮNG VẤN ĐỀ BẢN MỘT SỐ THUẬT TỐN TRÊN ĐỒ THỊ KHĨA LUẬN TỐT NGHIỆP ĐẠI HỌC Chuyên ngành Ứng dụng Ngƣời hƣớng dẫn khoa học TS TRẦN MINH TƢỚC HÀ NỘI – 2014 LỜI CẢM ƠN Trong q trình thực khố luận em nhận nhiều giúp đỡ quý báu bổ ích từ thầy bạn bè Em xin chân thành cảm ơn thầy khoa Toán trường Đại học Sư phạm Hà Nội tận tâm giảng dạy, truyền thụ kiến thức kinh nghiệm q báu để em hồn thành tốt khố học Đặc biệt, em xin bày tỏ lòng cảm ơn sâu sắc tới thầy Trần Minh Tƣớc, thầy trực tiếp hướng dẫn, nhiệt tình giúp đỡ bảo em suốt q trình thực khố luận Em xin chân thành cảm ơn thầy tổ toán Ứng dụng – khoa Toán, thư viện nhà trường, gia đình bạn bè tạo điều kiện, động viên, giúp đỡ để em hoàn thành khố luận Xn Hòa, ngày 06 tháng năm 2014 Sinh viên Nguyễn Thúy Linh LỜI CAM ĐOAN Tôi cam đoan khoá luận “Những vấn đề số thuật toán đồ thị” kết nghiên cứu hướng dẫn TS.Trần Minh Tƣớc Tôi xin khẳng định kết nghiên cứu khố luận khơng chép kết tác giả khác Nếu sai sót tơi xin chịu hồn tồn trách nhiệm Xn Hòa, ngày 06 tháng năm 2014 Sinh viên Nguyễn Thúy Linh MỤC LỤC MỞ ĐẦU Chương MỘT SỐ KIẾN THỨC BẢN VỀ ĐỒ THỊ Một số khái niệm đồ thị 1.1 Định nghĩa đồ thị 1.2 Các thuật ngữ 1.3 Một số đồ thị đặc biệt Biểu diễn đồ thị 11 2.1 Biểu diễn đồ thị ma trận kề, ma trận trọng số 11 2.2 Ma trận liên thuộc 13 2.3 Ý nghĩa cách biểu diễn đồ thị 14 Chương MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ 16 Bài toán duyệt đồ thị 16 1.1 Thuật tốn tìm kiếm theo chiều sâu DFS (Depth First Search) 16 1.2 Thuật tốn tìm kiếm theo chiều rộng BFS (Breath First Search) 20 1.3 Ý nghĩa toán duyệt đồ thị 24 Bài tốn tìm đường ngắn 24 2.1 Thuật tốn tìm đường ngắn Dijkstra 24 2.2 Thuật toán Floyd 30 2.3 Ý nghĩa tốn tìm đường ngắn 33 Bài toán khung cực tiểu 34 3.1 Cây, khung số tính chất 34 3.2 Bài toán khung cực tiểu 35 3.3 Ý nghĩa toán khung cực tiểu 42 KẾT LUẬN 44 TÀI LIỆU THAM KHẢO 45 MỞ ĐẦU Lý thuyết đồ thị ngành khoa học phát từ lâu lại nhiều ứng dụng đại Những tư tưởng lý thuyết đồ thị đề xuất từ năm đầu kỉ XVIII nhà toán học lỗi lạc người Thụy Sĩ Leonhard Euler Chính ơng người sử dụng đồ thị để giải toán tiếng cầu thành phố Kưnigsberg Từ lý thuyết đồ thị ngày khẳng định vị trí quan trọng việc giải toán thực tế Lý thuyết đồ thị khơng nhiều ứng dụng thực tế mà cơng cụ đắc lực cho ngành cơng nghệ thơng tin Nó giúp cho mơ tả dễ dàng toán phức tạp cách cụ thể, để từ ta mã hóa tốn máy tính Tuy nhiên, kiến thức hồn tồn mới, khơng chương trình học tơi Với mong muốn học hỏi tìm tòi kiến thức nên tơi chọn đề tài “Những vấn đề số thuật toán đồ thị” Nội dung khóa luận tơi khơng phải kết tìm với tinh thần học hỏi kiến thức mới, hi vọng đề tài đem lại nhiều kiến thức bổ ích cho thân cho độc giả Nội dung khóa luận gồm hai chương: Chương Một số kiến thức đồ thị Chương Một số thuật tốn đồ thị Tuy nhiều cố gắng, song hạn chế thời gian lực thân, nên khóa luận khơng tránh khỏi sai sót, mong quan tâm góp ý thầy bạn Tôi xin chân thành cảm ơn! Chƣơng MỘT SỐ KIẾN THỨC BẢN VỀ ĐỒ THỊ Một số khái niệm đồ thị 1.1 Định nghĩa đồ thị Ta hình dung đồ thị tập hữu hạn đối tượng mối liên hệ đối tượng đồ biểu diễn mạng máy tính hình ảnh đồ thị Các đối tượng máy tính, kênh thoại biểu diễn mối liên hệ hai máy tính mạng nhiều loại đồ thị xây dựng dựa vào cấu trúc đồ thị, cụ thể tùy thuộc vào xác định mối liên hệ đối tượng Khuôn khổ khóa luận tơi đề cập tới đồ thị vơ hướng đồ thị vơ hướng trọng số Định nghĩa 1.1 Đồ thị cặp G  (V , E ) gồm hai tập hợp hữu hạn V E thỏa mãn điều kiện E  {{u, v}| u, v V ; u  v} Phần tử V gọi đỉnh, phần tử E gọi cạnh đồ thị G Người ta thường ký hiệu V  {v1, v2 , , } ,cạnh e  {u, v} thường viết gọn uv (cũng trùng với vu) Trong định nghĩa này, phần tử E tập gồm hai phần tử khác thuộc V Như vậy, đồ thị xét đồ thị hữu hạn, khơng khun cạnh bội (xem [1]) , gọi tắt đồ thị Một cách trực quan, người ta thường biểu diễn đồ thị đồ đỉnh – cạnh sau: - Biểu diễn đỉnh đồ thị vòng tròn nhỏ (rỗng đặc) - Một cạnh biểu diễn đoạn (cong hay thẳng) nối hai đỉnh liên thuộc với cạnh Ví dụ Đồ thị G  (V , E ) với V  {v1, v2 , , v7 } , E  {v1v2 , v1v5 , v2v3 , v1v3 , v2v6 , v2v7 , v3v4 , v3v5 , v3v7 , v4v6 , v5v6 , v6v7 } đồ thị biểu diễn hình v1 v2 v3       v5 v4  v7 v6 Hình1 Đồ thị G biểu diễn đồ đỉnh – cạnh Định nghĩa 1.2 Giả sử G  (V , E ) đồ thị không rỗng Đồ thị G  (V , E) gọi đồ thị G, kí hiệu G  G , V   V E  E Trong trường hợp V   V ta nói G đồ thị bao trùm G Ví dụ Đồ thị G G đồ thị G Đồ thị G đồ thị bao trùm G v1 v2     v3 v4 G v1 v2    v1 v2    v3 G  v3 G v4 Hình Đồ thị G đồ thị G G G Định nghĩa 1.3 Đồ thị G  (V , E ) gọi đồ thị trọng số hàm: w : E  WE xác định, giá trị WE  Giá trị w(e) cho e  E gọi trọng số canh e Kí hiệu: G  (V , E, w) Các phần tử WE đơn liệu thường ý nghĩa định lượng Ví dụ Cho G  (V , E, f ) với V  {v1, v2 , , v7 } , E  {v1v2 , v1v7 , v2v3 , v2v5 , v2v6 , v2v7 , v3v4 , v3v5 , v4v5 , v5v6 , v6v7 } w : E  WE xác định sau: w(v1v7 )  w(v3v4 )  w(v3v5 )  1; w(v2v3 )  w(v2v7 )  w(v2v5 )  w(v6v7 )  ; w(v4v5 )  w(v1v2 )  ; w(v5v6 )  ; w(v2v6 )  Khi G đồ thị trọng số biểu diễn hình v1  v2  v3  1  v4  v7  v6  v5 Hình Đồ thị trọng số G 1.2 Các thuật ngữ 1.2.1 Liên thuộc, kề Định nghĩa 1.4 Giả sử G  (V , E ) đồ thị không rỗng với v V e  E , ta nói đỉnh v liên thuộc với cạnh e (hay cạnh e liên thuộc với đỉnh v) v  e Các đỉnh liên thuộc với cạnh gọi đầu mút cạnh Hai đỉnh u v G gọi kề uv cạnh G Ví dụ v1  v2 e1 e2 e4  v3 e5 e3  e6 v5 e8  v4  e7  v6 Hình Đơn đồ thị G Xét đồ thị G cho hình 4: Đỉnh v1 liên thuộc với e1 , e2 Đỉnh v2 kề với đỉnh v1, v3 , v5 1.2.2 Bậc đỉnh Định nghĩa 1.5 Giả sử G  (V , E ) đồ thị không rỗng với v đỉnh G Ta kí hiệu E (v) tập cạnh liên thuộc với v Khi bậc v ký hiệu deg (v) số cạnh liên thuộc với v, nghĩa deg (v)  | E (v) | Đỉnh bậc gọi đỉnh lập Đỉnh bậc gọi đỉnh treo Ví dụ v1  v2 v3    v4   v5 v6  v7 Hình Bậc đỉnh đồ thị G Xét đồ thị G cho hình ta deg( v1 ) = 1, deg( v2 ) = 3, deg( v3 ) = 4, deg( v4 ) = deg( v5 ) = 0, deg( v6 ) = 3, deg( v7 ) = Từ khái niệm ta đỉnh v5 đỉnh lập, v1 đỉnh treo Định lý 1.1.[2] Trong đồ thị G = (V, E) ta ln  deg (v) = 2|E|   vV *Nhận xét: Ta thấy cạnh e  uv tính lần deg (u ) lần deg (v) Từ ta suy tổng tất bậc đỉnh hai lần số cạnh 1.2.3 Đƣờng đi, chu trình Định nghĩa 1.6 Giả sử G  (V , E ) đồ thị không rỗng, đường G dãy phân biệt đỉnh v0 , v1, v2 , , , vi V cho vi vi1  E với i  0,1, , n  Khi n gọi độ dài, đỉnh v0 gọi đỉnh đầu, đỉnh gọi đỉnh cuối đường cặp đỉnh đồ thị trọng số hình sau: v1 v2     v3 v4 Hình Đồ thị G trọng số Các bước dùng thuật tốn Floyd tìm độ dài đường ngắn hai đỉnh v1 v3 biểu diễn hình ma trận sau: Ma trận trọng số đồ thị G là: v1 v2 v3 v4  v1     D0  v2      v3    v4   - v1 đỉnh trung gian, ta có:  v2 v3 v2 v1 v4 v1 v3 v4 v2 v4 v2 v3 v1 v2 v1   D1  v2   v3  v4  v3 v1 31 v1  v1 v4 v1 v3 v4  7  3  5  - v2 đỉnh trung gian, ta có: v v v v 1 v3 v1 v3 v4 v4 v2 v2 v2 v1 v4 v2 v3 v2 v1 v2 v1   D2  v2   v3  v4  v4 v2 v1 v3 v2 v1 v2 v3 v4  5  3  5  - v3 đỉnh trung gian, ta có: v1 v3 v1 v1 v4 v2 v3 v4 v2 v1 v2 v1   D3  v2   v3  v4  v3 v1 v2 v3 v2 5 v1 v2 v4 v4 v3 v4  5  3  5  - v4 đỉnh trung gian, ta có: v1 v2 v4 v1 5 v4 v2 v3 32 v1 v4 v2 v3 v4 v1 v2 v1   D4  v2   v3  v4  v3 v4  5  3  5  2.3 Ý nghĩa tốn tìm đƣờng ngắn Bài tốn tìm đường ngắn hai đỉnh đồ thị liên thơng ý nghĩa to lớn ứng dụng thực tế Chẳng hạn mạng lưới giao thông đường bộ, đường thủy hay đường khơng, chọn hành trình tiết kiệm theo tiêu chuẩn khoảng cách, thời gian chi phí Bài tốn chọn phương pháp tiết kiệm để đưa hệ thống động lực từ trạng thái xuất phát đến trạng thái đích Trong lĩnh vực Tin học, xét mạng máy tính, nhiều người ta cần xác định đường truyền thời gian truyền tin ngắn hai máy Để thực điều mơ hình mạng đồ thị, sau vận dụng thuật tốn tìm đường ngắn để giải Các thuật toán xây dựng dựa sở lý thuyết đồ thị hiệu cao để giải tốn trình bày Mỗi thuật tốn ưu nhược điểm riêng, cần lựa chọn thuật tốn phù hợp để giải tốn 33 Bài toán khung cực tiểu 3.1 Cây, khung số tính chất Định nghĩa 2.1 Ta gọi đồ thị liên thơng khơng chu trình Một đồ thị không thiết phải liên thông khơng chu trình gọi rừng Từ định nghĩa ta thấy thành phần liên thơng rừng Ví dụ Rừng gồm T1 ,T2 ,T3      •        T1        T2 T3 Hình Rừng gồm T1 ,T2 ,T3 Định nghĩa 2.2 Giả sử G = (V, E) đồ thị liên thông Cây T = (V, F) với F E gọi khung (cũng gọi bao trùm) đồ thị G Ví dụ             T1 G   T2 Hình Đồ thị G khung T1 , T2 G 34  Định lý 2.1.[1] Giả sử T = (V, E) đồ thị n đỉnh Khi mệnh đề sau tương đương: 1- T 2- T khơng chứa chu trình n – cạnh 3- T liên thơng n – cạnh 4- T liên thông cạnh cầu 5- Hai đỉnh T nối với đường 6- T khơng chứa chu trình thêm vào cạnh ta thu  chu trình 3.2 Bài tốn khung cực tiểu Giả sử G  (V , E, w) đồ thị liên thơng trọng số với w : E  R hàm trọng số cạnh Với khung T  (V , E) đồ thị G, ta định nghĩa độ dài khung T, ký hiệu w(T ) , giá trị: w(T )   w(e) eE Bài toán: Cho đồ thị trọng số G  (V , E, w) Hãy tìm khung T  (V , E) G cho w(T ) câu T nhỏ số độ dài khung G Sau đây, ta xét hai thuật tốn thơng dụng để giải toán khung cực tiểu đồ thị liên thơng trọng số 3.2.1 Thuật tốn Kruskal Tư tưởng: Thuật tốn Kruskal khơng phải xét cạnh với thứ tự tuỳ ý mà xét cạnh theo thứ tự xếp theo trọng số Giả sử đồ thị G = (V, E,w) liên thơng trọng số với n đỉnh w: E  Khởi tạo T ban đầu khơng cạnh Xét tất cạnh đồ thị từ cạnh trọng số nhỏ đến cạnh trọng số lớn, việc thêm cạnh vào T khơng tạo thành chu trình đơn T kết 35 nạp thêm cạnh vào T Cứ làm khi: - Hoặc kết nạp n - cạnh vào T ta T khung nhỏ - Hoặc chưa kết nạp đủ n - cạnh kết nạp thêm cạnh số cạnh lại tạo thành chu trình đơn Trong trường hợp đồ thị G khơng liên thơng, việc tìm kiếm khung thất bại Thuật tốn Kruskal mơ tả sau: procedure Kruskal; begin T := ; while |T| < (n -1) and (E ≠ ) begin Chọn e cạnh trọng nhỏ E; E := E \{e}; if (T {e} khơng chứa chu trình) then T := T {e}; end; if ( |T| < n – 1) then Đồ thị khơng liên thơng; end; Ví dụ Tìm khung cực tiểu đồ thị theo thuật toán Kruskal v1  v2   v5  v3  v4 Hình Đồ thị trọng số 36 Quá trình tìm khung cực tiểu đồ thị cho hình minh họa sau: Các cạnh tô đậm cạnh chọn vào khung Các cạnh đứt nét cạnh bỏ qua trình duyệt qua cạnh v1  v2 v1  v2  v5  v3 Hình 7a 8  v3  v4 Hình 7b v2   v5 v2  v3  v4  v3 Hình 7d v2   v5 Hình 7e 8  v3  v4 37 v5 7  v3  v4 v1   v5 v1  v2  Hình 7c  v4 v1  v5 v1  Hình 7f  v4 v1  v2 v1  v2  v5  v3  Hình 7g  v3  v4 Hình 7h v1  v2 v5   v3  v4 v1  v2   v5  v5  v3  v4 Hình 7i Hình 7k  v4 Vậy khung cực tiểu đồ thị cho gồm tập cạnh {v1v2 , v2v4 , v4v5 ,v2v3} Bảng ghi nhãn đỉnh bước lặp thuật toán, đỉnh đánh dấu (*) đỉnh chọn để bổ sung vào khung T, nhãn đỉnh không bị biến đổi bước lặp đánh dấu (–) 38 Lần v1 v2 v3 v4 v5 Xét T [0, v1 ] [2, v1 ] [8, v1 ] [4, v1 ] [6,v1 ] v1  - - [7, v2 ] [4, v2 ] [6,v1 ] v1 , v2 v1v2 - - [7, v2 ] - [5, v4 ] v1 , v2 , v4 v1v2 , v2v4 - - [7, v2 ] - - v1 , v2 , v4 , v5 v1v2 , v2v4 , v4v5 - - - - - v1 , v2 , v4 v1v2 , v2v4 v5 , v3 v4v5 ,v2v3 lặp 3.2.2 Thuật toán Prim Tư tưởng: Thuật toán đỉnh tùy ý đồ thị Ban đầu khởi tạo T gồm đỉnh Sau chọn số đỉnh T đỉnh gần T nhất, kết nạp đỉnh vào T đồng thời kết nạp ln cạnh tạo khoảng cách gần Cứ làm khi: - Hoặc kết nạp tất n đỉnh ta T khung cực tiểu - Hoặc chưa kết nạp hết n đỉnh đỉnh T khoảng cách tới T +∞ Khi đồ thị cho không liên thông, ta thông báo việc tìm khung thất bại Thuật tốn Prim mô tả thủ tục sau: procedure Prim; begin (* Bước khởi tạo *) Chọn s đỉnh đồ thị; VH := {s}; T := ; 39 d[s] := 0; near[s] := s, for v V \ VH begin d[v] := c[s, v]; near[v] := s; end; (* Bước lặp*) Stop := false; while not Stop begin Tìm u V \ VH : d[u] = { d[v] : u  V \ VH }; VH := VH  {u}; T := T {(u, near[u])}; if |VH| = n then begin H = (VH, T) khung cực tiểu đồ thị; Stop := True; end; else for v V \ VH if d[v] > c[u, v] then begin d[u] := c[u, v]; near[v] := u; end; end; end; 40 Ví dụ Tìm khung cực tiểu đồ thị sau theo thuật toán Prim v1 v3 3 v6 v5 v2 v4 Hình Đồ thị trọng số Các bước tìm khung cực tiểu đồ thị cho hình minh họa hình bảng sau: Các cạnh đậm cạnh chọn vào khung Mũi tên hướng chọn đỉnh Các cạnh nét đứt không cần phải xét bước v1  3 v6   v2 Hình 8c v4 Hình 8b v3 v5 v1  v3 3 v4 Hình 8a v1   v2 v5 v6 v5 v3 3 v2 v6 v1  v3 v6  v5  v2 v4 41 Hình 8d  v4 v1  v1  v3  v6   v2 v3  v5 v6  v5  v2  v4  v4 Hình 8f Hình 8e Bảng ghi nhãn đỉnh bước lặp thuật toán, đỉnh đánh dấu (*) đỉnh chọn để bổ sung vào khung T, nhãn đỉnh không bị biến đổi bước lặp đánh dấu (–) Lần lặp v1 v2 v3 v4 v5 v6 Xét T [0, v1 ] [2, v1 ] [3, v1 ] [, v1 ] [,v1 ] [3, v1 ] v1  - - [3, v1 ] [3, v2 ] [,v1 ] [3, v1 ] v1 , v2 v1v2 - - - [3, v2 ] [7, v3 ] [3, v1 ] v1 , v2 , v3 v1v2 , v1v3 - - - [1, v6 ] [6, v6 ] - v1 , v2 , v3 , v6 v1v2 , v1v3 , v1v6 - - - - [6, v6 ] - v1 , v2 , v3 v1v2 , v1v3 v1v6 ,v6v4 v6 , v4 3.3 Ý nghĩa toán khung cực tiểu Bài toán tìm khung nhỏ đồ thị số toán tối ưu đồ thị tìm ứng dụng nhiều lĩnh vực khác đời sống Để minh hoạ cho ứng dụng toán khung nhỏ nhất, hai mơ hình thực tế tiêu biểu cho 42 Bài toán xây dựng hệ thống đường sắt: Giả sử ta muốn xây dựng hệ thống đường sắt nối n thành phố cho hành khách từ thành phố đến số thành phố lại Mặt khác, quan điểm kinh tế đòi hỏi chi phí xây dựng hệ thống đường phải nhỏ Rõ ràng đồ thị mà đỉnh thành phố cạnh tuyến đường sắt nối thành phố tương ứng, với phương án xây dựng tối ưu phải Vì vậy, tốn đặt dẫn tốn tìm khung nhỏ đồ thị đầy đủ n đỉnh, đỉnh tương ứng với thành phố với độ dài cạnh chi phí xây dựng hệ thống đường sắt nối hai thành phố Bài toán nối mạng máy tính: Cần nối mạng hệ thống gồm n máy tính đánh số từ đến n Biết chi phí nối máy i với máy j m(i, j) (thông thường chi phí phụ thuộc vào độ dài cáp nối cần sử dụng) Hãy tìm cách nối mạng cho tổng chi phí nhỏ Bài tốn dẫn tốn tìm khung nhỏ Bài tốn tìm khung nhỏ thuật toán hiệu để giải chúng Ta xét hai số thuật toán vậy: thuật toán Kruskal thuật toán Prim 43 KẾT LUẬN Việc sử dụng đồ thị vào thuật toán cơng cụ hữu ích để giải tốn thực tế Sau thời gian thực đề tài, khóa luận thu kết sau Mô tả số thuật toán duyệt đồ thị, thuật tốn tìm đường ngắn nhất, thuật tốn tìm khung cực tiểu hình vẽ bảng chi tiết Nêu ý nghĩa toán duyệt đồ thị, đường ngắn khung cực tiểu Như vậy, đề tài “Những vấn đề số thuật tốn đồ thị” hồn thành nội dung đạt mục đích nghiên cứu Bước đầu làm quen với nghiên cứu khoa học, chắn khóa luận khơng thể tránh khỏi thiếu sót Tơi mong muốn thầy cô, bạn sinh viên, độc giả đóng góp ý kiến, trao đổi để khóa luận hoàn thiện thực tài liệu tham khảo bổ ích 44 TÀI LIỆU THAM KHẢO [1] Nguyễn Đức Nghĩa – Nguyễn Tơ Thành, Tốn rời rạc, NXB Giáo Dục, 1997 [2] Ngô Đắc Tân, Lý thuyết tổ hợp đồ thị, NXB Đại học Quốc Gia Hà Nội, 2004 [3].Tại địa https://www.youtube.com/watch?v=odeFemb3o-o [4] Kenneth H Rosen, Toán rời rạc ứng dụng tin học, NXB Khoa Học Kỹ Thuật, 1997 45 ... tiện 15 Chƣơng MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ Bài toán duyệt đồ thị Một toán quan trọng lý thuyết đồ thị toán duyệt đồ thị Ta phải duyệt qua tất đỉnh đồ thị, đỉnh xuất phát Vấn đề đưa tốn liệt... Chương MỘT SỐ KIẾN THỨC CƠ BẢN VỀ ĐỒ THỊ Một số khái niệm đồ thị 1.1 Định nghĩa đồ thị 1.2 Các thuật ngữ 1.3 Một số đồ thị đặc biệt Biểu diễn đồ thị ... Chƣơng MỘT SỐ KIẾN THỨC CƠ BẢN VỀ ĐỒ THỊ Một số khái niệm đồ thị 1.1 Định nghĩa đồ thị Ta hình dung đồ thị tập hữu hạn đối tượng mối liên hệ đối tượng Sơ đồ biểu diễn mạng máy tính hình ảnh đồ thị

Ngày đăng: 08/05/2018, 09:33

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan