Chứng minh các bài toán thuộc phân lớp NPC Để chứng minh một bài toán là NP-Complete, ta cần chứng minh + Bài toán đấy thuộc phân lớp NP + Bài toán đấy được dẫn về từ 1 bài toán khác thuộc phân lớp NPC Dưới đây là một vài cách chứng minh mình đã có viết đơn giản nhất nhằm giúp các bạn hiểu sơ sơ và kiếm được 50-70% số điểm hoặc 100% số điểm (nếu thầy dễ) của câu này :v Nếu muốn điểm cao hơn hoặc muốn hiểu sâu hơn, hãy kết hợp ôn file này, file pptx của thầy và tìm kiếm trên mạng Bước 1: Chứng minh bài toán thuộc phân lớp NP - Để chứng minh bài toán thuộc phân lớp NP ta cần chỉ ra thuật toán để kiểm tra nghiệm của bài toán trong thời gian đa thức (tùy bài toán) 1.1 Bài toán 3-SAT Bài toán 3-SAT thì không phải chứng minh vì theo định lý Cook-Levin, 3-SAT là NPC rồi nên bài toán 3-SAT dùng để dẫn về bài toán khác để chứng minh bài toán đấy là NP-C hoặc NP-hard 1.2 Bài toán clique - Input : G=(V,E), k, tập S ⊂ V - Output : tập đỉnh S là clique và |S| ≥ k hay không ? - Thuật toán kiểm tra một tập S ⊂ V là 1 clique của G=(V,E) và |S| ≥ k if (|S| ≥ k) for (u ∈ S) do for (v ∈ S\{u}) do if (u,v) ∉ E return false break Return true; ⇒ độ phức tạp O(n2) ⇒ Bài toán thuộc phân lớp NP 1.3 Bài toán tập độc lập (independent set) - Thuật toán - Input : G=(V,E), k, tập I ⊂ V - Output : Tồn tại tập độc lập có tập đỉnh I và |I| ≥ k hay không ? Nếu |I| ≥ k, Với mỗi đỉnh trong tập I chúng ta kiểm tra mọi cạnh kề với đỉnh đó trong đồ thị G để xem cạnh đó có nối với đỉnh nào trong I không. Nếu có cạnh đó nếu có thì ta kết luận I không phải là tập độc lập của G, còn không thì I là tập độc lập của G. ⇒ Độ phức tạp O(n2) ⇒ Thuộc phân lớp NP 1.4 Bài toán phủ đỉnh (Vertex cover) - Input : Đồ thị G=(V,E), k, tập V’ - Output : Tập V’ có là 1 phủ đỉnh và |V’| ≤ k ? - Thuật toán kiểm tra : Count =0; For v ∈ 𝑉′ Xóa tất cả cạnh kề với v trong E Count = Count +1 If (count = k ) and ( E = ∅ ) return true; Else return false; ⇒ Độ phức tạp O(n2) ⇒ Thuộc phân lớp NP 1.5 Bài toán chu trình Hamilton - Input : G = (V,E), tập T ⊂ E - Output : G’=(T,E) là đồ thị Hamilton không ? - Thuật toán kiểm tra: For v ∈ V If ( v không ⇒ Độ phức tạp O(n2) ⇒ Thuộc phân lớp NP Bước 2: Chứng minh bài toán được dẫn về từ 1 bài toán NPC (để chứng minh NP-Hard chỉ cần làm bước 2) 1.1 Bài toán 3-SAT Theo định lí Cook-Levin, 3-SAT là NPC 1.2 Bài toán clique 3-SAT <p Clique - Mỗi đỉnh là một biến của một mệnh đề. Nối mỗi đỉnh của các mệnh đề khác nhau với nhau, ngoại trừ cạnh giữa 𝑥𝑖 với 𝑥̅𝑖 . Nếu ta có m mệnh đề ⇒ ta sẽ có clique n đỉnh Ví dụ (𝑥1 v 𝑥 ̅̅̅2 v 𝑥3 ) ^ (𝑥1 v 𝑥2 v 𝑥 ̅̅̅) 3 1.3 Bài toán tập độc lập (independent set) Clique <p Independent set - Từ đồ thị đầy đủ G = (V,E) ta xây dựng một đồ thị mới G’=(V’,E’) có : + V’ = V + E’= {𝑥 |𝑥 ∉ 𝐸} → G’ là đồ thị bù của G → Với đồ thị G và G’, giả sử ta có tập S ⊂ V là tập độc lập cực đại của G ⇒ S cũng là clique cực đại của G’ (Nhớ vẽ lấy 1 hình làm ví dụ) ⇒ Clique <p Independent set 1.4 Bài toán phủ đỉnh (Vertex cover) Independent set <p Vertex cover - Phủ đỉnh : tập W ⊆ V với mọi đỉnh uv ∈ E : u ∈ W or v ∈ W - W là phủ đỉnh của đồ thị G ⇔ V – W là tập độc lập của G - W là phủ đỉnh cực tiểu của đồ thị G ⇔ V- W là tập độc lập cực đại của G (Nhớ vẽ lấy 1 hình làm ví dụ) 1.5 Bài toán chu trình Hamilton 3-SAT <P Hamiltonian Cycle - Bước 1: Với k là số mệnh đề Xây dựng k đường đi từ P1,P2,...,Pn tượng tự với k biến Mỗi đường đi chứa 2k nút (vi,1, vi,2, vi,3, ... vi,2k) Ví dụ : (𝑥1 + 𝑥2 + 𝑥 ̅̅̅)(𝑥 ̅̅̅2 + 𝑥4 ) 3 ̅̅̅ 2 + 𝑥3 + 𝑥4 )(𝑥1 + 𝑥 - Bước 2: Nối các đỉnh từ vi,j-1 tới vi,j (trái sang phải) trên Pi tương ứng với gán xi = true Nối các đỉnh từ vi,j tới vi,j-1 (phải sang trái) trên Pi tưởng ứng với gán xi = false Nối đỉnh s với vi,1 và vi,6 với vi+1,1 và vi+1,6 với t - Bước 3: Đường thẳng từ t tới s luôn luôn có mặt trong bất kì chu trình hamilton của đồ thị - Bước 4: Thêm cái nút C1, C2, C3,.. thể hiện các mệnh đề Bước 5 Nếu mệnh đề Cj chứa biến xi 1. Nối Cj với vi,2j-1 và vi,2j 2. Hướng của đường đi từ Cj; vi,2j-1 và vi,2j là : a. Trái sang phải nếu Cj chứa xi b. Phải sang trái nếu Cj chứa 𝑥̅𝑖 2. Đồ thị có thể được xây dựng lên trong thời gian đa thức 3. Nếu tồn tại 1 phép gán cho bài toán 3-SAT Chọn đường đi đi qua Pi từ trái qua phải nếu xi = true và ngược lại nếu xi = false bao gồm các mệnh đề trong đường đi Vì đường đi là 1 hướng nên không có nút nào bị lặp lại. ⇒Đường đi thu được là chu trình Hamilton