Thuật toán được xây dựng dưới dạng đệ quy. Ở đầu mỗi vòng lặp, thuật toán sẽ gọi thủ tục phân cụm theo thuật toán CNM và với mỗi cụm kết quả do CNM tìm ra, thuật toán INC sẽ xác định xem cụm này là cụm cuối cùng (không phân chia thêm được nữa) hay là gọi lại thủ tục đệ quy cho cụm đó để phân chia tiếp cụm lớn này. Theo cách này, chúng ta có thể chia nhỏ cụm với thuật toán CNM chừng nào có thể. Khi thuật toán CNM không thể chia nhỏ được cụm này nữa thì thuật toán INC sẽ xác định đồ thị đầu vào này là cụm kết quả. Chúng ta cũng có thể dừng việc phân chia cụm khi kích thước cụm đạt tới giá trị cận trên s (s: tham số đâu vào thể hiện kích thước cận trên của một cụm). Đây là một đặc trưng thêm vào của thuật toán để những người dùng không muốn các cụm tìm được quá nhỏ. Điều này không đồng nghĩa với việc tất cả các cụm tìm được đều phải có kích thước tối đa là s, vì có những cụm có kích thước lớn hơn s nhưng thuật toán CNM không thể phân chia được nữa do tính kết nối cao của các cụm thành viên. Trong luận văn, sử dụng CNM làm thuật toán
nền cho INC vì CNM cho hiệu năng tốt nhất tính đến thời điểm hiện tại. Chúng ta cũng có thể sử dụng các thuật toán khác như Girvan-Newman, CONGA... thay cho CNM.
Thuật toán INC như sau:
Đầu vào: Đồ thị G =(V, E), tham số s: cận trên kích thước của cộng đồng kết quả.
Đầu ra: Tập các cụm C = {c1, c2, ..., ck}, với |C| = k: số cộng đồng tìm được và ci, i =1...k là các cụm tìm được.
function INC (Gr, s) // Thủ tục đệ quy của thuật toán 1. C' ←CNM(G); // Phân cụm với thuật toán CNM
2. If |C'| = 1 then
3. Đặt c1 là cụm duy nhất trong C';
4. C ← C ∪ c1; // Thêm cụm c1 vào tập kết quả
5. return; // Thoát khỏi thủ tục đệ quy
6. c' ← ∅;
7. for each cụm ci∈ C' do 8. if |ci| = 1 then
9. c' ← c' ∪ ci; // đưa ci vào cụm chứa cụm đơn
10. else if |ci| ≤ s then
11. C ← C ∪ ci; // Thêm cụm ci vào tập kết quả
12. else
13. Gi← G(V(ci), E(ci)); // Xây dựng đồ thị mới từ ci
14. INC(Gi, s); // Gọi đệ quy thuật toán
15. if |c'| ≠ 0 then
C ← C ∪ c';
Giải thích thuật toán:
Thuật toán bắt đầu với đồ thị đầu vào G và khởi tạo tập cụm kết quả C = ∅. Ở mỗi vòng lặp đệ quy của thuật toán, đồ thị đầu vào được ký hiệu là Gr. Thuật toán gọi thủ tục tìm cụm cho đồ thị Gr với thuật toán CNM - CNM(Gr) và nhận được tập cụm
kết quả C'. Nếu C' chỉ chứa một cụm tức là CNM không thể phân chia đồ thị Gr thành các cụm con được nữa. Gọi c1 là cụm duy nhất đó ở trong C', khi đó c1 sẽ chứa toàn bộ các đỉnh của Gr. Khi đó c1 là một cụm kết quả và ta thêm c1 vào tập cụm kết quả C, kết thúc vòng lặp hiện tại.
Nếu C' nhiều hơn một cụm, thuật toán sẽ duyệt qua tất cả các cụm ci nằm trong C' và kiểm tra xem một trong ba điều kiện sau đây có thỏa mãn hay không:
1. Nếu ci chỉ chứa một đỉnh, khi đó không thể nói ci là một cụm, vì cụm mà chỉ có một cá thể thì không hợp lý. Do đó, thuật toán sẽ thêm đỉnh ci này vào c' (với c' được sử dụng để lập thành một cụm chứa tất cả các đỉnh đơn như ci). Ban đầu c' được khởi tạo rỗng. Khi duyệt qua toàn bộ các cụm trong C', c' sẽ chứa toàn bộ các đỉnh đơn và sẽ đưa c' vào tập cụm kết quả C khi c' chứa tối thiểu một đỉnh. Theo cách này, tất cả các cụm đơn ở mỗi vòng lặp đệ quy sẽ được đưa vào một cụm chung (chưa xác định tính chất).
2. Khi người dùng đưa vào tham số s, thuật toán kiểm tra xem kích thước cụm ci có nhỏ hơn hoặc bằng s hay không. Nếu thỏa mãn thì thêm ci vào tập cụm kết quả C và tiếp tục với các cụm khác trong C'. Nếu không thì chuyển sang kiểm tra điều kiện 3.
3. Nếu điều kiện 1 và 2 ở trên không thỏa mãn thì ở điều kiện 3 này, chúng ta có thể phân chia tiếp đồ thị Gi thành các cụm con, trong đó Gi được tạo từ các đỉnh của cụm ci này, V(ci) và tập các cạnh của ci, E(ci). Khi đó chúng ta gọi thủ tục đệ quy của thuật toán cho đồ thị đầu vào Gi vừa xây dựng từ ci.
Kết thúc thuật toán, chúng ta sẽ nhận được tập các cụm kết quả C. Luồng thực hiện thuật toán được biểu diễn dưới dạng một biểu đồ dendrogram, trong đó mỗi nút bên trong biểu diễn một đồ thị con Gr ở mỗi bước đệ quy và mỗi nút lá chính là các cụm ci.