Thuật toán CNM được đề xuất bởi Clauset, Newman và Moore [5] là một phương pháp phân cụm phân cấp tích tụ. Thuật toán này sử dụng độ đo đơn thể Q được đề xuất bởi Girvan và Newman như đã giới thiệu ở chương 1 để làm độ đo cho việc tối ưu hóa kết quả phân cụm.
Một giá trị cao của Q thể hiện phép phân cụm tốt cho đồ thị hiện tại, do đó nhiệm vụ của CNM là đi tìm giá trị Q cao nhất trong tập ứng cử của nó. Việc tìm giá trị Q cực đại toàn cục trên tập các phương án có thể là rất khó hay nói cách khác là tốn rất nhiều thời gian (không khả thi với thời gian thực), do đó trong CNM, các tác giả đề xuất kỹ thuật tối ưu hóa xấp xỉ hay còn gọi là phương pháp tối ưu tham lam.
Tương tự như thuật toán của Girvan-Newman, CNM cũng bắt đầu với việc phân hoạch mỗi đỉnh vào một cụm đơn lẻ, sau đó sẽ lặp lại việc kết hợp hai cụm với nhau sao cho phép hợp nhất này sẽ làm tăng Q lên một giá trị lớn nhất. Với mạng có n đỉnh thì sau n-1 phép kết hợp như vậy sẽ phân hoạch toàn bộ các đỉnh vào trong một cụm đơn và thuật toán kết thúc. Toàn bộ tiến trình này sẽ được tạo thành một cây kết quả trong đó các lá của cây là các đỉnh của mạng gốc và các nút bên trong tương ứng với phép kết hợp. Cây này biểu diễn dưới dạng cấu trúc "dendrogram" và nó thể hiện việc phân cụm có thứ bậc mạng trên thành các cụm ở tất cả các mức khác nhau. Cách thực thi trực tiếp của ý tưởng này mà Girvan-Newman áp dụng là lưu ma trận kề của đồ thị như một mảng các số nguyên và lặp lại việc trộn các cặp hàng - cột tương ứng với việc trộn các cụm với nhau. Đối với trường hợp đồ thị thưa, cách thực hiện này gây lãng phí bộ nhớ và thời gian thực thi đối với các phần tử có giá trị 0 trong ma trận này, mà với đồ thị thưa số phần tử 0 rất nhiều. Bởi vậy, CNM đề xuất thuật toán mới nhằm tăng tốc độ công việc trên bằng cách loại bỏ những phép toán không cần thiết.
Trước tiên, CNM định nghĩa 2 đại lượng sau:
𝑒𝑖𝑗 =1
2∑ 𝐴𝑣𝑤𝛿(𝑐𝑣, 𝑖)𝛿(𝑐𝑤, 𝑗)
𝑣𝑤
(2.10)
𝑎𝑖 = 1
2𝑚∑ 𝑘𝑣𝛿(𝑐𝑣, 𝑖)
𝑣
(2.11)
là phép phân hoạch các cạnh gắn các đỉnh trong cụm i.
Tiếp đến, ký hiệu 𝛿(𝑐𝑣, 𝑐𝑤) = ∑ 𝛿(𝑐𝑖 𝑣, 𝑖)𝛿(𝑐𝑣, 𝑖) ta sẽ được (2.12).
𝑄 = 1 2𝑚∑ [𝐴𝑣𝑤−𝑘𝑣𝑘𝑤 2𝑚 ] ∑ 𝛿(𝑐𝑣, 𝑖)𝛿(𝑐𝑤, 𝑖) 𝑖 𝑣𝑤 = ∑ [ 1 2𝑚∑ 𝐴𝑣𝑤𝛿(𝑐𝑣, 𝑖)𝛿(𝑐𝑤, 𝑖) 𝑣𝑤 − 1 2𝑚∑ 𝑘𝑣𝛿(𝑐𝑣, 𝑖) 1 2𝑚∑ 𝑘𝑤𝛿(𝑐𝑤, 𝑖) 𝑤 𝑣 ] 𝑖 = ∑(𝑒𝑖𝑖 − 𝑎𝑖2 𝑖 ) (2.12)
Công việc của thuật toán CNM liên quan đến việc tìm sự thay đổi của giá trị Q được tạo ra do sự hợp nhất các cặp cụm và chọn giá trị lớn nhất trong số chúng. Ta đặt ∆𝑄𝑖𝑗 là sự thay đổi của Q khi hợp nhất hai cụm i và j. Trên thực tế, việc tìm cặp i, j cho ∆𝑄𝑖𝑗 lớn nhất tốn rất nhiều thời gian. Vì thế CNM thay bằng việc lưu trữ ma trận kề của mạng và tính toán giá trị ∆𝑄𝑖𝑗, nó thay bằng việc lưu trữ và cập nhật một ma trận các giá trị của ∆𝑄𝑖𝑗. Do việc kết hợp hai cụm mà không có cạnh nối chúng sẽ không làm tăng Q nên CNM chỉ lưu các ∆𝑄𝑖𝑗 với các cặp i, j mà việc hợp nhất khi chúng có một hay nhiều cạnh nối. Do ma trận này có cùng độ hỗ trợ như ma trận kề, nó cũng sẽ thưa như ma trận kề gốc và có thể biểu diễn chúng với các cấu trúc dữ liệu hữu hiệu. Tiếp nữa, CNM xây dựng một cấu trúc dữ liệu hữu hiệu khác để lưu trữ các giá trị ∆𝑄𝑖𝑗 lớn nhất tại các bước. Hai sự cải tiến này sẽ giúp cho việc tiết kiệm về bộ nhớ và thời gian thực thi của CNM.
CNM tổ chức 03 cấu trúc dữ liệu như sau:
1. Một ma trận thưa chứa các ∆𝑄𝑖𝑗 cho mỗi cặp cụm i, j với tối thiểu 1 cạnh nối giữa chúng. CNM lưu trữ mỗi hàng của ma trận vừa giống cây nhị phân cân bằng (các phần tử có thể tìm kiếm hay chèn mới với độ phức tạp O(logn)) và như cấu trúc max-heap (phần tử lớn nhất có thể tìm được trong thời gian hằng số).
2. Một cấu trúc max-heap H lưu trữ phần tử lớn nhất của mỗi hàng trong ma trận ∆𝑄𝑖𝑗 cùng với các nhãn i, j tương ứng với cặp cụm được hợp nhất.
3. Một mảng vector thông thường cho việc lưu trữ các phần tử ai. Như đã nói ở trên, CNM bắt đầu với việc mỗi đỉnh sẽ nằm trong 1 cụm đơn lẻ, với trường hợp này thì eij = 1/2m nếu i và j được kết nối và =0 trong trường hợp còn lại. ai = ki/2m.
Do đó, CNM sẽ khởi tạo ma trận ∆𝑄𝑖𝑗 như sau:
∆𝑄𝑖𝑗 = {1/2𝑚 − 𝑘𝑖𝑘𝑗/(2𝑚) 2 𝑛ế𝑢 𝑐ó 𝑐ạ𝑛ℎ 𝑛ố𝑖 𝑖, 𝑗 0 𝑛ế𝑢 𝑖 𝑘ℎô𝑛𝑔 𝑛ố𝑖 𝑣ớ𝑖 𝑗 (2.13) Và 𝑎𝑖 = 𝑘𝑖 2𝑚 𝑣ớ𝑖 𝑚ọ𝑖 𝑖 (2.14)
Các bước của thuật toán:
1. Tính toán các giá trị khởi tạo của ∆𝑄𝑖𝑗 và ai tương ứng với công thức (2.13), (2.14) và tạo cấu trúc max-heap với các phần tử lớn nhất cho mỗi hàng của ma trận ∆𝑄.
2. Chọn giá trị ∆𝑄𝑖𝑗 lớn nhất trong cấu trúc max-heap H, hợp nhất hai cụm i, j tương ứng, cập nhật ma trận ∆𝑄, heap H và ai, đồng thời tăng giá trị modularity Q lên một lượng ∆𝑄𝑖𝑗.
3. Lặp lại bước 2 cho tới khi chỉ còn lại 1 cụm.
Cấu trúc dữ liệu mà CNM xây dựng giúp việc cập nhật các giá trị trong bước 2 rất nhanh chóng. Nếu hợp nhất hai cụm i, j và đánh lại nhãn là j cho cả hai cụm này, CNM chỉ cần cập nhật hàng và cột thứ j, đồng thời xóa bỏ hàng và cột thứ i. Luật cập nhật sẽ như sau:
Nếu cụm k đã từng kết nối với cả cụm i và j thì:
∆𝑄𝑗𝑘′ = ∆𝑄𝑖𝑘+ ∆𝑄𝑗𝑘 (2.15a)
Nếu k chỉ kết nối với i mà không kết nối với j thì:
∆𝑄𝑗𝑘′ = ∆𝑄𝑖𝑘− 2𝑎𝑗𝑎𝑘 (2.15b)
Nếu k chỉ kết nối với j mà không nối với i thì:
Với các sự điều chỉnh ở trên, thuật toán CNM có độ phức tạp về thời gian là O(mdlogn) với một mạng n đỉnh, m cạnh và d là độ sâu của cây dendrogam, tức là CNM có hiệu năng rất cao. Trong bài báo giới thiệu về CNM, các tác giả đã thực thi thuật toán với một mạng gồm 400.000 đỉnh và 2 triệu cạnh với thời gian thực thi rất nhanh.