Thuật toán phát hiện k-clique

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu độ đo trung gian và thuật toán phát hiện cộng đồng trên mạng xã hội (Trang 43 - 45)

Khai phá dữ liệu đồ thị để làm rõ hơn cấu trúc của đồ thị mạng xã hội, thông qua phân tích các nhóm con cố kết của mạng trên cơ sở phát hiện các k- clique. Với thuật toán hai pha (two-phase) tìm các cộng đồng k-clique như sau:

Input: Đồ thị G và khoảng cách k. Output: các k-clique được bao phủ.

1. Tìm tất cả các k-clique lớn nhất trong đồ thị. 1.1 Xác định bậc kth của đồ thị.

2. Tìm các k-clique được bao phủ trong đồ thị G. 2.1 Áp dụng thuật toán bao phủ.

Thuật toán tìm k-clique cực đại

Biến đổi đồ thị G = (V, E) sang đồ thị G = (V, E)k sao cho với mọi i, j

V, d(i, j) ≤ k. Đồ thị G = (V, E)k được tạo ra từ bậc kth của đồ thị G có cùng tập đỉnh như G và một cạnh mới giữa hai đỉnh nếu giữa chúng có một liên kết với độ dài lớn nhất là k.

Tìm đồ thị con đầy đủ lớn nhất của một đồ thị cho trước chính là bài toán tìm clique cực, bằng cách đi tìm giới hạn dưới của bài toán cực đại với các phương pháp heuristics [17] và tìm kiếm (meta-heuristic) Tabu Search [27].

Giả sử n = |S| là lực lượng (số đỉnh) của clique S và Ak(S) là tập con các đỉnh có k cạnh liên thuộc trong S. Vậy định nghĩa A(S) là tập các đỉnh liền kề với các đỉnh của S và A(S) có thể chia thành các nhóm con:A(S) = ⋃𝑛𝑘=1𝐴𝑘(𝑆)

Tập hợp số các đỉnh |V| của đồ thị bằng tổng số đỉnh liên thuộc A(S) và không liên thuộc A0(S), ta có ∑𝑛𝑘=1|𝐴𝑘(𝑆)| + 𝑛.

Gọi N(S) là tập lân cận khi chúng sinh ra clique S’ trong tập S và: N+ (S) = {S´ : S´= S ∪{vi}, vi ∈ An(S)}

N– (S) = {S´ : S´= S \{vi}, vi ∈ S}

N0 (S) = {S´ : S´= S ∪{vi}\{vk}, vi ∈ An-1(S), vk ∈ S}

Khi S là clique hiện thời thì S* là clique cực đại đã tìm được, T là danh sách trong bảng tabu và N(S) là các cấu trúc lân cận.

Thuật toán: Clique cực đại theo đánh giá (heuristic)Tabu: Input: Gk, đồ thị con đầy đủ (clique) S

Output: clique S*

2. while <Chưa thỏa điều kiện dừng>{

2.1. if (N+(S) \ T ≠ null) then chọn S’ là cực đại

2.2. else if (N0(S) \ T ≠ null) then {chọn S’ là cực đại;

cập nhật T;}

2.2.1. else {chọn S’ trong N–(S) là cực đại;

cập nhật T; }

2.3. cập nhật S = S’ ; 2.4. if (|S| > |S*|) S* = S; 3. };

4. return S*;

Tìm một clique lớn nhất trong đồ thị Gk tương đương với việc tìm một k-clique lớn nhất trong đồ thị G. Để tạo ra một tập hợp lớn hơn với các k-clique cực đại, bằng cách thuật toán bắt đầu nhiều lần (multi-start) để gọi thuật toán tìm clique cực đại theo đánh giá Tabu [27].

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu độ đo trung gian và thuật toán phát hiện cộng đồng trên mạng xã hội (Trang 43 - 45)