Professional Documents
Culture Documents
TranTrongNhan CS112
TranTrongNhan CS112
Mục lục
Lời cảm ơn 2
1 Giải thuật thời gian đa thức tất định và không tất định 2
1.1 Giải thuật tất định (Deterministic) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Giải thuật không tất định (non-Deterministic ) . . . . . . . . . . . . . . . . . . . . . . . . 3
Lời kết 24
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 1/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
Lời cảm ơn
Đầu tiên, em xin được gửi lời cảm ơn đến giảng viên là cô Huỳnh Thị Thanh Thương đã giúp em
thực hiện bài tập này. Nhờ sự giúp đỡ tận tình của cô, em đã vượt qua những khúc mắc, khó khăn trong
suốt quá trình thực hiện bài tập, từ đó hoàn thành đúng tiến độ của môn học và cho ra sản phẩm chất
lượng.
1 Giải thuật thời gian đa thức tất định và không tất định
Định nghĩa 1. Permitting at most one next move at any step in a computation.
Đặc trưng :
• Tại mỗi bước của thuật toán, hành động tiếp theo được xác định rõ ràng và không có sự lựa chọn
ngẫu nhiên.
• Cùng một input đầu vào thì thuật toán luôn cho ra một kết quả giống nhau
Ví dụ :
Thuật toán sắp xếp chèn (insertion sort)
• Khởi tạo: Thuật toán bắt đầu với một mảng số thực đã cho a1 , a2 , . . . , an với n ≥ 2.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 2/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
• Không có sự ngẫu nhiên: Thuật toán không sử dụng yếu tố ngẫu nhiên. Mọi hoạt động của nó đều
dựa trên các quy tắc và điều kiện cố định.
• Tính duy nhất của hành động tiếp theo: Tại mỗi bước của thuật toán, chỉ có một hành động duy
nhất được thực hiện tiếp theo dựa trên trạng thái hiện tại và đầu vào hiện tại.
• Với cùng một input đầu vào thì dù chạy thuật toán nhiều lần kết quả output đầu ra vẫn không
thay đổi, luôn luôn là một mảng theo thứ tự tăng dần.
Định nghĩa 2. Permitting more than one choice of next move at some step in a computation
Đặc trưng :
1. Cho phép nhiều hơn một lựa chọn bước tiếp theo: Ở một số bước trong quá trình, có nhiều lựa
chọn khác nhau cho hành động tiếp theo.
2. khi một giải thuật gặp một sự lựa chọn giữa nhiều khả năng, thuật toán có khả năng “tiên đóan”
để biết chọn một khả năng thích đáng.
3. Cùng một input đầu vào, thuật toán có thể cho ra các kết quả khác nhau.
Ví dụ :
Cho A là một mảng số nguyên. Một giải thuật không tất định NSORT(A, n) sắp thứ tự các số theo thứ
tự tăng và xuất chúng ra theo thứ tự này. Đây là một thuật toán mang tính "đoán mò" (nondeterministic
sort), tức là nó sử dụng một bước đoán ngẫu nhiên để đặt các phần tử vào đúng vị trí.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 3/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
Hình 2
• Khởi tạo:
Mảng B được tạo và khởi tạo tất cả các phần tử của B bằng 0. Điều này đảm bảo rằng mảng B
ban đầu rỗng và không chứa bất kỳ phần tử nào của A.
1. Từ việc sử dụng hàm choice(1:n), có thể thấy rằng tại mỗi bước chọn j, có nhiều lựa chọn khác
nhau.
2. Điều này làm cho thuật toán trở thành không tất định, vì kết quả cuối cùng phụ thuộc vào các lựa
chọn khác nhau được thực hiện trong quá trình thực thi. Điều này không giống như các thuật toán
tất định, nơi mỗi bước chỉ có một hành động duy nhất có thể thực hiện, dẫn đến kết quả duy nhất
nếu cùng điều kiện ban đầu.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 4/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
• Thời gian: Đo lường số bước cần thiết để giải quyết một bài toán.
• Bộ nhớ: Đo lường lượng bộ nhớ cần thiết để thuật toán hoạt động.
Trong phần tiếp theo, chúng ta sẽ tìm hiểu các lớp độ phức tạp liên quan đến thời gian, cụ thể là các lớp
P, NP, NP-Hard, và NP-Complete.
Hình 3
2.1 class P
Đặc trưng :
1. Một bài toán thuộc tập P nếu tồn tại một thuật toán có thể giải quyết bài toán đó trong thời gian
đa thức.
Ví dụ : Bubble Sort là một thuật toán sắp xếp đơn giản nhưng hiệu quả cho các trường hợp nhỏ. Dưới
đây là mô tả ngắn gọn của thuật toán Bubble Sort:
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 5/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
1. Khởi tạo biến: Đầu tiên, thuật toán khởi tạo biến i bằng n − 1, nơi n là số lượng phần tử cần sắp
xếp.
i := n − 1;
while (i ≥ 1) do
3. Khởi tạo biến j: Bên trong vòng lặp ngoài, biến j được khởi tạo bằng 0.
j := 0;
while (j < i) do
5. So sánh và hoán đổi: Trong vòng lặp trong, thuật toán so sánh hai phần tử liên tiếp V [j] và
V [j + 1]. Nếu V [j] < V [j + 1], tức là phần tử đứng trước nhỏ hơn phần tử đứng sau, chúng sẽ được
hoán đổi vị trí cho nhau.
if (V [j] < V [j + 1]) then
temp := V [j];
V [j] := V [j + 1];
V [j + 1] := temp;
end if
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 6/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
6. Tăng chỉ số j: Sau mỗi lần so sánh và có thể hoán đổi, j được tăng thêm 1 để tiếp tục với cặp
phần tử tiếp theo.
j := j + 1;
7. Giảm chỉ số i: Sau khi hoàn thành một vòng lặp trong (một lượt kiểm tra toàn bộ mảng), chỉ số
i được giảm đi 1 để thu hẹp phạm vi so sánh của vòng lặp tiếp theo.
i := i − 1;
8. Kết thúc vòng lặp: Vòng lặp ngoài tiếp tục cho đến khi i giảm xuống nhỏ hơn 1.
end while
9. Trả về mảng đã sắp xếp: Sau khi hoàn thành tất cả các vòng lặp, thuật toán trả về mảng V đã
được sắp xếp.
return V ;
• Vòng lặp ngoài với biến i chạy từ n − 1 đến 1, tức là có khoảng n lần lặp.
• Vòng lặp trong với biến j chạy từ 0 đến i − 1. Đối với mỗi giá trị của i, j chạy qua i lần lặp.
Tổng số lần lặp của j sẽ là tổng của dãy số từ 1 đến n − 1, tức là n(n−1)
2 . Đây là một biểu thức bậc hai
theo n, tức là O(n2 ).
Bởi vì độ phức tạp thời gian của Bubblesort là O(n2 ), một đa thức theo n, giải thuật này thuộc vào lớp
P. Lớp P bao gồm tất cả các bài toán mà có thể giải quyết trong thời gian đa thức đối với kích thước
của input. Vì thế, một giải thuật có độ phức tạp thời gian là O(n2 ) chắc chắn thuộc lớp P, bởi đa thức
bậc hai vẫn là đa thức.
2.2 class NP
Định nghĩa 4. NP problems are decision problems solvable in non-derministic polynominal time
Đặc trưng :
• NP là lớp các bài toán được giải bằng thuật toán không tất định trong thời gian đa thức.
• Lời giải của các bài toán NP rất khó tìm, nhưng nếu tìm được lời giải thì rất dễ chứng minh lời
giải đó là đúng hay sai trong thời gian đa thức
Định nghĩa 5. NP : decision problems with poly-size cerfiticates and poli-size verifiers for YES
input
• Đầu vào:
Một tập hợp các phần tử hoặc giá trị cần được xem xét.
• Câu hỏi:
Một câu hỏi "YES" hoặc "NO" dựa trên đầu vào.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 7/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
2. certificate là gì ?
là thông tin bổ sung hoặc lời giải tiềm năng cho bài toán.
4. ví dụ cụ thể :
Bài toán Hamiltonian Path
Đầu vào:
Một đồ thị G.
Câu hỏi:
Có tồn tại một đường đi Hamiltonian trong G hay không?
• Certificate:
– Một danh sách các đỉnh của G tạo thành một đường đi Hamiltonian. Ví dụ, trong đồ thị
có 4 đỉnh A, B, C, D, một chứng chỉ có thể là danh sách [A, B, C, D].
• Bộ xác minh (Verifier):
– Bộ xác minh sẽ nhận vào đồ thị G và danh sách các đỉnh.
– Kiểm tra xem danh sách có chứa tất cả các đỉnh của G một lần duy nhất và mỗi cặp liên
tiếp trong danh sách đều là cạnh của đồ thị.
– Quá trình này có thể thực hiện trong thời gian đa thức vì việc kiểm tra danh sách và các
cạnh là các phép toán đơn giản.
• Ví dụ:
– Đồ thị G với các cạnh: (A − B), (B − C), (C − D)
– certificate: Danh sách [A, B, C, D]
– Bộ xác minh sẽ kiểm tra:
∗ Danh sách chứa tất cả các đỉnh A, B, C, D một lần duy nhất.
∗ Các cặp (A − B), (B − C), (C − D) đều là các cạnh của G.
Tất cả các điều kiện đều thỏa mãn, do đó đường đi Hamiltonian tồn tại và bộ xác minh
trả về YES.
Một số ví dụ về lớp NP :
Clique problem :
Định nghĩa về Clique: Một clique trong đồ thị vô hướng là một đồ thị con mà mọi cặp nút trong đó
đều được nối với nhau bằng một cạnh. Ví dụ được minh họa trong Hình 4 cho thấy một clique 5, tức là
một clique chứa 5 nút, tất cả đều được nối với nhau.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 8/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
Vấn đề Clique: Đây là vấn đề xác định liệu một đồ thị có chứa một clique của kích thước nhất định
hay không. Vấn đề này được định nghĩa chính thức trong sách như sau:
Ý tưởng Chứng minh: Ý tưởng chứng minh được đưa ra là với certificate là clique c, tìm một
verifier có thể chứng minh một tập con c gồm k là một clique trong thời gian đa thức . Verifier dùng để
kiểm tra xem một tập hợp con các nút có tạo thành một clique hay không gồm các bước sau :
2. Kiểm tra xem mỗi cặp nút trong c có cạnh nối chúng trong G hay không.
3. Chấp nhận đầu vào nếu tất cả các cặp đều được kết nối, nếu không thì từ chối.
Với Vấn đề Clique, để xác minh một tập hợp c có phải là một clique hay không, verifier cần kiểm tra
từng cặp đỉnh trong c. Vì số lượng các cặp đỉnh mà verifier cần kiểm tra là tổ hợp chập 2 của k (nếu k
là số đỉnh trong tập hợp c), tổng số cặp là k2 , đây là một hàm đa thức của k. Do đó, verifier này chạy
trong thời gian đa thức đối với kích thước của c, phù hợp với yêu cầu của một vấn đề thuộc lớp NP.
Đặc trưng :
• Một bài toán NP-hard ít nhất cũng khó bằng bài toán khó nhất trong NP và nó là một loại bài
toán mà mọi bài toán trong NP đều giảm xuống NP-hard.
• Khác với NP là nếu tìm được lời giải thì sẽ kiểm tra lời giải đó đúng hay không trong thời gian đa
thức. Phải mất một thời gian dài để kiểm tra chúng. Điều này có nghĩa là nếu một giải pháp cho
một bài toán NP-hard được đưa ra thì phải mất nhiều thời gian để kiểm tra xem nó có đúng hay
không.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 9/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
Định nghĩa 7. Reduction is from A problem reduces to B problem by polinominal time algorithm
and convert A input to equivalent B input
• Reduction từ bài toán A sang bài toán B bằng thuật toán thời gian đa thức là một khái niệm quan
trọng trong lý thuyết tính toán và độ phức tạp. Nó cho phép chúng ta chứng minh rằng một bài
toán này có thể được "chuyển đổi" thành một bài toán khác trong thời gian đa thức, và do đó, nếu
chúng ta có thể giải được bài toán B, chúng ta cũng có thể giải được bài toán A.
Ví dụ về NP-hard :
Bài toán Người du lịch (Travelling Salesman Problem - TSP)
Mục tiêu Cho một tập hợp các thành phố và khoảng cách giữa mỗi cặp thành phố, tìm tuyến đường
ngắn nhất đi qua mỗi thành phố một lần và trở về điểm xuất phát.
Định nghĩa bài toán Cho đồ thị G(V, E) và một ngưỡng chi phí K, xác định xem có tồn tại một
hành trình TSP với tổng chi phí không quá K hay không.
Chứng minh NP-Hard Để chứng minh TSP là NP-Hard, ta thực hiện việc giảm một bài toán đã
biết là NP-Hard. Ta sẽ sử dụng bài toán NP-hard đã biết là Hamilton Cycle ( chu trình Hamilton ) để
thu giảm về bài toán TSP.
Bài toán Chu trình Hamilton Mục tiêu: Cho một đồ thị G(V, E), xác định xem có tồn tại một
chu trình đi qua mỗi đỉnh một lần và trở về đỉnh ban đầu hay không.
Quá trình thu giảm
Đầu vào: Một đồ thị G = (V, E) của bài toán Chu trình Hamilton.
Xây dựng đồ thị mới G′ = (V ′ , E ′ ):
• Cạnh: Tạo một đồ thị đầy đủ bằng cách thêm các cạnh không có trong E.
– Với các cạnh e ∈ E (các cạnh gốc trong G), đặt chi phí c(e) = 1.
– Với các cạnh e′ ∈
/ E (các cạnh mới thêm vào để làm đầy đủ đồ thị G′ ), đặt chi phí c(e′ ) = 2.
Hình 6
• Một chu trình Hamilton trong G sử dụng N cạnh, tất cả đều thuộc E và có chi phí là 1 mỗi cạnh.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 10/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
• Chu trình này trong G tương ứng trực tiếp với một hành trình TSP trong G′ với chi phí N , đáp
ứng điều kiện K = N .
Nếu G′ có một hành trình TSP với chi phí K = N :
• TSP đi qua mỗi đỉnh một lần và trở về điểm xuất phát, sử dụng N cạnh.
• Vì tổng chi phí là N và mỗi cạnh trong đồ thị gốc G có chi phí là 1, TSP phải sử dụng tất cả các
cạnh từ E.
• Do đó, các cạnh này tạo thành một chu trình Hamilton trong G.
Kết luận Việc thu giảm này cho thấy rằng nếu ta có thể giải quyết TSP với chi phí không quá K,
ta có thể xác định được liệu có một chu trình Hamilton trong G hay không, và ngược lại. Việc xây dựng
G′ từ G và thêm các chi phí tương ứng có thể thực hiện trong thời gian đa thức. Vì vậy, TSP ít nhất là
khó như bài toán Chu trình Hamilton, chứng minh rằng TSP là NP-Hard.
Đặc trưng :
• Một bài toán là NP-complete nếu nó vừa thuộc lớp NP và vừa thuộc lớp NP-hard.
• Các bài toán NP-complete là các bài toán khó trong NP.
• Các bài toán NP-đầy đủ rất đặc biệt vì bất kỳ bài toán nào trong lớp NP đều có thể được chuyển
đổi hoặc thu giảm thành các bài toán NP-đầy đủ trong thời gian đa thức.
• Nếu người ta có thể giải một bài toán NP-đầy đủ trong thời gian đa thức thì người ta cũng có thể
giải bất kỳ bài toán NP nào trong thời gian đa thức.
Ví dụ NP-complete :
Hamilton cycle problem ( Chu trình hamilton ) :
1. Thế nào là chu trình Hamilton ?
Một chu trình trong đồ thị vô hướng G=(V, E) đi qua mọi đỉnh đúng một lần và quay về đỉnh đầu,
với V là tập đỉnh và E là tập các cạnh của đồ thị
2. Phát biểu bài toán : Cho một đồ thị G = (V, E), bài toán là xác định xem đồ thị G có chứa
chu trình Hamilton gồm tất cả các đỉnh thuộc V hay không.
(a) Chu trình Hamilton nằm trong lớp NP: Nếu bất kỳ bài toán nào nằm trong lớp NP, thì
khi có được một certificate ( một lời giải tiềm năng ), chúng ta sẽ có thể xác minh certificate
đó là đúng hay sai trong thời gian đa thức. Certificate ở đây là một dãy các đỉnh tạo thành
Chu trình Hamilton trong đồ thị. Chúng ta có thể xác minh lời giải này bằng cách kiểm tra
rằng tất cả các đỉnh thuộc về đồ thị và mỗi cặp đỉnh thuộc lời giải là kề nhau. Điều này có
thể thực hiện trong thời gian đa thức, tức là O(V + E) bằng cách sử dụng chiến lược sau cho
đồ thị G(V, E):
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 11/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
flag = true
For every pair {u, v} in the subset V’:
Check that these two have an edge between them
If there is no edge, set flag to false and break
If flag is true:
Solution is correct
Else:
Solution is incorrect
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 12/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
Hình 7
• Tìm quy tắc trong bảng chuyển trạng thái dựa trên trạng thái hiện tại và ký tự vừa đọc.
• Thực hiện quy tắc: ghi ký tự mới, di chuyển đầu đọc/ghi sang trái hoặc phải, và chuyển sang trạng
thái mới.
• Lặp lại cho đến khi máy đạt trạng thái dừng.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 13/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
Ngôn ngữ L trong ngữ cảnh của lý thuyết ngôn ngữ hình thức và máy Turing, là một tập hợp các
chuỗi ký tự được lựa chọn từ một bảng chữ cái đã cho. Bảng chữ cái này, thường được ký hiệu là Σ, là
một tập hợp hữu hạn các ký tự. Ngôn ngữ là một tập con của các chuỗi có thể hình thành từ bảng chữ
cái này, ký hiệu là Σ∗ , nơi Σ∗ đại diện cho tập hợp tất cả các chuỗi có thể có, bao gồm cả chuỗi rỗng.
Ví dụ:
Bảng chữ cái: Σ = {a, b}
Một ngôn ngữ trên Σ có thể là L = {aa, ab, bba, bbb}, nghĩa là ngôn ngữ L bao gồm các chuỗi "aa",
"ab", "bba", và "bbb".
Ngôn ngữ có thể được định nghĩa bởi các quy tắc cụ thể (như ngôn ngữ chính quy hoặc ngôn ngữ
ngữ pháp tự nhiên) hoặc được nhận diện bởi các loại máy tính nhất định như máy Turing, automata hữu
hạn, hay các loại automata khác.
Chuỗi w Chuỗi w là một chuỗi ký tự cụ thể từ bảng chữ cái của ngôn ngữ. Trong nhiều tình huống,
w được sử dụng để mô tả một đầu vào hoặc một thực thể cụ thể trong ngôn ngữ đó.
Ví dụ:
Cho bảng chữ cái Σ = {0, 1}, chuỗi w có thể là "0110", "1001", hoặc bất kỳ kết hợp nào của các ký
tự 0 và 1.
Trong lý thuyết máy Turing, chuỗi w thường được dùng để chỉ đầu vào cho máy Turing. Kết quả của
việc máy Turing xử lý chuỗi w sẽ xác định liệu chuỗi đó có thuộc ngôn ngữ L hay không, nghĩa là liệu
máy Turing có chấp nhận (accept) chuỗi đó như một phần của ngôn ngữ mà nó được thiết kế để nhận
diện hay không.
Ví dụ cụ thể :
Cho trước một đồ thị G = (V, E), nơi V là tập hợp các đỉnh và E là tập hợp các cạnh, bài toán đặt ra
là xác định xem có tồn tại một chu trình Hamilton không, tức là một chu trình đi qua mỗi đỉnh của đồ
thị đúng một lần trước khi quay trở lại điểm xuất phát.
Định Nghĩa Ngôn Ngữ LHamilton
Bảng Chữ Cái (Σ)
• Sử dụng các ký tự để đại diện cho các đỉnh và các cạnh trong đồ thị.
• Có thể bao gồm các ký tự như dấu ngoặc (, ), dấu phẩy , để biểu diễn các cạnh như các cặp, và
các dấu phân cách như dấu chấm phẩy ; để phân tách các cạnh.
• Xử lý: Máy Turing sẽ kiểm tra từng cách kết nối các đỉnh để xem liệu có thể tạo thành một chu
trình Hamilton hay không. Điều này có thể được thực hiện thông qua các thuật toán kiểm tra hoặc
thông qua một cách tiếp cận không đơn định nếu máy Turing là không đơn định.
• Đầu ra: Máy Turing sẽ chấp nhận chuỗi nếu tìm thấy chu trình Hamilton và từ chối nếu không
tìm thấy.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 14/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
1. SAT là một vấn đề trong lớp NP: Nghĩa là nếu một bài toán thuộc lớp NP có lời giải, thì lời
giải đó có thể được kiểm chứng trong thời gian đa thức.
2. Mọi vấn đề trong NP có thể được quy về SAT trong thời gian đa thức: Điều này có nghĩa
là bất kỳ vấn đề nào thuộc lớp NP đều có thể được chuyển đổi thành một trường hợp cụ thể của
bài toán SAT mà không mất quá nhiều thời gian (cụ thể là thời gian đa thức).
Bài toán SAT yêu cầu bạn xác định xem có cách nào gán giá trị cho x1 và x2 sao cho công thức này
đúng. Trong trường hợp này, bạn có thể thấy rằng nếu x1 = true và x2 = false, thì công thức sẽ trở
thành:
Điều này là đúng, do đó công thức trên có lời giải thỏa mãn.
Tổng kết :
Định lý Cook-Levin thiết lập cơ sở cho việc nghiên cứu các bài toán NP-đầy đủ và có ảnh hưởng sâu rộng
trong lý thuyết tính toán và khoa học máy tính. Nó giúp xác định các bài toán mà nếu chúng ta có thể
giải quyết hiệu quả một trong số chúng, thì có thể giải quyết hiệu quả tất cả các bài toán thuộc lớp NP.
Chứng minh bài toán SAT là NP-Complete đòi hỏi hai điều kiện:
2. Mọi bài toán trong NP đều có thể giảm về SAT trong thời gian đa thức.
Chứng minh SAT thuộc NP rất đơn giản. Khi có một lời giải (certificate) là một phép gán cho các
biến trong công thức SAT, chúng ta có thể dễ dàng xác minh tính đúng đắn của lời giải này trong thời
gian đa thức. Cụ thể, ta chỉ cần kiểm tra xem phép gán có làm công thức logic trở thành đúng hay không,
điều này rõ ràng có thể làm được trong thời gian đa thức.
Việc chứng minh còn lại là mọi bài toán trong NP đều có thể giảm về SAT trong thời gian đa thức. Để
làm điều này, chúng ta sẽ mô hình hóa bài toán NP thành một quá trình làm việc của một máy Turing
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 15/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
1. Mô tả quá trình làm việc của máy Turing: Mô hình hóa quá trình làm việc của máy Turing
M trên chuỗi đầu vào w như một chuỗi các bước tính toán. Mỗi bước tính toán có thể được mô tả
bởi trạng thái của máy Turing, vị trí đầu đọc/ghi trên băng, và nội dung băng.
2. Biểu diễn các bước tính toán dưới dạng công thức logic: Chuyển đổi mô tả của các bước
tính toán thành một công thức logic. Cụ thể, ta xây dựng một công thức logic sao cho công thức
này khả thỏa nếu và chỉ nếu máy Turing M có thể chuyển từ trạng thái khởi đầu đến trạng thái
chấp nhận trong số bước tính toán không quá đa thức theo độ dài của w.
3. Xây dựng công thức SAT tương ứng: Từ công thức logic đã xây dựng, ta chuyển đổi nó thành
một công thức SAT (công thức ở dạng chuẩn tắc mệnh đề, CNF - Conjunctive Normal Form). Quá
trình chuyển đổi này phải đảm bảo được thực hiện trong thời gian đa thức.
Ta sẽ mô tả quá trình làm việc và chuyển trạng thái của máy turing trong quá trình giải bài toán A
bằng một bảng tabeau như sau :
Một bảng tableau là một ma trận với kích thước nk .nk
Mỗi dòng ( hay còn gọi là mỗi config ) của bảng tableau bắt đầu và kết thúc bằng kí tự # .Ký tự
# giúp tách biệt các cấu hình khác nhau trong bảng tableau, đảm bảo rằng mỗi cấu hình là một dãy
liên tiếp của các trạng thái và ký tự trên băng. Điều này giúp tránh sự nhầm lẫn giữa các cấu hình khác
nhau. Mỗi một configuration ( config ) tương ứng với mỗi dòng là một trạng thái của máy turing tại một
thời điểm.
Dòng đầu tiên của tableau là trạng thái của cấu hình bắt đầu (starting configuration ) của máy trạng
thái với đầu vào w, mỗi dòng kết tiếp là sự chuyển trạng thái từ trạng thái ở trước đó tuân theo hàm
chuyển trạng thái của N ( với N là máy turing machine ).
Tableau được accepting ( có nghĩa là đạt được trạng thái accept và chuyển sang trạng thái dừng (halting
) nếu bất kì dòng nào của tableau là một trạng thái accepting configuration.
Có tất cả là (nk )2 entries của 1 bảng tableau gọi là cell. Mỗi cell ở dòng i và cột j ( với i là chỉ số dòng và
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 16/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
j là chỉ số cột của tableau ) chứa một kí tự từ C. với C = Q + T + # với Q là kí tự biểu thị các trạng
thái của máy turing, T là kí tự trên băng, và kí tự # . Chúng ta sẽ mã hóa các ô của tableau thành các
biến xi,j,s với i,j là chỉ số cột và hàng, còn s là một kí tự thuộc tập C. Biến xi,j,s với giá trị 1 tương ứng
với true tức có nghĩa là cell[i,j] trong tableau được gán kí tự s.
Ta mô tả toàn bộ quá trình tính toán của máy turing không đơn định bằn cách tạo ra một công thức
Boolean SAT tương ứng là φ.
Công thức φ bao gồm and của 4 phần là φcell , φstart , φaccept , φmove .
1. Công thức φcell : Mô tả các biến trạng thái của máy Turing, Công thức φcell dùng để mã hóa rằng
máy Turing tại mỗi bước chỉ có một trạng thái duy nhất và băng chỉ có một ký hiệu tại một ô nhất
định. Công thức này đảm bảo rằng mọi cấu hình của máy Turing là hợp lệ, nghĩa là tại mỗi thời
điểm chỉ có một trạng thái và mỗi ô băng chỉ chứa một ký hiệu duy nhất.
Cụ thể, ta có công thức:
!
^ _ ^
ϕcell =
xi,j,s ∧
(¬xi,j,s ∨ ¬xi,j,t )
.
1≤i,j≤nk s∈C s,t∈C
s̸=t
_
xi,j,s :
s∈C
Biểu thức này đảm bảo rằng ít nhất một biến xi,j,s sẽ bằng True, tức là ít nhất một ký hiệu s sẽ
xuất hiện ở ô (i, j).
^
(¬xi,j,s ∨ ¬xi,j,t ) :
s,t∈C
s̸=t
Biểu thức này đảm bảo rằng không có hai ký hiệu khác nhau s và t cùng xuất hiện ở ô (i, j). Cụ
thể, nếu xi,j,s bằng True thì xi,j,t phải bằng False và ngược lại.
Kết hợp cả hai phần này, công thức φcell đảm bảo rằng mỗi ô (i, j) trong bảng chỉ có duy nhất một
ký hiệu từ tập C, không hơn, không kém.
Như vậy, φcell là một biểu thức lớn bao gồm các phần tử cho mỗi ô trong bảng, với i và j thay
đổi từ 1 đến n. Mỗi phần tử trong đó có hai phần, một phần đảm bảo ít nhất một biến xi,j,s bằng
True, và phần còn lại đảm bảo không có hai biến khác nhau xi,j,s và xi,j,t cùng bằng True. Các
V
phần tử này được kết nối với nhau bằng các phép AND ( ).
2. Công thức φstart : dùng để xác định trạng thái ban đầu của máy Turing. Công thức này mô tả rằng
tại thời điểm bắt đầu (t = 0), máy Turing đang ở trạng thái khởi đầu, đầu đọc ở vị trí đầu tiên của
băng, và các ký hiệu trên băng tương ứng với đầu vào của bài toán. Công thức φstart đảm bảo rằng
hàng đầu tiên của bảng là cấu hình bắt đầu của máy N trên từ đầu vào w bằng cách quy định rõ
ràng rằng các biến tương ứng được bật (on).
Cụ thể, công thức là:
φstart = x1,1,# ∧ x1,2,q0 ∧ x1,3,w1 ∧ x1,4,w2 ∧ . . . ∧ x1,n+2,wn ∧ x1,n+3,_ ∧ . . . ∧ x1,nk −1,_ ∧ x1,nk ,# .
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 17/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
• x1,1,# : Biến Boolean này biểu thị rằng ô đầu tiên của hàng đầu tiên chứa ký hiệu # (ký hiệu
bắt đầu).
• x1,2,q0 : Biến Boolean này biểu thị rằng ô thứ hai của hàng đầu tiên chứa trạng thái bắt đầu
q0 của máy N .
• x1,3,w1 ∧ x1,4,w2 ∧ . . . ∧ x1,n+2,wn : Các biến này biểu thị rằng các ô tiếp theo trong hàng đầu
tiên chứa các ký hiệu của từ đầu vào w. Cụ thể, ô thứ 3 chứa ký hiệu đầu tiên w1 của từ w, ô
thứ 4 chứa ký hiệu thứ hai w2 , và cứ tiếp tục như vậy cho đến ô chứa ký hiệu cuối cùng wn .
• x1,n+3,_ ∧ . . . ∧ x1,nk −1,_ : Các biến này biểu thị rằng các ô còn lại trong hàng đầu tiên chứa
ký hiệu trống _.
• x1,nk ,# : Biến Boolean này biểu thị rằng ô cuối cùng của hàng đầu tiên chứa ký hiệu # (ký
hiệu kết thúc).
Công thức φstart đảm bảo rằng cấu hình bắt đầu của máy N trên từ w được biểu diễn chính xác
trên hàng đầu tiên của bảng. Cấu hình này bao gồm ký hiệu bắt đầu #, trạng thái bắt đầu q0 , các
ký hiệu của từ w, các ô trống, và ký hiệu kết thúc #. Các biến Boolean này đảm bảo rằng mỗi ô
trong hàng đầu tiên chứa đúng ký hiệu hoặc trạng thái như đã mô tả.
3. Công thức φaccept : Công thức đảm bảo rằng có ít nhất một trạng thái chấp nhận xuất hiện trong
một bước nào đó của máy Turing. Công thức này mã hóa rằng máy Turing kết thúc quá trình tính
toán với một cấu hình chấp nhận, tức là bài toán đưa ra có lời giải.
Công thức φaccept đảm bảo rằng có một cấu hình chấp nhận xuất hiện trong bảng (tableau). Nó
đảm bảo rằng ký hiệu qaccept , là ký hiệu cho trạng thái chấp nhận, xuất hiện trong một trong các
ô của bảng bằng cách quy định rằng một trong các biến tương ứng được bật (on).
Cụ thể, công thức là:
_
φaccept = xi,j,qaccept .
1≤i,j≤nk
•
W W
1≤i,j≤nk :
Dấu là ký hiệu cho phép OR (hoặc) lặp lại, áp dụng cho tất cả các giá trị của
i và j trong phạm vi từ 1 đến nk . Điều này có nghĩa là chúng ta đang xét tất cả các ô trong
bảng.
• xi,j,qaccept : Biến Boolean này biểu thị rằng ô (i, j) chứa ký hiệu qaccept , tức là trạng thái chấp
nhận.
Công thức φaccept nói rằng tồn tại ít nhất một ô (i, j) trong bảng mà biến xi,j,qaccept là True. Điều
này đảm bảo rằng trạng thái chấp nhận qaccept xuất hiện ít nhất một lần trong bảng, nghĩa là có
ít nhất một cấu hình chấp nhận trong quá trình tính toán.
Tóm lại, φaccept đảm bảo rằng trạng thái chấp nhận qaccept xuất hiện trong bảng bằng cách yêu
cầu rằng ít nhất một trong các biến xi,j,qaccept là True.
4. Công thức φmove : Công thức φmove mã hóa các quy tắc chuyển đổi của máy Turing.
Cách Thức Hoạt Động của Máy Turing : Máy Turing là một mô hình tính toán lý thuyết bao
gồm một băng vô hạn, trên đó có các ô có thể ghi các ký tự từ một bảng chữ cái hữu hạn. Có một
đầu đọc/ghi di chuyển qua lại trên băng, đọc ký tự tại vị trí hiện tại và có thể ghi đè nó. Máy được
điều khiển bởi một bộ điều khiển trạng thái hữu hạn, có thể thay đổi trạng thái của nó dựa trên
ký tự hiện tại mà đầu đọc/ghi đọc được và các quy tắc được xác định trước.
Các Điều Kiện Cần Thiết để Mô Phỏng Máy Turing :
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 18/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
• Trạng thái hiện tại của máy: Để biết máy sẽ làm gì tiếp theo, ta cần biết trạng thái hiện tại
của nó.
• Ký tự dưới đầu đọc/ghi: Đầu đọc cần biết ký tự hiện tại để quyết định hành động tiếp theo.
• Hành động tiếp theo: Bao gồm việc ghi một ký tự mới và di chuyển đầu đọc sang trái hoặc
phải.
Người ta sử dụng một cửa sổ 2x3 cho phép mô phỏng một bước hoàn chỉnh của việc chuyển đổi
giữa 2 cấu hình của máy Turing :
• cấu hình tại thời điểm t: Thể hiện một phần của băng và trạng thái của máy tại thời điểm t.
• cấu hình tại thời điểm t+1: Thể hiện cùng một phần băng và sự thay đổi trạng thái sau khi
đầu đọc thực hiện một hành động.
Việc cần làm là chúng ta sẽ mã hóa một công thức sao cho các cửa sổ 2x3 trên tableau đều ở trạng
thái hợp lệ.
Vậy thế nào là cửa sổ 2x3 hợp lệ ?
Chúng ta nói rằng một cửa sổ 2 x 3 là hợp lệ nếu cửa sổ đó không vi phạm các hành động được
xác định bởi hàm chuyển đổi của N. Nói cách khác, một cửa sổ là hợp lệ nếu nó có thể xuất hiện
khi một hàng hợp lệ theo sau một hàng hợp lệ khác.
Ví dụ, giả sử rằng a, b và c là các thành phần của tập C ( tập các kí tự trên tableau ) , và q1 và q2
là các trạng thái của N. Giả sử rằng khi ở trạng thái q1 với đầu đọc trên một ô, N ghi a thành b, ở
lại trạng thái q1 , và di chuyển sang phải; và rằng khi ở trạng thái q1 với đầu đọc trên b, N không
xác định chuyển sang q2 . Các cửa sổ hợp lệ bao gồm:
hàm chuyển đổi trạng thái được mô tả bằng công thức như sau, δ(q1 , a) = {(q1 , b, R)} và δ(q1 , b) =
{(q2 , c, L), (q2 , a, R)}. Ví dụ về các cửa sổ hợp lệ
Trong hình trên, các cửa sổ (a) và (b) là hợp lệ vì hàm chuyển cho phép N di chuyển theo cách
được chỉ định. Cửa sổ (c) là hợp lệ vì, với q1 xuất hiện ở bên phải của hàng trên cùng, chúng ta
không biết kí tự nào nằm phía sau của q1 . Ký tự đó có thể là một a hoặc b, và q1 có thể thay đổi
nó thành a hoặc b và di chuyển sang phải. Khả năng đó sẽ tạo ra cửa sổ này, nên nó không vi phạm
các quy tắc của N .
Ví dụ về các cửa sổ không hợp lệ
Cửa sổ (a) không hợp lệ vì không tuân theo hàm chuyển trạng thái của N, kí tự b ở dòng trên
không thể thay đổi vì không có một trạng thái q1 nào ở cạnh nó. Cửa sổ (b) không hợp lệ vì hàm
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 19/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
chuyển quy định rằng b nhận được thay đổi thành c chứ không phải a. Cửa sổ (c) không hợp lệ vì
hai trạng thái q2 xuất hiện trong hàng dưới.
Bây giờ chúng ta quay lại việc xây dựng φmove . Nó quy định rằng tất cả các cửa sổ trong bảng là
hợp lệ. Mỗi cửa sổ chứa sáu ô, giá trị của các ô trong cửa sổ 2x3 có thể được sắp xếp theo một số
cách để tạo ra một cửa sổ hợp lệ. Công thức φmove
^
φmove = (cửa sổ (i,j) là hợp lệ).
1≤i<nk,1≤j<nk
Cửa sổ (i,j) có ô [i, j] là vị trí ô ở giữa của hàng trên . Chúng ta thay thế phần "cửa sổ (i,j) là hợp
lệ" trong công thức này bằng công thức sau a1 , a2 , . . . , a6 .
_
(xi,j = a1 ∧ xi,j+1 = a2 ∧ xi,j+2 = a3 ∧ xi+1,j = a4 ∧ xi+1,j+1 = a5 ∧ xi+1,j+2 = a6 ).
a1 ,...,a6
^
φmove = (the (i, j)-window is legal)
1≤i<nk ,1≤j<nk
Đây là một biểu thức logic toàn phần, nói rằng mọi cửa sổ (i, j) trong bảng phải là hợp lệ. Nó sử
V
dụng toán tử logic "và" ( ) để đảm bảo rằng tất cả các điều kiện về tính hợp pháp của cửa sổ đều
được thỏa mãn. Điều này đảm bảo rằng không có cửa sổ nào trong bảng vi phạm các quy tắc đã
định trước.
Chi Tiết Công Thức Thay Thế
The (i, j)-window has cell [i, j] as the upper central position: Đây là định nghĩa vị trí của từng cửa
sổ. Ô tại vị trí (i, j) được xem là ô trung tâm phía trên của cửa sổ. Cửa sổ gồm tổng cộng sáu ô,
sắp xếp theo hình chữ nhật 2x3.
Công thức cụ thể cho tính hợp lệ của cửa sổ
_
(xi,j−1,a1 ∧ xi,j,a2 ∧ xi,j+1,a3 ∧ xi+1,j−1,a4 ∧ xi+1,j,a5 ∧ xi+1,j+1,a6 )
a1 ,...,a6
Công thức này xác định một cửa sổ là hợp lệ nếu có ít nhất một tập hợp cấu hình (a1 , . . . , a6 ) sao
W
cho các điều kiện được nối bởi "và" (∧) được thỏa mãn. Đây là biểu thức logic "hoặc" ( ) thể hiện
rằng chỉ cần một trong số các cấu hình của cửa sổ là hợp lệ, thì cửa sổ đó được xem là hợp pháp.
Mỗi biến xi,j,a biểu diễn trạng thái của ô tại vị trí (i, j) với giá trị a tương ứng. Công thức này
kiểm tra tất cả các cấu hình có thể của các ô trong một cửa sổ để đảm bảo rằng ít nhất một cấu
hình tuân thủ các quy tắc chuyển đổi hợp pháp.
Kết Luận
Công thức ϕmove và các biểu thức liên quan đảm bảo rằng mỗi cửa sổ trên bảng tuân theo các quy
định hợp pháp của mô hình được mô tả.
1. Bài toán phân hoạch số: Cho một tập những số nguyên, có thể phân hoạch chúng thành hai tập
con mà có tổng trị số bằng nhau?
2. Bài toán qui hoạch nguyên: Cho một bài toán qui hoạch tuyến tính, liệu có tồn tại một lời giải toàn
số nguyên?
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 20/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
3. Xếp lịch công việc trên đa bộ xử lý ( multiprocessor scheduling): Cho một kỳ hạn (deadline) và
một tập các công tác có chiều dài thời gian khác nhau phải được thực thi trên hai bộ xử lý. Vấn đề
là có thể sắp xếp để thực thi tất cả những công tác đó sao cho thỏa mãn kỳ hạn không?
4. Bài toán phủ đỉnh (VERTEX COVER): Cho một đồ thị và một số nguyên N, có thể kiếm được
một tập nhỏ hơn N đỉnh mà chạm hết mọi cạnh trong đồ thị ?
5. Bài toán xếp thùng (BIN PACKING): cho n món đồ mà phải đặt vào trong các thùng có sức chứa
bằng nhau L. Món đồ i đòi hỏi li đơn vị sức chứa của thùng. Mục đích là xác định số thùng ít nhất
cần để chứa tất cả n món đồ đó.
Hình 11: Mối liên hệ giữa một số bài toán thu giảm đa thức (polynomial reduction)
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 21/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
2.4.5 Một số kỹ thuật để đối phó với những bài toán NP-complete
1. Dùng “giải thuật xấp xỉ “(approximation algorithm) để tìm lời giải xấp xỉ tối ưu (near-optimal).
2. Dựa vào hiệu năng của trường hợp trung bình để phát triển một giải thuật mà tìm ra lời giải trong
một số trường hợp nào đó, mặc dù không làm việc được trong mọi trường hợp.
3. Sử dụng những giải thuật có độ phức tạp hàm mũ nhưng hữu hiệu, ví dụ như giải thuật quay lui.
4. Đưa heuristic vào giải thuật để tăng thêm hiệu quả của giải thuật : Heuristic là tri thức về bài
toán cụ thể được sử dụng để dẫn dắt quá trình tìm ra lời giải của giải thuật. Nhờ sự thêm vào các
heuristic mà giải thuật trở nên hữu hiệu hơn.
5. Sử dụng metaheuristic.
(a) Meta heuristic là loại heuristic tổng quát có thể áp dụng cho nhiều lớp bài tóan.
(b) Gần đây meta heuristic là một lãnh vực nghiên cứu phát triển mạnh mẽ, với sự ra đời của
nhiều meta heuristic như:
i. giải thuật di truyền (genetic algorithm)
ii. giải thuật mô phỏng luyện kim (simulated annealing)
iii. tìm kiếm tabu (Tabu search)
• Giải thuật xấp xỉ (Approximation algorithms): Vì các bài toán NP-complete không thể giải
một cách hiệu quả trong thời gian đa thức cho tất cả các trường hợp, giải thuật xấp xỉ cung cấp
một cách tiếp cận thực tế khi chấp nhận một lời giải gần đúng thay vì chính xác tuyệt đối. Chúng
cho phép đạt được lời giải "gần tối ưu" với sai số có thể chấp nhận được, trong một khoảng thời
gian ngắn hơn nhiều so với việc tìm kiếm lời giải chính xác.
• Giải thuật quay lui (Backtracking): Giải thuật này cho phép giải các bài toán quyết định bằng
cách thử từng lựa chọn một và loại bỏ những lựa chọn không hợp lệ sớm nhất có thể. Điều này
giúp giảm không gian tìm kiếm đáng kể và là một phương pháp hữu ích cho các bài toán có kích
thước nhỏ hơn hoặc khi các bài toán có cấu trúc đặc biệt phù hợp.
• Heuristic và Metaheuristic: Các giải thuật heuristic không tìm kiếm lời giải chính xác mà tập
trung vào việc tìm lời giải khả thi trong thời gian ngắn. Heuristic thường dựa trên kinh nghiệm
hoặc trực giác để giải quyết vấn đề. Metaheuristic là một bộ lớn hơn của heuristic, được thiết kế
để áp dụng cho nhiều lớp bài toán khác nhau và không bị giới hạn trong một cấu trúc vấn đề cụ
thể. Chúng bao gồm các giải thuật như di truyền, mô phỏng luyện kim, và tìm kiếm tabu, đều là
các phương pháp mạnh mẽ để tìm kiếm lời giải trong không gian lớn.
Tất cả các kỹ thuật này không chỉ giúp giải quyết các bài toán một cách nhanh chóng mà còn đảm
bảo rằng kết quả cuối cùng, dù không phải là tối ưu hoàn hảo, nhưng vẫn nằm trong khoảng chấp nhận
được so với lời giải tối ưu. Chúng đặc biệt hữu ích trong thực tế khi đối mặt với các bài toán có quy mô
lớn hoặc đòi hỏi giải quyết trong thời gian có hạn.
• Không thể chứng minh tính đúng sai: Không thể sử dụng phép chứng minh toán học để chứng minh
tính đúng hoặc sai của một giải pháp cho bài toán bất khả giải quyết.
Thí dụ: Bài toán quyết định xem một chương trình có dừng trên một máy Turing :
Vấn đề dừng lại là một khái niệm cơ bản trong khoa học máy tính đã được Alan Turing định lý vào năm
1936. Nó lý giải rằng không có thuật toán nào có thể xác định, đối với một chương trình và đầu vào cụ
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 22/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
thể, liệu chương trình đó sẽ kết thúc (dừng lại) hay tiếp tục chạy vô hạn.
Giả định :
Giả sử có một thuật toán A mà có thể giải quyết vấn đề này. Nghĩa là, cho một chương trình P và một
đầu vào I, thuật toán A sẽ trả lời:
• Trả lời 1 nếu chương trình P dừng lại trên đầu vào I.
• Trả lời 0 nếu chương trình P không dừng lại trên đầu vào I.
• Q sẽ kiểm tra xem chính nó khi chạy với đầu vào là chính nó có dừng lại hay không, bằng cách sử
dụng thuật toán A.
• Nếu A(Q, Q) = 0 (tức là Q không dừng khi chạy với chính nó), thì Q sẽ dừng lại.
• Nếu A(Q, Q) = 1 (tức là Q dừng khi chạy với chính nó), thì Q sẽ không dừng lại.
Mâu thuẫn :
Khi chạy chương trình Q với đầu vào là chính nó:
• Nếu A(Q, Q) = 0 (nghĩa là theo thuật toán A, Q không dừng khi chạy với chính nó), thì theo định
nghĩa của Q, nó lại phải dừng lại. Điều này tạo ra mâu thuẫn vì Q không thể vừa không dừng vừa
dừng lại cùng một lúc.
• Ngược lại, nếu A(Q, Q) = 1 (nghĩa là theo thuật toán A, Q dừng khi chạy với chính nó), thì theo
định nghĩa của Q, nó lại không được phép dừng lại. Điều này cũng tạo ra mâu thuẫn vì Q không
thể vừa dừng vừa không dừng lại cùng một lúc.
Kết luận Do sự tồn tại của mâu thuẫn trên, giả định ban đầu rằng có một thuật toán A có thể xác
định liệu một chương trình có dừng lại trên một đầu vào nhất định hay không là sai. Do đó, vấn đề dừng
lại được kết luận là không thể giải quyết được, tức là không tồn tại một thuật toán nào có thể chính xác
quyết định mọi trường hợp của vấn đề này.
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 23/24
Trường Đại Học Công nghệ thông tin
Khoa Khoa Học Máy tính
Lời kết
Qua đồ án cuối kì của học kỳ này, em không chỉ tích lũy được thêm các kinh nghiệm học thuật khi
thực hiện các nội dung mà cô đưa ra, mà còn luyện tập được khả năng giao tiếp, làm việc, tra cứu một
cách hiệu quả, năng suất.
Tuy vậy, trong quá trình thực hiện đồ án, khó tránh khỏi các sai sót, ở điểm này em rất mong cô xem
xét bỏ qua. Đồng thời, do trình độ lý luận cũng như kinh nghiệm thực tiễn còn hạn chế nên bài báo cáo
không thể tránh khỏi những thiếu sót, em rất mong nhận được ý kiến đóng góp từ cô để em có thể tích
lũy được thêm nhiều kinh nghiệm và sẽ hoàn thành tốt hơn trong các đồ án sắp tới.
Để kết thúc đồ án cuối kì này, em xin một lần cuối cùng gửi lời cảm ơn chân thành nhất đến cô, các
anh chị, các bạn sinh viên trong cộng đồng sinh viên Đại học Quốc Gia - TP.HCM nói chung và sinh
viên Đại học Công nghệ thông tin nói riêng đã giúp em hoàn thành tốt đẹp toàn bộ đồ án của bộ môn
Phân tích và thiết kế thuật toán của học kỳ này.
Tài liệu
[1] Computers and Intractability ( Michael Garey and David S. Johnson )
[3] Computational Complexity: A Modern Approach ( Sanjeev Arora and Boaz Barak )
[6] CSC 320 Notes: SAT, the First NP-complete Problem : https://webhome.cs.uvic.ca/ wendym/cours-
es/320/17/npcomplete/2notes.html
Đồ án cuối kì Phân tích thiết kế giải thuật (CS112) - Niên khóa 2023-2024 Trang 24/24