Công thức tính toán.
Độ đo trung tâm theo sự lân cận của một đỉnh được tính bằng giá trị nghịch đảo của tổng số khoảng cách ngắn nhất từ một đỉnh đến tất cả các đỉnh còn lại của đồ thị. ) , ( 1 ) ( \ d v t v C G v V t C Hoặc: 1 ) , ( ) ( \ n t v d v CC t V v G Trong đó: : khoảng cách ngắn nhất từ đỉnh v đến đỉnh t của đồ thị. n: số lượng đỉnh trong đồ thị
Công thức tính độ đo trung tâm theo sự lân cận của đỉnh v theo dạng chuẩn: ) 1 ( * ) ( ) ( ' v C v n CC C (2.5)
Miền giá trị của độ đo nằm trong khoảng [0..1] Thuật toán: Dodai = 0 Foreach v V do Dodai = Length(v) End Dodai kqC 1
Diễn giải thuật toán:
Khởi tạo biến Dodai (Chứa tổng độ dài (khoảng cách) đường đi ngắn nhất từ 1 đỉnh tới tất cả các đỉnh còn lại trong đồ thị)
Với mỗi đỉnh v, ta gán cho biến dodai = Length(v)
Trả về kết quả tính Closeness Centrality của mỗi đỉnh là nghịch đảo của tổng độ dài đường đi ngắn nhất từ đỉnh đó tới tất cả các đỉnh còn lại.
Lặp lại cho các đỉnh còn lại.
d. Thuật giải t m đƣờng đi ngắn nhất từ một đỉnh đến tất cả các đỉnh còn lại trong đồ thị.
Ý thƣởng thuật toán.
Cơ sở của phương pháp cài đặt này là "lập lịch" duyệt các đỉnh. Việc thăm một đỉnh sẽ lên lịch duyệt các đỉnh kề nó sao cho thứ tự duyệt là ưu tiên chiều rộng (đỉnh nào gần S hơn sẽ được duyệt trước) [1].
Ví dụ: Bắt đầu ta thăm đỉnh S. Việc thăm đỉnh S sẽ phát sinh thứ tự duyệt những đỉnh (v1, v2, ..., vn) kề với S (những đỉnh gần S nhất). Khi thăm đỉnh v1 sẽ lại phát sinh yêu cầu duyệt những đỉnh (u1, u2
đỉnh v nên chúng chỉ được duyệt khi tất cả những đỉnh v đã duyệt xong. Tức là thứ tự duyệt đỉnh sau khi đã thăm v1 sẽ là: (v2, v3..., vn, u1, u2, ..., um).
Hình 3.2: Cách thức Duyệt đỉnh trong đồ thị.
Giả sử ta có một danh sách chứa những đỉnh đang chờ thăm. Tại mỗi bước, ta thăm một đỉnh đầu danh sách và cho những đỉnh chưa "xếp hàng" kề với nó xếp hàng thêm vào cuối danh sách. Chính vì nguyên tắc đó nên danh sách chứa những đỉnh đang chờ sẽ được tổ chức dưới dạng hàng đợi (Queue)
Thuật giải
Ta sẽ dựng giải thuật như sau:
o Bước 1: Khởi tạo:
Các đỉnh đều ở trạng thái chưa đánh dấu, ngoại trừ đỉnh xuất phát S là đã được đánh dấu.
Một hàng đợi (Queue), ban đầu chỉ có một phần tử S. Hàng đợi dùng để chứa các đỉnh sẽ được duyệt theo thứ tự ưu tiên theo chiều rộng.
o Bước 2: Lặp các bước sau cho đến khi hàng đợi rỗng: S
v1 v2 v3 … vn
Lấy v ra khỏi hàng đợi, thông báo thăm v (bắt đầu việc duyệt đỉnh v)
Xét tất cả các đỉnh u kề với v mà chưa được đánh dấu, với mỗi đỉnh u đó:
1. Đánh dấu u.
2. Ghi nhận vết đường đi từ v tới u (có thể làm chung với việc đánh dấu)
3. Đẩy u vào hàng đợi (u sẽ chờ được duyệt ở các bước sau)
o Bước 3: Truy vết tìm đường đi.
Ví dụ: Xét đồ thị dưới đây: 1 2 3 4 6 7 8 5
Đỉnh xuất phát S = 1
Bảng 3.1 : Cách thức duyệt đƣờng đi của đồ thị bằng Thuật toán BFS Hàng đợi (Queue) Đỉnh v (lấy từ Queue) Queue sau khi lấy v ra Các đỉnh u kề v mà chƣa lên lịch Queue sau khi đẩy các u vào (1) 1 Rỗng 2,3 (2,3) (2,3) 2 (3) 4 (3,4) (3,4) 3 (4) 5 (4,5) (4,5) 4 (5) 6 (5,6) (5,6) 5 (6) (không có) (6) (6) 6 Rỗng (không có) Rỗng
Như vậy, để tìm đường đi ngắn nhất từ đỉnh 1 đến đỉnh 6 ta đi theo trình tự các đỉnh: đỉnh 1 → đỉnh 2 → đỉnh 4 → đỉnh 6
Để ý thứ tự các phần tử lấy ra khỏi hàng đợi, ta thấy trước hết là 1; sau đó đến 2, 3; rồi mới tới 4, 5; cuối cùng là 6. Rõ ràng là đỉnh gần S hơn sẽ được duyệt trước. Và như vậy, ta có nhận xét: nếu kết hợp lưu vết tìm đường đi thì đường đi từ S tới F sẽ là đường đi ngắn nhất (theo nghĩa qua ít cạnh nhất)
1 2 3 4 6 7 8 5
o Độ phức tạp của thuật toán BFS :
Quá trình tìm kiếm trên đồ thị bắt đầu từ một đỉnh có thể thăm tất cả các đỉnh còn lại, khi đó cách biểu diễn đồ thị có ảnh hưởng lớn tới chi phí về thời gian thực hiện giải thuật:
Trong trường hợp ta biểu diễn đồ thị bằng danh sách kề, thuật toán BFS có độ phức tạp tính toán là O(n + m) = O(max(n, m)). Đây là cách cài đặt tốt nhất.
Nếu ta biểu diễn đồ thị bằng ma trận kề như ở trên thì độ phức tạp tính toán trong trường hợp này là O(n + n2) = O(n2).
Nếu ta biểu diễn đồ thị bằng danh sách cạnh, thao tác duyệt những đỉnh kề với đỉnh u sẽ dẫn tới việc phải duyệt qua toàn bộ danh sách cạnh, đây là cài đặt tồi nhất, nó có độ phức tạp tính toán là O(n*m).
CHƢƠNG 4: THIẾT KẾ XÂY DỰNG CHƢƠNG TRÌNH VÀ THỰC NGHIỆM
4.1.Giới thiệu.
Hệ thống được thiết kế gồm 3 giai đoạn:
H nh 4.1: Các bƣớc thực hiện chƣơng tr nh 4.1.1. Giai đoạn 1: Thu thập và rút trích dữ liệu
Đề tài tập trung cho việc thu thập các tập dữ liệu thực tế, bao gồm các tập dữ liệu đã được công bố trên mạng.
Tập dữ liệu karate.xml: tập dữ liệu thể hiện mối quan hệ của các thành viên của câu lạc bộ karate tại một trường đại học của Mỹ tham gia trao đổi qua mạng.
Hình 4.2: Tập dữ liệu Karate.xml chƣa đƣợc xử lý Thu thập và rút trích dữ liệu.
Xử lý dữ liệu Báo cáo
Tập dữ liệu này bao gồm 34 nodes tương ứng với 34 thành viên trông câu lạc bộ, 78 links tương ứng với mối quan hệ trao đổi thông tin, được tạo thông qua cấu trúc thông dụng của file xml.
Tập dữ liệu dolphins.xml: tập dữ liệu của một mạng xã hội vô hướng thường xuyên thể hiện mối liên quan giữa 62 con cá heo trong một cộng đồng sống nhờ ngờ vực âm thanh, được biên soạn bởi Lusseau et al. (2003)
Hình 4.3: Tập dữ liệu dolphins.xml chƣa đƣợc xử lý 4.1.2. Giai đoạn 2: Xử lý dữ liệu
Các tập dữ liệu thu thập được cần phải qua giai đoạn xử lý và làm sạch để phù hợp với việc tổ chức cấu trúc dữ liệu cho bài toán tìm phần tử chính yếu được cài đặt trong giai đoạn 3
Tập dữ liệu ban đầu có dạng XML, sử dụng phần mềm Convert XML to Excel để chuyển tập dữ liệu này sang file Excel. Tuy nhiên do tập dữ liệu XML là 1 tập dữ liệu dạng cấu trúc khá phức tạp nên khi chuyển sang excel sẽ xuất hiện nhiều cột dư thừa. Vì vậy phải làm sạch bằng cách loại bỏ bớt các cộ dư thừa này và chỉ để lại 2 cột quan trọng là cột Tap_dinh và Tap_canh
Tập dữ liệu karate.xml: được thực hiện trích lọc và làm sạch dữ liệu lại như sau:
Hình 4.4: Danh sách Tập đỉnh Karate
Hình 4.5: Danh sách Tập cạnh Karate
Cấu trúc lưu trữ dữ liệu đã làm sạch được lưu trong file excel bao gồm 2 sheets:
- Tap_dinh (chứa danh sách các đỉnh trong 2 cột, cột TenDinh sẽ lưu tên đỉnh, cột giá trị sẽ lưu mô tả của đỉnh) có 34 đỉnh. - Tap_canh (chứa danh sách các cạnh, một cạnh được thiết lập
bởi 2 đỉnh được lưu trong 2 cột: DinhDau và DinhCuoi) gồm 78 cạnh
Hai sheets này có mối liên hệ ngầm định thông qua Tendinh.
Tập dữ liệu dolphins.xml: được thực hiện trích lọc và làm sạch dữ liệu lại như sau:
Hình 4.6: Danh sách Tập đinh Dolphins
Hình 4.7: Danh Sách Tập Cạnh Dolphins
Tập dữ liệu Dolphins.xls bao gồm 62 đỉnh (nodes) và 318 cạnh (links) Dữ liệu được thể hiện trực quan bằng đồ thị như sau:
Tập dữ liệu Karate.xml:
H nh 4.8: Đồ thị biểu diễn tập dữ liệu Karate
Tập dữ liệu dolphins.xml:
4.1.3. Giai đoạn 3:
Với các thuật giải cho bài toán tìm phần tử chính yếu (Key player) đã được trình bày trong các chương trước, đề tài tiến hành cài đặt các thuật giải trên để thực hiện việc tìm phần tử chính yếu của các tập dữ liệu trên:
Hình 4.10: Màn hình báo cáo kết quả 4.2. Tổ chức cơ sở dữ liệu.
4.2.1. Giới thiệu
Liên quan đến các bài toán trên đồ thị, việc quản lý và lưu trữ dữ liệu rất đa dạng nhằm giúp cải thiện hiệu năng việc tính toán và khả năng lưu trữ, xử lý cho các bài toán trên đồ thị. Tùy thuộc vào cấu trúc của đồ thị và các thuật giải được dùng để thao tác trên đồ thị đó mà ta chọn phương pháp tổ chức cơ sở dữ liệu phù hợp. Hiện nay có 2 phương pháp lưu trữ phổ biến đó là [20]:
Cấu trúc danh sách.
Bên cạnh đó, các phương pháp tổ chức cơ sở dữ liệu đồ thị mới cũng đang được nghiên cứu và ứng dụng như: mô hình cơ cở dữ dữ liệu đồ thị RDF xử lý theo định dạng XML, mô hình cở sở dữ liệu đồ thị GRACE, mô hình cơ sở dữ liệu đồ thị Drupal,..
4.2.2. Các phƣơng pháp lƣu trữ dữ liệu. a. Cấu trúc ma trận kề
o Biểu diễn đồ thị G=(V, E) bằng ma trận kề |V| với N hàng, N cột với các giá trị [0,1]
o Hệ số ma trận:
o Đối với đồ thị có trọng số thì giá trị của ma trận kề gồm trọng số của các cạnh. Ví dụ1: Xét đồ thị như sau: A B C D E A 0 1 1 0 0 B 1 0 1 1 0 C 1 1 0 1 0 D 0 1 1 0 1 E 0 0 0 1 0
Biểu diễn theo ma trận kề đồ thị vô hƣớng
[V] =
1 nếu tồn tại cạnh nối giữa vivj
A B C D E A 0 1 1 0 0 B 0 0 0 1 0 C 0 1 0 1 0 D 0 0 0 0 1 E 0 0 0 0 0
Biểu diễn theo ma trận kề đồ thị có hƣớng
Hình 4. 11 Lƣu trữ đồ thị thành ma trận kề
Nhận xét: việc lưu trữ đồ thị theo cấu trúc dữ liệu ma trận cho phép xử lý dữ liệu nhanh hơn nhưng khi phải tính toán với đồ thị có số lượng đỉnh và cạnh lớn thì phương pháp lưu trữ này rất hạn chế về mặt không gian lưu trữ => không thích hợp cho việc xử lý các bài toán mạng xã hội.
b. Danh sách liên kết
Dạng lưu trữ 1:
o Cho đồ thị G (V , E) trong đó V là tập đỉnh và E là tập cạnh. Việc lưu trữ Dữ liệu được tổ chứ như sau:
o Mỗi đỉnh sẽ có một danh sách các cạnh nối với nó,các cạnh của đồ thị có thể được lưu trữ trong một danh sách riêng (tổ chức dưới dạng mảng (array) hay danh sách liên kết động (linked list)).
o Mỗi phần phần tử sẽ lưu trữ thông tin về một cạnh bao gồm: cặp đỉnh mà cạnh đó nối (cặp này sẽ có thứ tự nếu đồ thị có hướng), trọng số và các dữ liệu khác. Danh sách liên thuộc của mỗi đỉnh sẽ chiếu tới vị trí của các cạnh tương ứng tại danh sách cạnh này.
Ví dụ:
Xét đồ thị như sau:
Hình 4. 12: Lƣu trữ đồ thị thành danh sách liên thuộc
Biểu diễn bằng danh sách liên thuộc:
Bảng 4.1: Cách thức lƣu trữ dữ liệu đồ thị bằng Danh sách liên thuộc. Đỉnh Tập cạnh A c1, c2 B c1 c3, c4 C c2, c3, c5 D c4, c5, c6 E c6 Tập cạnh Đỉnh bắt đầu Đỉnh kết thúc Các thông tin khác (nếu có) c1 A B … c2 A C … c3 B D … c4 C B … c5 C D … c6 D E …
Dạng lưu trữ 2:
Cho đồ thị G (V , E) trong đó V là tập đỉnh và E là tập cạnh. Tổ chức lưu trữ khi đó sẽ như sau: mỗi đỉnh sẽ có một danh sách các đỉnh kề với nó.
Xét đồ thị như sau:
Hình 4. 13: Lƣu trữ đồ thị thành danh sách liền kề
Biểu diễn bằng danh sách liền kề:
Bảng 4.2: Cách thức lƣu trữ dữ liệu đồ thị bằng Danh sách liền kề Đỉnh Đỉnh liền kề A B, C B A, C, D C A, B, D D B, C, E E D Dạng lưu trữ 1 Đỉnh bắt đầu Đỉnh kết thúc A B A C B D C B C D D E Dạng lưu trữ 2
Nhận xét: so với việc lưu trữ đồ thị theo cấu trúc dữ liệu ma trận thì phương pháp dùng danh sách liên kết cho phép lưu trữ về mặt không gian lưu trữ lớn hơn > phù hợp với các bài toán mạng xã hội. Tuy nhiên, cần phải tối ưu hoá các thuật giải để năng cao hiệu năng thời gian xử lý đối với phương pháp lưu trữ này. Cần phát huy các ưu điểm của phương pháp này bằng cách sử dụng tối đa không gian thừa hoặc chỉ liệt kê các quan hệ kề cạnh chỉ một lần.
4.3.Xây dựng hệ thống giải quyết bài toán tìm phần tử chính yếu.
Như đã trình bày trong chương 3, bài toán tìm phần tử chính yếu hiện nay đã có nhiều công trình nghiên cứu đưa ra các thuật giải dựa trên nền tảng là các độ đo Centrality và thuật toán tìm đường đi nhắn nhất của lý thuyết đồ thị.
Về mặt ý tưởng, thuật giải tìm phần tử chính yếu được thực hiện thông qua các bước cơ bản sau:
Bước 1: Tính toán tìm tất cả các đường đi ngắn nhất từ 1 đỉnh đến tất cả các đỉnh còn lại trong đồ thị cho tất cả các đỉnh.
Bước 2: Tính toán độ đo trung tâm theo bậc của tất cả các đỉnh trong đồ thị.
Bước 3: Tính toán tìm độ đo trung tâm theo trung gian của tất cả các đỉnh trong đồ thị.
Bước 4: Tính toán độ đo trung tâm theo sự lân cận của mỗi đỉnh trong đồ thị.
Bước 5: Dựa vào các độ đo trung tâm -> Đưa ra kết quả.
Để thực hiện thuật giải Tìm phần tử chính yếu trong mạng xã hội, đề tài xây dựng hệ thống thực nghiệm trên môi trường .NET và sử dụng ngôn ngữ VB.Net.
Hệ thống được xây dựng bao gồm các chức năng chính sau:
Nạp dữ liệu: Dữ liệu thực nghiệm được thu thập từ các nguồn thực tế trên mạng Internet. Cấu trúc lưu trữ ban đầu là file kiểu XML, sau đó được chuyển sang file dạng Excel XLS, tinh lọc cho phù hợp theo chương trình:
Người sử dụng sẽ chọn dữ liệu (database) bằng cách click vào nút trong chương trình và dẫn đường tới file xls để nạp dữ liệu vào hệ thống.
Hiển thị đồ thị trực quan: Sau khi nạp dữ liệu vào hệ thống, Chương trình sẽ hiển thị Đồ thị trực quan:
Hình 4.15: Giao diện đồ thị trực quan
Xử lý, tính toán các độ đo Centrality:
Khi click chọn nút , hệ thống sẽ lần lượt tính toán các độ đo centrality như sau:
o Tính Degree Centrality:
Hình 4.16: Tính Degree Centrality
Hình 4.17: Tính Betweenness Centrlity
o Tính Closeness Centrality
Hình 4.18: Tính Closeness Centrality
Hiển thị kết quả là tập các phần tử chính yếu đã tìm được:
Hình 4.19: Hiển thị kết quả của chƣơng tr nh
So sánh tập phần tử chính yếu tìm được với tập dữ liệu thực nghiệm (hình 4.20) thấy rằng:
Các nodes 1, 34, 33 có mức Degree Centrality cao nhất, là các nodes có các cạnh kết nối nhiều nhất. Các nodes đó có thể là một trong những người hoạt động tích cực nhất, nổi tiếng nhất, là một đầu nối quan trọng hay có một vị trí thuận lợi nhất.
Các nodes 3, 32, 9 có mức Betweenness Centrality cao nhất, là các nodes có khả năng kết nối được với các cặp node khác,
đồng thời có khả năng điều khiển luồng thông tin chảy trong mạng.
Các nodes 5, 6, 4 có mức độ Closeness Centrality cao nhất, là các nodes có khả năng truyền đạt, tiếp nhận thông tin từ nodes khác trong mạng nhanh và it tốn thời gian nhất.