CHƯƠNG 1 MỘT SỐ KIẾN THỨC TỔNG QUAN VÀ BÀI TOÁN VỊ TRÍ CƠ SỞ Trong cuộc sống, việc đạt lợi nhuận cao hay thấp trong kinh doanh buôn bán, cung cấp dịch vụ phụ thuộc rất nhiều yếu tố. Trong đó, có một yếu tố quan trọng đầu tiên, đóng góp một phần rất lớn đó là xác định được địa điểm đặt dịch vụ thuận lợi – nơi cung cấp dịch vụ. Có rất nhiều tiêu chí đặt ra khi chọn địa điểm: thuận tiện về giao thông, là nơi tập trung đông dân cư…để làm sao thu được lợi nhuận cao nhất. Đặc biệt, đối với các trường hợp khẩn cấp như cứu thương, cứu hỏa thì yêu cầu về khoảng cách nhỏ nhất là vô cùng quan trọng, có thể nói là quan trọng nhất trong các yếu tố.
Yêu cầu của bài toán vị trí cơ sở là tìm phương án đặt các trạm dịch vụ ở đâu để thời gian di chuyển bệnh nhân từ nơi xa bệnh viện nhất (hoặc ngược lại, từ các trạm dịch vụ đến nơi bệnh nhân xa nhất) là nhỏ nhất có thể. Còn với các dịch vụ phổ biến như trạm xăng, thùng phiếu, bốt điện thoại,… thì yêu cầu lại là tổng chi phí từ khách hàng (hay người có nhu cầu) đến địa điểm phục vụ gần khách hàng nhất là nhỏ nhất. Độ phức tạp tính toán của bài toán Gọi TA(X) là thời gian tính của thuật toán A đối với đầu vào X. Khi đó thời gian tính trong tình huống tồi nhất của thuật toán A đối với dữ liệu đầu vào kích thước n được định nghĩa như là: TA (n) max TA ( X ) | X | n Độ phức tạp trong tình huống tồi nhất của thuật toán P là thời gian tính trong tình huống tồi nhất của thuật toán nhanh nhất để giải nó: Tp (n) min TA (n) min(max TA ( X )) A A | X | n Trong đó là tập tất cả các thuật toán giải bài toán P.
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 chúng ta quan tâm đến việc đưa ra các cận trên và cận dưới cho nó. Nếu ta có thuật toán A với thời gian tính trong tình huống tồi nhất là TA(n)= 𝑂(𝑓(𝑛)) thì: 𝑇𝑃 (𝑛) ≤ 𝑇𝐴 (𝑛) ≤ 𝑂(𝑓(𝑛)) 4 Tức là ta có cận trên cho độ phức tạp của bài toán P. Thuật toán nhanh hơn sẽ cho cận trên tốt hơn.
Chúng ta còn quan tâm đến việc đánh giá cận dưới độ phức tạp của bài toán, nghĩa là quan tâm đến việc nó khó đến mức độ nào. Để chỉ ra rằng: 𝑇𝑃 (𝑛) = (𝑓(𝑛)) Ta cần phải chỉ ra rằng: i. Có thuật toán với thời gian tính (𝑓(𝑛)) để giải bài toán P. Mọi thuật toán giải bài toán P đều đòi hỏi thời gian tính trong tình huống tồi nhất là (𝑓(𝑛)).
Yêu cầu ii. có thể thay thế bởi: ii’. cận dưới cho độ phức tạp tính toán của bài toán P là (𝑓(𝑛)). Bài toán quyết định Bài toán quyết định là bài toán mà đầu ra chỉ có thể là ‘yes’ hoặc ‘no’ (Đúng/sai, 0/1, chấp nhận/từ chối, accept/reject).
Đối với một bài toán quyết định, có những bộ dữ liệu vào của nó có câu trả lời (đầu ra) là ‘yes’ và cũng có những bộ dữ liệu vào có câu trả lời là ‘no’. Những bộ dữ liệu vào có câu trả lời ‘yes’ (‘no’) sẽ được gọi là bộ dữ liệu vào ‘yes’ (‘no’). Ví dụ 1: Bài toán về tính nguyên tố: “Hỏi số nguyên n có là số nguyên tố hay không?” N=23 là bộ dữ liệu vào ‘yes’, còn n=24 là bộ dữ liệu vào ‘no’ của bài toán. Bài toán tổng con: “Cho tập I gồm n số nguyên dương x1, x2,…,xn và số nguyên dương T.
Hỏi có thể tìm được tập con S của I với tổng các số trong S là bằng T?” Bài toán người du lịch dạng quyết định (Dec – TSP): “Tồn tại hay chăng hành trình của người du lịch với tổng chi phí không vượt quá số K cho trước?” 1. Bằng chứng ngắn gọn để kiểm tra Rất nhiều các bài toán quyết định có một đặc điểm chung, đó là để xác nhận câu trả lời 'yes' đối với bộ dữ liệu vào 'yes' của chúng, ta có thể đưa ra 5 bằng chứng ngắn gọn dễ kiểm tra xác nhận câu trả lời 'yes' cho bộ dữ liệu vào 'yes' đó. Ví dụ 2: Đối với bài toán kiểm tra tích hợp số: "Có phải số n là hợp số?", để xác nhận câu trả lời 'yes' cho đầu vào n, ta có thể đưa ra một ước số b (1<b<n) của n. Để kiểm tra xem b đúng là ước số của n ta có thể thực hiện phép chia n cho b sau thời gian đa thức.Trong ví dụ này b là bằng chứng ngắn gọn (vì b<n) và dễ kiểm tra: có thuật toán thời gian tính đa thức để kiểm tra b đúng là ước số của n.
Đối với bài toán tổng con, bằng chứng xác nhận câu trả lời 'yes' đối với bộ dữ liệu (x1,.,xn) là vecto c = (c 1,.,c n), trong đó c i = 1 nếu xi được chọn vào tập S và c i = 0 nếu trái lại. Việc kiểm tra xem tập S gồm các số được chọn có thỏa mãn yêu cầu đặt ra hay không, rõ ràng, có thể thực hiện sau thời gian đa thức. Đối với bài toán người du lịch dạng quyết định, bằng chứng xác nhận câu trả lời 'yes' cho ma trận chi phí C = {c ij: i,j=1,.,n} của bài toán là dãy các thành phố trên hành trình. Việc kiểm tra xem dãy các thành phố đã cho có phải là hành trình với chi phí không vượt quá K có thể thực hiện xong sau thời gian đa thức.
Ta gọi bằng chứng ngắn gọn dễ kiểm tra xác nhận câu trả lời 'yes' cho bộ dữ liệu vào 'yes' của bài toán là một bằng chứng có độ dài bị chặn bởi một đa thức bậc cố định của độ dài dữ liệu đầu vào của bài toán, và việc kiểm tra nó là bằng chứng xác nhận câu trả lời 'yes' đối với đầu vào đã cho của bài toán có thể thực hiện xong sau thời gian đa thức. Như vừa chỉ ra ở trên, các bài toán trong ví dụ 2 đều có bằng chứng ngắn gọn dễ kiểm tra để xác nhận câu trả lời 'yes' của bộ dữ liệu vào 'yes'. Hoàn toàn tương tự, có thể đưa ra khái niệm bằng chứng ngắn gọn dễ kiểm tra để xác nhận câu trả lời 'no'. Đối với một số bài toán việc đưa ra bằng chứng ngắn gọn xác định câu trả lời 'no' là dễ hơn so với việc đưa ra bằng chứng ngắn gọn xác định câu trả lời 'yes'.
Ví dụ 3: 6 Đối với bài toán kiểm tra tính nguyên tố, để đưa ra bằng chứng ngắn gọn dễ kiểm tra xác nhận câu trả lời 'no' cho đầu vào n của nó, ta có thể đưa ra một ước số b của n. Có những bài toán mà việc đưa ra bằng chứng ngắn gọn dễ kiểm tra xác nhận câu trả lời 'yes' cũng như 'no' đều là không dễ dàng. Ví dụ 4: Cho đơn đồ thị vô hướng G = (V,E). Hỏi có đường đi đơn dài nhất nối hai đỉnh s và t của đồ thị G có tồn tại duy nhất? 1.
Lớp bài toán P, NP và co-NP Trước hết, ta nêu khái niệm về lớp các bài toán dễ giải – đó là các bài toán có thể giải được nhờ các thuật toán thời gian tính đa thức. Định nghĩa: Ta gọi P là lớp các bài toán có thể giải được sau thời gian đa thức. Ví dụ 5: Bài toán về tính liên thông của đồ thị có thể giải được nhờ thuật toán với thời gian tính là O(n2), vì vậy, nó là bài toán thuộc lớp P. Bài toán cây khung nhỏ nhất giải được nhờ thuật toán Prim với thời gian O(n2), cũng thuộc vào lớp P.
Định nghĩa: Ta gọi NP là lớp các bài toán quyết định mà để xác nhận câu trả lời 'yes' của nó ta có thể đưa ra bằng chứng ngắn gọn dễ kiểm tra. Ví dụ 6: Các bài toán trình bày trong ví dụ 2 đều thuộc lớp NP. Định nghĩa: Ta gọi co-NP là lớp các bài toán quyết định mà để xác nhận câu trả lời 'no' của nó ta có thể đưa ra bằng chứng ngắn gọn dễ kiểm tra. Ví dụ 7: Các bài toán trình bày trong ví dụ 3 đều thuộc lớp co-NP.
Bài toán trong ví dụ 4 còn chưa biết có thuộc vào lớp nào trong hai lớp NP và co-NP hay không. Rõ ràng, nếu một bài toán thuộc lớp P, thì ta có thể tìm được lời giải của nó sau thời gian đa thức, và vì thế ta cũng có thể xác nhận được câu trả lời 'yes' của nó (bằng việc giải nó) sau thời gian đa thức. Vì vậy: P NP 7 Tương tự như vậy ta có: P co-NP Một trong những vấn đề trung tâm của lý thuyết tính toán, đó là chứng minh hoặc bác bỏ đẳng thức: P = NP Cho đến hiện nay vấn đề này vẫn là vấn đề mở. Lớp bài toán NP-khó và NP-đầy đủ Ta sẽ đưa ra định nghĩa về những bài toán khó nhất trong lớp NP: bài toán NP-đầy đủ (NP-complete).
Định nghĩa: Một bài toán quyết định A được gọi là NP-đầy đủ nếu như: i. A là bài toán trong NP; ii. Mọi bài toán trong NP đều có thể qui dẫn về A. Như vậy, có thể nói khái niệm về "bài toán khó nhất" trong lớp NP được xây dựng trên cơ sở phép qui dẫn.
Nếu tất cả các bài toán trong NP có thể qui dẫn về một bài toán A thì A khó không kém bất cứ bài toán nào trong số chúng. Điều đáng ngạc nhiên là sự tồn tại của những bài toán có tính chất như vậy. Khó khăn nhất là việc tìm ra được một bài toán như vậy. Bởi vì hễ chúng ta đã có một bài toán NP-đầy đủ thì để ta có thể dễ dàng chứng minh nhiều bài toán khác là NP-đầy đủ nhờ sử dụng kết quả sau đây.
Bổ đề: Giả sử bài toán A là NP-đầy đủ, bài toán B là thuộc NP, và bài toán A qui dẫn về B. Khi đó bài toán B cũng là NP-đầy đủ. Định nghĩa: Một bài toán A được gọi là NP-khó (NP-hard) nếu như sự tồn tại thuật toán đa thức để giải nó kéo theo sự tồn tại thuật toán đa thức để giải một bài toán trong NP. Một cách không hình thức, có thể nói rằng nếu ta có thể giải được một cách hiệu quả một bài toán NP-khó cụ thể, thì ta cũng có thể giải hiệu quả bất kỳ bài toán nào trong NP bằng cách sử dụng thuật toán giải bài toán NP-khó như là một chương trình con.