Toán học đang được áp dụng rộng rãi trong các lĩnh vực trong cuộc sống. Phương pháp Toán là cơ sở quan trọng trong nhiều ngành khoa học cũng như ngành Khoa học máy tính, trong đó có các bài toán tìm thỏa mãn SAT (Satisfiability). Ở bài báo cáo này tôi xin trình bày bài toán 3SAT nhưng trước đó tôi sẽ trình bày một số cơ sở lý thuyết của bài toán ở phần thứ đầu sau đó mới đi vào bài toán.
Trang 1RƯỜN I HỌC SƯ PH M TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN CAO HỌC NGÀNH: KHOA HỌC MÁY TÍNH
KHOÁ: 28
MÔN HỌ : PHƯƠN PH P N R N N HỌC
Ề TÀI CUỐI KÌ:
TÌM HIỂU BÀI TOÁN 3-CNF SAT
Giảng viên hướng dẫn : TS Huỳnh ăn ức
Sinh viên thực hiện : Nguyễn Thanh Thuỷ
Lớp : Khoa Học Máy Tính – Khoá 28
TP Hồ Chí Minh,tháng 8 năm 2018
Trang 21
M C L C
A Giới thiệu 3
B Cơ sở lý thuyết 3
1 Tổng quan về thuật toán 3
1.1 Định nghĩa: 3
1.2 Phân tích thuật toán và đánh giá thời gian thực hiện thuật toán 3
1.2.1 Phân tích thuật toán 3
1.2.2 Tại sao lại cần có thuật toán hiệu quả? 3
2 Lý thuyết độ phức tạp 3
2.1 Máy tính Turing 3
2.2 Các khái niệm về độ phức tạp của thuật toán 4
2.2.1 Độ phức tạp trong trường hợp xấu nhất 4
2.2.2 Độ phức tạp trung bình 4
2.2.3 Độ phức tạp tiệm cận 4
2.2.4 Độ phức tạp đa thức (Polynomial) 5
2.2.5 Thuật toán đa thức 5
2.3 Cách tính độ phức tạp 5
2.3.1 Các quy tắc cơ bản 5
2.3.1.1 Quy tắc cộng: 5
2.3.1.2 Lệnh Quy tắc nhân: 5
2.4 Lớp P, NP và mối quan hệ giữa lớp P và lớp NP 5
2.4.1 Lớp P 6
2.4.2 Lớp NP 6
2.4.3 Mối quan hệ giữa lớp P và lớp NP 7
2.4.4 Lớp bài toán NP - khó (NP - hard) và NP - đầy đủ (NP – Complate) 7 2.4.4.1 Các bài toán quyết định 7
2.4.4.2 Bài toán NP – Khó (NP – Hard) 8
2.4.4.3 Bài toán lớp NPC 8
2.4.4.4 Mối quan hệ giữa P, NP và NPC được biểu diễn như hình sau: ………8
2.4.5 Một số bài toán NPC 9
- Bài toán Vertex – Cover 9
3 Lôgic mệnh đề 9
3.1 Công thức Lôgic mệnh đề 9
Trang 32
3.2 Chuẩn tắc hội CNF 10
3.3 Giải quyết các bài toán chứng minh logic 10
3.3.1 Bài toán chứng mình logic: 10
3.3.2 Cách giải quyết 10
C Nội dung 11
1 Bài toán SAT 11
1.1 Lịch sử phát triển của SAT: 11
1.2 Bài toán SAT 11
1.3 Bài toán CNF-SAT 12
1.4 Bài toán chứng minh thỏa mãn (SAT): 12
1.5 Giải quyết bài toán SAT 12
1.5.1 Phương pháp Backtracking 12
1.5.2 Các phương pháp tối ưu hoá lặp (Iterative optimization methods) ……… 13
2 Bài toán 3-CNF SAT 13
2.1 Định nghĩa 13
2.2 Ứng dụng bài toán 3 - SAT 14
2.3 Thuật toán DPLL giải quyết các bài toán SAT 15
2.3.1 Lịch sử 15
2.3.2 Giải thuật DPLL 15
2.3.3 Cài đặt giải thuật 16
D Kết luận 16
E Tài liệu tham khảo 16
Trang 43
A Giới thiệu
Trong Toán học có rất nhiều dạng toán và bài toán khác nhau, có bài toán là tiền đề hoặc là kết quả của bài toán khác Nhiều bài toán vẫn chưa được giải nhưng
là khởi nguồn để con người tìm hiểu và tìm tòi
Toán học đang được áp dụng rộng rãi trong các lĩnh vực trong cuộc sống
Phương pháp Toán là cơ sở quan trọng trong nhiều ngành khoa học cũng như ngành Khoa học máy tính, trong đó có các bài toán tìm thỏa mãn SAT (Satisfiability)
Ở bài báo cáo này tôi xin trình bày bài toán 3SAT nhưng trước đó tôi sẽ trình bày một số cơ sở lý thuyết của bài toán ở phần thứ đầu sau đó mới đi vào bài toán
B ơ sở lý thuyết
1 Tổng quan về thuật toán
1.1 ịnh nghĩa:
Thuật toán là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các phép toán hoặc hành động cần thực hiện…để cho ta lời giải của bài toán
Các đặc trung của thuật toán
- Input
- Output
- Tính xác định
- Tính khả thi
- Tính dừng
- Tính đơn vị
- Tính tổng quát
1.2 Phân tích thuật toán và đánh giá thời gian thực hiện thuật toán
1.2.1 Phân tích thuật toán
Phân tích thuật toán là quá trình tìm ra những đánh giá về thời gian và dung lượng bộ nhớ cần thực hiện thuật toán
Hầu hết các bài toán đều có rất nhiều thuật toán khác nhau để giải quyết chúng và nhiệm vụ của chúng ta là phải tìm thuật toán tốt nhất để thực hiện bài toán
đã đặt ra
1.2.2 Tại sao lại cần có thuật toán hiệu quả?
Kỹ thuật máy tính ngày càng tiến bộ rất nhanh, các máy tính lớn có thể đạt hàng trăm triệu phép toán mỗi giây Tuy nhiên có những thuật toán mà độ phức tạp
về thời gian là rất lớn mà các máy tính hiện đại này cũng tốn rất nhiều thời gian Khi
đó thì việc phân tích thuật toán để tìm ra những thuật toán hiệu quả là cần thiết
2 Lý thuyết độ phức tạp
2.1 Máy tính Turing
Máy tính Turing là một máy tính toán trừu tượng, vừa có khả năng của máy tính thực sự , vừa cho phép định nghĩa về mặt toán học về những gì có thể tính toán được
Trang 54
Một máy Turing là một bộ T = (, Q, , , q0, b ,F)
Trong đó :
Q là một tập hữu hạn các trạng thái,
Γ là bộ chữ trên băng (bộ chữ dùng trên băng),
b∈là ký hiệu trống (ký hiệu duy nhất cho phép xuất hiện một cách
vô hạn trên băng ở bất kỳ bước nào trong quá trình tính toán),
⊆Γ là bộ chữ vào (bộ chữ dùng cho xâu vào),
: Q x Γ Q x Γx {L, R} là một hàm bộ phận, hay còn gọi là hàm
dịch chuyển (là hàm định nghĩa các việc dịch chuyển trạng thái của
máy Turing hoặc máy trạng thái), trong đó L và R được hiểu là trái (Left) và phải (Right)),
q0∈Q là trạng thái đầu (trạng thái khởi tạo),
F⊆Q là tập các trạng thái thừa nhận – accepting state (hoặc trạng thái cuối)
Nhận xét: Máy Turing có cấu tạo cực kì đơn giản nhưng lại làm được mọi việc liên
quan tới tính toán các phép tính Từ mô hình này có thể định nghĩa ra phép cộng (mã hóa dạng nhị phân) bằng cách dịch chuyển đầu đọc 0, 1 và từ đó định nghĩa ra các phép tính khác
Có hai loại:
Máy tính Turing tất định
Máy tính Turing không tất định
2.2 Các khái niệm về độ phức tạp của thuật toán
2.2.1 ộ phức tạp trong trường hợp xấu nhất
Cho một thuật toán A với đầu vào n, khi đó:
- Độ phức tạp về bộ nhớ trong trường hợp xấu nhất được định nghĩa là:
LA(n) = max{lA(e)║│e│≤n}
Tức là chi phí lớn nhất về bộ nhớ
Trong ví dụ trên: Dữ liệu vào: n+1, ra:1, phụ:1 nên LA(e)=n+3
- Độ phức tạp thời gian trong trường hợp xấu nhất được định nghĩa là :
TA(n) = max{tA(e)║│e│≤n}
Tức là chi phí lớn nhất về thời gian
Trong ví dụ trên TA(n) =1+2(n-1) = 2n-1
2.2.2 ộ phức tạp trung bình
Là tổng số các độ phức tạp khác nhau ứng với các bộ dữ liệu chia cho tổng số
2.2.3 ộ phức tạp tiệm cận
Thuật toán A với đầu vào n gọi là có độ phức tạp O(f(n)) nếu hằng số C, N0:
TA(n)C.f(n) , nN0 Tức là TA(n) có tốc độ tăng là O(f(n))
Trang 65
2.2.4 ộ phức tạp đa thức (Polynomial)
Thuật toán được gọi là có độ phức tạp đa thức nếu tồn tại đa thức P(n) mà TA(n)C.P(n) , nN0
2.2.5 Thuật toán đa thức
Thuật toán được gọi là đa thức nếu độ phức tạp về thời gian trong trường hợp xấu nhất của nó là đa thức
Việc đánh giá đúng độ phức tạp của bài toán là một vấn đề hết sức phức tạp Vì vậy người ta thường quan tâm đến việc đấnh giá độ phức tạp thời gian trong trường hợp xấu nhất của bài toán
Một số đơn vị đo tốc độ tăng:
- O(1): Hầu hết các chỉ thị của chương trình đều được thực hiện một lần hay nhiều nhất chỉ một vài lần⇒Thời gian chạy của chương trình là hằng số
- O(logN): Thời gian chạy của chương trình là logarit, tức là thời gian chạy của chương trình tiến chậm khi N lớn dần
- O(N):Thời gian chạy là tuyến tính Đây là tình huống tối ưu cho một thuật toán phải xử lý N dữ liệu nhập
- O(NlogN): Thời gian chạy tăng dần lên cho các thuật toán mà giải một bài toán bằng cách tách nó thành các bài toán con nhỏ hơn, sau đó tổ hợp các lời giải
- O(N2): Thời gian chạy là bậc 2, trường hợp này chỉ có ý nghĩa thực tế cho các bài toán tương đối nhỏ Thời gian bình phương thường tăng dần trong các thuật toán phải xử lý tất cả các cặp phần tử dữ liệu (2 vòng lặp lồng nhau)
- O(N3): Thuật toán xử lý các bộ ba của các phần tử dữ liệu (3 vòng lặp lồng nhau)⇒ ý nghĩa với các bài toán nhỏ
- O(2n) , O(n!), O(nn): Thời gian thực hiện thuật toán là rất lớn do tốc độ tăng của các hàm mũ
2.3 Cách tính độ phức tạp
2.3.1 Các quy tắc cơ bản
2.3.1.1 Quy tắc cộng:
Nếu T1(n) và T2(n) là thời gian thực hiện 2 chương trình P1, P2 và
T1(n)=O(f(n)), T2(n)=O(g(n)) thì thời gian thực hiện của đoạn 2 chương trình đó nối tiếp nhau là T(n)=O(max(f(n),g(n))
2.3.1.2 Lệnh Quy tắc nhân:
Nếu T 1 (n) và T 2 (n) là thời gian thực hiện 2 đoạn chương trình P 1 , P 2 và
T 1 (n)=O(f(n)), T 2 (n)=O(g(n)) thì thời gian thực hiện của 2 đoạn chương trình đó lồng nhau là T(n)=O(f(n).g(n))
2.4 Lớp P, NP và mối quan hệ giữa lớp P và lớp NP
Thuật toán không đơn định đa thức(Nodeterministic Polynomial NP)
Trang 76
Với nhiều bài toán tối ưu tổ hợp vẫn chưa tìm được các thuật toán đơn định chạy trong thời gian đa thức, trong khi đó nếu cho phép dùng thuật toán không đơn định thì lại dễ dàng chỉ ra các thuật toán chạy trong thời gian đa thức
Sự phân lớp các bài toán
Với một bài toán cho trước có 2 khả năng xảy ra:
Không giải được hoặc
Giải được bằng thuật toán
- Trường hợp bài toán giải được bằng thuật toán cũng chia làm 2 loại:
Thực tế giải được: Được hiểu là thuật toán xử lý trong thời gian đủ nhanh, thực tế cho phép, đó là thuật toán có độ phức tạp thời gian là đa thức
Thực tế khó giải: Được hiểu là thuật toán xử lý trong nhiều thời gian, thực tế khó chấp nhận, đó là thuật toán có độ phức tạp thời gian là trên
đa thức (hàm mũ)
Do đó, ta có sự phân lớp các bài toán do 2 tác giả Cook và Karp đề xuất năm 1970-1971 như sau:
2.4.1 Lớp P
Thuật toán đơn định (Deterministic algorithm): là thuật toán có kết quả thực
hiện mỗi phép toán được xác định duy nhất
Định nghĩa: Lớp P bao gồm tất cả các bài toán giải được bởi thuật toán đơn định trong thời gian đa thức (tức là tồn tại thuật toán giải quyết nó với thời gian chạy đa thức)
Thuật toán có độ phức tạp O(nk), k là hằng số
Những bài toán có độ phức tạp dạng O(k), O(log(n)), O(n), O(nlog(n)), nk đều
là những bài toán thuộc lớp P
Ví dụ: Thuật toán Ơclide tìm Ước chung lớn nhất (UCLN) của hai số là thuật toán giải trong thời gian đa thức Do đó bài toán tìm UCLN của hai số m và n thuộc lớp P
Chú ý:
Không phải mọi bài toán thuộc lớp P đã có thuật toán hiệu quả
Nếu bài toán không thuộc lớp P thì đều phải trả giá rất đắt về thời gian hoặc thậm chí không giải được nó trong thực tế
2.4.2 Lớp NP
Thuật toán không đơn định (nondeterministic algorithm): là thuật toán có kết quả không phải là một giá trị duy nhất mà là một tập hợp hữu hạn các giá trị
Định nghĩa Là lớp các bài toán có thể giải được bằng thuật toán không đơn định trong thời gian đa thức Hay, là lớp các bài toán mà mọi nghiệm giả định đều
có thể được kiểm chứng trong thời gian đa thức (Nondeterministic polynomial)
Ví dụ: Bài toán HC (Hamilton cycle)
- Intance: Cho đồ thị vô hướng G = (V,E)
- Question: Hỏi đồ thị vô hướng G = (V,E) có chu trình Hamilton hay không?
Trang 87
2.4.3 Mối quan hệ giữa lớp P và lớp NP
Ta có thể thấy một cách trực quan là P NP Tuy vậy, cho đến nay người ta
vẫn chưa tìm được một bài toán thuộc lớp NP nhưng không thuộc lớp P Có nghĩa là câu hỏi " P = NP?" chưa có lời giải Mặc dù vậy, nhiều nhà khoa học cho rằng P ≠
NP
Có lẽ lý do hấp dẫn lý giải tại sao các nhà khoa học luôn tin rằng P ≠ NP, đó là
sự tồn tại của một lớp các bài toán trong NP\P được gọi là lớp NP -đầy đủ NPComplete hay gọn hơn NPC) Lớp này có tính chất gây kinh ngạc rằng, nếu một
bài toán trong lớp này có thể giải được bởi một thuật toán đơn định thời gian đa
thức, thì mọi bài toán trong lớp NP cũng giải được bởi một thuật toán đơn định thời gian tương tự, nghĩa là P = NP (!)
Việc xem xét quan hệ giữa P và NP dẫn đến chúng ta đi đến nghiên cứu lớp NPC
Hình 2: Minh họa giả thuyết về mối quan hệ giữa các lớp P, NP và NP-đầy đủ
2.4.4 Lớp bài toán NP - khó (NP - hard) và NP - đầy đủ (NP – Complate) 2.4.4.1 Các bài toán quyết định
Định nghĩa: Bài toán quyết định là bài toán mà câu trả lời của nó chỉ là “yes” hoặc “no” (tương ứng với true/1 hay false/0)
Về nguyên tắc mọi bài toán đều có thể biểu diễn dưới dạng bài toán quyết định tương ứng
Ví dụ về bài toán quyết định
Ví dụ 1: Bài toán kiểm tra số nguyên tố
P Sắp xếp Cây khung bé nhất Nhân ma trận Tìm kiếm tuần tự Đường đi ngắn nhất
NP Bài toán cái túi Bài toán ba lô Bài toán người du lịch
Trang 98
- Instance: Cho một số nguyên n>2
- Question: n có phải là số nguyên tố hay không?
Ví dụ 2: Bài toán HC (Hamilton cycle)
- Intance: Cho đồ thị vô hướng G = (V,E)
- Question: Hỏi đồ thị vô hướng G = (V,E) có chu trình Hamilton hay không?
2.4.4.2 Bài toán NP – Khó (NP – Hard)
Bài toán A được gọi là NP- khó nếu như tồn tại thuật toán đa thức để giải bài toán A thì kéo theo sự tồn tại thuật toán đa thức để giải mọi bài toán trong NP
Hay: A là NP – Khó nếu như B A, với mọi bài toán B NP
2.4.4.3 Bài toán lớp NPC
2.4.4.3.1 Phép dẫn với thời gian đa thức
Định nghĩa: Cho hai bài toán 1 và 2
1 là lớp các Instance ứng với Yes , 1 =
2 là lớp các Instance ứng với No, 2 =
Phép dẫn thời gian đa thức f biến đổi mỗi dữ kiện 1 thành dữ kiện 2 thoã mãn:
1 Phép dẫn f được thực hiện trong thời gian đa thức bởi máy Turing
2 f( )
f( )
Ký hiệu : 1 ∞ 2
Ví dụ:
Instance: n, các thành phố: C = {c1, c2,…cm}, khoảng cách giữa ci, cj là d(ci, cj) Z+, B Z+
Question: Tồn tại hay thỏa : C (1) ,C (2) , ,C (m) thoã:
∑ ( ( ) ( )) ( ( ) ( ))
2.4.4.3.2 Bài toán lớp NPC
Định nghĩa: Một bài toán thuộc lớp NP mà mọi bài toán thuộc lớp NP khác đều dẫn được về nó với thời gian đa thức được gọi là bài toán NPC
2.4.4.4 Mối quan hệ giữa P, NP và NP được biểu diễn như hình sau:
Trang 109
2.4.5 Một số bài toán NPC
- Bài toán SAT
- Bài toán 3-SAT
- Bài toán Vertex – Cover
- Bài toán Clique
- Bài toán Subset – Sum
- Bài toán Knapsack
- Bài toán Traveling Salesman
- …
Hình 2.4.4(1) Sơ đồ chứng minh một số bài toán NPC
Ở nội dung bài này, tôi sẽ trình bày bài toán 3-CNF SAT
3 Lôgic mệnh đề
Đầu vào của bài toán SAT là một công thức Lôgic mệnh đề thường được biểu diễn dưới dạng chuẩn tắc hội (CNF) hoặc chuẩn tắc tuyển (DNF) Dưới đây sẽ định nghĩa một công thức Lôgic mệnh đề và các dạng chuẩn tắc tương ứng
3.1 Công thức Lôgic mệnh đề
Một công thức Lôgic mệnh đề được xây dựng từ các biến và các phép toán lôgic bao gồm: AND (phép hội), OR (phép tuyển), NOT (phủ định), IMPLICATION (phép kéo theo) Dưới đây là các khái niệm cơ bản [1]:
Mệnh đề: Mỗi câu được phát biểu là đúng hay sai được gọi là một mệnh đề
Các phép toán trên mệnh đề bao gồm:
Phép phủ định ( )
Phép tuyển ( )
Phép hội ( )
Phép XOR ()
Phép kéo theo ( )
Phép tương đương ( )
Bảng chân trị đối với các phép toán mệnh đề:
Bảng giá trị các phép toán mệnh đề
A B A B A B A B A B A B ̅
0 0 0 0 0 1 1 1
0 1 1 0 1 1 0 1
1 0 1 0 1 0 0 0
Trang 1110
1 1 1 1 0 1 1 0
3.2 Chuẩn tắc hội CNF
CNF là một tuyển sơ cấp hay hội của hai hay nhiều tuyển sơ cấp Dạng chuẩn tắc hội CNF có dạng như sau:
TSC1 … TSCn
Trong đó TSCi ≡ (P1 … Pm) với n, m và Pi là các biến Lôgic mệnh đề Bất kỳ một công thức Lôgic mệnh đề nào cũng có thể được chuyển đổi thành
công thức dạng CNF nhờ các phép biến đổi tương đương như: Luật De Morgan, các luật phân phối, các phép giao hoán, …
Dưới đây là một số phép biến đổi tương đương:
* Luật De Morgan
¬(A B) ¬A ¬B
¬(A B) ¬A ¬B
* Tính chất giao hoán của các phép Lôgic
A B B A
A B B A
* Tính chất kết hợp của các phép Lôgic
(A B) C A ( B C)
(A B) C A ( B C)
* Tính chất phân phối
A (B C) (A B ) (A C)
A (B C) (A B ) (A C)
* Biểu diễn phép kéo theo qua các phép Lôgic khác
A B ¬A B
A B ¬(¬A B)
A B ¬ B ¬A
* Biểu diễn phép tương đương qua các phép Lôgic khác
A B (A B) (B A)
3.3 Giải quyết các bài toán chứng minh logic
3.3.1 Bài toán chứng mình logic:
Với một cơ sở tri thức (một tập các mệnh đề) KB và một mệnh đề cần chứng minh (gọi là một định lý)
Câu hỏi được đặt ra là liệu có tồn tại một thủ tục (suy diễn) có thể giải quyết được bài toán chứng minh logic, trong một số hữu hạn bước
3.3.2 Cách giải quyết
Có 3 phương pháp (chứng minh) phổ biến:
Sử dụng bảng chân lý (Truth-table)
Áp dụng các luật suy diễn (Inference rules)
Chuyển về bài toán chứng minh thoã mãn (SAT)