Tải bản đầy đủ (.pdf) (115 trang)

Bài toán cây khung nhỏ nhất và các ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.73 MB, 115 trang )

MỤC LỤC
DANH MỤC BẢNG BIỂU .................................................................................................iii
Chương 1 ............................................................................................................................... 1
GIỚI THIỆU TỔNG QUAN ............................................................................................... 1
1.1 Lịch sử của bài toán cây khung nhỏ nhất ...................................................................... 1
1.2 Các ký hiệu toán học .................................................................................................... 2
1.3 Lý thuyết đồ thị ............................................................................................................ 3
1.4. Cây khung nhỏ nhất ..................................................................................................... 6
1.4.1 Một số tính chất ..................................................................................................... 6
1.4.2. Rừng trải rộng tối thiểu và những giả định đồ thị ................................................. 8
1.4.3 Thời gian tính ........................................................................................................ 9
1.5. Các ứng dụng của bài toán MST ................................................................................ 10
1.5.1. Truyền hình cáp .................................................................................................. 11
1.5.2 Thiết kế mạch điện tử .......................................................................................... 11
1.5.4 Clustering biểu hiện dữ liệu gen (Thuật phân nhóm dữ liệu biểu hiện gen) ......... 11
1.5.5 Xấp xỉ dựa trên MST ........................................................................................... 12
1.6. Kỹ nghệ thuật toán (Algorithm Engineering)............................................................. 13
1.6.1 Giới thiệu ............................................................................................................. 13
1.6.2 Nền tảng của kỹ nghệ thuật toán .......................................................................... 22
1.7. Mục tiêu và kết quả của Luận văn ............................................................................. 26
Chương 2 ............................................................................................................................. 28
CẤU TRÚC DỮ LIỆU VÀ CÁC THUẬT TOÁN GIẢI BÀI TOÁN MST.................... 28
2.1. Khối xây dựng cơ bản ................................................................................................ 28
2.1.1. Hàng đợi ưu tiên ................................................................................................. 28
2.1.2 Kết nối đồ thị và sơ đồ tổng quát của các thuật toán MST ................................... 29
2.1.3 Thuật toán Kruskal .............................................................................................. 34
2.1.4. Thuật toán Boruvka ............................................................................................ 35
2.1.5 Thuật toán Dijkstra-Jarn'ık-Prim (DJP)................................................................ 37
2.2. Khối xây dựng nâng cao ............................................................................................ 40
2.2.1. Thuật toán "Trường hợp đồ thị dày" ................................................................... 40
2.2.2. Cây quyết định MST........................................................................................... 46


2.2.3. Đống mềm .......................................................................................................... 55
Chương 3 ............................................................................................................................. 73
THUẬT TOÁN MST TỐI ƯU .......................................................................................... 73

i


3.1. Biểu diễn đồ thị ......................................................................................................... 73
3.2. Bổ đề chính và thủ tục ............................................................................................... 75
3.2.1 Bổ đề chính. ......................................................................................................... 75
3.2.2 Phương pháp phân vùng. ..................................................................................... 76
3.2.3 Thời gian tính phân vùng và thực hiện. ................................................................ 78
3.3. Thuật toán MST tối ưu .............................................................................................. 81
3.3.1 Thuật toán. ........................................................................................................... 81
3.3.2 Thời gian thực hiện. ............................................................................................. 85
3.3.3 Phân tích cây quyết định. ..................................................................................... 87
3.3.4 Kết luận thời gian tính. ........................................................................................ 89
3.4 Thực hiện.................................................................................................................... 90
3.4.1 Thực hiện chi tiết ................................................................................................. 90
3.4.2 Thông tin thực tiễn............................................................................................... 91
Chương 4 ............................................................................................................................. 92
THỰC NGHIỆM ................................................................................................................ 92
4.1. Mục đích thực nghiệm và các thuật toán được lựa chọn để thực nghiệm ................... 92
4.1.1. Mục đích ............................................................................................................. 92
4.1.2. Các thuật toán ..................................................................................................... 92
4.2. Môi trường và dữ liệu thực nghiệm ........................................................................... 93
4.2.1. Bộ dữ liệu thực nghiệm....................................................................................... 93
4.2.2. Môi trường thực nghiệm ..................................................................................... 95
4.3. Mô tả cài đặt các thuật toán ....................................................................................... 95
4.4. Kết quả thực nghiệm ................................................................................................. 96

4.5.Phân tích kết quả thực nghiệm MST ........................................................................... 98
Tài liệu tham khảo .............................................................................................................. 99
Phụ lục .............................................................................................................................. 100

ii


DANH MỤC BẢNG BIỂU
Bảng 1.1: Thời gian chạy trường hợp tồi nhất các thuật toán MST, sắp xếp theo năm. ................ 10
Bảng 2.1 Thời gian thực hiện của đống nhị phân, đống Fibonaccis, và Đống mềm. .................... 29
Bảng 2.2: Giá trị của

............................................................................................ 54

Bảng 4.1: Các thuật toán được lựa chọn thực nghiệm .......................................................... 92
với mật độ đồ thị

Bảng 4.2 Giá trị của

....................................................... 93

với mật độ đồ thị

Bảng 4.3 : Giá trị của

............................................... 93

Bảng 4.4: Giá trị

với mật độ đồ thị


........................................................ 94

Bảng 4.5 Giá trị

với mật độ đồ thị

............................................................. 94

Bảng 4.6 Giá trị của

với mật độ đồ thị

............................................ 94

Bảng 4.7 Giá trị của

với mật độ đồ thị

...................................... 94

Bảng 4.8 Giá trị của

với mật độ đồ thị

..................................................... 94

Bảng C.1: Thể hiện giá trị của ,
của đơn đồ thị có


đỉnh,

cạnh với mật độ đồ thị

Bảng C.2: Thể hiện giá trị của ,
của đơn đồ thị có

đỉnh,

đỉnh,

đơn đồ thị có

đỉnh

đơn đồ thị có

đỉnh

đỉnh
đỉnh,

và thời gian chạy t(ms) của các thuật toán tìm MST của

và thời gian chạy t(ms) của các thuật toán tìm MST của

cạnh với mật độ đồ thị

Bảng C.7: Thể hiện giá trị của
đơn đồ thị có


................................. 107

cạnh với mật độ đồ thị ................................................................. 108

Bảng C.6: Thể hiện giá trị của
đơn đồ thị có

.......................................... 106

và thời gian chạy t(ms) của các thuật toán tìm MST của

cạnh với mật độ đồ thị

Bảng C.5: Thể hiện giá trị của

............................... 105

và thời gian chạy t(ms) của các thuật toán tìm MST của

cạnh với mật độ đồ thị

Bảng C.4: Thể hiện giá trị của

...................................... 104

và thời gian chạy t(ms) của các thuật toán tìm MST

cạnh với mật độ đồ thị


Bảng C.3: Thể hiện giá trị của
đơn đồ thị có

và thời gian chạy t(ms) của các thuật toán tìm MST

............................................. 109

và thời gian chạy t(ms) của các thuật toán tìm MST của

cạnh với mật độ đồ thị

iii

. ........................................... 110


Hình 1.1: Đơn đồ thị liên thông

với



..................................................... 4

Hình 1.2: Các thuộc tính chu kỳ và các thuộc tính cắt cắt. .................................................... 7
Hình 1.3. Kỹ nghệ thuật toán ............................................................................................... 21
Hình 2.1: Một đồ thị với

đỉnh xác định bởi ((1, 2), (1, 3), (2, 3)) và cây quyết định tối


ưu nối cứng của nó. .............................................................................................................. 49
Hình 2.2: Cấu trúc dữ liệu Đống mềm với ba hàng đợi mềm ............................................... 58
Hình B.1: Ví dụ về chọn lọc, bắt đầu từ một sự lặp lại liên kết lại. ..................................... 100
Hình B.2.1: Đồ thị đầu vào .Hình B.2.2: Sau khi phân vùng............................................ 102
Hình B.2.3: Sau cây quyết định. Hình B.2.4: Đồ thị kết nối Ga. ...................................... 103
Hình B.2.5: Sau DenseCase. Hình B.2.6: Cạnh ứng viên Gb. ........................................... 103
Hình B.2.7: cạnh MST T'được tìm thấy bởi Boruvka2. ...................................................... 104
Hình C.1: Đồ thị thể hiện thời gian chạy t của các thuật toán trên đồ thị ngẫu nhiên với mật
độ đồ thị

(trục Ox biểu diễn

, Oy biểu diễn 𝑡 𝑠 ) ......................................... 105

Hình C.2: Đồ thị thể hiện thời gian chạy t của các thuật toán trên đồ thị ngẫu nhiên với mật độ
đồ thị

(trục Ox biểu diễn m, Oy biểu diễn t(s)) ........................................... 106

Hình C.3: Đồ thị thể hiện thời gian chạy t của các thuật toán trên đồ thị ngẫu nhiên với mật
độ đồ thị

(trục Ox biểu diễn

, Oy biểu diễn 𝑡 𝑠 ) ....................................... 107

Hình C.4: Đồ thị thể hiện thời gian chạy t của các thuật toán trên đồ thị ngẫu ................. 108
nhiên với mật độ đồ thị

(trục Ox biểu diễn


, Oy biểu diễn 𝑡 𝑠 ) ................... 108

Hình C.5: Đồ thị thể hiện thời gian chạy t của các thuật toán trên đồ thị ngẫu nhiên với mật
độ đồ thị

𝑥

(trục Ox biểu diễn

,Oy biểu diễn 𝑡 𝑠 )............................. 109

Hình C.6: Đồ thị thể hiện thời gian chạy t của các thuật toán trên đồ thị ngẫu nhiên với mật
độ đồ thị

𝑥

(trục Ox biểu diễn

,Oy biểu diễn 𝑡) ............................ 110

Hình C.7: Đồ thị thể hiện thời gian chạy t(ms) của các thuật toán trên đồ thị ngẫu nhiên với
mật độ đồ thị

𝑥 (trục Ox biểu diễn

iv

, Oy biểu diễn 𝑡) ................................... 111



Chương 1
GIỚI THIỆU TỔNG QUAN
1.1 Lịch sử của bài toán cây khung nhỏ nhất
Cho G = (V, E) (V là tập đỉnh, E là tập cạnh) là đồ thị vô hướng liên thông có
trọng số trên cạnh 𝑤

. Giả sử T là một cây khung của G, ta gọi trọng số của

cây T là tổng trọng số các cạnh trong T. Bài toán đặt ra là trong số các cây khung
của G, hãy tìm cây khung có trọng số nhỏ nhất. Cây khung như vậy được gọi là cây
khung nhỏ nhất của đồ thị (minimum spanning tree) và bài toán đặt ra được gọi là bài
toán cây khung nhỏ nhất.
Năm 1926, nhà toán học người Séc Otakar Boruvka mô tả một thuật toán giải
"một số bài toán cực tiểu hoá" [4]. Ông đã đề xuất các thuật toán để tối ưu hoá mạng
lưới điện. Vào thời Boruvka chưa có các khái niệm về đồ thị và cây khung tối thiểu.
Thuật toán của ông là thuật toán giải bài toán cây khung nhỏ nhất được biết đến sớm
nhất. Ngày nay thuật toán này được gọi là thuật toán của Boruvka. Trong luận văn,
cây khung nhỏ nhất được gọi tắt là "MST".
Năm 1930, một thuật toán MST khác được phát hiện bởi nhà toán học Séc
Jarn'ık [9]. Thuật toán này được đề xuất độc lập bởi nhà toán học và khoa học máy
tính người Mỹ Prim vào năm 1957, và sau đó tái khám phá bởi các nhà khoa học máy
tính Hà Lan Dijkstra trong năm 1959. Do đó, thuật toán đôi khi được gọi là thuật toán
của Prim, thuật toán của Jarn'ık, thuật toán Prim-Jarn'ık hoặc thuật toán DJP. Trong
luận văn này, chúng tôi gọi thuật toán này là thuật toán DJP.
Thuật toán Kruskal là một thuật toán trong lý thuyết đồ thị để tìm cây bao
trùm tối thiểu của một đồ thị liên thông có trọng số. Nói cách khác, nó tìm một tập
hợp các cạnh tạo thành một cây chứa tất cả các đỉnh của đồ thị và có tổng trọng số
các cạnh là nhỏ nhất. Thuật toán Kruskal là một ví dụ của thuật toán tham lam. Thuật
toán này xuất bản lần đầu tiên năm 1956, bởi Joseph Kruskal

Nhiều thuật toán MST hiện đại sử dụng các ý tưởng từ thuật toán Boruvka và
DJP. Cụ thể là các thuật toán MST tối ưu được nghiên cứu trong luận văn này sử

1


dụng rất nhiều ý tưởng từ cả hai thuật toán. Kể từ khi phát minh ra các thuật toán, các
bài toán MST đã được nghiên cứu rất nhiều, nhưng chưa ai tìm ra được cận dưới
chính xác cho độ phức tạp thời gian của bài toán MST. Thuật toán MST tối ưu nghiên
cứu trong luận văn này được thiết kế bởi Pettie và Ramachandran [13] vào năm 2002.
Các tác giả đã chứng minh rằng các thuật toán chạy trong thời gian tối ưu, nhưng
không thể đưa ra một cận dưới chính xác thấp hơn. Thuật toán này sẽ được trình bày
ở chương 3.
Phần tiếp theo của chương này sẽ trình bày phát biểu bài toán cây khung nhỏ
nhất, tổng quan về các thuật toán MST quan trọng. Trước hết chúng ta sẽ đưa ra các
ký hiệu toán học được sử dụng trong luận văn, cũng như một số kiến thức cơ bản của
lý thuyết đồ thị.
1.2 Các ký hiệu toán học
Trong luận văn, ta sẽ sử dụng ký hiệu log =
, ký hiệu

Với số nguyên

Ví dụ:

, đó là logarithm với cơ số 2.

được định nghĩa quy nạp như sau:

=


.

logloglog .
Ký hiệu

được định nghĩa là

{|

, nghĩa là, số lần

các hàm logarithm phải được áp dụng cho đến khi thu được kết quả là
này tăng rất chậm, và

. Hàm số

là nhỏ hơn 6 cho tất cả các giá trị "thực" của .

Giai thừa của một số nguyên dương n, kí hiệu là n!, được định nghĩa là

Hàm n! có thể định nghĩa đệ qui bởi:
. Đối với số nguyên không âm



nghĩa đệ quy như sau:

2


và !=( −1) . Dễ dàng thấy là
hàm Ackermann 𝐴( , ) được định


{𝐴
𝐴(

𝐴

)

𝐴

Một tính chất quan trọng của 𝐴

là giá trị của nó tăng rất nhanh. Gọi

𝐴′( ) = 𝐴( , ). Khi đó 𝐴′ tăng rất nhanh, ngược lại hàm nghịch đảo của nó 𝐴

tăng

rất chậm. Hàm nghịch đảo của hàm Ackermann được ký hiệu là 𝛼. Hàm 𝛼( ) là nhỏ
hơn 5 cho tất cả giá trị "thực" của . Hàm nghịch đảo Ackermann hai tham số được
định nghĩa bởi 𝛼( , ) = min{ ≥1| 𝐴( ,[ / ]) ≥ log }. Chú ý là hàm 𝛼 tăng rất
chậm. Đối với số nguyên

≥1, hàm 𝛽( , ) được định nghĩa là 𝛽

≥ 0 và


{ |

, nghĩa là 𝛽( , ) là số lần các hàm logarithm được áp

dụng đối với

để thu được kết quả là ≤

/ .

1.3 Lý thuyết đồ thị
Đồ thị vô hướng G là một kiểu dữ liệu trừu tượng được xác định bởi
, trong đó

là một tập đỉnh và

thứ tự. Ta sẽ ký hiệu
{

là một tập cạnh, đó là các cặp đỉnh không có

=| |, và tập đỉnh

=| | và

. Lớp các đồ thị với

Để chỉ ra tập đỉnh của đồ thị
. Một cạnh


hiệu bởi

đỉnh và

ta dùng kí hiệu bởi

{𝑣 𝑣

𝑣 , tập cạnh

cạnh được ký hiệu là

.

, và tập cạnh của nó được kí

nối hai đỉnh 𝑣 và 𝑣 , và được ký hiệu 𝑣 𝑣 . Theo

định nghĩa của một đồ thị vô hướng, một cạnh là một cặp không có thứ tự gồm hai
đỉnh, vì vậy 𝑣
dương 𝑤
thì

𝑣

𝑣 𝑣 . Mỗi cạnh

của đồ thị sẽ được gán một trọng số

có thể hiểu đó là chi phí của "sử dụng" cạnh. Nếu 𝑤

được coi là nhẹ hơn

,

nặng hơn

𝑤

với

. Để đơn giản, tất cả các ví dụ đồ thị

trong luận văn này sẽ có trọng số cạnh tương ứng với khoảng cách Euclide giữa các
điểm cuối. Điều này là một giả định phổ biến trong các ví dụ thực tế, chẳng hạn như
mạng lưới đường bộ và mạng lưới điện hoặc dây dữ liệu. Bậc của một đỉnh v, ký hiệu
bởi

𝑣 là số cạnh kề với nó (nhận nó là đầu mút). Một đường đi trong đồ thị là

một dãy các đỉnh và cạnh xen kẽ bắt đầu từ một đỉnh và kết thúc tại một đỉnh. Như

3


vậy, mỗi cạnh trên đường đi sẽ kết nối giữa một đỉnh với một đỉnh đi sau nó. Như vậy
đường đi có thể mô tả bởi dãy: 𝑣

𝑣

𝑣


𝑣

𝑣 𝑣

𝑣

𝑣

.

Ta gọi chu trình là một đường đi không chứa cạnh lặp lại khởi đầu và kết thúc
tại cùng một đỉnh, nghĩa là 𝑣

𝑣

. Một đường đi được gọi là đường đi đơn

nếu các đỉnh trên nó là phân biệt. Tương tự như vậy, một chu trình đơn là một chu
trình mà các đỉnh trên nó là phân biệt, ngoại trừ đỉnh bắt đầu và kết thúc.

với 𝒏

Hình 1.1: Đơn đồ thị liên thông

và 𝒎
{𝑣 ,..., 𝑣 } và

Ví dụ: Hình 1.1 cho một ví dụ về đồ thị G = (V, E) với
{ 𝑣 𝑣


𝑣 𝑣

𝑣 𝑣

bởi đoạn tô đậm) 𝑣

𝑣 𝑣

𝑣

đơn.

cạnh

trên

Dãy

chấm) 𝑣

(các
𝑣 𝑣

𝑣

𝑣 𝑣

𝑣 𝑣
𝑣 𝑣


𝑣

. Dãy (các cạnh trên đường đi thể hiện
𝑣

𝑣 𝑣

đường
𝑣 𝑣

đi
𝑣

thể
𝑣 𝑣

𝑣

cho ta ví dụ một đường đi
hiện

bởi

đoạn

gạch

𝑣 cho ta ví dụ về một chu


trình đơn.
Một đồ thị được gọi liên thông nếu luôn tìm được đường đi giữa hai đỉnh bất
kỳ. Ta gọi khuyên là một cạnh nối một đỉnh với chính nó, tức là cạnh có dạng
𝑣 𝑣 . Cạnh như vậy sẽ được tính hai lần trong


𝑣 . Hai cạnh khác nhau,

là cạnh song song (hay cạnh lặp) nếu chúng cùng nối một cặp đỉnh. Một đồ thị

có chứa cạnh lặp được gọi là đa đồ thị. Một đồ thị có chứa cạnh lặp và khuyên được
gọi là giả đồ thị. Ta gọi đơn đồ thị là đồ thị vô hướng không có khuyên và không có

4


các cạnh lặp. Từ định nghĩa, tập cạnh

của đơn đồ thị là một tập các bộ không có thứ

tự gồm hai đỉnh. Bậc lớn nhất của một đỉnh trong một đơn đồ thị là

, và bậc của

một đỉnh là số đỉnh lân cận với nó. Đồ thị trong hình 1.1 là một đơn đồ thị liên
thông. Nếu đồ thị là không liên thông, đồ thị con liên thông cực đại của nó được gọi
là thành phần được liên thông.
Có thể chứng minh được rằng số lượng cạnh trong một đơn đồ thị liên thông
luôn lớn hơn hoặc bằng n-1. Vì vậy, cây là đồ thị liên thông có ít cạnh nhất. Ta gọi
rừng là đồ thị mà mỗi thành phần liên thông là một cây.

Một trường hợp đặc biệt của một đơn đồ thị liên thông là đồ thị đầy đủ. Đồ thị
đầy đủ là đồ thị có tất cả các cạnh có thể. Tổng số cạnh của đồ thị đầy đủ là
=

2

2

, nghĩa là số cạnh của đồ thị đầy đủ là

. Đồ thị đầy đủ với

đỉnh được ký hiệu Kn.
Trong suốt luận văn này, chúng ta sẽ định nghĩa mật độ của một đồ thị là tỷ lệ
giữa số cạnh và số đỉnh, đó là bằng m/n. Số cạnh m trong một đơn đồ thị liên thông n
đỉnh thoả mãn bất đẳng thức:
khoảng



. Như vậy m nằm trong

. Một đồ thị được gọi là đồ thị thưa nếu

tự, đồ thị dày là đồ thị có

là nhỏ. Tương

là lớn. Quan niệm “nhỏ”/”lớn” sẽ được nêu rõ trong


phạm vi ứng dụng cụ thể. Một trường hợp đồ thị thưa đặc biệt là đồ thị phẳng. Đồ thị
phẳng là đồ thị có thể vẽ trong mặt phẳng sao cho hai cạnh bất kỳ là không giao nhau,
ngoại trừ tại đỉnh. Ta có
Định lý 1.3: Đồ thị phẳng đơn liên thông với

đỉnh có

≤ 3 −6 cạnh.

Do đó, đối với một đồ thị phẳng, mật độ được giới hạn bởi một hằng số, ta có
= ( ). Do ta có cận dưới cho số lượng cạnh của đơn đồ thị liên thông là

,

nên kích thước đầu vào của bất kỳ đơn đồ thị liên thông với

cạnh là

. Do đó,

thời gian cần thiết để xây dựng một đơn đồ thị liên thông với

cạnh là

.

5


1.4. Cây khung nhỏ nhất

Định nghĩa: Cho G là một đồ thị liên thông. Một cây khung của G là một cây
chứa tất cả các đỉnh với tập cạnh là tập con của tập cạnh của G. Nói cách khác cây
khung là một cây bao trùm tất cả các đỉnh trong G.
Định nghĩa: Cho T là một cây khung của một đồ thị liên thông có trọng số.
Trọng lượng của T được xác định bằng tổng trọng số của các cạnh trong T:

Định nghĩa: Cho G là một đồ thị liên thông có trọng số. Cây khung nhỏ nhất
(MST) của G là cây khung của G với trọng số là nhỏ nhất.
Rõ ràng là từ định nghĩa, MST là một lời giải cho các bài toán trong đó đòi hỏi
phải so sánh các trọng số cạnh. Nếu đồ thị có trọng số các cạnh là bằng nhau thì mọi
cây khung của nó đều là MST. Ví dụ này cho thấy đồ thị có thể có nhiều cây khung
nhỏ nhất. Tuy nhiên, trong phần tiếp theo ta sẽ thấy là nếu một đồ thị có trọng số các
cạnh là phân biệt (tức là không có hai cạnh nào có cùng trọng số), thì cây khung nhỏ
nhất của nó là duy nhất.
1.4.1 Một số tính chất
Thuộc tính chu trình
Định lý 1.4.1: Đối với mỗi chu trình đơn của đồ thị liên thông có trọng số
với trọng lượng cạnh phân biệt, cạnh nặng nhất trong chu trình không thuộc bất cứ
một MST nào của .
Chứng minh: Xem Hình 1.2a. Giả sử ngược lại, tức là cạnh nặng nhất e
thuộc
một MST. Xóa
của

từ một MST sẽ chia thành hai cây con tách rời với hai điểm cuối

trong cây con khác nhau. Có tồn tại một số cạnh

đầu cuối trong hai cây con khác nhau. Bởi vì 𝑤


6

trong chu trình với các
𝑤

, kết nối hai cây con lại


sẽ sinh ra một cây khung có trọng lượng nhỏ hơn. Do đó

bằng

không thuộc về

một MST.

(a) Các thuộc tính chu kỳ. Các cạnh đậm là

(b) Các thuộc tính cắt. Chỉ có các cạnh trong

MST. Các đường đứt minh họa của tách cây

cắt

được hiển thị.

Hình 1.2: Các thuộc tính chu kỳ và các thuộc tính cắt cắt.
Thuộc tính cắt
Định nghĩa: Cho


là tập đỉnh của một đồ thị ,|

|

. Cho

là hai tập con khác rỗng tạo thành phân hoạch của tập đỉnh






là tập các cạnh với có một đầu mút thuộc
𝑡

. Giả sử

còn đầu mút kia thuộc

. Khi đó

tạo thành một lát cắt trong đồ thị .
Định lý 1.4.2: Giả sử C là một lát cắt trong một đồ thị liên thông có trọng

số

với trọng lượng cạnh phân biệt, cạnh nhẹ nhất trong

phải thuộc một MST


của .
Chứng minh: Xem Hình 1.2b. Giả sử 𝑢 và 𝑣 biểu thị đỉnh điểm cuối của cạnh
nhẹ . Nếu

là cạnh duy nhất trong

trên đường đơn bất kỳ giữa 𝑢 và 𝑣, do đó

chứng minh là hiển nhiên bởi vì tất cả các đỉnh trong
MST. Ngược lại, giả sử ngược lại, tức là nhẹ nhất cạnh
Nó là rõ ràng có một số cạnh, , trong

phải được kết nối trong một
không thuộc về một MST.

trên đường giữa 𝑢 và 𝑣 trong MST giả định,

7


ngược lại thì hai đỉnh sẽ không được kết nối trong MST. Do 𝑤
bởi

𝑤

, thay thế

sẽ tạo ra một cây khung có trọng lượng nhỏ hơn. Do đó thuộc về một MST.
Sử dụng hai thuộc tính trên có thể chứng mình các kết quả sau:

Định lý 1.4.3: Cho

khác biệt, cho
, vậy thì

là một đồ thị liên thông có trọng số với trọng số cạnh

là một MST của

, và cho

là một cạnh bất kỳ trong

là cạnh nhẹ ở một lát cắt trong . Nếu

, vậy thì

Nếu

là cạnh nặng

nhất trong một chu trình của .
Tính duy nhất
Định lý 1.4.4: Một đồ thị liên thông có trọng số với trọng lượng số cạnh phân
biệt có một MST duy nhất.
Trong luận văn này, chúng tôi sẽ giả định rằng tất cả các đồ thị có trọng số
cạnh khác biệt. Như vậy, tất cả các đồ thị xét trong luận văn sẽ có MST duy nhất.
1.4.2. Rừng trải rộng tối thiểu và những giả định đồ thị
Chúng tôi đã xác định các bài toán MST cho các đồ thị liên thông. Thành phần
liên thông có ý nghĩa, vì theo định nghĩa của một cây, không tồn tại cây khung cho

các đồ thị không liên thông.
Một rừng khung được xác định bởi sự kết hợp của cây khung cho mỗi thành
phần liên thông trong một đồ thị. Tương tự, rừng khung tối thiểu (MSF) được xác
định như rừng khung với trọng số tối thiểu. Do đó, bài toán MSF là một sự tổng quát
của bài toán MST, và có thể được giải quyết bằng cách giải quyết các bài toán MST
cho từng thành phần liên thông trong đồ thị. Dễ dàng xác định các thành phần liên
thông của đồ thị trong thời gian tuyến tính nhờ sử dụng tìm kiếm theo chiều sâu
(DFS), và sau đó giải quyết các bài toán MST cho mỗi thành phần được liên thông.
Bài toán MST như là một chuyển hóa của bài toán MSF, chúng tôi sẽ đề cập
đến hai thuật ngữ thay thế cho nhau khi sự khác biệt là không đáng kể.

8


Đối với đồ thị đầu vào bất kỳ, nếu nó không phải là đơn đồ thị, chúng ta có
thể thực hiện một bước tính toán trước để loại bỏ các cạnh lặp và các khuyên. Bước
tính toán trước đó có thể được thực hiện trong thời gian tuyến tính bằng việc thực
hiện

𝑡𝑟

𝑡

được xây dựng dựa trên DFS.

Trong luận văn này, chúng tôi giả định là tất cả các đơn đồ thị và liên thông.
1.4.3 Thời gian tính
Trong phần này, chúng tôi sẽ trình bày thời gian chạy của các thuật toán MST
trong luận văn này, cũng như một số thuật toán quan trọng khác .
Các thuật toán MST nhận đầu vào đồ thị




đỉnh và

cạnh. Một hàm mô

tả chính xác độ phức tạp của bài toán MST cho đồ thị nói chung là chưa được xác
định cho đến thời điểm hiện tại. Luận văn sẽ cho thấy tồn tại một thuật toán chạy theo
thứ tự thời gian tối ưu của sự so sánh tổng số các trọng lượng cạnh, mặc dù các hàm
cho "tối ưu" là không rõ.
Dễ dàng chứng minh rằng đối với mọi ,

>2, luôn có thể xây dựng một đơn

đồ thị mà mỗi cạnh thuộc ít nhất một chu trình đơn. Do đó, để giải quyết các bài toán
MST, mỗi trọng số cạnh phải được xử lý ít nhất một lần, suy ra cận dưới cho độ phức
tạp của bài toán MST là Ω( ). Cận dưới tốt nhất hiện nay là

( ·𝛼 ( , )) của

Chazelle[5]. Ở đây, 𝛼( , ) là nghịch đảo của hàm Ackermann tăng rất chậm, một
cách phát biểu nôm na là độ phức tạp của bài toán MST "gần như tuyến tính" với kích
thước đồ thị. Năm 1995, Karger et al. [10] trình bày một thuật toán MST ngẫu nhiên
với thời gian kỳ vọng là ( ). Thuật toán này hoạt động theo giả định rằng chúng ta
có quyền truy cập vào vô số bit thực sự ngẫu nhiên. Tuy nhiên, luận văn này sẽ chỉ
tập trung về trường hợp xấu nhất thời gian chạy cho các thuật toán tất định giải bài
toán MST.
Hàm


biểu thị tối thiểu (tối ưu) so sánh số trọng số cạnh cần thiết để

tìm MST của đồ thị bất kỳ với n đỉnh và m cạnh. Hàm

biểu thị tối thiểu (tối

ưu) số so sánh trọng số cạnh cần thiết để tìm MST của đồ thị G riêng biệt. Bảng 1.1.1

9


cho thấy thời gian chạy các thuật toán xác định MST khác nhau (và cây quyết định tối
ưu) với mật độ đồ thị khác nhau.
Lưu ý, các giới hạn thưa - dày là duy nhất cho mỗi thuật toán. Các thuật toán
được đề cập trong Luận văn này được viết với chữ đậm. Thuật toán được gọi là "tối
ưu" là thuật toán MST tối ưu của Pettie và Ramachandran [13], mà chúng tôi sẽ phân
tích trong luận văn này.
Bảng 1.1.1 cho thấy rằng thuật toán MST tồn tại với thời gian hoạt động tuyến
tính cho mật độ nhất định. Nhưng đối với các lớp trung gian của đồ thị "thưa", chưa
có thuật toán MST với thời gian chạy tuyến tính. Tuy nhiên, như đã nói ở trên, luận
văn này sẽ trình bày một thuật toán mà chạy theo thứ tự "tối ưu" thời gian cho tất cả
các mật độ.
Thời gian chạy

Thuật toán

Đồ thị phẳng

Boruvka [4], 1926
DJP [9],[8], 1930

Kruskal, 1956
Kruskal, edges sorted by weight
Yao, 1974
Dense Case [8], 1987
Boruvka + DJP
Chazelle [5], 2000
Precomputed optimal decision tree for G
Optimal [13], 2002

Đồ thị thưa

Đồ thị dày

𝛼

𝛼

Bảng 1.1: Thời gian chạy trường hợp tồi nhất các thuật toán MST, sắp xếp theo năm.
1.5. Các ứng dụng của bài toán MST
Cây bao trùm tối thiểu là hữu ích trong việc xây dựng lưới mạng, bằng cách
mô tả cách để kết nối một tập hợp các địa điểm bằng cách sử dụng tổng số chí phí của
dây nhỏ nhất. Phần lớn các công việc trên cây bao trùm tối thiểu đã được tiến hành
nghiên cứu và ứng dụng bởi các công ty truyền thông.

10


1.5.1. Truyền hình cáp
Một ví dụ là một công ty truyền hình cáp đặt cáp đến một khu phố mới. Nếu
nó là hạn chế để chôn cáp chỉ theo những con đường nhất định, do đó sẽ có một đồ

thị đại diện những điểm đó được nối với nhau bằng những con đường. Một trong số
những con đường có thể tốn kém hơn, bởi vì nó là dài hơn, hoặc yêu cầu các cáp
được chôn sâu hơn. Một cây bao trùm cho đồ thị đó sẽ là một tập hợp con của những
con đường mà không có chu kỳ nhưng vẫn kết nối đến từng nhà. Có thể có một vài
cây khung có thể tồn tại. Một cây bao trùm tối thiểu sẽ phải ràng buộc với tổng chi
phí thấp nhất.
1.5.2 Thiết kế mạch điện tử
Trong thiết kế mạch điện tử, nó thường là cần thiết để nối dây một số chân lại
với nhau để làm cho nó có điện tương đương. Một cây bao trùm tối thiểu cần chi phí
ít nhất của dây để kết nối một tập hợp điểm.
1.5.3 Quần đảo kết nối

Giả sử chúng ta có một nhóm các hòn đảo mà chúng ta muốn liên kết với cây
cầu để nó có thể đi du lịch từ một hòn đảo bất kỳ khác trong nhóm. Giả sử thêm rằng
chính phủ muốn chi tiêu số tiền tối thiểu về dự án này. Các kỹ sư có thể tính toán chi
phí cho một liên kết cầu mỗi cặp có thể có của hòn đảo. Tập hợp các cây cầu đó sẽ
giúp ta đi du lịch từ hòn đảo bất kỳ đến tất cả các đảo khác với chi phí tối thiểu cho
chính phủ là cây bao trùm tối thiểu.
1.5.4 Clustering biểu hiện dữ liệu gen (Thuật phân nhóm dữ liệu biểu hiện gen)
Cây bao trùm tối thiểu cũng cung cấp một phương pháp hợp lý để nhóm các
điểm trong không gian thành các nhóm tự nhiên. Ví dụ, Ying Xu và cộng sự [19] mô
tả một kết cấu mới biểu diễn cho một tập hợp các dữ liệu biểu hiện gene đa chiều như
một cây bao trùm tối thiểu. Một thuộc tính quan trọng của biểu diễn này là mỗi cụm
dữ liệu biểu hiện gen tương ứng với một cây con của MST, trong đó một cách chuyển
đổi chặt chẽ một bài toán phân nhóm đa chiều với một bài toán phân vùng cây. Họ đã

11


chứng minh rằng, mặc dù mối quan hệ giữa các dữ liệu là rất đơn giản trong các biểu

diễn MST, không có thông tin quan trọng bị mất cho các kết quả của phân nhóm. Họ
nhận thấy rằng có hai lợi thế quan trọng trong việc biểu diễn cho một tập hợp các dữ
liệu đa chiều như một MST. Một cấu trúc đơn giản của một cây thuận tiện cho việc
thực hiện hiệu quả chính xác của thuật toán phân cụm. Mặt khác là nó có thể vượt
qua nhiều bài toán phải đối mặt bởi các thuật toán phân nhóm cổ điển từ một phân
nhóm dựa trên MST không phụ thuộc vào hình dạng hình học chi tiết của một cụm.
Một công cụ mới được gọi là phần mềm EXCAVATOR, viết tắt của “EXpression
data Clustering Analysis and VisualizATiOn Resource,” đã được phát triển dựa trên
new framework. Các kết quả phân nhóm trên các dữ liệu biểu hiện gen (1) từ nấm
men Saccharomyces cerevisiae, (2) trong phản ứng nguyên bào sợi huyết thanh của
loài người, và (3) của Arabidopsis trong phản ứng để tìm ra chitin là rất hứa hẹn.
1.5.5 Xấp xỉ dựa trên MST
Trong các bài toán nhân viên bán hàng đi du lịch (TSP), chúng ta đưa ra một
đồ thị vô hướng hoàn chỉnh

có hàm trọng lượng w kết hợp với mỗi cạnh, và

chúng ta mong muốn tìm được một tour của

với trọng lượng tối thiểu. Bài toán

này đã được chứng minh là NP-khó ngay cả khi hàm trọng lượng thõa mãn bất đẳng
thức tam giác,

. , cho tất cả ba đỉnh 𝑥 𝑦 𝑧

𝑤 𝑥 𝑧

𝑤 𝑥 𝑦


𝑤 𝑦𝑧 .

Các bất bình đẳng tam giác phát sinh trong nhiều tình huống thực tế. Nó có thể
được hiển thị mà các chiến lược tiếp theo cung cấp một thuật toán xấp xỉ với một tỷ
lệ của 2 ràng buộc cho các bài toán nhân viên bán hàng đi du lịch với bất đẳng thức
tam giác. Đầu tiên, hãy tìm một cây khung tối thiểu T đối với đồ thị cho trước. Sau
đó tăng gấp đôi MST và xây dựng một tour

. Cuối cùng, thêm các đường tắt để

không có đỉnh được truy cập nhiều hơn một lần, mà được thực hiện bởi một bộ cây
định trước. Kết quả là chiều dài các tour không quá hai lần là tối ưu. Nó cũng có thể
chỉ ra được rằng một cách tiếp cận dựa trên MST cũng cung cấp một xấp xỉ tốt cho
các bài toán cây Steiner.

12


1.6. Kỹ nghệ thuật toán (Algorithm Engineering)
1.6.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.
1.6.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.
Giả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:

13


- 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 kế.
- Cho phép các máy tính độc lập thực hiện thuật toán để có thể so sánh về
trường hợp xấu nhất mà không cần trang bị gì thêm.
Từ quan điểm của lý thuyết thuật toán, việc áp dụng thuật toán là một phần
của việc thiết kế và phát triển phần mềm. Hiệu quả của thuật toán được đánh giá qua
những người chuyên môn trong lĩnh vực của ứng dụng đó.
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.
1.6.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ũ đang khủng

14


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à

, trong đó

là một

tham số ảnh hưởng đến hiệu suất. Đối với trường hợp lớn, thuật toán của họ
đạt cận tỷ lệ tốt nhất hiện nay là 1.55. Để cải tiến tốt nhất mức xấp xỉ bảo đảm
ở 1.598 bởi Hougardy và Prömel, cần thiết phải chọn

. 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 quyết,

15


ô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 mụ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

16


đó 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:
- Tính tổng quát,

17


- Độ tin cậy, và
- Khả năng dự đoán.
Hy vọng là Algorithm Engineering sẽ làm tăng tác động của nó trên các lĩnh
vực khác một cách đáng kể. Kỹ nghệ thuật toán sẽ làm cho việc chuyển giao các ứng
dụng được tăng tốc.
1.6.1.3. Định nghĩa Kỹ nghệ thuật toán (Algorithm Engineering)
Một số chi tiết của Algorithm Engineering đã được trình bày tại các hội thảo
của DIMACS Implementation 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ử
dụng. Vì vậy, nó bao gồm một số chủ đề, từ hành vi mẫu bộ nhớ cache đến các

18


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).
1.6.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ả.

19


Thô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:

20


"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]
1.6.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 1.3. Kỹ nghệ thuật toán
Tạ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 năm 1996. Tạp chí trở thành một kết nối cho các hoạt

21


×