3.3.1.1. Khái niệm
Để tìm được lời giải tối ưu cho bài toán NP – đầy đủ thì thời gian cần thiết phải là hàm mũ đối với kích thước dữ liệu vào ngoại trừ P = NP. Do đó, để giải các bài toán thuộc lớp này người ta đưa ra hai cách tiếp cận. Cách thứ nhất là thực hiện xét các dạng đặc biệt và có ý nghĩa thực tế của bài toán mà để giải chúng ta chỉ cần thời gian đa thức. Cách thứ hai là thực hiện giải bài toán và đưa ra lời giải gần với lời giải tối ưu hay nói cách khác là chỉ sai khác một hằng số so với lời giải tối ưu. Trong thực tế, các lời giải gần tối ưu là đủ tốt. Các thuật toán dựa trên ý tưởng thứ hai gọi là thuật toán xấp xỉ hay thuật toán gần đúng, và hệ số sai khác giữa lời giải đưa ra bởi thuật toán với lời giải tối ưu của bài toán gọi là hệ số xấp xỉ.
Để dễ hình dung về các thuật toán ta đưa ra một số tiêu chuẩn chất lượng đánh giá các lời giải. Không mất tính tổng quát ta giả sử:
Các lời giải của bài toán đều có chi phí dương.
Bài toán thực hiện tìm min hoặc max của chi phí.
Ta nói một thuật toán giải bài toán nào đó có tỉ lệ xấp xỉ là( )n , nếu với mọi đầu vào có kích thước n, chi phí C của lời giải tìm được bởi thuật toán sai khác không quá ( )n
so với chi phí C* của lời giải tối ưu của bài toán, tức là max( / *,C C C* / )C ( )n . Trong các bài toán tìm cực đại
0C C *thì ( )n C* /C
Trong các bài toán tìm cực tiểu 0C*Cthì ( )n C C/ *
Nhận xét: ( )n không bao giờ nhỏ hơn 1, khi ( )n = 1 thì thuật toán xấp xỉ chính là thuật toán tối ưu. Một thuật toán có hệ số ( )n lớn có thể trả về một lời giải tồi hơn
nhiều so với lời giải tối ưu. Vì vậy, khi ( )n nhỏ hơn tức là thuật toán xấp xỉ có chất lượng tốt hơn.
3.3.1.2. Lược đồ xấp xỉ
Các thuật toán khác nhau đưa ra các hệ số xấp xỉ khác nhau. Một lớp các bài toán có tính chất là tồn tại một hằng số dương tùy ý không phụ thuộc vào kích thước đầu vào n, để có thể đưa ra một một thuật toán xấp xỉ với hệ số xấp xỉ là (1) cho nó (thời gian chạy của thuật toán xấp xỉ là hiệu quả cho cố định nhưng chúng sẽ trở nên rất tồi nếu nhỏ dần). Các bài toán có tính chất này được gọi là có lược đồ xấp xỉ thời gian đa thức, hoặc PTAS – Polynomial time Approximation Scheme[18]. Đây là trường hợp tốt nhất cho các thuật toán xấp xỉ. Ta có thể nhóm các lớp bài toán tối ưu dựa trên mức độ được xấp xỉ bởi các thuật toán hiệu quả của chúng.
Ví dụ: Một số lớp thuật toán xấp xỉ thông dụng:
( )n O n( c)với c < 1, ví dụ bài toán Bè (Clique).
( ) = (log )n O n , bài toán phủ tập (SetCover).
( ) = (1)n O , bài toán phủ đỉnh.
( ) 1n , 0 được gọi là Lược đồ xấp xỉ thời gian đa thức PTAS, ví dụ như các bài toán lập lịch.
ρ( ) =1n trong thời gian là đa thức đối với ( , )n 1
gọi là Lược đồ xấp xỉ thời
gian đa thức đầy đủ FPTAS. Ví dụ, đối với bài toán Knapsack, Subset Sum đã xây dựng được FPTAS.
3.3.1.3. Thiết kế thuật toán xấp xỉ và tính hệ số xấp xỉ
Bước đầu tiên trong quá trình thiết kế thuật toán xấp xỉ là tìm thuật toán luôn đưa ra được lời giải chấp nhận được với chi phí gần bằng chi phí tối ưu. Khi đó, điều quan trọng là phải hình dung được lời giải tối ưu. Tuy nhiên, việc đưa ra một phương pháp tính toán lời giải tối ưu cũng là một bài toán NP – đầy đủ. Do đó, trong thực tế hệ
số xấp xỉ của thuật toán thường được tính bằng tỉ lệ trong trường hợp tồi nhất của lời thuật toán và lời giải tối ưu. Để đưa ra được hệ số xấp xỉ, ta chứng minh rằng một thuật toán xấp xỉ luôn đưa ra một lời giải với hệ số sai khác là so với lời giải tối ưu OPT
ngay cả khi ta không biết chính xác OPT, chính là hệ số xấp xỉ của thuật toán. Để tìm được , ta đưa ra một thể hiện bài toán I, tìm lời giải ALG của I bằng thuật toán xấp xỉ. Sau đó tìm một số tính chất sao cho (I)OPT(I)và ALG I( ) ( )I . Khi đó dựa trên tính chất bắc cầu ta suy ra
) ( . ) ( ) (I I OPT I ALG .
Từ đó có thể kết luận là thuật toán có hệ số xấp xỉ là , ở đây có thể là một hàm đối với các thuộc tính của thể hiện I ví dụ như kích thước,…