12 Lời mở đầu Lý do chọn đề tài Với sự tiến bộ vượt bậc của công nghệ phần cứng của máy tính hiện nay chúng ta vẫn chưa thể tìm được lời giải tối ưu cho các bài toán có độ phức tạp cao
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
KỸ THUẬT MÃ HÓA CÂY
LUẬN VĂN THẠC SĨ KHOA HỌC Chuyên ngành Công nghệ thông tin
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Trang 3Danh mục thuật ngữ tiếng anh 5
Danh mục bảng vẽ 7
Danh mục hình vẽ 8
Lời cam đoan 10
Lời cảm ơn 11
Lời mở đầu 12
Lý do chọn đề tài 12
Mục đích nghiên cứu, đối tượng, phạm vi nghiên cứu 12
Tóm tắt cô đọng các luận điểm cơ bản và đóng góp mới của tác giả 13
Phương pháp nghiên cứu 14
CHƯƠNG 1 15
CÁC KHÁI NIỆM CƠ BẢN 15
1.1 Khái niệm thuật toán 15
1.2 Các đặc trưng của thuật toán: 16
1.3 Độ phức tạp của thuật toán 18
1.3.1 Tiêu chí đánh giá thuật toán 18
1.3.2 Cách xác định độ phức tạp của thuật toán 19
1.4 Các bài toán NP 24
1.4.1 Bài toán tối ưu (Optimization Problem) 24
1.4.2 Bài toán quyết định 26
1.4.3 Thuật toán không đơn định và lớp P, NP 27
1.4.4 Phép qui dẫn đa thức và lớp NP-đầy đủ 29
Trang 41.4.5 Bài toán NP-khó 36
1.5 Một số cách tiếp cận giải các bài toán NP 37
1.5.1 Phương pháp xấp xỉ 38
1.5.2 Phương pháp xác xuất 38
1.5.3 Phương pháp heuristic 39
1.5.4 Phương pháp tính toán tiến hóa 40
CHƯƠNG 2 43
BÀI TOÁN CÂY KHUNG TRUYỀN THÔNG TỐI ƯU 43
2.1 Giới thiệu 43
2.2 Các bài toán tối ưu cây khung OCST 46
2.2.1 Bài toán MRCT 46
2.2.2 Bài toán cây khung truyền thông tối ưu tích yêu cầu (PROCT) 48
2.2.3 Bài toán cây khung truyền thông tối ưu tổng yêu cầu (SROCT) 49
2.2.4 Bài toán nhiều nguồn (Multiple Source) 49
2.3 Một số ứng dụng của bài toán cây khung truyền thông 51
CHƯƠNG 3 53
THUẬT TOÁN DI TRUYỀN VÀ CÁC PHƯƠNG PHÁP MÃ HÓA CÂY 53
3.1 Giải thuật di truyền 53
3.1.1 Tổng quan về giải thuật di truyền và các ứng dụng 53
3.1.2 Giải thuật di truyền 53
3.2 Một số phương pháp mã hóa cây 56
3.2.1 Mã hóa Prufer 56
3.2.2 Mã hóa NetKeys (Network Random Keys Encoding) 59
3.2.3 Mã hóa NB (Node Biased Encoding) 61
3.2.4 Mã hóa LB (Link Biased Encoding) 63
Trang 53.2.5 Mã hóa LNB (Link and Node Biased Encoding) 63
3.3 Ứng dụng của thuật toán di truyền vào kết quả thực nghiệm 66
3.3.1 Chọn lọc cá thể 66
3.3.2 Toán tử lai ghép 67
3.3.3 Toán tử đột biến 68
3.4 Mô hình lai ghép đề xuất 69
3.5 Giải thuật di truyền đề xuất: 70
CHƯƠNG 4 73
KẾT QUẢ THỰC NGHIỆM 73
4.1 Cài đặt thử nghiệm 73
4.1.1 Dữ liệu thực nghiệm 73
4.1.2 Các tham số cho các thử nghiệm 74
4.2 Kết quả thực nghiệm 75
+ Kết luận 79
TÀI LIỆU THAM KHẢO 81
Trang 6Danh mục thuật ngữ tiếng anh
STT Thuật ngữ Viết tắt Đề nghị dịch tiếng Việt
1 Approximation scheme Thuật toán xấp xỉ, sơ đồ xấp xỉ
2 Bin packing problem BPP Bài toán đóng thùng
3 Crossover, Recombination Lai ghép
4 Evolutionary computation Tính toán tiến hóa
5 Evaluation function Hàm mục tiêu
6 Feasible solution lời giải chấp nhận được
12 Genetic-inspired operators Toán tử di truyền
13 K-point crossover Lai ghép tại điểm cắt k
16 Optimal Communication
Spanning Tree OCST Cây khung truyền thông tối ưu
18 Optimal Product-Requirement
Communication Spanning Tree PROCT Tối ưu tích yêu cầu
19 Optimal Sum-Requirement SROCT Tối ưu tổng yêu cầu
Trang 76
Communication Spanning Tree
20 Order-based crossover Lai ghép theo thứ tự
21 Probabilistic method Phương pháp xác xuất
22 Primitive operations Số phép toán cơ bản
26 Theory of computation Lý thuyết độ phức tạp tính toán
27 Uniform crossover Lai ghép đồng bộ
29 Uniform order-based crossover Lai ghép đồng bộ theo thứ tự
Trang 87
Danh mục bảng vẽ
Bảng 1.1- Tóm tắt một số hàm tính độ phức tạp của thuật toán 22
Bảng 1.2 - Cho biết thời gian tính toán của thuật toán có độ phức tạp thường gặp .23
Bảng 1.3- Mối tương quan giữa quá trình tiến hóa và tính toán tiến hóa 41
Bảng 2.1- Các bài toán tối ưu OCT và tỉ lệ xấp xỉ tốt nhất được biết 51
Bảng 3.1- Chuỗi NetKeys cùng nhãn của các cạnh trong đồ thị ban đầu 60
Bảng 3.2 - Chuỗi NetKeys sau khi được sắp xếp 60
Bảng 4.1 - Các bộ test chuẩn 74
Bảng 4.2 - Kết quả chạy các bộ test chuẩn sử dụng mã hóa Prufer và Netkey Encoding 76
Bảng 4.3- Kết quả chạy các bộ test chuẩn sử dụng mã hóa LB và NB 77
Bảng 4.4 - Kết quả chạy các bộ test chuẩn sử dụng mã hóa LNB 78
Trang 98
Danh mục hình vẽ
Hình 1.1 - Minh họa thuật toán 16
Hinh 1.2- Minh họa bài toán chọn lịch xem phim .17
Hình 1.3 Phản ví dụ của thuật toán 1 .17
Hình 1.4 - Phản ví dụ của thuật toán 2 17
Hình 1.5 - Ký hiệu O – lớn 20
Hình 1.6- Ký hiệu -lớn .20
Hình 1 7 Ký hiệu -lớn 20
Hình 1.8 - Minh họa giả thuyết về mối quan hệ giữa các lớp P, NP và NP-đầy đủ 30
Hình 1.9 - Biến đổi đa thức từ bài toán Π 1 về bài toán Π 2 31
Hình 1.10 - Sơ đồ quy dẫn giữa các bài toán .33
Hình 1.11 - Giả thuyết về quan hệ giữa các lớp NP, NP-đầy đủ và NP-khó 37
Hình 2.1- Minh họa cây khung trong bài toán OCST 44
Hình 2.2 - Minh họa bài toán SROCT và PROCT 45
Hình 2.3 - Mối quan hệ của những bài toán cây khung truyền thông tối ưu 46
Hình 2.4- Minh họa độ trễ của cặp đỉnh 47
Hình 2.5 - Một cây khung 3-star, trong đó B,C,E là các nút trong và A,D,E,F,G,H,I là các nút lá .48
Hình 3.1- Mô tả nhiễm sắc thể ( chromosome), allele, gen 54
Hình 3.2 - Mô tả sơ đồ chung của thuật toán di truyền 55
Hình 3.3- Cây khung được mã hóa thành chuỗi Prufer 2565 57
Hình 3.4 - Cây thu được theo mã hóa NetKeys 61
Hình 3.5 - Mô tả một cây được mã hóa NB .63
Hình 3.6 - Cây khung thu được từ mã hóa LNB .65
Hình 3.7- Mô tả phương pháp chọn lọc theo vòng quay Roulette 66
Trang 109
Hình 3.8- Minh họa phương pháp lai ghép một điểm cắt 67 Hình 3.9 - Minh họa phương pháp lai ghép đồng bộ 68 Hình 3.10 - Chỉ ra phép đột biến tại vị trí thứ 4 .68 Hình 4.1 - Biểu đồ kết quả tốt nhất tìm được của 5 phương pháp mã hóa trên bộ dữ liệu Raidl50 79
Trang 1110
Lời cam đoan
Tôi cam đoan kết quả của luận văn là chính tôi thực hiện, các số liệu thực nghiệm là theo đúng kết quả của chương trình Nếu sai tôi xin chịu hoàn toàn trách nhiệm
Trang 1211
Lời cảm ơn
Tác giả đã nhận được sự hướng dẫn nhiệt tình, chu đáo, nghiêm khắc và đầy khoa học của PGS.TS Nguyễn Đức Nghĩa trong suốt thời gian học tập, nghiên cứu và hoàn thành đề tài Tác giả xin bày tỏ lòng biết ơn chân thành và kính trọng sâu sắc đối với Thầy
Nhân dịp này tác giả cũng xin chân thành gởi lời cảm ơn đến quý thầy, cô trong
và ngoài Viện Công nghệ Thông tin và Truyền thông, Viện Đào tạo Sau đại học Đại học Bách khoa Hà Nội đã dày công giảng dạy trong suốt khóa học và tạo điều kiện thuận lợi cho tác giả hoàn thành luận văn này
Tác giả xin chân thành cảm ơn các bạn cùng lớp Cao học Tin khóa 1 đã đùm bọc giúp đỡ nhau trong học tập và sinh hoạt
Mặc dù luận văn đã được thực hiện với sự nổ lực cố gắng hết sức của bản thân song do hạn chế về trình độ và sự hiểu biết nên khó tránh khỏi những sai lầm thiếu sót Đồng thời tác giả cũng nhận thức được rằng còn rất nhiều vấn đề mở đặt ra chưa giải quyết được Tác giả rất mong nhận được những góp ý, phê bình quý báu của quý thầy
cô và các bạn đọc quan tâm
Trang 1312
Lời mở đầu
Lý do chọn đề tài
Với sự tiến bộ vượt bậc của công nghệ phần cứng của máy tính hiện nay chúng
ta vẫn chưa thể tìm được lời giải tối ưu cho các bài toán có độ phức tạp cao trong thời gian ngắn Vì vậy, tìm kiếm lời giải đủ tốt cho các bài toán trong thời gian phù hợp là vấn đề được các nhà khoa học trong lĩnh vực tin học rất quan tâm Mục đích chính của các thuật toán tìm kiếm, là tìm ra lời giải tốt nhất cho bài toán trong thời gian nhỏ nhất Các thuật toán tìm kiếm như: vét cạn ( tìm kiếm trên danh sách, trên cây hoặc đồ thị), tìm có thông tin sử dụng heurictics để áp dụng các tri thức về cấu trúc của không gian tìm kiếm nhằm giảm thời gian cần thiết cho việc tìm kiếm được sử dụng nhiều nhưng chỉ hiệu quả với không gian tìm kiếm nhỏ và không hiệu quả khi tìm kiếm trong không gian tìm kiếm lớn Tuy nhiên, trong thực tế có rất nhiều bài toán tối ưu với không gian tìm kiếm rất lớn cần phải giải quyết
Do đó để giải quyết vấn đề này trong thực tế thì hiện nay người ta thường sử dụng phương pháp giải gần đúng Các phương pháp giải gần đúng thường dùng là: các thuật toán tìm kiếm cục bộ (local search), các sơ đồ xấp xỉ (approximation schemes), các phương pháp xác xuất (probabilistic methods), tính toán tiến hóa (evolutionary computation), thuật toán di truyền (genetic algorithm), …
Mục đích nghiên cứu, đối tượng, phạm vi nghiên cứu
Mục đích của luận văn này là khảo sát các đặc tính của thuật toán di truyền với các kỹ thuật mã hóa cây để giải bài toán cây khung truyền thông tối ưu (Optimal
Communication Spanning Tree - OCST), là một trong những bài toán tối ưu trên đồ thị
Trang 1413
thuộc lớp NP-khó có ứng dụng trong nhiều lĩnh vực của thực tế như: mô hình mạng, trí
tuệ nhân tạo, thiết kế vi mạch…
Đối tượng nghiên cứu là các kỹ thuật mã hóa cây với phạm vi là năm kỹ thuật
mã hóa cây: Prufer, Netkey Encoding, LinkBiased Encoding, NodeBiased Encoding, The Link and Node Biased Encoding
Thuật toán với các kỹ thuật mã hóa cây khác nhau đã được chạy thử nghiệm trên các bộ dữ liệu thường dùng bởi các nhà khoa học để đánh giá hiệu quả các thuật toán
giải của bài toán OCST
Tóm tắt cô đọng các luận điểm cơ bản và đóng góp mới của tác giả
Luận văn được trình bày trong 4 chương và lời kết luận
Chương 1 trình bày các khái niệm cơ bản của lý thuyết độ phức tạp tính toán, định
nghĩa lớp bài toán NP-khó
Chương 2 trình bày tổng quan về bài toán cây khung truyền thông tối ưu
Chương 3 trình bày thuật toán di truyền và một số phương pháp mã hóa cây
Chương 4 trình bày kết quả thực nghiệm thu được khi sử dụng thuật toán di truyền đề
xuất để giải bài toán cây khung truyền thông tối ưu với các kỹ thuật mã hóa cây khác nhau Phân tích kết quả đạt được của thuật toán di truyền với năm phương pháp mã hóa cây khung
Về đóng góp mới của tác giả: Đưa ra kết quả so sánh giữa các kỹ thuật mã hóa cây khác nhau Để từ đó có thể chọn được kỹ thuật mã hóa cây cho kết quả tốt trong bài toán cây khung truyền thông
Trang 1514
Phương pháp nghiên cứu
Nghiên cứu lý thuyết về thuật toán di truyền và bài toán tối ưu cây khung truyền thông
Nghiên cứu các kỹ thuật mã hóa cây
Xây dựng và cài đặt chương trình cho các kỹ thuật mã hóa cây
So sánh kết quả đạt được của các kỹ thuật mã hóa cây
Kết luận và hướng phát triển
Phần kết luận chung đánh giá tổng quan lại những kết quả đã thực hiện được trong luận văn, những hạn chế của luận văn và một số vấn đề mở cần tiếp tục giải quyết sau này
Trang 1615
CHƯƠNG 1
CÁC KHÁI NIỆM CƠ BẢN
Chương này trình bày tổng quan về các khái niệm thuật toán và các thuật ngữ cơ
sở được sử dụng trong luận văn Các khái niệm và thuật ngữ này được trình bày dựa trên tài liệu [4]
1.1 Khái niệm thuật toán
Khái niệm thuật toán (Algorithm) xuất phát từ tên nhà toán học Arập Abu Ja’far
Mohamed ibn, thường được gọi là al’Khwarizmi Ông là tác giả một cuốn sách về số học, trong đó ông dùng phương pháp mô tả rất rõ ràng, mạch lạc cách giải các bài toán Sau này phương pháp mô tả cách giải của ông đã được xem là một chuẩn mực và được nhiều nhà toán học tuân theo Thuật ngữ "algorithm" ra đời từ đó dựa theo cách phiên
âm tên của ông Cùng với thời gian khái niệm thuật toán được hoàn chỉnh dần và khái niệm hình thức chính xác của thuật toán được định nghĩa thông qua mô hình máy Turing Với máy Turing lý thuyết độ phức tạp tính toán (Theory of computation complexity) có một sự tiến triển mới, giúp chúng ta hiểu rõ được bản chất của thuật toán, độ phức tạp của một thuật toán, nó cắt nghĩa cho ta “độ khó” của một bài toán cho trước
Định nghĩa 1.1 Thuật toán giải bài toán đặt ra là một hệ thống chặt chẽ và rõ
ràng các quy tắc xác định một dãy các thao tác trên những đối tượng sao cho sau một
số hữu hạn bước thực hiện các thao tác ta thu được đầu ra đối với đầu vào cho trước của bài toán
Trang 1716
Hình 1.1 - Minh họa thuật toán
1.2 Các đặc trưng của thuật toán:
y Đầu vào (Input): là tập các dữ liệu cần cung cấp thuật toán từ lúc đầu để xử lý
y Đầu ra (Output): với mỗi một bộ dữ liệu vào, thuật toán sẽ cho ra bộ các dữ liệu
ra tương ứng với lời giải của bài toán cho bộ dữ liệu vào
y Hữu hạn: với mọi đầu vào thì thuật toán vẫn cần phải đưa được đầu ra sau một
số hữu hạn (có thể rất lớn) bước thực hiện
y Tính xác định: Thuật toán yêu cầu ở mỗi bước các thao tác phải hết sức rõ ràng, không gây nên sự nhập nhằng, lẫn lộn Khi thực hiện thuật toán trong cùng một điệu kiện phải cho cùng một kết quả
y Tổng quát: Tức là thuật toán có thể áp dụng để giải mọi bài toán có dạng đã cho
y Tính hiệu quả: Với dữ liệu vào, sau một số hữu hạn bước thực hiện thuật toán sẽ dừng và cho đúng kết quả mong muốn với thời gian chấp nhận được
Hai tính chất quan trọng nhất của thuật toán là tính xác định và tính hiệu quả Tính xác định của thuật toán không phải lúc nào cũng dễ thấy
- Ví dụ: Bài toán chọn lịch xem phim
Đầu vào: Một tập G gồm thời gian chiếu trong ngày của n bộ phim
Đầu ra: Tập con của G chứa số bộ phim lớn nhất có thể xem (không được
chồng lên nhau về thời gian)
Chúng ta có thể biểu diễn các bộ phim dưới dạng các đoạn thẳng không giao
nhau như hình bên dưới Trong đó P1, P2 và P3 là các phòng chiếu
Input (Đầu vào) Algorithm(thuật toán ) Output (Đầu ra)
Trang 1817
Hinh 1.2- Minh họa bài toán chọn lịch xem phim
+ Thuật toán 1: Chọn lần lượt bộ phim chiếu sớm nhất trong G mà không chồng với
các bộ phim đã chọn trước đó Lặp lại cho đến khi không thể chọn thêm
Với thuật toán 1 ta có thể đưa ra một phản ví dụ (có nghĩa là tìm được một cách khác để có thể xem nhiều bộ phim hơn) để chứng minh Thuật toán 1 cho kết quả
không chính xác
- Ví dụ 1:
Hình 1.3 Phản ví dụ của thuật toán 1
Với Thuật toán 1 thì theo ví dụ 1 chúng ta sẽ chọn P1 để xem phim vì phim ở
P1 được chiếu đầu tiên Nhưng nếu là như vậy chúng ta chỉ xem được một bộ phim
Nếu ta chọn P2 để xem thì ta có thể xem 3 bộ phim
+ Thuật toán 2: Chọn bộ phim có thời gian chiếu ngắn nhất trong G mà không trùng
với các bộ phim đã chọn trước Lặp lại cho đến khi không chọn thêm được
Tương tự với Thuật toán 2 thì một ta cũng tìm được một phản ví dụ như hình
vẽ
- Ví dụ 2:
Hình 1.4- Phản ví dụ của thuật toán 2
Trang 1918
+ Thuật toán 3: Duyệt toàn bộ: duyệt tập con của tập n bộ phim trong G Chọn ra
tập con nào có số lượng phần tử lớn nhất Đảm bảo thu được kết quả tối ưu Thuật toán chạy rất chậm, vì với thì số tập con là 220
+ Thuật toán 4: Sắp xếp các lịch chiếu phim theo thứ tự tăng theo thời gian kết thúc
(thuật toán tối ưu) Lần lượt xem xét các phim trong danh sách đã sắp xếp, bổ sung vào danh sách xem bộ phim đang xét nếu nó không chồng lên các bộ phim đã có trong danh sách xem
Để chỉ ra thuật toán là không cho lời giải đúng ta chỉ cần đưa ra một phản ví dụ của thuật toán Tuy nhiên chưa chỉ ra được một phản ví dụ của thuật toán không có nghĩa là thuật toán luôn cho lời giải đúng Để chứng minh một thuật toán là cho lời giải đúng thì ta phải chứng minh bằng toán học
Chú ý rằng có những bài toán còn không có thuật toán để giải, chẳng hạn bài toán về tính dừng của thuật toán
1.3 Độ phức tạp của thuật toán
1.3.1 Tiêu chí đánh giá thuật toán
Để đánh giá hiệu quả của một thuật toán người ta thường đánh giá độ phức tạp thời gian thực hiện của thuật toán như là hàm theo kích thước của dữ liệu đầu vào Kích thước của dữ liệu đầu vào (the size of the input) thường tùy thuộc vào từng bài toán cụ thể, có thể là tổng số bit cần thiết để biểu diễn nhị phân của dữ liệu
(chẳng hạn, bài toán xác định tính nguyên tố của số tự nhiên n, thì kích thước dữ liệu đầu vào không phải là n, mà là số chữ số của n hay tổng số bit cần thiết trong biểu diễn nhị phân của n) Đối với bài toán sắp xếp tăng dần dãy n phần tử a1, a2, a3,…,
a n cho trước thì kích thước dữ liệu đầu vào n
Kích thước của một tập cơ sở dữ liệu (database) có thể được xem là số record của nó Ta hiểu, thời gian thực hiện (running time) của một thuật toán là số phép
Trang 2019
toán cơ bản (primitive operations) hoặc “các bước” (steps) nhiều nhất cần thực hiện
để nhận được lời giải của bài toán với mọi dữ liệu đầu vào cho trước (kể cả trường hợp xấu nhất)
1.3.2 Cách xác định độ phức tạp của thuật toán
Ta nói rằng, thuật toán có độ phức tạp thời gian tính hay độ phức tạp tính toán là
f(n) khi và chỉ khi với mọi dữ liệu đầu vào kích thước n, thuật toán sẽ dừng và cho kết
quả sau nhiều nhất f(n) bước tính toán
Thuật toán có độ phức tạp thời gian đa thức, gọi tắt là thuật toán đa thức, nếu
như f(n) là một đa thức với bậc cố định theo n Việc xác định chính xác f(n) thường
rất khó và không có ý nghĩa vì tính hiệu quả của một thuật toán phải được đánh giá
trên lớp các dữ liệu đủ lớn Vì vậy, thay cho việc tính chính xác f (n) người ta đưa ra
các ký hiệu tiệm cận được dùng để đánh giá độ phức tạp của thuật toán trong thực tế như sau
• : nếu tồn tại hằng số và số tự nhiên sao cho với mọi Ta nói là giới hạn trên của
• : nếu tồn tại hằng số và số tự nhiên sao cho với mọi Ta nói là giới hạn dưới của
• : nếu tồn tại hằng số và và số sao cho và
với mọi Ta nói là giới hạn chặt của
Trang 2120
Hình 1 7 Ký hiệu -lớn
Trang 2221
Ví dụ: f(n) = n2 + 4n + 2 Ta có
f(n) = n 2 + 4n + 2 ≤ n2 + 4n 2 + 2n2 = 7n2 với mọi n ≥ 1
Nghĩa là tồn tại c= 8, n0 = 1 Do đó n2+4n+2=O(n2)
Tổng quát : a k n k +a k-1 n k-1 +…+a0=O(n k ) (giả thiết a k >0)
Chú ý rằng, 2n không có bậc của một đa thức, vì mọi số nguyên dương k và mọi số dương C > 0, chúng ta có 2 n > với n đủ lớn
O-lớn nhóm các hàm thành các lớp hàm, các hàm thuộc hai lớp khác nhau
có quan hệ theo các ký hiệu tiệm cận khác nhau Còn các hàm thuộc cùng 1 lớp hàm thì có quan hệ theo
+ Một số hàm tính độ phức tạp tính toán thường gặp của thuật toán:
Các hàm 1, logn, n, n k , được xếp vào hàm đa thức Các hàm còn lại n logn , a n , n!
được xếp vào loại hàm mũ Những thuật toán có độ phức tạp tính toán cấp loại hàm
Trang 23Bảng 1.1- Tóm tắt một số hàm tính độ phức tạp của thuật toán
Lưu ý thêm, với mọi x >-1, Vì vậy hàm log b (n) tăng trưởng
chậm hơn hàm đa thức n a với a, b là các số thực dương Với a>1, hàm mũ a n là đơn
điệu tăng theo n Với hằng số k nguyên dương bất kỳ, ta có hay n k =O(a n)
Như vậy các hàm đa thức tăng chậm hơn các hàm mũ Hơn nữa, với mọi số tự nhiên n,
n! , do đó n!=O(n n)
Bảng sau đây cho ta khái niệm tăng trưởng về thời gian thực hiện một số thuật toán có độ phức tạp tính toán thường gặp (đơn vị thời gian là 0,001 giây, nếu không có ghi chú khác)
Trang 2423
Bảng 1.2 - Cho biết thời gian tính toán của thuật toán có độ phức tạp thường gặp
Nếu hai thuật toán giải cùng một bài toán, thuật toán A có độ phức tạp
tính toán O(g1(n)), thuật toán B có độ phức tạp O(g2(n)) mà g2(n) có cấp cao hơn
Ví dụ 1: Giả sử thuật toán A có độ phức tạp tính toán là f(n)=4n3- n +1 Khi đó
g(n)=n3 Vì vậy độ phức tạp tính toán của thuật toán A là O(n3)
Ví dụ 2: Bài toán sắp xếp dãy phần tử a[1], a[2], …, a[n] tăng dần bởi thuật
toán Bouble sort:
Input: a[1], a[2],…,a[n]
Output: dãy tăng dần
+ Thuật toán:
Trang 25Output (a[1], a[2], …a[n]);
Với mỗi i ( ) thuật toán phải thực hiện n-i phép so sánh Vì vậy số phép
so sánh là (n-1)+(n-2)+…+1= Vì vậy kích thước đầu vào của thuật toán là n
và độ phức tạp tính toán của thuật toán là O(n2)
1.4 Các bài toán NP
1.4.1 Bài toán tối ưu (Optimization Problem)
Bài toán tối ưu yêu cầu xác định lời giải sao cho hàm mục tiêu đạt giá trị cực đại (cực tiểu) Mô hình toán học của bài toán tối ưu tổ hợp tổng quát được phát biểu như sau:
Tìm min / max{ f ( x), x D}, trong đó D ={x= ( x1, x2, , x n ) A1 × A2 × ×
A n và A1, …, A n là các tập hữu hạn
Hàm f(x) được gọi là hàm mục tiêu (objective function) Mỗi phần tử x D được
gọi là một phương án hay lời giải chấp nhận được (feasible solution) Tập hữu hạn
phương án D còn được gọi là tập ràng buộc Một phương án x* D làm hàm mục
tiêu đạt cực tiểu (hay cực đại), cụ thể là:
f(x * ) f(x), ∀x ∈ D, đối với bài toán min,
f(x*) f(x), ∀x ∈ D, đối với bài toán max,
Trang 26a) miền ràng buộc (tập phương án) của bài toán là rỗng: D = ;
b) cực tiểu (cực đại) của f trên D bằng - (+ ), không bị chặn dưới (trên); c) f đạt cực tiểu (cực đại) hữu hạn trên D, nghĩa là tồn tại phương án tối ưu, giá trị
tối ưu
Sau đây là một số bài toán tối ưu tổ hợp điển hình
+ Bài toán cái túi (Knapsack Problem) Giả sử một cái túi có trọng lượng b (là
số nguyên dương) và n loại đồ vật, các đồ vật lần lượt có trọng lượng là a1, a2,…,
a n và giá trị sử dụng là c1, c2,…c n Cần xếp các đồ vật nào, với số lượng bao nhiêu vào túi sao cho giá trị sử dụng các đồ vật là lớn nhất
Gọi x = ( x 1 , x 2 , , x n ) là phương án mang đồ vật trong đó x i số lượng đồ vật
loại i cần mang theo Chúng ta có mô hình toán học của bài toán cái túi:
+ Bài toán đóng thùng (Bin Packing) Giả sử có một số lượng các thùng có kích
thước 1, và n vật có kích thước tương ứng s 1 , s 2 , , s n , 0 <s i 1 Xác định số
thùng tối thiểu để có thể chứa hết các vật
+ Bài toán tô màu đồ thị (Graph coloring) Tô màu một đồ thị G(V,E) là một
Trang 2726
ánh xạ C : , trong đ ó S là một tập hợp hữu hạn (tập các màu cần sử dụng), sao cho nếu uv E thì C (u) C (v) ; nói một cách khác các đỉnh kề nhau được gán các màu khác nhau Sắc số của G, ký hiệu bởi χ(G), là số màu tối thiểu cần thiết để
tô màu cho G Bài toán đặt ra là: Cho trước đồ thị G, cần xác định χ(G)
1.4.2 Bài toán quyết định
Trong lý thuyết độ phức tạp tính toán thường xét trên lớp các bài toán quyết định Mỗi bài toán quyết định thường được mô tả theo hình thức gồm dữ kiện (instance) và câu hỏi (question)
+ Bài toán số nguyên tố:
Instance: Cho một số nguyên dương n
Question: n có phải là số nguyên tố hay không?
+ Bài toán HC (chu trình Hamilton):
Instance: Cho một đồ thị hữu hạn, đơn và vô hướng G
Question: G có tồn tại hay không một chu trình Hamilton?
Dễ thấy rằng, một bài toán tối ưu có thể chuyển đổi về dạng của bài toán quyết định tương ứng bằng cách so sánh giá trị có được từ lời giải của bài toán với một cận được cung cấp làm đầu vào cho bài toán quyết định
- Ví dụ:
+ Bài toán tô màu đồ thị (Graph-coloring)
Instance: Cho đồ thị G và số nguyên dương k
Question: Có tồn tại hay không một phép tô màu cho G sử dụng nhiều nhất k
màu?
Cho bài toán quyết định Π với tập các dữ kiện I Câu trả lời của Π phụ thuộc
Trang 2827
vào từng dữ kiện cụ thể Tập các dữ kiện cho câu trả lời "Yes" được gọi là tập dữ kiện-Yes và ký hiệu là I Y Tập dữ kiện cho câu trả lời "No" được gọi là tập dữ kiện-
No và ký hiệu là I N Khi đó, I = I Y I N , I Y I N =
Ví dụ: với bài toán HC, đồ thị đầy đủ là một dữ kiện-Yes
1.4.3 Thuật toán không đơn định và lớp P, NP
Thuật toán đơn định (Deterministic Algorithm) là thuật toán có tính đơn trị của mỗi phép toán trong thuật toán, với mỗi đầu vào cụ thể nó luôn cho kết quả tương
tự Liên quan đến các bài toán mà được gọi là bài toán NP (Non-Deterministic
Polynomial), chúng ta có khái niệm thuật toán không đơn định (Non-Deterministic Algorithm), một mở rộng của thuật toán đơn định Khác với thuật toán đơn định, mỗi
phép toán trong thuật toán không đơn định là các phép toán đa trị (một tập hợp các giá trị)
Định nghĩa 1.1: Một bài toán quyết định được gọi là thuộc lớp P, nếu tồn
tại một thuật toán đơn định thời gian đa thức để giải bài toán này
Trong tin học và toán rời rạc chúng ta thường gặp các bài toán quen thuộc (không ở dạng bài toán quyết định) như: Bài toán sắp xếp dãy tăng dần, bài toán xác định cây khung nhỏ nhất, bài toán tìm đường đi ngắn nhất, bài toán luồng cực đại,
Các bài toán này đều thuộc lớp P
Thuật toán không đơn định gồm hai phần tách biệt: Phần phỏng đoán và phần
kiểm tra (guess-and-check) Với mỗi dữ kiện x của bài toán đã cho, phần thứ nhất là phỏng đoán một cấu trúc y nào đó Sau đó cung cấp cả x và y như một dữ liệu vào
cho phần thứ hai, phần này xử lý và tính toán theo kiểu đơn định thông thường và
cho kết quả "Yes" hoặc "No" hoặc không bao giờ dừng Máy Turing không đơn
định là hình thức hóa khái niệm thuật toán không đơn định
Một thuật toán không đơn định "giải" một bài toán quyết định Π nếu hai
Trang 2928
tính chất sau đây xảy ra với mọi dữ kiện x I của Π :
1) Nếu x I Y , thì tồn tại cấu trúc y nào đó mà khi được phỏng đoán cho x, sẽ
chuyển sang phần kiểm tra để trả lời "Yes" cho x và y
2) Nếu x I N , thì không tồn tại cấu trúc y sao cho, khi được phỏng đoán cho x, sẽ
chuyển sang phần kiểm tra để trả lời "No" cho x và y
Định nghĩa 1.2: Một thuật toán không đơn định giải một bài toán Π được gọi
là thực hiện trong thời gian đa thức nếu tồn tại một đa thức p sao cho với mọi dữ kiện
x I Y , tồn tại một phỏng đoán y nào đó để trả lời "Yes" cho x và y trong thời gian
p(| x |), với | x | là kích thước của x
Định nghĩa 1.3: Lớp NP chứa tất cả các bài toán giải được bởi thuật toán
không đơn định thời gian đa thức
Như vậy, việc giải một bài toán quyết định chính là việc kiểm chứng dữ
kiện-Yes của bài toán Việc kiểm chứng dữ kiện-kiện-Yes x của bài toán Π là tìm một phỏng
đoán y nào đó xem như một chứng cứ để khẳng định rằng x là dữ kiện-Yes của Π Ta
Trang 3029
có thể nói, lớp NP gồm các bài toán mà bất kỳ dữ kiện-Yes của chúng được kiểm
chứng bởi một thuật toán không đơn định thời gian đa thức Với các bài toán được
kiểm chứng bởi thuật toán đơn định thời gian đa thức, chúng là bài toán thuộc lớp P
Điều này cũng cho thấy trong định nghĩa của NP, P NP
Trong phần phỏng đoán ta cần đến tính chất "không đơn định" của thuật toán
Lý do trực quan là, một thuật toán không đơn định thời gian đa thức mới có khả năng phỏng đoán một số lượng lớn hàm mũ các lời giải cho một bài toán và kiểm tra
"song song" mỗi lời giải trong thời gian đa thức
Trong toán học và tin học chúng ta thường gặp các bài toán thuộc lớp NP điển
hình như: Bài toán xác định tính nguyên tố của một số nguyên, bài toán chu trình
Hamilton, bài toán cái túi, bài toán đóng thùng, bài toán xếp hậu, bài toán người du
lịch, … Các bài toán này chỉ có thể được giải quyết bởi các thuật toán đơn định thời gian mũ
1.4.4 Phép qui dẫn đa thức và lớp NP-đầy đủ
Hiển nhiên 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à
Trang 3130
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 đủ
(NP-Complete hay gọn hơn NP-C) 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 (!)
Hình 1.8 - Minh họa giả thuyết về mối quan hệ giữa các lớp P, NP và NP-đầy đủ
Định nghĩa 1.4: Một bài toán thuộc lớp NP được gọi là NP -đầy đủ nếu nó giải
được bởi một thuật toán đơn định thời gian đa thức, thì P = NP
Liên quan trực tiếp đến khái niệm phức tạp này đó là, trong lớp NP -đầy đủ bao gồm các bài toán được xem là "khó nhất và khó tương đương" trong NP và mọi bài toán khác trong NP đều có thể biến đổi chúng về trong thời gian đa thức Phép biến
đổi như vậy được gọi là phép biến đổi đa thức (polynomial transformation) hay phép quy dẫn đa thức (polynomial reduction)
Định nghĩa 1.5: Giả sử Π 1 và Π 2 là hai bài toán quyết định với tập dữ kiện là I 1
và I 2 tương ứng Ta nói, ánh xạ T: I 1 I 2 là một phép biến đổi đa thức từ bài toán Π 1 về
bài toán Π 2 nếu :
1) T thực hiện được bởi một thuật toán đơn định thời gian đa thức, và 2) Với mọi x I 1 , x , khi và chỉ khi T(x)
Khi đó ta nói, Π 1 được biến đổi đa thức về Π 2 và ký hiệu Π 1 Π 2 Ta lưu ý rằng,
Trang 3231
yêu cầu 2) trong định nghĩa trên có nghĩa là, câu trả lời "Yes" cho bài toán Π2 trên
T( x) phải tương tự với câu trả lời "Yes" cho Π 1 trên x
Hình 1.9 - Biến đổi đa thức từ bài toán Π 1 về bài toán Π 2
Phép biến đổi đa thức là một phát hiện bất ngờ trong thế kỉ 20 của lý thuyết
NP -đầy đủ nói riêng và của lý thuyết toán học nói chung Với một phép biến đổi đa
thức từ bài toán thứ nhất Π 1 về bài toán thứ hai Π2 nó cho phép ta thay thế việc giải
bài toán Π 1 bằng việc giải bài toán Π 2 Phương pháp thay thế này thực ra đã quen thuộc với việc giải toán, nhưng điều lưu ý ở đây là việc thay thế này phải thực hiện được không quá phức tạp chỉ với một thuật toán đơn định thời gian đa thức mà thôi
Dễ dàng nhận thấy rằng, nếu Π 1 Π 2 và tồn tại thuật toán giải cho bài toán
Π 2 thì ta cũng có thuật toán giải cho bài toán Π 1 (Hình 1.9) Hơn nữa, nếu bài toán
Π 2 có thuật toán thời gian đa thức để giải, thì bài toán Π 1 cũng có thuật toán thời gian đa thức để giải
Ngoài ra, trong lớp các bài toán quyết định, phép biến đổi đa thức có tính bắc
cầu Một đặc điểm của phép biến đổi đa thức là, bài toán Π 2 "khó để giải" ít nhất như bài toán Π1 với một thừa số thời gian đa thức
Trang 3332
Ta có định nghĩa tương đương cho bài toán là NP -đầy đủ:
Định nghĩa 1.6: Bài toán Π được gọi là bài toán NP -đầy đủ nếu Π NP và Π'
Π, với mọi bài toán Π' trong NP
Bài toán đầu tiên được chứng minh là NP -đầy đủ đó là bài toán SAT (Circuit
Satisfiability Problem – bài toán về tính thực hiện của mạch logic- do Stephen A Cook
đưa ra từ 1971 [5]), bằng cách biến đổi đa thức các bài toán NP về SAT Người ta cũng chứng minh được rằng mọi bài toán NP -đầy đủ đều có thể được biến đổi đa thức từ bài toán 3SAT [6]
Định lý 1.1: Giả sử Π 1 và Π 2 là các bài toán thuộc NP Khi đó, nếu Π 1 là
NP-đầy đủ, và Π 1 Π 2 thì Π 2 là NP -đầy đủ
Từ Định nghĩa 1.5 và Định lý 1.1 cho thấy rằng, khi đã biết một bài toán là
NP-đầy đủ thì việc chứng minh một bài toán nào đó là NP -đầy đủ sẽ dễ dàng hơn
nhiều Thật vậy, để chứng minh một bài toán là NP -đầy đủ ta chỉ cần chỉ ra rằng:
1) nó thuộc NP và
Trang 3433
2) có một bài toán NP -đầy đủ có thể biến đổi đa thức về nó
Bài toán đầu tiên được chứng minh NP-đầy đủ đó là bài toán SAT (bởi Cook, 1971[5]) và sau đó là sáu bài toán NP-đầy đủ cơ bản trong danh sách các bài toán NP-đầy đủ đã được biết nhờ phép qui dẫn đa thức (xem sơ đồ trên Hình 1.10)
Hình 1.10 - Sơ đồ quy dẫn giữa các bài toán
Sau đây là một số bài toán NP -đầy đủ điển hình
- Bài toán 3SAT (3-satisfiability)
Instance: Cho C = {c 1 , c 2 , , c m } gồm các mệnh đề trên tập hữu hạn U của các biến
mà |c i | = 3 với 1 ≤ i ≤ m
Question: Tồn tại phép gán giá trị cho các biến trong U thoả mãn tất cả các mệnh
đề trong C hay không?
- Bài toán 3DM (3-Dimentional Matching)
Instance: Giả sử W, X, Y là ba tập rời nhau với số phần tử bằng nhau |W| = |X|
= |Y| = q và T W × X × Y
Trang 3534
Question: Tồn tại hay không tập M T sao cho |M|=q và hai phần tử khác biệt
bất kỳ (w,x,y), (w’,x’,y’) luôn có w w’, x x’, y y’?
- Bài toán VC ( Vertex Cover)
Instance: Cho trước một đồ thị G = (V, E ) và một số tự nhiên k ≤ | V |
Question: T ồn tại hay không một tập hợp S không quá k đỉnh sao cho mỗi cạnh của đồ thị đều có ít nhất một đầu mút trong S?
- Bài toán HC (Hamiltonian Circuit)
Instance: Cho đồ thị vô hướng G
Question: Có tồn tại chu trình Hamilton không?
- Bài toán DHC (Directed Hamiltonian Circuit)
Instance: Cho đồ thị có hướng G
Question: Có tồn tại chu trình Hamilton có hướng không?
- Bài toán Clique
Instance: Cho đồ thị vô hướng G = (V, E ) và số tự nhiên k ≤ |V|
Question: Tồn tại hay không một đồ thị con đầy đủ k đỉnh trong G ?
- Bài toán GC (Graph-coloring)
Instance: Cho đồ thị G và số nguyên dương k
Question: Tồn tại một phép tô màu cho G sử dụng không quá k màu không?
- Bài toán SS (Subset Sum)
Trang 3635
Instance: Cho dãy số nguyên L = (a 1 , a 2 , , a n ) và số nguyên S
Question: Tồn tại hay không một tập con I {1,2, , n} sao cho
- Bài toán IS (Independent Set)
Instance: Cho trước một đồ thị G = (V, E ) và một số tự nhiên k ≤ | V |
Question: Tồn tại hay không một tập gồm k đỉnh sao cho không có hai đỉnh
nào kề nhau?
- Bài toán TSP (Traveling Salesman Problem):
Một người đi du lịch muốn tham quan n thành phố 1, 2, 3, , n Xuất phát từ
một thành phố nào đó, người du lịch muốn đi tham quan tất cả các thành phố còn lại mỗi thành phố đúng một lần rồi quay trở về thành phố ban đầu Ta gọi cách đi
như vậy là hành trình của người du lịch Biết c ij là chi phí đi từ thành phố i đến thành phố j (i, j =1,2, , n) Hãy xác định một hành trình cho người du lịch sao cho tổng
chi phí là nhỏ nhất Bài toán TSP được phát biểu bằng đồ thị:
Instance: Cho một đồ thị đầy đủ K n với trọng số các cạnh là các số nguyên
dương và số dương C
Question: Tồn tại hay không một chu trình Hamilton trong K n có tổng trọng
số không vượt quá C?
- Bài toán KB (Knapsack Problem)
Instance: Cho b là trọng lượng túi, n loại đồ vật có trọng lượng a 1 , a 2 , , an và giá trị sử dụng c 1 , c 2 ,…, c n
Trang 3736
Question: Có tồn tại hay không một tập con gồm các đồ vật chất đầy trong túi
sao cho tổng giá trị sử dụng ít nhất bằng b ?
- Bài toán BP (Bin Packing)
Instance: Cho k là số nguyên dương
Question: Hỏi có tồn tại hay không một cách xếp đặt (đóng gói) các đồ vật
vào k thùng?
1.4.5 Bài toán NP-khó
Nhận xét rằng, giả sử hai bài toán Π 1 và Π 2 là NP-đầy đủ Theo định nghĩa Π 1
qui dẫn đa thức về Π 2 và Π 2 qui dẫn đa thức về Π 1 Điều này cho thấy mỗi bài toán
NP-đầy đủ qui dẫn đa thức về mọi bài toán NP-đầy đủ khác (tính đối xứng và bắc cầu
của phép qui dẫn đa thức) Vì thế mọi bài toán NP-đầy đủ có cùng độ phức tạp tính
toán
Bài toán tối ưu của bài toán quyết định tương ứng thuộc lớp NP-đầy đủ được gọi là một bài toán NP-khó (NP-hard) Bài toán NP-khó (mà không thuộc NP) được qui dẫn đa thức từ một bài toán trong lớp NP, vì thế mọi bài toán NP-đầy đủ đều là NP-khó Các bài toán NP-khó là khó không kém những bài toán “khó nhất” trong lớp NP Các bài toán sau đây là NP-khó, nhưng không biết có thuộc NP hay không: Bài toán k tập con nặng nhất, Bài toán cái túi, Bài toán đóng thùng,
Lớp bài toán NP-khó rộng hơn lớp bài toán NP-đầy đủ, vì nó bao gồm các bài toán thuộc lớp NP, cũng như các bài toán không thuộc lớp NP Bài toán cái túi được xem là “dễ nhất” trong các bài toán NP-khó Cùng với khái niệm NP-khó, người ta còn nêu ra khái niệm strongly NP-hard (NP-cực khó) nếu mọi dữ liệu của bài toán Π là nguyên và bài toán thu hẹp của Π trên các bộ dữ liệu bị chặn bởi một đa thức là NP-
khó Người ta chứng minh được rằng không có thuật toán giải thời gian đa thức cho
các bài toán NP-cực khó, trừ khi N= NP Bài toán qui hoạch nguyên tuyến tính được
Trang 3837
biết là NP-cực khó
Khi nghiên cứu giải quyết các bài toán thực tế, việc xác định nó thuộc lớp nào trong số các lớp bài toán kể trên không chỉ có ý nghĩa lý thuyết mà còn có ý nghĩa ứng dụng quan trọng Nếu bài toán đang xét được xác nhận là thuộc một trong các
lớp NP, NP-đầy đủ, NP-khó thì ít có hy vọng tìm được thuật toán hiệu quả để giải
nó Vì vậy, tốt hơn hết là hãy hướng tới việc xây dựng những thuật toán xấp xỉ cho các bài toán như thế
Hình 1.11 - Giả thuyết về quan hệ giữa các lớp NP, NP-đầy đủ và NP-khó
1.5 Một số cách tiếp cận giải các bài toán NP
Như ta đã biết, các bài toán NP-khó (trong đó có NP-đầy đủ) hiện vẫn chưa có
thuật toán hiệu quả để giải Do đó người ta hướng tới các phương pháp giải gần đúng
và các phương pháp dùng tính toán tiến hóa để giải các bài toán này
+ Một số phương pháp giải các bài toán NP-khó thường gặp là:
Trang 3938
1.5.1 Phương pháp xấp xỉ
Phương pháp xấp xỉ là phương pháp cho đảm bảo rằng sẽ tìm ra một lời giải gần đúng sai khác với lời giải đúng không quá một sai số tuyệt đối cho trước (hoặc một sai
số tỉ lệ cho trước) trong thời gian đa thức
Tuy nhiên phương pháp xấp xỉ không phải lúc nào cũng đảm bảo được tính chất
này với mọi bài toán NP-khó, nghĩa là có những bài toán (ví dụ như bài toán đóng
thùng – bin packing) thì người ta đã xây dựng được những phương án xấp xỉ trong thời
gian đa thức (polynomial time approximation schemes – PTAS) cho phép đạt tới kết
quả sai khác với kết quả đúng không quá một sai số cho trước bất kì Tuy nhiên với một số bài toán thì không thể làm được điều này, thậm chí không thể xấp xỉ kết quả tới một giá trị sai khác với lời giải đúng một sai số hoặc một tỉ số đa thức
Một hạn chế khác của phương pháp xấp xỉ là chúng chỉ có thể được áp dụng để giải những bài toán tối ưu hóa mà không áp dụng để giải những bài toán dạng quyết định thuần túy được (tuy nhiên người ta có thể chuyển đổi qua lại giữa dạng tối ưu hóa
và dạng quyết định của những bài toán như vậy)
1.5.2 Phương pháp xác xuất
Phương pháp xác xuất (probabilistic methods) hay còn gọi là phương pháp ngẫu nhiên (randomized) sử dụng các bộ sinh giá trị ngẫu nhiên như là đầu vào, phụ giúp thuật toán định hướng xử lí và hy vọng thuật toán sẽ có hiệu quả hoạt động cao trong tình huống trung bình Với phương pháp này thì khả năng thuật toán hoạt động tồi vẫn
có thể xảy ra, nhưng xác suất xảy ra là nhỏ
Phương pháp xác suất được ứng dụng nhiều trong lĩnh vực bảo mật Tuy nhiên đôi khi người ta cũng áp dụng phương pháp này (như là một thủ tục hỗ trợ) cho các
phương pháp khác để giải các bài toán NP-khó Điều đó là bởi vì hiện nay các thuật toán đơn định vẫn chưa thể giải các bài toán NP-khó một cách hiệu quả, vì vậy người ta
Trang 40sử dụng các phương pháp như: vét cạn có thêm tri thức đi kèm, tối ưu cục bộ, nguyên
lý hướng đích, nguyên lý sắp thứ tự
Ta hãy xét bài toán tìm đường đi ngắn nhất làm ví dụ Trong quá trình tìm kiếm đường đi ngắn nhất, người ta thường sử dụng một hàm , là một hàm số định nghĩa
trên các nút trên cây tìm kiếm, để ước đoán chi phí nhỏ nhất từ nút là đối số của hàm
đó tới nút đích Thông tin heuristic này sẽ được các thuật toán tìm kiếm đã biết khác như thuật toán tìm kiếm tham lam Best-First Search hay thuật toán A* sử dụng để lựa chọn nút tiếp theo trên đường đi Thuật toán tham lam Best-First Search thì lựa chọn nút có chi phí thấp nhất theo hàm heuristic , trong khi đó A* chọn nút có chi phí
thấp nhất theo hàm trong đó là chi phí chính xác của đường đi từ
trạng thái đầu tới nút đang xét Nếu h(n) là một hàm dự đoán tốt thì hiển nhiên A* cũng
có nhiều khả năng tìm ra lời giải tốt, trong đó có thể có lời giải tối ưu Vấn đề thực sự giờ đây nằm ở chỗ lựa chọn hàm như thế nào để hỗ trợ tìm kiếm hiệu quả Có
nhiều cách để xây dựng heuristic cho bài toán
• Sử dụng hàm chi phí của các bài toán con làm heuristic, vì chi phí của bài toán
tổng được tổ hợp từ chi phí của bài toán con, tất nhiên có thể hàm tổ hợp đó rất phức tạp, nhưng những thông tin về chi phí các bài toán con là rất hữu ích cho việc ước đoán chi phí của bài toán tổng, đặc biệt nếu ta có nhiều kinh nghiệm tiếp xúc với dạng bài toán này Để tiết kiệm thời gian tính toán thì người ta thường hay sử dụng một cơ sở dữ liệu mẫu (pattern database) lưu trữ lại lời giải đúng của mọi bài toán con