Tải bản đầy đủ (.docx) (38 trang)

Tiểu luận môn Thuật Toán và Phương Pháp Giải Quyết Vấn Đề GIẢI PHÁP CHO BÀI TOÁN CLIQUE CỰC ĐẠI

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.25 MB, 38 trang )

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

PHÒNG ĐÀO TẠO SAU ĐẠI HỌC
TIỂU LUẬN
THUẬT TOÁN VÀ PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ
GIẢI PHÁP CHO
BÀI TOÁN CLIQUE CỰC ĐẠI
Giảng viên hướng dẫn: PGS. TS. ĐỖ VĂN NHƠN
Học viên thực hiện: NGUYỄN VĂN KIỆT
Khóa: CAO HỌC KHÓA 08
Mã số học viên: CH1301095

HVTH: NGUYỄN VĂN KIỆT Trang 1
TP. Hồ Chí Minh, tháng 10 năm 2014
Mục Lục

HVTH: NGUYỄN VĂN KIỆT Trang 2
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
LỜI MỞ ĐẦU
Tôi xin chân thành gửi lời cám ơn chân thành đến PGS. TS. Đỗ Văn Nhơn,
người thầy nghiên cứu khoa học nghiêm túc và nhiệt tâm. Thầy là người đã truyền
đạt cho tôi những kiến thức quý báu trong môn học “Thuật toán và phương pháp
giải quyết vấn đề”. Nhờ có những kiến thức của thầy mà tôi có thể có đủ kiến thức
cùng những công cụ cần thiết để thực hiện được bài tiểu luận của môn học này.
Sau một thời gian học tập môn Thuật toán và phương pháp giải quyết vấn đề
và cùng với sự tìm hiểu từ các tài liệu từ các bài báo khoa học và các luận văn trên
Internet. Tôi xin chọn vấn đề nghiên cứu về Giải pháp cho bài toán Clique cực đại
để làm tiểu luận cho môn học này.
Nội dung của tiểu luận này gồm:
Chương 1: Giới thiệu tổng quan về lý thuyết đồ thị


Chương 2: Bài toán Maximal Clique và giải pháp
Chương 3: Giới thiệu một thuật toán Polynominal – time áp dụng cho bài
toán tìm Maximal Clique
Do thời gian nghiên cứu có hạn và bản thân tôi cũng có một số hạn chế nên
không tránh khỏi những thiếu sót trong báo cáo này. Kính mong nhận được sự thông
cảm và góp ý của PGS. TS. Đỗ Văn Nhơn để hướng nghiên cứu của tôi sắp tới sẽ
hoàn thiện và đạt hiệu quả hơn. Tôi xin chân thành cảm ơn!

HVTH: NGUYỄN VĂN KIỆT Trang 3
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
DANH MỤC HÌNH
TỔNG QUAN VỀ ĐỒ THỊ
Lý thuyết đồ thị (Graph Theory) là một ngành khoa học được phát triển từ lâu
nhưng lại có nhiều ứng dụng hiện đại. Những ý tưởng cơ bản của nó được đưa ra từ
thế kỷ 18 bởi nhà toán học Thụy Sĩ tên là Leonhard Euler. Ông đã dùng đồ thị để
giải quyết bài toán 7 chiếc cầu Konigsberg nổi tiếng.
Đồ thị cũng được dùng để giải các bài toán trong nhiều lĩnh vực khác nhau. Thí
dụ, dùng đồ thị để xác định xem có thực hiện một mạch điện trên một bảng điện
phẳng được không. Chúng ta cũng có thể phân biệt hai hợp chất hóa học có cùng
công thức phân tử nhưng có cấu trúc khác nhau nhờ đồ thị. Chúng ta cũng có thể xác
định xem hai máy tính có được nối với nhau bằng một đường truyền thông hay
không nếu dùng mô hình đồ thị mạng máy tính. Đồ thị với các trọng số được gán
cho các cạnh của nó có thể dùng để giải các bài toán như bài toán tìm đường đi ngắn
nhất giữa hai thành phố trong một mạng giao thông. Chúng ta cũng có thể dùng đồ
thị để lập lịch thi và phân chia kênh cho các đài truyền hình.
1.1. Nhắc lại một số định nghĩa
1.1.1. Đồ thị
Đồ thị (Graph) là một cấu trúc dữ liệu rời rạc bao gồm các đỉnh và các cạnh
nối các cặp đỉnh này. Chúng ta phân biệt đồ thị thông qua kiểu và số lượng cạnh nối
giữa các cặp đỉnh của đồ thị.


HVTH: NGUYỄN VĂN KIỆT Trang 4
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Định nghĩa 1: Một đơn đồ thị G = (V, E) gồm một tập khác rỗng V mà các
phần tử của nó gọi là các đỉnh và một tập E mà các phần tử của nó gọi là các cạnh,
đó là các cặp không có thứ tự của các đỉnh phân biệt.
Định nghĩa 2: Một đồ thị có hướng G = (V, E) gồm một tập khác rỗng V mà
các phần tử của nó gọi là các đỉnh và một tập E mà các phần tử của nó gọi là các
cung, đó là các cặp có thứ tự của các phần tử thuộc V.
1.1.2. Bậc của đỉnh
Định nghĩa 3: Hai đỉnh u và v trong đồ thị (vô hướng) G=(V,E) được gọi là
liền kề nếu (u,v) ∈ E. Nếu e = (u,v) thì e gọi là cạnh liên thuộc với các đỉnh u và v.
Cạnh e cũng được gọi là cạnh nối các đỉnh u và v. Các đỉnh u và v gọi là các điểm
đầu mút của cạnh e.
Định nghĩa 4: Bậc của đỉnh v trong đồ thị G=(V,E), ký hiệu deg(v), là số các
cạnh liên thuộc với nó, riêng khuyên tại một đỉnh được tính hai lần cho bậc của nó.
Đỉnh v gọi là đỉnh treo nếu deg(v)=1 và gọi là đỉnh cô lập nếu deg(v)=0.
1.1.3. Biểu diễn đồ thị bằng ma trận
Định nghĩa 5: Cho đồ thị G=(V,E) (vô hướng hoặc có hướng), với
V={v
1
,v
2
, , v
n
}. Ma trận liền kề của G ứng với thứ tự các đỉnh v
1
,v
2
, , v

n
là ma trận
ij 1 ,
( ) ( , ),
i j n
A a M n Z
≤ ≤
= ∈
trong đó a
ij
là số cạnh hoặc cung nối từ v
i
tới v
j
.
Như vậy, ma trận liền kề của một đồ thị vô hướng là ma trận đối xứng, nghĩa là a
ji
=
a
ji
, trong khi ma trận liền kề của một đồ thị có hướng không có tính đối xứng.

HVTH: NGUYỄN VĂN KIỆT Trang 5
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Định nghĩa 6: Cho đồ thị vô hướng G=(V,E), v
1
, v
2
, , vn là các đỉnh và e
1

,
e
2
, , e
m
là các cạnh của G. Ma trận liên thuộc của G theo thứ tự trên của V và E là
ma trận
ij 1
1
( ) ( , ),
i n
j m
M m M n m Z
≤ ≤
≤ ≤
= ∈ ×
m
ij
bằng 1 nếu cạnh e
j
nối với đỉnh v
i
và bằng 0 nếu cạnh e
j
không nối với đỉnh v
i
.
1.1.4. Tính liên thông
Định nghĩa 7: Đường đi độ dài n từ đỉnh u đến đỉnh v, với n là một số
nguyên dương, trong đồ thị G=(V,E) là một dãy các cạnh (hoặc cung) e

1
, e
2
, , e
n
của đồ thị sao cho e
1
= (x
0
, x
1
), e
2
= (x
1
,x
2
), , e
n
= (x
n-1
,x
n
), với x
0
=u và x
n
=v. Khi đồ
thị không có cạnh (hoặc cung) bội, ta ký hiệu đường đi này bằng dãy các đỉnh x
0

,
x
1
, , x
n
. Đường đi được gọi là chu trình nếu nó bắt đầu và kết thúc tại cùng một
đỉnh. Đường đi hoặc chu trình gọi là đơn nếu nó không chứa cùng một cạnh (hoặc
cung) quá một lần. Một đường đi hoặc chu trình không đi qua đỉnh nào quá một lần
(trừ đỉnh đầu và đỉnh cuối của chu trình là trùng nhau) được gọi là đường đi hoặc
chu trình sơ cấp. Rõ ràng rằng một đường đi sơ cấp là đường đi đơn.
Định nghĩa 8: Một đồ thị (vô hướng) được gọi là liên thông nếu có đường đi
giữa mọi cặp đỉnh phân biệt của đồ thị.
Một đồ thị không liên thông là hợp của hai hay nhiều đồ thị con liên thông,
mỗi cặp các đồ thị con này không có đỉnh chung. Các đồ thị con liên thông rời nhau
như vậy được gọi là các thành phần liên thông của đồ thị đang xét. Như vậy, một đồ
thị là liên thông khi và chỉ khi nó chỉ có một thành phần liên thông.

HVTH: NGUYỄN VĂN KIỆT Trang 6
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
1.2. Giới thiệu về CLIQUE của đồ thị
Trong lý thuyết đồ thị, một Clique trong đồ thị vô hướng G là tập các đỉnh V
(V là tập con của tập các đỉnh của G) thỏa mãn điều kiện: với mỗi cặp đỉnh thuộc V
luôn tồn tại một cạnh của G nối chúng. Do vậy một đồ thị con được tạo ra từ V sẽ là
một đồ thị đầy đủ. Kích thước của một clique là số đỉnh của nó.
Định nghĩa 9: Đồ thị đầy đủ n đỉnh, kí hiệu là K
n
, là là đồ thị đơn vô hướng
mà giữa hai đỉnh bất kỳ nó luôn có cạnh nối.
Đồ thị K
n

có tất cả n(n-1)/2 cạnh. Nó là đồ thị đơn có nhiều cạnh nhất, đồng
thời là đồ thị chính quy bậc n-1.
Ví dụ 2.1: Một đồ thị đầy đủ K
7
(7 đỉnh). Nếu đây là một đồ thị con thì tập
đỉnh của nó sẽ tạo nên một clique kích thước 7.
Hình 1.1: Đồ thị đầy đủ K
7
Bài toán xác định có tồn tại hay không một clique với một kích thước cho
trước trong một đồ thị (Bài toán clique) là một bài toán NP-Complete.
Đối với một clique là một tập độc lập, với nghĩa rằng mỗi clique tương ứng
với một tập độc lập của đồ thị nghịch đảo.
Thuật ngữ này xuất phát từ ý tưởng rằng giải sử mỗi đỉnh biểu diễn một
người và mỗi cạnh biểu diễn mối quan hệ quen biết, thì hai người bất kì đều quen
lẫn nhau, do vậy tạo nên một clique.

HVTH: NGUYỄN VĂN KIỆT Trang 7
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Định nghĩa 10: Clique cực đại (maximal clique) của G là clique không
thuộc bất cứ một clique nào khác rộng hơn nó, nói cách khác là không thể thêm bất
cứ đỉnh nào vào một clique cực đại để tạo ra clique có số đỉnh lớn hơn.
Định nghĩa 11: Clique lớn nhất (maximum clique) của G là clique có số đỉnh
lớn nhất của G. Một clique lớn nhất đồng thời là một clique cực đại, nhưng điều
ngược lại chưa chắc đã đúng.
Định nghĩa 12: Chỉ số clique (clique number) của đồ thị G là số đỉnh của
clique lớn nhất trong G. Chỉ số clique của đồ thị G được ký hiệu là ω(G).
Định nghĩa 13: Phần bù của đồ thị G (kí hiệu là ) có tập đỉnh giống với tập
đỉnh của G và tập cạnh không nằm trong tập cạnh của G.
Định nghĩa 14: Đồ thị đầy đủ (Complete Graph): với mỗi cặp đỉnh được nối
với nhau bằng một cạnh.


HVTH: NGUYỄN VĂN KIỆT Trang 8
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Hình 1.2: Đồ thị G, phần bù đồ thị , đồ thị đầy đủ và Clique
1.3. Ứng dụng của bài toán Clique cực đại
Thuật toán tìm kiếm Clique lớn nhất có nhiều ứng dụng trong khoa học máy
tính như mô tả và giải quyết bài toán lập lịch, lý thuyết mã, thị giác máy tính và
nhận dạng mẫu, …

HVTH: NGUYỄN VĂN KIỆT Trang 9
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Chương 2
BÀI TOÁN MAXIMAL CLIQUE VÀ GIẢI PHÁP
Hình 2.1: Các loại thức ăn và thực phẩm
Hình 2.1 minh họa các loại thức ăn và thực phẩm. Vấn đề đặt ra là tìm ra một
tập hợp thức ăn lớn nhất mà chúng có thể dùng chung được với nhau? Chúng ta có
các lựa chọn sau:

HVTH: NGUYỄN VĂN KIỆT Trang 10
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Hình 2.2: Sự lựa chọn (cà chua, lạp xưởng, tỏi và tương ớt)
Hoặc lựa chọn:
Hình 2.3: Sự lựa chọn (cà chua, tỏi, tương ớt và gà)

HVTH: NGUYỄN VĂN KIỆT Trang 11
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Chúng ta xem mỗi thực phẩm là một đỉnh của đồ thị, và hai thực phẩm khác
nhau kết hợp được với nhau được xem là một cạnh. Để giải quyết bài toán trên,
chúng ta quy về về bài toán tìm Clique cực đại. Và bây giờ, chúng ta tìm hiểu qua
bài toán tìm kiếm Clique cực đại trên đồ thị.

2.1. Bài toán Maximal Clique
2.1.1. Phát biểu bài toán
Cho đồ thị G = (V, E) và số k∈N* thỏa mãn |k|≤|V|. Tồn tại hay không một
tập con V’ của V sao cho |V’|≥k mà mọi cặp đỉnh trong V’ đều được nối bởi một
cạnh trong E.
Ví dụ 2.1: Cho đồ thị Octahedron với n = 6 đỉnh. Tìm Clique cực đại với
kích thước k = 3.

HVTH: NGUYỄN VĂN KIỆT Trang 12
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Hình 2.4: Đồ thị Octahedron với clique cực đại ( n=6, k=3)
2.1.2. Khảo sát, phân tích và giới hạn vấn đề
 Khảo sát và thu thập dữ liệu, thông tin và tri thức (DIK)
- Tập đỉnh của đồ thị và hữu hạn;
- Tập cạnh của đồ thị là hựu hạn;
- Đồ thị có hướng hay vô hướng?
- Đồ thị liên thông hay không?
- Đơn đồ thị hay đa đồ thị?
- Các cạnh có trọng số hay không có trọng số?
- …
 Chọn lọc vấn đề và chuẩn hóa DIK; Xác định cơ sở DIK cho vấn đề
- Tập đỉnh của đồ thị là hữu hạn;
- Tập cạnh của đồ thị là hữu hạn;
- Đơn đồ thị vô hướng;
- Đồ thị phải liên thông;
- Không quan tâm đến trọng số
 Xác định phạm vi gây giới hạn của vấn đề: Tính liên thông của đồ thị và số
đỉnh nhỏ hơn 2, số cạnh bằng 0;
 Thu thập mẫu vấn đề và phân lớp (bỏ qua)
- Số đỉnh, số cạnh của đồ thị;

- Xác định bậc của mỗi đỉnh trong đồ thị;
- Đồ thị được biểu diễn dưới dạng ma trận kề;
 Mô tả giả thiết của vấn đề
- Đầu vào: Đồ thị G là đơn đồ thị vô hướng, liên thông được biểu diễn dưới
dạng ma trận kề M;
- Đầu ra: Clique cực đại của đồ thị G;
 Mục tiêu của vấn đề: Tìm ra Clique cực đại của đồ thị;
 Các điều kiện hay ràng buộc liên quan:
- Phải là đơn đồ thị vô hướng, liên thông;
- Số đỉnh (>=2) và số cạnh (>=1) của đồ thị là hữu hạn;
2.2. Xây dựng mô hình của bài toán
2.2.1. Mô hình cho DIK
Được mô hình hóa bằng đơn đồ thị vô hướng. Trong đó:

HVTH: NGUYỄN VĂN KIỆT Trang 13
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
- Số đỉnh là số nguyên dương (>=2) và mỗi đỉnh được gán nhãn;
- Cạnh là một đường nối giữa đỉnh này với đỉnh khác trong đồ thị;
- Bậc của đỉnh x: là tổng số cạnh liên thuộc với đỉnh x, ký hiệu deg(x)
G = (V, E)
V = {x
1
, x
2
, …, x
n
}
E = {e
1
, e

2
, …, e
m
}; e ∈ E liên kết giữa x
i
và x
j
2.2.2. Mô hình cho giả thiết
- Đầu vào: Đồ thị G được biểu diễn dưới dạng ma trận kề;
- Đầu ra: Clique cực đại của G;
2.2.3. Mô hình cho mục tiêu: Clique cực đại của G
2.3. Xây dựng giải pháp cho bài toán
Bài toán này có một số giải pháp như:
- Sử dụng các thuật toán Non polynomial-time algorithm.
- Sử dụng các thuật toán polynomial-time algorithm.
- Hai thuật toán hiệu quả với việc thực hiện các bài toán NP-Complete: quay
lui và nhánh – cận.
Ở đây, tôi sẽ trình bày giải thuật Bron Kerbosch cho bài toán tìm Clique lớn
nhất. Thuật toán này được thiết kế và công bố vào năm 1973 bởi 2 nhà khoa
hoc người Hà Lan là Joep Kerbosch và Coenradd Bron. Nó được biết như là
một thuật toán hiệu quả nhất cho việc sử dụng đệ qui quay lui để tìm các
Clique. Thuật toán như sau:
 Không có Pivoting Strategy

HVTH: NGUYỄN VĂN KIỆT Trang 14
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
 Có Pivoting Strategy
2.4. Chứng minh tính đúng đắn của thuật toán
Cho đồ thị như Hình 2.4, tìm các Clique cực đại của đồ thị?
Hình 2.5: Đồ thị 6 đỉnh

Thuật toán thực hiện như sau:
• R = X = ∅, P = (1,2,3,4,5,6)
• Chọn phần tử pivot u là 4.
• 4 trong p\N(v) = (1,2,3,4,5,6)\(1,2,3,4,5,6) = 4 trong 4
• Tìm các giá trị R
new
, P
new
và X
new
• P
new
= P ∩ N(v); R
new
= R ∪ v; X
new
= X ∩ N(v)
• R
new
= 4; P
new
= (1,2,3,4,5,6); X
new
= ∅
BronKerbosch(4,(1,2,3,5,6),∅)

HVTH: NGUYỄN VĂN KIỆT Trang 15
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
BronKerbosch((4,1),(2,3),∅)
BronKerbosch((4,1,2),∅,∅)

Thông báo (4,1,2) là một Maximal Clique
• BronKerbosch(4,(1,2,3,5,6), ∅)
BronKerbosch((4,3),(1), ∅)
BronKerbosch((4,3,1), ∅,∅)
Thông báo (4,3,1) là một trong các Maximal Clique.
• BronKerbosch(4,(1,2,3,5,6), ∅)
BronKerbosch((4,2),(1,5), ∅)
BronKerbosch((4,2,5), ∅, ∅)
Thông báo (4,2,5) là một Maximal Clique khác.
• BronKerbosch(4,(1,2,3,5,6), ∅)
BronKerbosch((4,6), ∅,∅)
Thông báo (4,6) là Maximal Clique.
2.5. Đánh giá độ phức tạp của thuật toán
Bất kì đồ thị nào có n đỉnh thì có nhiều nhất 3
n/3

các Clique cực đại và thời
gian chạy trong trường hợp xấu nhất của thuật toán Bron–Kerbosch là O(3
n/3
).
2.6. Đánh giá thực nghiệm
Với thuật toán trên, nếu cho đồ thị cỡ nhỏ thì thuật toán mang lại hiệu quả
cao hơn. Tuy nhiên, trong thực tế, vấn đề tìm Clique cực đại không chỉ dừng lại ở
các đồ thị có kích thước nhỏ, … Vì vậy, cần tối ưu hơn trong việc giải quyết vấn đề
này.
Qua sự tìm hiểu và sưu tầm các tài liệu, em xin giới thiệu một thuật toán có
thể áp dụng hiệu quả hơn để giải quyết vấn đề tìm Clique cực đại phù hợp với thực
tiễn. Nội dung giải pháp và thuật toán kèm theo được trình bày chi tiết ở Chương 3.

HVTH: NGUYỄN VĂN KIỆT Trang 16

Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN

HVTH: NGUYỄN VĂN KIỆT Trang 17
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Chương 3
GIỚI THIỆU MỘT THUẬT TOÁN POLYNOMIAL – TIME
ÁP DỤNG CHO BÀI TOÁN TÌM CLIQUE CỰC ĐẠI
3.1. Mở rộng bài toán Maximal Clique phù hợp với thực tế
Trong thực tế, các ứng dụng Clique của đồ thị thường với số đỉnh lớn và phức
tạp. Trong nghiên cứu này, bài toán xử lý trên các đơn đồ thị vô hướng. Hình ảnh về
đồ thị cỡ lớn như Hình 3.1.
Hình 3.1: Đồ thị 12 đỉnh và Clique cực đại với k = 5

HVTH: NGUYỄN VĂN KIỆT Trang 18
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
3.2. Giới thiệu hướng tiếp cận thuật giải
Năm 1972, Karp [9], đã giới thiệu danh sách 21 bài toán NP-complete, một
trong số đó là bài toán tìm clique cực đại trên đồ thị. Như đã giới thiệu trong chương
2, thuật toán Bron Kerbosch giải quyết bài toán tìm Clique cực đại với độ phức tạp
O(3
n/3
). Thực tế, các bài toán ứng dụng Clique thường với số đỉnh rất lớn, khi đó bài
toán sẽ có thời gian chạy rất lớn. Để giải quyết vấn đề này, chúng ta phải xây dựng
một giải thuật mới tìm clique cực đại với thời gian đa thức.
Một thuật toán là một phương pháp giải quyết vấn đề phù hợp để thực thi
được trên máy tính. Việc thiết kế thuật toán thường phải đối mặt với một số phương
pháp khác nhau. Tuy nhiên, có nhiều vấn đề mà các thuật toán chỉ giải quyết được
phải mất nhiều thời gian để tính toán các giải pháp, nhưng thực tế thì không cho
phép điều này. Một thuật toán có thời gian đa thức là một thuật toán có số lượng
bước tính toán luôn được xác định bởi một hàm đa thức theo kích thước đầu vào. Do

đó, một thuật toán có thời gian đa thức là một trong những thuật toán hữu ích trong
thực tế. Các lớp bài toán có thời gian đa thức được kí hiệu là P. Ý tưởng là chúng ta
tìm cách đưa các bài toán NP-complete về các bài toán P. Thuật toán được thiết kế
và trình bày chi tiết trong mục 3.3.
3.3. Các thủ tục sử dụng trong polynomial-time algorithm
3.3.1. Các thủ tục
 Procedure 1: Cho một đơn đồ thị G với n đỉnh và một clique Q của G.
- Nếu Q không có các đỉnh có khả năng kề với đỉnh khác thì xuất ra Q.
- Ngược lại, với mỗi đỉnh có khả năng kề v của Q,
+ Tìm số đỉnh có thể kề là ρ(Q∪{v}) của clique Q∪{v}.
+ v
max
kí hiệu đỉnh có thể kề sao cho ρ(Q∪{v
max
}) là lớn nhất và thu một
clique Q∪{v
max
}.
+ Lặp lại cho đến khi clique không còn đỉnh nào có khả năng kề.
 Procedure 2: Cho một đồ thị G với n đỉnh và một clique cực đại Q của G.
- Nếu không có đỉnh v nằm ngoài Q và có chính xác một đỉnh w nằm trong Q
và w không là hàng xóm của v thì xuất ra Q.

HVTH: NGUYỄN VĂN KIỆT Trang 19
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
- Ngược lại, tìm một đỉnh v nằm ngoài Q sao cho có chính xác một đỉnh w nằm
trong Q không là hàng xóm của v.
- Định nghĩa Q
v,w
: Đưa đỉnh v vào Q và xóa w từ Q.

- Thực hiện Procedure 1 trên Q
v,w

- Xuất ta kết quả clique.
3.3.2. Thuật toán
Cho đầu vào là một đồ thị đơn G với n đỉnh được gán nhãn 1,2, …, n, tìm
kiếm một clique có kích cỡ nhỏ nhất là k. Tại mỗi giai đoạn, nếu một clique thu
được có kích thước nhỏ nhất là k thì dừng lại.
Part I: For i=1,2, …,n
• Khởi tạo clique Q
i
= {i};
• Thực hiện procedure 3.1 trên Q
i
;
• For r = 1,2, …, k
Thực hiện Procedure 2
• Kết quả là một clique cực đại Q
i
;
Part II: For mỗi cặp clique cực đại Q
i
, Q
j
được tìm trong Part I
• Khởi tạo clique Q
i
,
j
= Q

i
∩Q
j
• Thực hiện Procedure 1 trên Q
i,j
• For r = 1, 2, …, k
Thực hiện Procesure 2;
• Kết quả là clique cực đại Q
i,j
3.4. Chứng minh tính đúng đắn của thuật toán
Chúng tôi minh họa các bước của thuật toán với một ví dụ nhỏ. Đầu vào là
một phần bù của đồ thị Frutch [10] với n = 12 cạnh như sau:
V = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

HVTH: NGUYỄN VĂN KIỆT Trang 20
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Hình 3.2: Phần bù của đồ thị Frutch
Bài toán yêu cầu: Tìm một clique có kích thước ít nhất k = 5.
Part I cho i = 1 và i = 2 sinh ra clique Q
1
và Q
2
kích thước 4, chúng tôi sẽ thực
hiện chi tiết bắt đầu I = 3. Chúng tôi khởi tạo một clique như:
Q
3
= {i} = {3}
Bây giờ, chúng tôi thực hiện procedure 3.1. Đây là kết quả trình bày hình
thức bảng:
 Clique Q

3
= {3} và Size(Q
3
) = 1.
Đỉnh có khả năng
kề v của Q
3
Các đỉnh có khả năng
kề của Q
3
∪{v}
p(Q
3
∪{v})
1 5, 6, 8, 9, 12 5
5 1, 7, 8, 11, 12 5

HVTH: NGUYỄN VĂN KIỆT Trang 21
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
6 1, 9, 11, 12 4
7 5, 9, 11, 12 4
8 1, 5, 9, 11 4
9 1, 6, 7, 8, 11 5
11 5, 6, 7, 8, 9, 12 6
12 1, 5, 6, 7, 11 5
 Maximum p(Q
3
∪ {v}) = 6 cho v = 11. Thêm đỉnh 11 vào Q
3
.

 Clique Q
3
= {3, 11} và Size(Q
3
) = 2.
Đỉnh có khả năng
kề v của Q
3
Các đỉnh có khả
năng kề của Q
3
∪{v}
p(Q
3
∪{v})
5 7, 8, 12 3
6 9, 12 2
7 5, 9, 12 3
8 5, 9 2
9 6, 7, 8 3
12 5, 6, 7 3
 Maximum ρ(Q
3
∪{v}) = 3 for v = 5. Adjoin vertex 5 to Q
3
.
 Clique Q
3
= {3, 5, 11} và Size(Q
3

) = 3.
Đỉnh có khả năng
kề v của Q
3
Các đỉnh có khả
năng kề của Q
3
∪{v}
p(Q
3
∪{v})
7 12 1
8 None 0
12 7 1
 Maximum ρ(Q
3
∪{v}) = 1 for v = 7. Adjoin vertex 7 to Q
3
.
 Clique Q
3
= {3, 5, 7, 11}. Size: 4.
Đỉnh có khả năng
kề v của Q
3
Các đỉnh có khả
năng kề của Q
3
∪{v}
p(Q

3
∪{v})
12 None 0
Maximum ρ(Q
3
∪{v}) = 0 for v = 12. Adjoin vertex 12 to Q
3
.
Chúng tôi thu được clique cực đại
Q
3
= {3, 5, 7, 11, 12}
Theo kích thước yêu cầu là k = 5 và thuật toán kết thúc.

HVTH: NGUYỄN VĂN KIỆT Trang 22
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Hình 3.3: Clique cực đại
3.5. Phân tích độ phức tạp
Chúng tôi sẽ trình bày độ phức tạp của thuật toán thời gian đa thức, bằng
cách xác định một đa thức theo n số đỉnh của đồ thị đầu vào, đó là một giới hạn trên
tổng số bước tính toán được thực hiện bởi các thuật toán. Lưu ý chúng ta xem xét:
Kiểm tra xem một cặp đỉnh cho trước được kết nối bởi các cạnh trong G, và so sánh
giữa một số nguyên cho trước và một số nguyên cho trước khác. Các thao tác này
được xem là các bước tính toán cơ bản.

HVTH: NGUYỄN VĂN KIỆT Trang 23
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
 Mệnh đề A: Cho một đồ thị đơn G với n đỉnh và một Clique Q, Procedure 1
tốn ít nhất n
5

bước.
Chứng minh: Kiểm tra một đỉnh đặc trưng có khả năng kề với đỉnh khác hay
không thì tốn ít nhất là n
2
bước. Mỗi clique đặc biệt, tìm số đỉnh đặc trưng p có khả
năng kề với các đỉnh khác thì tốn nhiều nhất là n
3
= nn
2
bước. Cho mỗi clique đặc
trưng, tìm một đỉnh mà có p là maximum thì tốn n
4
= nn
3
bước. Procudure 1 xác
định khi nhiều nhất n đỉnh là được kết nối, vì vậy tổng chi phí tốn nhiều nhất n
5
=
nn
4
bước.
 Mệnh đề B: Cho một đồ thị đơn giản G với n đỉnh và một clique cực đại Q,
Procedure 2 tốn nhiều nhất là n
5
+ n
2
+ 1 bước.
Chứng minh: Tìm một đỉnh v nằm ngoài Q có chính xác một đỉnh w nằm
trong Q mà nó không là hàng xóm của nhau thì tốn ít nhất n
2

bước. Nếu một đỉnh v
đã tìm thấy, nó tốn một bước để trao đổi v và w. Theo mệnh đề A, nó tốn chi phí
nhiều nhất n
5
bước để thực hiện Procedure 1 trên clique kết quả. Vì thế, Procedure 2
tốn nhiều nhất n
2
+1+n
5
bước.
 Mệnh đề C: Cho một đồ thị đơn giảng G với n đỉnh, Part I của thuật toán tốn
nhiều nhất n
7
+n
6
+n
4
+n
2
bước.
Chứng minh: Tại mỗi lần lặp, Procedure 1 tốn nhiều nhất là n
5
bước. Sau đó,
Procedure 2 được thực hiện ít nhất n lần, vì vậy, tốn chi phí nhiều nhất là n(n
5
+n
2
+1)
= n
6

+n
3
+n bước. Vì thế, tại mỗi lần lặp, có nhiều nhất n
5
+n
6
+n
3
+n bước thực thi. Do
có n lần lặp, Part I thực hiện nhiều nhất n(n
5
+n
6
+n
3
+n) = n
6
+n
7
+n
4
+n
2

bước.
 Mệnh đề D: Cho một đồ thị đơn giản G với n đỉnh, thuật toán tốn ít hơn
n
8
+2n
7

+n
6
+n
5
+n
4
+n
3
+n
2

bước để kết thúc.


HVTH: NGUYỄN VĂN KIỆT Trang 24
Thuật toán và Phương pháp giải quyết vấn đề GVHD: PGS. TS. ĐỖ VĂN NHƠN
Chứng minh: Có ít hơn n
2
cặp clique cực đại khác nhau được tìm thấy trong
Part I. Trong Part II tốn chi phí nhỏ hơn n
2
(n
5
+n
6
+n
3
+n) = n
7
+n

8
+n
5
+n
3
. Vì vậy, tổng
chi phí của thuật toán trong Part I và Part II là (n
7
+n
6
+n
4
+n
2
)+(n
8
+n
7
+n
5
+n
3
) =
n
8
+2n
7
+n
6
+n

5
+n
4
+n
3
+n
2
bước để kết thúc thuật toán.
Vậy thuật toán này có độ phức tạp là một đa thức bậc 8.
3.6. Cài đặt thuật toán và thực hiện một số demo chương trình
Thuật toán này dễ dàng cài đặt trên ngôn ngữ C++. Tiến hành các thử nghiệm
trên một số đồ thị nổi tiếng. Trong mỗi trường hợp, thuật toán này tìm một Clique
cực đại với thời gian đa thức. Sau đây, là các minh họa cho thuật toán:
 Đồ thị Tetrahedron [5]. Chạy chương trình trên đồ thị Tetrahedron với n = 4
đỉnh. Thuật toán này tìm một clique cực đại với kích thước k = 4.
- File input:
1_tetrahedron_graph.txt
4
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
- File output:
1_tetrahedron clique.txt
Clique (4) : 1 2 3 4
- Minh họa kết quả:

HVTH: NGUYỄN VĂN KIỆT Trang 25

×