LỜI MỞ ĐẦU Bài toán tìm đường đi ngắn nhất Shortest Path Problem là một trong những bài toán kinh điển nhất trong tối ưu hoá đồ thị đã và và đang tiếp tục được nghiên cứu nhằm đáp ứng tố
Trang 1MỤC LỤC
MỤC LỤC 1
DANH MỤC TỪ VIẾT TẮT 4
DANH MỤC BẢNG BIỂU 5
DANH MỤC HÌNH ẢNH 6
LỜI MỞ ĐẦU 8
CHƯƠNG 1 GIỚI THIỆU 9
1.1 Mục tiêu và kết quả của Luận văn 9
1.1.1 Mục đích 9
1.1.2 Kết quả 9
1.2 Các ký hiệu toán học 10
1.3 Mạng lưới, hệ thố ng trong thực tế và lý thuyết đồ thị 10
1.3.1 Lý thuyết đồ thị 11
1.3.2 Mạng lưới, hệ thố ng trong thực tế 15
CHƯƠNG 2 TỔNG QUAN BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT 17
2.1 Bài toán tìm đường đi ngắn nhất 17
2.2 Lịch sử phát triển bài toán tìm đường đi ngắn nhất và kết quả 18
2.3 Ứng dụng của bài toán tìm đường đi ngắn nhất 21
2.3.1 GPS 21
2.3.2 Phân tích và xử lý ảnh 22
2.3.3 Công c ụ tìm kiếm qua mạng Internet (Social Search) 23
2.3.4 Tìm kiếm trong mạng xã hội (Social Network Search) .23
2.3.5 Hệ thống tin nhắn 24
2.4 Kỹ nghệ thuật toán 25
2.4.1 Giới thiệu 25
2.4.2 Nền tảng của kỹ nghệ thuật toán 34
CHƯƠNG 3 CÁC CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN SSSP KINH ĐIỂN 39
3.1 Hàng đợi ưu tiên và các cấu trúc Đống 39
Trang 23.1.1 Hàng đợi ưu tiên (Priority queue) 39
3.1.2 Đống nhị phân 40
3.1.2 D- Heap (Đống D) 41
3.1.3 Đống Fibonacci (FibonacciHeap) 41
3.3 Thuật toán Dijkstra 43
3.3.1 Thuật toán Dijkstra cổ điển 43
3.3.2 Các biến thể của thuật toán Dijkstra 44
3.3.3 Cải tiến thuật toán Dijkstra bằng hàng đợi ưu tiên 49
CHƯƠNG 4 THUẬT TOÁN THORUP 52
4.1 So sánh với thuật toán Dijkstra 52
4.2 Các cấu trúc dữ liệu và cách thức thực hiện nhằm xây dựng thuật toán 55
4.2.1 Minimum Spanning Tree 55
4.2.2 Thuật toán Tarjan’s union-find 56
4.2.3 Gabow’s split-findmin Algorithm 58
4.2.4 Cây phân tầng (Component hierarchy - T) 58
4.2.5 Cấu trúc Bucket và Cấu trúc Unvisited Data 66
4.2.6 Thuật toán thăm nút thành phần và các đỉnh 68
4.3 Cải tiến thuật toán Thorup 70
4.4 Ví dụ minh họa thuật toán Thorup 71
4.4.1 Ví dụ về Cây khung nhỏ nhất: 71
4.4.2 Ví dụ về xây dựng cây phân tầng: 71
4.4.3 Ví dụ về Bucket B 72
4.4.4 Ví dụ về Unvisited Structure (U) 73
4.4.5 Ví dụ về thuật toán thăm các đỉnh của giải thuật Thorup 75
CHƯƠNG 5 ĐÁNH GIÁ THỰC NGHIỆM CÁC THUẬT TOÁN 77
5.1 Mục đích thực nghiệm và các thuật toán được lựa chọn 77
5.1.1 Mục đích 77
5.1.2 Các thuật toán 77 5.2 Ngôn ngữ lập trình, môi trường thực nghiệm và Bộ dữ liệu thực nghiệm 78
Trang 35.2.1 Ngôn ngữ lập trình và môi trường thực nghiệm 78
5.2.2 Bộ dữ liệu thực nghiệm 78
5.3 Mô tả cài đ ặt các thuật toán 81
5.4 Kết quả thực nghiệm 83
5.5 Phân tích kết quả 91
5.5.1 Thời gian chạy và Bộ nhớ sử dụng 91
5.5.2 Khả năng sử dụng lại bộ dữ liệu đã xây dựng của thuật toán Thorup và Thorup WeiYusi 92
5.6 Kết luận 95
TÀI LIỆU THAM KHẢO .97
Trang 4DANH MỤC TỪ VIẾT TẮT
DIJ: Thuật toán Dijkstra
DIJ B: Thuật toán Dijkstra sử dụng đống nhị phân
DIJ F: Thuật toán Dijkstra sử dụng đống Fibonacci
SSSP: Single shortest path problem
TR: Thuật toán Thorup
TRWY: Thuật toán Thorup WeiYusi
RAM: Random Access Machine
Trang 5DANH MỤC BẢNG BIỂU
Chương 2:
Bảng 2 1.Thời gian chạy các thuật toán SSSP sắp xếp theo năm .21
Chương 3: Bảng 3.1.Thời gian thực hiện của đống nhị phân, đống Fibonaccis, và Đống D.40 Bảng 3.2 Thời gian chạy của đống nhị phân .41
Bảng 3 3 Thời gian chạy của đống D .41
Bảng 3.4 Thời gian chạy của đống Fibonacci .43
Bảng 3.5 Đánh giá độ phức tạp của Dijkstra khi áp dụng đống 51
Chương 5: Bảng 5.1 Các thuật toán đƣợc lựa chọn thực nghiệm .77
Bảng 5.2 Dữ liệu đồ thị có sẵn .79
Bảng 5.3 Dữ liệu đồ thị với mật độ m=3n 79
Bảng 5 4 Dữ liệu đồ thị với mật độ m=6n 79
Bảng 5 5 Dữ liệu đồ thị với mật độ m=10n 79
Bảng 5 6 Dữ liệu đồ thị với mật độ m=nloglogn 80
Bảng 5.7 Dữ liệu đồ thị với mật độ m=nlogn 80
Bảng 5.8 Dữ liệu đồ thị với mật độ m=n*(n-1)/2 .80
Bảng kết quả: Bảng 5.R1 Dữ liệu đầu vào sẵn có - DIMACS 84
Bảng 5.R2 Mật độ đồ thị m=3n 85
Bảng 5.R3 Mật độ đồ thị m=6n .86
Bảng 5.R4 Mật độ đồ thị m=10n 87
Bảng 5.R5 Mật độ đồ thị m=nloglogn 88
Bảng 5.R6 Mật độ đồ thị m=nlogn 89
Bảng 5.R7 Mật độ đồ thị m= .90
Bảng 5.R 8 Bảng kết quả thời gian tìm kiếm với đỉnh nguồn s từ 1 đến 100 của các thuật toán 93
Bảng 5.R 9 So sánh khi sử dụng lại và xây dựng lại dữ liệu của thuật toán Thorup và Thorup WeiYusi .94
Trang 6DANH MỤC HÌNH ẢNH
Chương 1:
Hình 1 1 Bảy cây cầu Königsberg .11
Hình 1 2.Hình ảnh mô tả cấu trúc đồ thị 12
Hình 1 3.Hình ảnh mô tả cấu trúc đồ thị 13
Hình 1 4.Hình ảnh mô tả cấu trúc đồ thị phẳng .14
Chương 2: Hình 2 1.Kỹ nghệ thuật toán .33
Chương 4: Hình 4 1 Hình ảnh mô tả Bổ đề Thorup .53
Hình 4 2 Hình ảnh mô tả Bổ đề Thorup với các c ạnh nối đồ thị con ≥ 3 54
Hình 4 3 Thuật toán Tarjan union find .57
Hình 4 4 Hình ảnh mô tả định nghĩa 2 .60
Hình 4 5 Đồ thị hoàn chỉnh .61
Hình 4.6 Cây phân tầng xây dựng từ đồ thị .61
Hình 4 7 Hình minh họ a min - child .64
Hình 4 8.Mô tả về cấu trúc split - findmin .68
Hình 4 9 Ví dụ về MST 71
Hình 4 10 Ví dụ về cây phân tầng 72
Hình 4 11 Ví dụ về cây phân tầng 72
Hình 4 12 Ví dụ về Bucket .73
Hình 4 13 Ví dụ về phép thăm 76
Hình 4 14 Ví dụ về phép thăm 76
Chương 5: Hình 5.1 Đồ thị thể hiện thời gian chạy t của các thuật toán trên các đồ thị sẵn có .84
Hình 5 2 Đồ thị thể hiện thời gian chạy t của các thuật toán trên các đồ thị m=3n .85
Trang 7Hình 5.3 Đồ thị thể hiện thời gian chạy t của các thuật toán trên các đồ thị dữ
Trang 8LỜI MỞ ĐẦU
Bài toán tìm đường đi ngắn nhất (Shortest Path Problem) là một trong những bài toán kinh điển nhất trong tối ưu hoá đồ thị đã và và đang tiếp tục được nghiên cứu nhằm đáp ứng tốt hơn các yêu cầu cụ thể của thực tiễn Có rất nhiều vấn đề trong thực tế thúc đẩy các nghiên cứu về tìm đường đi ngắn nhất
Việc tìm đường đi ngắn nhất giữa các địa điểm nhằm xây dựng hệ thống giao thông công cộng là một ví dụ điển hình nhằm thúc đẩy việc nghiên cứu các vấn đề liên quan Hãy hình dung là bạn muốn đi từ thành phố Hà Nội sang khu vực nào đó thuộc thành phố Nagoya - Nhật Bản, con đường đi sẽ như thế nào? Bạn muốn liên lạc một người nào đó thông qua sự giới thiệu của bạn bè và bạn của bạn bè qua mạng xã hội? Hoặc khi truy cập một trang Web trên Internet, bạn
sẽ sử dụng cách nào để có thể tải được các thông tin cần thiết một cách nhanh nhất?
Mục đích của luận văn này là trình bày lại một cách hệ thống các thuật toán giải bài toán đường đi ngắn nhất trên đồ thị, đặc biệt đi sâu vào thuật toán Thorup và phiên bản cải tiến bởi Wei Yusi của nó Các kết quả khảo sát thực nghiệm các thuật toán được trình bày giúp đưa ra những hướng dẫn sử dụng các thuật toán trong việc áp dụng giải quyết những vấn đề nảy sinh trong thực tiễn
Luận văn được trình bày trong 5 chương
Chương 1 đề cập tới mục tiêu và kết quả hướng tới của Luận văn cũng như các ký hiệu toán học và một số khái niệm cở bản của lý thuyết đồ thị có liên quan đến bài toán đường đi ngắn nhất
Các định nghĩa, lịch sử phát triển, các ứng dụng của bài toán đường đi ngắn nhất và sơ lược về kỹ nghệ thuật toán được trình bày trong chương 2
Chương 3 dành cho việc trình bày về các thuật toán kinh điển và các cấu trúc dữ liệu thường sử dụng trong cài đặt các thuật toán đường đi ngắn nhất
Chương 4 giới thiệu chi tiết thuật toán Thorup [19] và phiên bản cải tiến bởi Wei Yusi [24]
Chương 5 trình bày các kết quả thực nghiệm theo các thuật toán và phân tích đánh giá thời gian chạy thực nghiệm của các thuật toán
Trang 9CHƯƠNG 1 GIỚI THIỆU
1.1 Mục tiêu và kết quả của Luận văn
1.1.1 Mục đích
Mục tiêu của luận văn này là mô tả, phân tích, thực hiện và đánh giá thuật toán tìm đường đi ngắn nhất đơn nguồn của Thorup [19] cũng như phiên bản cải tiến bởi Wei Yusi [24] trong việc giải bài toán đường đi ngắn nhất đơn nguồn có
so sánh với các thuật toán kinh điển khác
Hai thuật toán Thorup[19] và Thorup - WeiYusi[24] chỉ thực hiện trên đồ thị vô hướng và là giải thuật tìm đường đi ngắn nhất đơn nguồn nên chúng tôi sẽ chỉ tiến hành việc thực nghiệm trên các đơn đồ thị vô hướng
Đồng thời chúng tôi cũng tiến hành so sánh thời gian xử lý của giải thuật Dijkstra áp dụng đống nhị phân và đống Fibonacci trên thực tế và so sánh với đánh giá lý thuyết Chương 3 của luận văn được dành riêng để mô tả các thuật toán kinh điển Thuật toán Thorup được mô tả và phân tích trong Chương 4 Khảo sát thực nghiệm các thuật toán SSSP được trình bày trong Chương 5
1.1.2 Kết quả
Kết quả của luận văn là cơ sở để đánh giá, phân tích thời gian xử lý của các thuật toán trên thực nghiệm và đề xuất lựa chọn thuật toán phù hợp nhất với các yêu cầu trong thực tế
Chúng tôi đã thử nghiệm thời gian chạy của thuật toán Thorup[19] và Thorup - WeiYusi[24] và các thuật toán tìm đường đi ngắn nhất đơn nguồn khác trong luận văn này trên các đồ thị khác nhau trong chương 5 Đồng thời chúng tôi cũng đưa ra đánh giá và phân tích kết quả so sánh giữa các thuật toán
Thực nghiệm đã cho thấy thuật toán Thorup hoàn toàn không có lợi trong thực tế Cả phiên bản cải biên của WeiYusi[24] cũng ít có khả năng ứng dụng vào các đồ thị thực tế do có cấu trúc tương tự giải thuật Thorup[19]
Trang 10Thuật toán Dijkstra sử dụng đống nhị phân là thuật toán chạy nhanh nhất và thời gian xử lý của đống nhị phân chạy nhanh hơn gần gấp đôi so với đống Fibonacci Chúng tôi cũng trình bày các lý giải về vấn đề này theo quan điểm cá nhân tại phần kết luận Chương 5
tăng rất chậm Hàm nghịch đảo của hàm Ackermann được ký hiệu là Hàm
nghịch đảo Ackermann hai tham số được định nghĩa bởi
1.3 Mạng lưới, hệ thống trong thực tế và lý thuyết đồ thị
Có thể nói kết quả liên quan đến việc giải quyết bài toán bảy cây cầu ở thành phố Königsberg là một trong những kết quả đầu tiên của lý thuyết đồ thị Leonhard Euler giải quyết bài toán này vào năm 1735 bằng cách chứng minh rằng không có cách đi qua mỗi cái cầu đúng một lần trong hệ thống 7 cái cầu mô
tả ở hình 1.1 Bằng việc mô hình hóa các cầu bởi các cạnh của một đồ thị, Euler
đã giải quyết được bài toán về những cây cầu Königsberg Hơn nữa ông đã đưa
ra một lớp đồ thị có rất nhiều ứng dụng thú vị, mà hiện tại được biết dưới tên gọi
đồ thị Euler Kể từ đó, đồ thị đã được sử dụng như là một mô hình toán học để
mô phỏng rất nhiều các cấu trúc trong thế giới thực
Trang 11Hình 1 1 Sơ đồ bảy cây cầu Königsberg
, và tập cạnh của nó được kí hiệu bởi
Có thể phân loại đồ thị theo kiểu và số lượng cạnh nối hai đỉnh
Dưới đây là định nghĩa một số loại đồ thị quan trọng:
1 được gọi là đơn đồ thị nếu giữa hai đỉnh thuộc
có nhiều nhất là 1 cạnh trong nối 2 đỉnh đó
2 được gọi là đa đồ thị nếu giữa hai đỉnh thuộc
có thể có nhiều hơn 1 cạnh trong nối nối giữa 2 đỉnh đó (Hiển nhiên đơn đồ thị cũng là đa đồ thị)
3 được gọi là đồ thị vô hướng nếu các cạnh trong là không định hướng, tức là tập gồm các cặp (u, v) không có thứ tự ( , ) ≡ ( ,
Trang 12các cạnh có hướng của nó thường được gọi ngắn gọn là các cung Trong nhiều tình huống, đồ thị vô hướng cũng có thể qui về đồ thị có hướng nếu như ta thaycạnh nối hai đỉnh ( , ) bất kỳ bởi hai cung ( , ) và ( ,
và hoặc là tập hữu hạn, hoặc là tập đếm được, có nghĩa là ta có thể đánh số thứ
tự 1, 2, 3 cho các phần tử của tập và Hơn nữa, đứng trên phương diện
người lập trình cho máy tính thì ta chỉ quan tâm đến các đồ thị hữu hạn (V và E là
tập hữu hạn) mà thôi, chính vì vậy từ đây về sau, nếu không chú thích gì thêm thì khi nói tới đồ thị, ta hiểu rằng đó là đồ thị hữu hạn
Trang 13• Đối với đồ thị có hướng
Xét một cung e ∈ E, nếu e = (u, v) thì ta nói u nối tới v và v nối từ u, cung e là đi ra khỏi đỉnh u và đi vào đỉnh v Đỉnh u khi đó được gọi là đỉnh đầu, đỉnh v được gọi là đỉnh cuối của cung e
• Với mỗi đỉnh v trong đồ thị có hướng, ta định nghĩa: Bán bậc ra của v
ký hiệu deg+(v) là số cung đi ra khỏi nó; bán bậc vào ký hiệu deg-(v) là số cung đi
1.3.1.2 Tính liên thông của đồ thị
Đối với đồ thị vô hướng
Đồ thị vô hướng
được gọi là liên thông (connected) nếu luôn
tồn tại đường đi giữa mọi cặp đỉnh phân biệt của đồ thị Nếu G không liên thông
thì chắc chắn nó sẽ là hợp của hai hay nhiều đồ thị con liên thông, các đồ thị con này đôi một không có đỉnh chung Các đồ thị con liên thông rời nhau như vậy được gọi là các thành phần liên thông của đồ thị đang xét
Hình 1 3.Hình ảnh mô tả cấu trúc đồ thị
Trang 14Đôi khi, việc xoá đi một đỉnh và tất cả các cạnh liên thuộc với nó sẽ tạo ra một đồ thị mới có nhiều thành phần liên thông hơn đồ thị ban đầu, các đỉnh như thế gọi là đỉnh cắt hay điểm khớp Hoàn toàn tương tự, một cạnh mà việc loại bỏ
nó tạo ra một đồ thị có nhiều thành phần liên thông hơn so với đồ thị ban đầu được gọi là một cạnh cắt hay một cầu
Đối với đồ thị có hướng
Có hai khái niệm về tính liên thông của đồ thị có hướng tuỳ theo chúng ta
có quan tâm tới hướng của các cung hay không G gọi là liên thông mạnh
(Strongly connected) nếu luôn tồn tại đường đi (theo các cung định hướng) giữa
hai đỉnh bất kỳ của đồ thị, G gọi là liên thông yếu (weakly connected) nếu đồ thị
vô hướng nền của nó là liên thông
1.3.1.3 Đồ thị phẳng
Một đồ thị được gọi là đồ thị phẳng nếu có thể vẽ nó trên mặt phẳng sao cho không có 2 cạnh nào cắt nhau ngoài ở đỉnh Đồ thị phẳng chia mặt phẳng thành tập hợp các vùng, gọi là các mặt Theo quy ước, vùng không bị chặn phía ngoài toàn bộ đồ thị là một mặt Biên giới của một mặt là đồ thị con chứa tất cả các cạnh tiếp giáp với mặt đó Mức độ của mặt là độ dài nhỏ nhất của phạm vi biên giới (phạm vi biên giới của face là tất cả các cạnh được chứa trong đó)
Trang 15Từ công thức Euler ta có các hệ quả được sử dụng để kiểm tra một đồ thị
có phải là đồ thị phẳng hay không:
Hệ quả 1 Nếu v ≥ 3 thì e ≤ 3v - 6
Hệ quả 2.Nếu v ≥ 3 nếu không tồn tại chu trình độ dài 3 thì e 2v 4
Định lý Kuratowski
Có hai đồ thị không phẳng đặc biệt là K3,3 và K5, trong đó K5 là đồ thị đầy
đủ với 5 đỉnh và K3,3 là đồ thị hai phía đầy đủ với 6 đỉnh
Định lý Kuratowski Đồ thị là phẳng khi và chỉ khi nó không chứa đồ thị
Hệ thống mạng lưới giao thông vận tải
Mạng lưới giao thông vận tải là một phần không thể thiếu của các cơ sở hạ tầng ở nhiều nước Ví dụ về các mạng lưới giao thông vận tải: đường bộ, đường sắt, và mạng lưới hàng không
Mạng lưới Web:
Trang 16Hệ thống mạng lưới Web bao gồm hàng tỷ trang web được kết nối bằng các hyperlink và được biểu diễn dưới dạng các đồ thị có hướng Các trang web
và hyperlink được biểu diễn bởi các nút và các cạnh tương ứng
Một trang web được xếp hạng cao khi càng có nhiều liên kết đến với nó Các công cụ tìm kiếm dựa trên nguyên lý này để xếp hạng các trang Web khi người dùng tìm kiếm nội dung thông tin
Chúng ta sẽ rất khó để có được hình ảnh chính xác của mạng lưới Web do:
số lượng các trang Web quá lớn, các trang Web được đặt trên các máy chủ khác nhau trên phạm vi toàn thế giới Ngoài ra, nội dung của các trang Web cũng liên tục thay đổi theo thời gian
Các nhà nghiên cứu thường tập hợp một số mô hình Web mẫu và xây dựng các đồ thị và mô hình toán học dựa trên các mẫu đã thu thập được để có thể tiên đoán được việc phát triển tương lai của mạng lưới Web
Mạng xã hội:
Trong các ngành khoa học tự nhiên và xã hội mà đồ thị mô hình quan hệ giữa các loài, các cấu trúc xã hội, các công ty… Trong một mạng xã hội, các cá nhân có thể được mô hình hóa bởi các nút; hai nút được kết nối bởi một cạnh bất
cứ khi nào các cá nhân tương ứng là bạn bè
Trang 17CHƯƠNG 2 TỔNG QUAN BÀI TOÁN TÌM
ĐƯỜNG ĐI NGẮN NHẤT
2.1 Bài toán tìm đường đi ngắn nhất
Trong lý thuyết đồ thị, bài toán đường đi ngắn nhất đơn nguồn là bài toán tìm một đường đi giữa hai đỉnh sao cho tổng các trọng số của các cạnh trên đường đi đó là nhỏ nhất
Các dạng bài toán tìm đường đi ngắn nhất
Bài toán tìm đường đi ngắn nhất được phân làm các dạng chính sau đây:
- Bài toán tìm đường đi ngắn nhất đơn nguồn (single-source shortest path problem - SSSP): Trong dạng này, chúng ta sẽ tìm đường đi ngắn nhất từ một đỉnh đến tất cả các đỉnh còn lại
- Bài toán tìm đường đi ngắn nhất giữa 2 đỉnh (single-pair shortest path problem): Cần tìm đường đi ngắn nhất giữa 2 đỉnh cho trước
- Bài toán tìm đường đi ngắn nhất giữa mọi cặp đỉnh (all- pair shortest path problem – ASPS): Cần tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh trong đồ thị
Trang 182.2 Lịch sử phát triển bài toán tìm đường đi ngắn nhất và kết quả
Cùng với việc xây dựng được các đồ thị mô hình hóa các mạng lưới, hệ thống trong thực tế, bài toán tìm đường đi ngắn nhất ngày càng quan trọng Câu trả lời cho 3 câu hỏi được nêu ở trên đối với các bài toán tìm đường đi ngắn nhất chính là câu trả lời: Cách đi và chi phí ngắn nhất tới Nagoya – Nhật Bản, trình tự nhanh nhất để bạn liên lạc với người bạn đó, cách kết nối nhanh nhất với Web server của trang Web đó,
Tầm quan trọng của các vấn đề trên và nhiều ứng dụng đã thúc đẩy các nỗ lực nghiên cứu trong hơn năm mươi năm Trong đó một trong những vấn đề trọng tâm của bài toán đường đi ngắn nhất là trong mạng lưới giao thông, khi việc tìm tuyến đường trở thành một trong những ứng dụng quan trọng nhất của thuật toán đường đi ngắn nhất Phương pháp để tìm một con đường ngắn nhất được nghiên cứu và phân tích trong những năm cuối 50 và đầu những năm 60 bởi các nhà khoa học Bellman, Bock và Cameron, Caldwell, Dantzig, Dijkstra, Floyd, Ford, Fulkerson, Hu, Klee, Leyzorek, Gray, Johnson, Ladew, Meaker , Petry, và Seitz, Minty, Moore, Mori và Nishimura, Parikh, Rapaport và Abramson, Shimbel, Warshall, Whiting và Hillier,
Hiện nay, nhiều thuật toán của của các nhà khoa học trên vẫn đang được
sử dụng dưới hình thức này hay cách khác
Bài toán tìm đường đi ngắn nhất đơn nguồn (SSSP)
Đầu năm 1960, có hai giải thuật nghiên cứu về đồ thị có trọng số trong đó
là thuật toán Bellman – Ford[6] với trọng số tùy ý và Dijkstra[7] với trọng số không âm Thuật toán Bellman – Ford[6] có thời gian chạy là
, với là
số cạnh và là số đỉnh Tuy nhiên, thời gian xử lý của thuật toán nói chung không khả quan Điểm cộng của thuật toán là việc có khả năng phát hiện ra chu trình âm
Giải thuật năm 1959 của Dijkstra[7] ban đầu không sử dụng hàng đợi ưu tiên chạy trong thời gian
nếu cài đặt trực tiếp Các nhà khoa học nhanh
Trang 19chóng nhận ra rằng thuật toán Dijkstra[7] có thể được tăng tốc xử lý bằng việc sử
dụng hàng đợi ưu tiên Với hàng đợi ưu tiên dựa trên đống d – ary của Johnson
vào năm 1975 và sự khái quát hóa của cây nhị phân thời gian xử lý giảm xuống còn
Năm 1987, Fredman và Tarjan công bố cấu trúc đống Fibonacci Thuật toán Dijkstra[7] áp dụng đống Fibonacci đã giảm thời gian tính toán xuống còn
Cùng với sự phát triển của hệ thống tọa độ, các đồ thị thực tế giờ được gắn vào trục tọa độ với kinh độ và vĩ độ Việc tìm kiếm đường đi ngắn nhất cũng được thể hiện trên hệ trục tọa độ Thuật toán A* được mô tả lần đầu vào năm
1968 bởi Peter Hart, Nils Nilsson, và Bertram Raphael Trong bài báo của họ, thuật toán được gọi là thuật toán A; khi sử dụng thuật toán này với một đánh giá
heuristic thích hợp sẽ thu được hoạt động tối ưu, do đó mà có tên A*
Theo đó thuật toán Dijistra là một trường hợp đặc biệt của thuật toán A*
khi hàm h(x)=0 với mọi x
Mọi nỗ lực của các nhà toán học đi trước đều tập trung vào việc triển khai giải thuật của Dijkstra trong mô hình tính toán RAM (Random Access Machine)
Năm 1994, Fredman và Wilard đề xuất cấu trúc đống atomic[10] cho phép
thuật toán Dijkstra[7] thực hiện với thời gian
và là thời
gian chạy trên tính toán lý thuyết do cấu trúc đống atomic[10] hiện chỉ mô tả trên
lý thuyết và không áp dụng được trong hệ thống máy tính hiện nay Tới nay, việc triển khai tốt nhất giải thuật của Dijkstra trong thời gian chạy
có trọng số nguyên dương
Bài toán tìm đường đi ngắn nhất giữa các cặp đỉnh (APSP)
Bài toán APSP – tìm đường đi ngắn nhất từ mỗi đỉnh tới các đỉnh khác –
có thể giải quyết dễ dàng bằng cách thực hiện lần SSSP Vì vậy, thuật toán của
Trang 20Bellman-Ford giải quyết APSP trong thời gian
Đồ thị dày
Giải thuật của Floyd-Warshall [12] được công bố vào năm 1962 bởi Robert Floyd , về cơ bản thuật toán cũng tương tự như các thuật toán công bố trước đây của Bernard Roy vào năm 1959 và Stephen Warshall năm 1962 Thuật giải tính toán APSP trong thời gian
, bài toán về thực chất không yêu cầu việc tìm đường đi ngắn nhất
Điều này đưa ra thời gian rõ ràng
nhanh nhất là nhờ Takaoka[18], người
sử dụng phép tiếp cận của Fredman đối với các bài toán nhỏ Giải thuật của Takaoka chạy trong thời gian
là bước tiến lớn về phép toán logarit đối với phép nhân ma trận tiêu chuẩn
Đồ thị thưa
Johnson[16] đã đưa ra một giải pháp thú vị cho bài toán chiều dài cạnh
âm Giả sử rằng chu trình âm không tồn tại, ông đã chỉ ra rằng bài toán đường đi ngắn nhất có thể chạy trong thời gian
tới cùng khoảng cách, nhưng chỉ có chiều dài cạnh không âm
Kết hợp với giải thuật SSSP của Dijkstra, ngay lập tức cho giải thuật APSP các đồ thị trọng số tùy ý chạy trong thời gian
Trang 21
Dù vậy, đối với cả 2 dạng đồ thị giải thuật của Dijkstra (có hoặc không có giải pháp rút gọn của Johnson) vẫn là giải thuật APSP chung nhanh nhất trong nhiều năm
Do mục tiêu của Luận văn là thử nghiệm so sánh các thuật toán tìm kiếm đường đi ngắn nhất đơn nguồn nên các thuật toán về tìm đường đi ngắn nhất từng cặp đỉnh sẽ không được nêu
Bảng 2.1 đưới đây liệt kê các đánh giá thời gian chạy lý thuyết của các thuật toán tìm đường đi ngắn nhất đơn nguồn trên đồ thị vô hướng với trọng số không âm
Dijisktra sử dụng list
Leyzorek et al
1957, Dijkstra
1959 Dijisktra sử dụng
đống nhị phân
Dijisktra sử dụng đống Fibonacci
Fredman&Tarjan
1987 Thorup
Thorup, 1999 Sett Pettie
Sett Pettie, 2003
Bảng 2 1.Thời gian chạy các thuật toán SSSP sắp xếp theo năm
2.3 Ứng dụng của bài toán tìm đường đi ngắn nhất
Tương ứng với các vấn đề trong thực tế đã có rất nhiều các ứng dụng của bài toán tìm đường đi ngắn nhất trong từng mạng lưới đã nêu trên Chúng ta có thể liệt kê các ứng dụng phổ biến nhất hiện nay:
2.3.1 GPS
GPS (Global Positioning System): Hệ thống định vị toàn cầu - là hệ thống
xác định vị trí dựa trên vị trí của các vệ tinh nhân tạo Trong cùng một thời điểm,
ở một vị trí trên mặt đất nếu xác định được khoảng cách đến ba vệ tinh (tối thiểu) thì sẽ tính được toạ độ của vị trí đó GPS được thiết kế và quản lý bởi Bộ Quốc phòng Hoa Kỳ, nhưng chính phủ Hoa Kỳ cho phép mọi người sử dụng nó miễn
Trang 22phí, bất kể quốc tịch từ năm 1980, GPS hoạt động trong mọi điều kiện thời tiết, mọi nơi trên Trái Đất, 24 giờ một ngày
GPS là hệ dẫn đường dựa trên một mạng lưới 24 quả vệ tinh được đặt trên quỹ đạo không gian, hoạt động dựa trên các trạm phát tín hiệu vô tuyến điện Được biết nhiều nhất là các hệ thống có tên gọi LORAN - hoạt động ở giải tần 90-100 kHz chủ yếu dùng cho hàng hải, hay TACAN - dùng cho quân đội Mỹ và biến thể với độ chính xác thấp VOR/DME - VHF dùng cho hàng không dân dụng
2.3.2 Phân tích và xử lý ảnh
Phân tích vùng ảnh là một phần không thể thiếu của các nghiệp vụcần xử
lý ảnh như những công việc xử lý ảnh tai nạn, phân tích hình ảnh qua thiết bị y
tế, và chỉnh sửa ảnh
Vấn đề của việc phân vùng ảnh là việc gom các nhóm pixel gần nhau có tính chất giống nhau Quá trình gom nhóm thường dựa trên tính toán đường đi ngắn nhất Bề mặt của ảnh là những chiều liên tục Đường đi ngắn nhất được tính toán với các phương pháp so sánh, một biến thể của thuật toán toán Dijkstra[7] Các thuật toán dựa trên đồ thị xem các hình ảnh như là một đồ thị, trong đó mỗi pixel là một nút, kết nối bởi một cạnh có 4 (hoặc 8 hoặc nhiều hơn) pixel lân cận Một phần quan trọng là gán trọng số thích hợp để các cạnh, dựa trên hình ảnh
"tiềm năng" của hai điểm ảnh và khoảng cách Euclide giữa các pixel Những người sử dụng cung cấp điểm đầu cuối; các thuật toán tính toán kết quả của truy vấn con đường ngắn nhất tương ứng point-to-point và các đường dẫn kết quả được hiểu như là một phần của các đối tượng ranh giới Nói cách khác, đưa ra hai điểm đầu cuối của một đường viền, các thuật toán xác định các đường viền tối đa khả năng kết nối chúng Các trọng số cạnh là xác suất và bằng cách lấy logarit tiêu cực, các thuật toán chỉ có thể tổng hợp các trọng trên con đường để lấy đường viền tối ưu Đối với các tính toán ranh giới trong 3 chiều, các thuật toán thông minh kéo phải được thích nghi Một ranh giới có thể được tìm thấy bằng cách kết hợp nhiều con đường ngắn nhất cho đến khi một mặt kín thu được
Trang 23Trong tầm nhìn máy tính, thuật toán đường đi ngắn nhất trên đồ thị có trọng đã tìm thấy rất nhiều ứng dụng khác với phân khúc như phát hiện trung tâm, xạ trị, lưới morphing, video tổng hợp, và việc tìm kiếm những con đường và những con đường mòn trên hình ảnh vệ tinh Các ứng dụng nổi tiếng: Dò tìm theo hình ảnh, Google Image…
2.3.3 Công cụ tìm kiếm qua mạng Internet (Social Search)
Công cụ tìm kiếm qua mạng Internet (Social search hay social search engine) là loại hình tìm kiếm web dựa trên các đồ thị quan hệ xã hội (Social Graph) của người tìm kiếm Việc tìm kiếm qua Social Search sẽ tiến hành thông qua việc phân tích các đoạn văn bản hoặc các cấu trúc liên kết văn bản bằng thuật toán hoặc phép tính toán gần đúng
Social search có rất nhiều dạng từ dạng bookmark chia sẻ đơn giản cho đến việc gán nhãn mô tả bằng các thuật toán
Hiện nay trên thế giới có rất nhiều công cụ tìm kiếm: Google, Yahoo, Facebook Graph Search, Bing… Trong đó, nổi bật lên là công cụ tìm kiếm Google search
2.3.4 Tìm kiếm trong mạng xã hội (Social Network Search)
Bài toán đường đi ngắn nhất là phần rất thú vị trong mạng xã hội dành cho
người dùng Một ví dụ rất thú vị về việc này đó là trang web orcaleofbacon.org,
cho phép người dùng nhập tên hai diễn viên và máy chủ sẽ tiến hành tìm kiếm mối quan hệ chung ngắn nhất giữa hai diễn viên này Tương tự cũng có nhưng trang web như vậy cho toán học
Trong các trang mạng xã hội chuyên nghiệp như Linkedln hoặc XING, người dùng có thể thêm các thông tin về việc làm mình mong muốn, hoặc các thông tin tuyển dụng, thông tin mặt hàng về kinh doanh Từ đó có thể tìm thấy những khách hàng tiềm năng, hoặc tìm kiếm nhân viên thông qua các chuỗi kết nối ngắn về thông tin của các cá nhân
Facebook Graph Search là một công cụ tìm kiếm ngữ nghĩa đã được
giới thiệu bởi Facebook tháng 3 năm 2013 Nó được thiết kế để cung cấp cho câu
Trang 24trả lời cho các truy vấn ngôn ngữ tự nhiên người sử dụng chứ không phải là một danh sách liên kết Kết quả tìm kiếm dựa trên cả hai nội dung của người sử dụng
và hồ sơ của những người bạn và các mối quan hệ giữa người sử dụng và bạn bè của họ Kết quả được dựa trên bạn bè và sở thích thể hiện trên Facebook, và cũng định hình bởi các thiết lập riêng tư của người dùng
2.3.5 Hệ thống tin nhắn
Chuyển tiếp một tin nhắn từ người gửi đến người nhận thông qua một hệ thống mạng lưới được gọi là routing Các thuật toán về routing đều là các biến thể, ở dạng này hay cách khác của các thuật toán đường đi ngắn nhất (tuyến đường các gói tin truyền có chi phí tối thiểu) Hệ thống mạng có thể mô tả như một đồ thị, chi phí giữa các cạnh phản ánh khả năng truyền tải, độ trễ, tắc nghẽn,
Trong một số hệ thống nhỏ, một thiết bị trung tâm quyết định thời gian hoàn thành của tất cả các gói tin Trong các hệ thống chuyển tin nhanh, có rất nhiều gói tin truyền đi mỗi giây cho nên việc chỉ có một thiết bị duy nhất để tính toán đường dẫn đầy đủ cho mỗi gói tin là không khả thi Ban đầu việc xử lý gửi gói tin hệ thống tính toán đường đi ngắn nhất sau đó nếu có các gói tin khác có các nguồn giống nhau và đến cùng đích tiếp tục đi theo đường đi tương tự mà không tính toán lại cho đến khi không còn gói tin được gửi
Trong các hệ thống lớn, có rất nhiều các kết nối giữa các thiết bị, và các kết nối này thay đổi rất thường xuyên, việc biết tất cả các thiết bị kết nối với nhau hay tính toán một đường đi ngắn nhất thông qua là không khả thi đối với
Trang 25bất kỳ một thiết bị Hệ thống như vậy thường sử dụng next-hop routing Các ứng dụng: Hệ thống tin nhắn điện thoại, …
2.4 Kỹ nghệ thuật toán
2.4.1 Giới thiệu
Trong thời đại hiện nay, chúng ta có thể thấy sự tác động của việc áp dụng thuật toán trong toàn bộ các phần mềm đã và đang được sử dụng Các thuật toán ngày càng trở nên chiếm vai trò quan trọng trong hệ thống ngành kinh tế, công nghệ, khoa học, và trong cuộc sống hàng ngày
Chúng ta có thể kể ra một số ngành nghề đặc biệt liên quan chặt chẽ đến việc áp dụng các thuật toán như công nghệ sinh học, tìm kiếm thông tin, mạng lưới thông tin liên lạc, mật mã, hệ thống thông tin địa lý, lấy thông tin từ hình ảnh (chỉnh sửa, khôi phục), vận tải đa phương tiện
Algorithmics – hệ thống phát triển tính hiệu quả của thuật toán trở thành công nghệ chủ chốt trong quá trình phát triển các ứng dụng trên máy tính Tuy nhiên, trong những năm qua xuất hiện khoảng cách ngày càng lớn giữa lý thuyết
về thuật toán thuần túy và nhu cầu thực tế Hệ quả của vấn đề này dẫn đến việc chỉ một số ít các thuật toán là thực sự được áp dụng trong thực tế Điều này thật sự rất đáng tiếc, để hiểu được vấn đề này, chúng ta cần tìm hiểu quá trình nghiên cứu thuật toán được diễn ra như thế nào theo cách thông thường
2.4.1.1 Thuật toán cổ điển
Trọng tâm của lý thuyết về thuật toán là các vấn đề đơn giản và có tính trừu tượng Đối với một vài vấn đề thuật toán được thiết kế và phân tích dựa trên các
mô hình giả định sinh ra từ các máy trừu tượng (máy tính tự động sử dụng theo lý thuyết automata), từ đó đưa ra đánh giá thời gian chạy của các thuật toán trong trường hợp xấu nhất và xác định được chất lượng của thuật toán
Trong khoa học máy tính, thời gian thực hiện và chất lượng lời giải là thước
đo cho tính hiệu quả của thuật toán
Trang 26Giải quyết các các vấn đề trừu tượng và mô hình máy trừu tượng (abstract machine) có những điểm đáng chú ý trên lý thuyết:
- Các thuật toán được thiết kế với các vấn đề như vậy có thể áp dụng trên nhiều ứng dụng cụ thể hóa trong các lĩnh vực khác nhau
- Hầu hết các mô hình máy cổ điển đều tương đương với thời gian sai khác không quá đa thức, tác động của thuật toán không được tính toán chi tiết
- Trường hợp xấu nhất của thuật toán xảy ra không giống như trong thiết
Tuy nhiên, chúng ta nên lưu ý rằng đối với nhiều người tiên phong trong thuật toán những ngày đầu, như Knuth, Floyd và những người khác, tất cả các thuật toán mà họ thiết kế được đánh giá dựa vào tiêu chuẩn thực hành Điều này làm thay đổi quan điểm về thiết kế thuật toán, và dẫn đến yêu cầu phải phát triển các cấu trúc dữ liệu tiên tiến để cài đặt các thuật toán
Qua việc triển khai và thử nghiệm giữa lý thuyết và thực hành, nhiều nhà khoa học đã nhận ra nhu cầu của việc thiết kế và phân tích từ thực tế ngày càng lớn Một nhóm các nhà nghiên cứu thuật toán bắt đầu tìm cách để khắc phục vấn
đề này cách đây 15 năm
2.4.1.2 Nền tảng của Kỹ nghệ thuật toán
Qua cách tiếp cận thuật toán, chúng ta có thể thấy việc thực thi và thí nghiệm có tầm quan trọng như việc phân tích và thiết kế Cách tiếp cận này đã cho chúng ta một khái niệm mới, đó là Kỹ nghệ thuật toán
Thomas Kuhn tiến hành phân tích cấu trúc sự biến chuyển của khoa học và
sử dụng các mô hình khái niệm để miêu tả lại “sự kết hợp truyền thống của nghiên cứu khoa học” Theo Kuhn sự biến chuyển mô hình chỉ xảy ra khi mô hình cũ
Trang 27đang khủng hoảng và không thể giải quyết được các vấn đề mới Vậy sự kiện đòi hỏi mô hình mới? Chúng ta sẽ liệt kê một vài ví dụ sau đây:
- Các mô hình máy tính Von – Neumann đã dần không còn thích hợp trong thực tế với các việc như xử lý song song, xử lý pipelining, dự đoán trước, phân cấp
bộ nhớ và bộ nhớ đệm, xử lý đa luồng, và mô hình tính toán phân tán và song song
- Trọng tâm của việc thiết kế thuật toán tập trung vào việc cải thiện đánh giá tiệm cận trong trường hợp xấu nhất và đảm bảo thuật toán đưa ra kết quả xấp
xỉ như đã dự đoán Điều này dẫn đến việc có nhiều thuật toán và cấu trúc dữ liệu được thiết kế có nhiều ý tưởng mới nhưng không có tính thực tế Đôi khi, điều đó không chắc chắn rằng các thuật toán sẽ không được áp dụng Dù vậy, việc áp dụng vào thực tế sẽ rất khó khăn đến mức không ai muốn thử thực hiện việc này
Điểm bất lợi của việc nghiên cứu thời gian chạy tiệm cận là chúng có thể ẩn
đi các hằng số rất lớn Tương tự, yêu cầu bộ nhớ có thể là rất lớn cho dù là bị chặn bởi đa thức
- Như ví dụ cụ thể, chúng tôi có thể trích dẫn một số vấn đề trong thuật toán:
1 Rất nhiều (không phải tất cả) sơ đồ xấp xỉ thời gian đa thức (PTAS), chẳng hạn các sơ đồ của Aurora hoặc Mitchell cho bài toán người du lịch (TSP), có hệ số rất lớn
2 Robins và Zelikovsky trình bày một hệ thống thuật toán giải bài toán cây Steiner trong đồ thị với thời gian chạy là
Ngoài ra, còn cần hơn 217 thiết bị đầu cuối
3 Câu hỏi liệu một đa giác đơn có thể được tam giác hóa trong thời gian tuyến tính hay không là một trong những vấn đề chính trong hình học tính toán nhiều năm qua Năm 1990, vấn đề này cuối cùng đã được Chazelle giải
Trang 28quyết, ông đã đưa ra một thuật toán với thời gian tuyến tính khá phức tạp Theo những kiến thức chúng tôi biết thì thuật toán này chưa bao giờ được
áp dụng
4 Việc xây dựng hình học, được biết đến như một kỹ thuật cắt, cung cấp một kỹ thuật phân vùng không gian cho bất kỳ kích thước hữu hạn nào mà trong đó có vô số ứng dụng trong hình học tính toán Tuy nhiên, thuật toán dựa trên cuttings dường như cho thấy một thách thức đối với việc thực hiện Trong thực tế, yếu tố hằng số đóng vai trò khá lớn: trong các ứng dụng như phẫu thuật có sự trợ giúp của máy tính, phục hồi thông tin bằng công cụ tìm kiếm, hướng dẫn xe cộ, và nhiều ứng dụng khác, giải pháp này phải được tính trong thời gian gần như tức thời Trong các ứng dụng khác, năng suất của người sử dụng một công cụ phần mềm có liên quan chặt chẽ với hiệu suất của công cụ Ở đây bất kỳ
sự cải thiện nào đối với yếu tố hằng số đều xứng đáng được đầu tư Vì vậy, việc cải tiến yếu tố hằng số thường tạo ra khác biệt cho dù công cụ có được áp dụng hay không
- Khái niệm về hiệu quả như khả năng giải quyết thời gian đa thức thường không phù hợp Thậm chí thời gian chạy nhỏ, nhưng siêu tuyến tính, mức độ đa thức có thể quá chậm Các ứng dụng thực tế, chẳng hạn trong thiết kế VLSI, tin sinh học, hoặc xử lý dữ liệu không gian, yêu cầu phải xử lý các tập dữ liệu cực lớn Trong những trường hợp như vậy, chúng ta thường chỉ có thể áp dụng các thuật toán đòi hỏi thời gian và không gian chạy tuyến tính, thậm chí cần các thuật toán thời gian dưới tuyến tính Trong thực tế, nghiên cứu về các thuật toán dưới tuyến tính gần đây đã xuất hiện như là một lĩnh vực nghiên cứu mới Thuật toán dưới tuyến tính hoặc chỉ xem xét một mẫu nhỏ ngẫu nhiên của các dữ liệu đầu vào hoặc quá trình khi nó đến, và sau đó trích một bản tóm tắt nhỏ
- Như đã nêu ở trên, tiêu chí chính khi thiết kế thuật toán lý thuyết là tính hiệu quả Điều này đã kích thích sự phát triển của các cấu trúc dữ liệu rất tinh vi –cho dù đối với nhiều cấu trúc, liệu chúng có được thực hiện một cách hợp lý hay không vẫn là một câu hỏi Tuy nhiên, trong thực tế, ngoài tính hiệu quả, những
Trang 29mục tiêu thiết kế khác đều có vai trò quan trọng như nhau, đôi khi tầm quan trọng của một tiêu chí nào đó thậm chí còn được đặt cao hơn, chẳng hạn tính linh hoạt,
dễ sử dụng, bảo trì, Trong thực tế, cấu trúc dữ liệu và các thuật toán đơn giản được ưa thích hơn những cái phức tạp
- Các khía cạnh lý thuyết về các thuật toán thường đưa ra một bài thuyết trình cấp cao, còn các chi tiết cần thiết để bắt đầu thực hiện thì để lại cho người đọc
- Sự khởi đầu dễ dàng nhất để nghiên cứu và phát triển ý tưởng thuật toán mới là từ vấn đề đơn giản Tuy nhiên, cùng với tiến độ chung trong khoa học máy tính và sự sẵn có của sức mạnh tính toán, các ứng dụng tự trở nên phức tạp hơn Các ứng dụng như vậy đòi hỏi một mô hình cẩn thận Câu hỏi đặt ra là liệu kiến thức học được cho các mô hình đơn giản có thể thay thế những mô hình phức tạp hơn
- Dữ liệu đầu vào thực thường không phải là cấu trúc của các trường hợp khó nhất được sử dụng trong phân tích lý thuyết Do đó rất có thể là hiệu suất dự đoán là không khả dụng
- Công việc thử nghiệm tốt đòi hỏi sự nỗ lực đáng kể (thời gian, nhân lực,
kỹ năng lập trình, kinh nghiệm, )
Trong nhiều thiết lập thử nghiệm, người ta thực hiện các thí nghiệm với các trường hợp ngẫu nhiên Điều này có thể gây hiểu nhầm lớn Ví dụ, một vài đồ thị ngẫu nhiên có một số thuộc tính cấu trúc làm cho chúng khác biệt với đồ thị trong thế giới thực Một ví dụ khác phát sinh trong tính toán hình học: một bộ mẫu thống nhất của các điểm đảm bảo chắc chắn các điểm sẽ ở vị trí tùy ý Tuy nhiên trong thực tế, rất có khả năng không thực hiện giả thiết này
Thật không may, làm việc với các dữ liệu đầu vào thực tế cũng có vấn đề của nó: Những dữ liệu này có thể không có sẵn cho các nhà nghiên cứu hoặc có thể là độc quyền Để thu hẹp khoảng cách giữa thực tế và lý thuyết, Kỹ nghệ thuật toán (Algorithm Engineering) đòi hỏi một phương pháp mở rộng hơn Tuy nhiên, Algorithm Engineering sẽ phải giữ được những lợi thế của lý thuyết:
Trang 302.4.1.3 Định nghĩa Kỹ nghệ thuật toán (Algorithm Engineering)
Một số chi tiết của Kỹ nghệ thuật toán đã được trình bày tại các hội thảo
của DIMACS (http://dimacs.rutgers.edu/Challenges/):
"Những vấn đề được thực hiện bởi DIMACS giải quyết câu hỏi về việc xác định hiệu suất thuật toán thực tế nơi mà những phân tích trường hợp xấu nhất là quá bi quan và mô hình xác suất là quá phi thực tế: việc thử nghiệm có thể cung cấp các hướng dẫn để thực hiện thuật toán thực tế khi mà phân tích không thành công
Thí nghiệm cũng mang thuật toán gần gũi hơn với các vấn đề ban đầu, tạo nên động lực cho các công trình lý thuyết Nó cũng góp phần kiểm tra rất nhiều giả định về phương pháp thực hiện và cấu trúc dữ liệu Nó tạo ra một cơ hội để phát triển và kiểm tra vấn đề, máy phát ví dụ, và các phương pháp khác để kiểm tra và
so sánh hiệu suất của thuật toán Đó là một bước tiến trong việc chuyển giao công nghệ bằng cách cung cấp các hệ thống xử lý của các thuật toán cho những người khác để sửa đổi thích hợp
Kể từ năm 1990, khi First Challenge bắt đầu với dòng chảy mạng, tổng cộng chín thách thức thực hiện đã được tiến hành Thuật ngữ Algorithm Engineering lần đầu tiên được sử dụng với độ đặc hiệu và tác động đáng kể trong năm 1997, với việc tổ chức Hội thảo đầu tiên về Algorithm Engineering (WAE 1997) Một vài năm trước đây, David Bader, Bernard Moret, và Peter Sanders định nghĩa như sau:
"Algorithm Engineering đề cập đến quá trình cần thiết để biến đổi một thuật toán từ bút chì trên giấy thành hiện thực, hiệu quả, kiểm nghiệm tốt, và dễ dàng sử
Trang 31dụng Vì vậy, nó bao gồm một số chủ đề, từ hành vi mẫu bộ nhớ cache đến các nguyên tắc của công nghệ phần mềm; tuy nhiên trọng tâm chính của nó là thử nghiệm "
Chúng ta đồng ý rằng tất cả các chủ đề được đề cập đều là những phần quan trọng của Algorithm Engineering, nhưng vẫn muốn có một cái nhìn rộng hơn về vấn đề này Một định nghĩa tổng quát hơn đã xuất hiện trong thông báo của
ALCOM-FT Summer School về Algorithm Engineering năm 2001:
"Algorithm Engineering liên quan với việc thiết kế, phân tích lý thuyết và thực nghiệm, kỹ thuật và điều chỉnh các thuật toán, và đang thu hút được sự quan tâm ngày càng tăng trong cộng đồng những người nghiên cứu thuật toán Quy tắc mới nổi này giải quyết các vấn đề về hiệu suất thuật toán thực tế bằng cách kết hợp cẩn thận các phương pháp lý thuyết truyền thống cùng với các khảo sát thực nghiệm kỹ lưỡng "(Đăng trong DMANET vào ngày 17 tháng năm 2001 bởi Guiseppe Italiano)
2.4.1.4 Phương pháp luận
Phương pháp khoa học có nguồn gốc từ các ngành khoa học tự nhiên Nó xem khoa học như là một chu kỳ giữa lý thuyết và thực nghiệm Lý thuyết có thể quy nạp và diễn dịch một phần - theo lý thuyết dựa trên giả định cụ thể - xây dựng giả thuyết thực nghiệm đã được thử nghiệm
Các kết quả của các thí nghiệm lần lượt có thể dẫn đến giả thuyết hay lý
thuyết mới, v.v… Cũng giống như công nghệ phần mềm, Algorithm Engineering
không phải là một quá trình đơn giản Lý tưởng nhất, người ta sẽ thiết kế một thuật toán, thực hiện nó, và sử dụng nó Tuy nhiên, các thuật toán tối ưu, tức là thuật toán tốt nhất để giải quyết vấn đề trong một ứng dụng, và bước thực hiện cuối cùng không được biết trước
Trong Algorithm Engineering, một bằng chứng lý thuyết cho sự phù hợp
đối với một mục đích cụ thể được thay thế bởi một đánh giá thực nghiệm Ví dụ, thử nghiệm đó giúp kiểm tra liệu code được thiết lập có hiệu quả hoặc trong trường hợp thuật toán gần đúng, thì mới có hiệu quả
Trang 32Thông thường, để đưa ra các kết quả đánh giá thực nghiệm đòi hỏi một phiên bản thiết kế và thực hiện nữa Vì vậy, như đã nêu trong DFG Priority Program 1307 [556]:
"Cốt lõi của Algorithm Engineering là một chu kỳ điều khiển bởi các giả
thuyết giả định." [Www.algorithm-engineering.de]
Thông thường, phân tích được coi là một phần của chu kỳ này, dẫn đến một chu kỳ mà trong đó bao gồm thiết kế, phân tích, thực hiện và đánh giá thử nghiệm các thuật toán thực tế Tuy nhiên, vì kết quả phân tích của thiết kế sẽ ngay lập tức đưa ra phản hồi cho các nhà thiết kế và không đi qua thực hiện và thử nghiệm đầu tiên, nó có vẻ thích hợp hơn khi để cho các giai đoạn phân tích là một phần của chu kỳ riêng cùng với các thiết kế thuật toán Như vậy, trong Hình 1.3, chu trình cốt lõi ở trung tâm chỉ bao gồm thiết kế, thực hiện và thử nghiệm
Algorithm Engineering luôn luôn được thúc đẩy bởi các ứng dụng thực tế
Kịch bản ứng dụng xác định các phần cứng mà phải được làm giống thực nhất
Trong giai đoạn đầu tiên của Algorithm Engineering, không chỉ là một mô hình
máy tính tốt đã được chọn, mà còn là vấn đề tự nó đã được mô hình hóa một cách thích hợp, mà thường là bị loại trừ từ thiết kế thuật toán Kết quả của một giai đoạn thử nghiệm có thể sau đó yêu cầu một phiên bản của giai đoạn mô hình, vì các mô hình được lựa chọn là không thích hợp Đôi khi việc phân tích các mô hình được lựa chọn đã có thể tiết lộ bất cập của nó Điều này tạo ra một chu kỳ khác bao gồm các ứng dụng, mô hình hóa và phân tích Các ứng dụng cũng cung cấp dữ liệu thực
tế để đánh giá thử nghiệm và đánh giá thực nghiệm có thể tiết lộ nhu cầu xem xét thêm một số khía cạnh khác cho loại dữ liệu cụ thể Các thành phần đáng tin cậy từ các thư viện phần mềm có thể dễ dàng hóa các nhiệm vụ Người ta cho rằng một chương trình thiết kế tốt nên được cung cấp trong một thư viện phần mềm để có thể tái sử dụng
Rõ ràng, đây là một sự phụ thuộc tuần hoàn trong Algorithm Engineering
Chúng ta dừng thảo luận với một trích dẫn từ DFG Priority Program 1307:
Trang 33"Mô hình thực tế cho cả máy tính và các ứng dụng, cũng như các thư viện thuật toán và các bộ sưu tập dữ liệu đầu vào thực tế cho phép tạo ra cầu nối chặt chẽ với các ứng dụng." [Www.algorithm-engineering.de]
2.4.1.5 Tình trạng của Kỹ nghệ thuật toán
Có rất nhiều hội nghị nói về kỹ nghệ thuật toán nhưng đa phần đều chỉ là một phần nội dung của hội nghị chứ không phải tất cả Hội nghị đầu tiên dành
riêng cho kỹ nghệ thuật toán là Workshop on Algorithm Engineering (WAE) được
tổ chức tại Venice (Italy) vào ngày 11 – 13, tháng 9 năm 1997 Đó là điểm khởi đầu của một loạt các hội nghị hàng năm Tại hội nghị WAE 5 ở Aarhus, Đan Mạch, 2001, WAE đã trở thành một trong những hội nghị hàng đầu Châu Âu về các thuật toán ESA Kể từ đó hội nghị WAE trở thành hội nghị kiểu mẫu được công nhận Sau WAE, một loạt hội nghị ALENEX (Algorithm Engineering and Experiments) được tổ chức và thành lập ALENEX diễn ra hàng năm và chia sẻ với SODA, ACM-SIAM Symposium on Discrete Algorithms về các thuật toán Discrete Một trong những hội nghị mới về kỹ nghệ thuật toán là SEA, hội nghị quốc tế về thực nghiệm thuật toán cho đến năm 2009 vẫn được biết đến là hội nghị WEA (Workshop on Experimental Algorithms)
Hình 2 1.Kỹ nghệ thuật toán
Trang 34Tạp chí chính thức cho lĩnh vực này là tạp chí ACM Journal of Experimental Algorithmics được xuất bản từ năm 1996 Tạp chí trở thành một kết nối cho các hoạt động nghiên cứu trong khi các tạp chí chuyên ngành khác như Journal of Graph Algorithms and Applications đề cập tới kinh nghiệm (hoạt ảnh, việc triển khai, số lần thử nghiệm) về các thuật toán trên đồ thị Vào năm 2009, tạp chí Mathematical Programming Computation được xuất bản dành cho việc nghiên cứu, tính toán các vấn đề về quy hoạch toán học theo nghĩa rộng
2.4.2 Nền tảng của kỹ nghệ thuật toán
2.4.2.1 Mô hình hóa các bài toán
Công việc truyền thống lý thuyết về thuật toán bắt đầu với một bài toán phát biểu như sau:
"Cho một tập hợp các điểm trong mặt phẳng ở vị trí tùy ý, tính toán một số cấu trúc X ", nơi cấu trúc X có thể là các bao lồi, Delaunay triangulation, cây tối thiểu Steiner, hoặc tương tự
Trước khi thiết kế thuật toán, một yêu cầu đặt ra là cần cẩn thận phân tích
và hình thức hóa của vấn đề là cần thiết Đối với các ứng dụng phức tạp, giai đoạn
mô hình này là một nhiệm vụ quan trọng và đòi hỏi cao Việc tìm kiếm hoặc lựa chọn một mô hình thích hợp có thể đảm bảo cho sự thành công của việc tiếp cận thuật toán Đôi khi ranh giới giữa thời gian đa thức và các vấn đề NP khó được ẩn trong một chi tiết nhỏ vẻ như vô hại Điều này ảnh hưởng rất nhiều đến các loại phương pháp tiếp cận thuật toán cần cân nhắc trong giai đoạn thiết kế
2.4.2.2 Thiết kế thuật toán
Sự phát triển của các thuật toán thường được dựa trên khái niệm trừu tượng
và đơn giản hóa giả định đối với các mô hình tính toán và tính chất cụ thể của đầu vào Để chắc chắn rằng một thuật toán thực hiện trong thực tế, cần đảm bảo thuật toán chứa các phần giá trị quan trọng Các phần bao gồm độ chắc chắn về trị số và các vấn đề không chắc chắn liên quan trong hình học tính toán
2.4.2.3 Phân tích
Trang 35Mục đích của việc phân tích thuật toán là để đánh giá các tài nguyên mà các thuật toán yêu cầu
Đáng tiếc, tất cả các kỹ thuật này luôn có nhược điểm Phân tích trường hợp xấu nhất thường là quá bi quan đối với các trường hợp xảy ra trong thực tế, trong khi phân tích trường hợp trung bình việc giả định một xác suất phân bố nhất định trên tập hợp các yếu tố đầu vào thường rất khó để lựa chọn trường hợp điển hình
mà nó phản ánh Kỹ nghệ thuật toán là quan tâm đến việc phân tích các thuật toán
để biết thêm mô hình đầu vào thực tế
Nếu chúng ta cho đầu vào bất kỳ, chúng ta phân tích chứng minh cho nhiều thuật toán trường hợp tồi tệ ít nhất Tuy nhiên, trong thực tế một số các thuật toán
có thể thực hiện khá tốt trong khi có khẳng định dự đoán của chúng ta khiêm tốn
Để thu hẹp khoảng cách giữa dự đoán lý thuyết và quan sát thực tế, cần nghiên cứu cấu trúc của các đầu vào kỹ lưỡng hơn
2.4.2.4 Mô hình máy tính thực tế
Các mô hình RAM đã rất thành công một mô hình máy tính trong lý thuyết thuật toán Nhiều phương pháp hiệu quả đã được thiết kế bằng cách sử dụng mô hình này Trong khi mô hình RAM là một khái niệm trừu tượng hợp lý của máy tính hiện tại nó không phải là một mô hình tốt cho các máy tính hiện đại nữa trong nhiều trường hợp Các mô hình RAM cơ bản là một máy xử lý duy nhất với bộ nhớ truy cập ngẫu nhiên không giới hạn với chi phí truy cập không đổi Máy tính hiện đại không có một loại bộ nhớ duy nhất với chi phí truy cập không đổi nữa, nhưng hệ thống phân cấp bộ nhớ với chi phí tiếp cận rất khác nhau
Ngày nay các bộ dữ liệu thường rất lớn mà chúng không phù hợp trong bộ nhớ chính của một máy tính Nghiên cứu thuật toán hiệu quả làm phát sinh mô hình mới cho thiết kế tốt hơn và dự đoán hiệu quả thực tế của các thuật toán khai thác bộ nhớ phân cấp hoặc làm việc với các bộ dữ liệu đòi hỏi phải sử dụng bộ nhớ bên ngoài Nhược điểm của RAM đối với kiến trúc máy tính hiện đại và mới tốt hơn, các mô hình máy tính thực tế hơn Đặc biệt, các chương trình bày các mô
Trang 36hình thuật toán bộ nhớ ngoài, I /O- efficiency, cấu trúc dữ liệu bộ nhớ ngoài, và các mô hình các thuật toán khai thác cache
Hơn nữa, kiến trúc máy tính hiện đại không phải là các máy xử lý đơn nữa Chúng ta cũng xem xét mô phỏng các thuật toán song song cho thiết kế bộ nhớ ngoài hiệu quả các thuật toán Các mô hình được trình bày tất cả các thiếu sót của
mô hình RAM và là địa chỉ tin cậy các mô hình thực tế hơn cho các máy tính hiện đại Tuy nhiên, các mô hình vẫn không cho phép dự đoán hoàn hảo của các hành
vi của các thuật toán được thiết kế cho những mô hình trong thực tế và do đó có thể không làm thí nghiệm không cần thiết
dự án do đó giảm bớt công việc thực hiện của bạn
Mặt khác, thiết kế và kỹ thuật để tạo một thư viện phần mềm tốt là mục tiêu chính của Algorithm Engineering Thư viện phần mềm có khả năng tăng cường chuyển giao công nghệ từ thuật toán cổ điển đến lập trình thực tế, cung cấp thông tin về thuật toán Kỹ nghệ thuật toán dành cho các thư viện phần mềm là khó khăn hơn vì bạn không phải là một nhà tiên nghiệm có thể tiên đoán được bối cảnh ứng dụng của phần mềm của bạn và do đó bạn không thể điều chỉnh theo hướng
Trang 37bối cảnh này Do đó, tính linh hoạt và khả năng thích ứng là mục tiêu thiết kế quan
trọng cho các thư viện phần mềm
Có nhiều thư viện phần mềm cho các cấp lập trình khác nhau, từ thư viện I/O thông qua các thư viện cung cấp các thuật toán cơ bản và cấu trúc dữ liệu để thư viện thuật toán cho các tác vụ riêng Các thư viện cấp thấp trước đây thường được vận chuyển với các trình biên dịch hoặc là một phần của nền tảng phát triển Thư viện cũng có những dạng khác nhau Đôi khi, các bộ sưu tập của các phần mềm dành cho các tác vụ có liên quan đã được gọi là một thư viện Do đó, một tập hợp lỏng lẻo của các chương trình khó sử dụng, không mạch lạc và khó có thể mở rộng
2.4.2.7 Thí nghiệm
Như chúng ta đã giải thích trước đây, các thí nghiệm có một vai trò quan trọng trong chu kỳ Algorithm Engineering Việc thiết kế và lập kế hoạch của các thí nghiệm sâu sắc, các hoạt động của thí nghiệm và đánh giá là những nhiệm vụ thử thách trong đó có chứa nhiều khó khăn không thể lường trước Jon Bentley đã chỉ ra tại một số lí do mà đôi khi thí nghiệm nhỏ có thể phát hiện ra những hiểu biết đáng ngạc nhiên Nói chung, thực nghiệm đòi hỏi một số kế hoạch cẩn thận và
hệ thống Bước đầu tiên là xác định các mục tiêu của một thử nghiệm để tìm ra những loại thử nghiệm là cần thiết, những gì để đo lường và những yếu tố nào sẽ được khám phá Bước tiếp theo là để chọn trường hợp thử nghiệm phù hợp Kể từ khi các kết quả được thử nghiệm trên dữ liệu đầu vào ngẫu nhiên thường rất ít liên quan thực sự cho ứng dụng một nhu cầu chuẩn các bộ thử nghiệm Như vậy, tạo ra
dữ liệu thử nghiệm và các thiết lập và duy trì kiểm tra các thư viện dữ liệu là rất quan trọng
Một quyết định quan trọng mặc dù thường bị bỏ qua khi tiến hành tất cả thí nghiệm Khoa học Máy tính là đảm bảo khả năng tái sử dụng Ít nhất điều này có nghĩa là tất cả các yếu tố đó có thể có ảnh hưởng trực tiếp hoặc gián tiếp vào việc tính toán và sử dụng điều khiển phiên bản để lưu trữ toàn bộ các môi trường tính toán (bao gồm không chỉ lập trình mã nguồn mà còn là trình biên dịch và các thư
Trang 38viện phần mềm bên ngoài) Các bước quan trọng cuối cùng trong quá trình thử nghiệm là để phân tích dữ liệu thu thập được, để rút ra kết luận bằng các phương pháp thống kê và báo cáo kết quả Ngược lại với các ngành khoa học tự nhiên và lĩnh vực tương tự như Toán học, Lập trình và hoạt động nghiên cứu, khoa học máy tính không có truyền thống lâu dài làm thí nghiệm Mặc dù ít tốn kém hơn nhiều so với trong khoa học tự nhiên, thực nghiệm là một quá trình rất tốn thời gian mà thường được đánh giá thấp
2.4.2.8 Kết quả báo cáo của Algorithm Engineering
Đến nay, đã có nhiều người nổi tiếng, các công ty cạnh tranh cao như Google Inc., Akamai Technologies, và Nhóm Celera Genomics có vị trí vững chắc của mình trên thị trường đến một mức độ rộng lớn cũng từ Algorithm Engineering
Một trong những ví dụ ấn tượng nhất đối với tiến bộ vững chắc trong năm
do Algorithm Engineering là phương pháp chương trình tuyến tính và các thuật toán đơn hình Chúng ta hãy xem lại ngắn gọn một số sự kiện quan trọng của khả năng để giải quyết Qui hoạch tuyến tính Năm 1949, khi George B Dantzig đã phát minh ra thuật toán đơn hình, phải mất 120 ngày công để tính toán bằng tay phương án tối ưu cho bài toán với 9 ràng buộc và 77 biến Năm 1952, người ta có thể giải quyết bài toán với 48 ràng buộc và 71 biến trong 18 giờ tại Cục Tiêu chuẩn Quốc gia Khoảng hai mươi năm sau, vào năm 1970, đã giải được bài toán qui hoạch tuyến tính với khoảng 4000 ràng buộc và 15.000 biến
Trang 39CHƯƠNG 3 CÁC CẤU TRÚC DỮ LIỆU VÀ
THUẬT TOÁN SSSP KINH ĐIỂN
3.1 Hàng đợi ưu tiên và các cấu trúc Đống
3.1.1 Hàng đợi ưu tiên (Priority queue)
Một kiểu dữ liệu trừu tượng nổi tiếng là hàng đợi ưu tiên Một hàng đợi ưu tiên lưu trữ cặp
, với là một phần tử và là các khóa kết hợp với Các hàng đợi ưu tiên trình bày trong luận văn này đều dựa trên những cây nhị phân được sắp thứ tự, đặc biệt tất cả chúng là đống min Tóm lại, đống là một cây có gốc, và tất cả các nút được lưu trữ theo thứ tự đống, khóa của một nút luôn nhỏ hơn hoặc bằng khóa của các nút con của nó Do đó, nút gốc luôn lưu giữ phần tử với khóa nhỏ nhất
Các hàm hoạt động phổ biến của một hàng đợi ưu tiên:
insert(e, k): Chèn phần tử e với khóa k vào hàng đợi
findMin: Trả về phần tử với khóa tối thiểu trong hàng đợi
deleteMin: Xóa và trả về phần tử với khóa tối thiểu trong hàng đợi
decreaseKey(e, Δ): Giảm khóa của phần tử bằng Để thực hiện có hiệu quả, một số hàng đợi cũng đòi hỏi một tham chiếu đến nút đang lưu trữ e trong hàng đợi
delete(e): Xóa phần tử khỏi hàng đợi Một lần nữa, để thực hiệu quả, một
số hàng đợi cũng đòi hỏi một tham chiếu đến nút đang lưu trữ e trong hàng đợi
meld(Q): Hợp nhất hàng đợi Q vào hàng đợi
Trong luận văn này, sẽ không cần xóa các phần tử tùy ý cũng không ghép
chung đống Do đó, sẽ không cần các phép toán delete và meld
Thời gian chạy của đống nhị phân cổ điển đơn giản [16], [12], Đống
Fibonacci [9] và Đống D được thể hiện trong Bảng 1, trong đó là số phần tử trong đống
Trang 40Operation Đống nhị phân Đống Fibonacci[9] Đống
Worst case Worst case Amortised Amortised Insert
Insert: Thêm phần tử x vào Đống nhị phân bằng cách thêm phần tử vào
nút mới ở cuối cây tính từ trái sang So sánh giá trị và hoán đổi vị trí của nó với nút cha mẹ cho đến khi Đống được sắp xếp theo đúng thứ tự
Tiến trình thực hiện qua hai bước:
1 Kiểm soát hình dạng của cây
2 Thiết lập lại trật tự sắp xếp của cây