Tải bản đầy đủ (.docx) (20 trang)

Phân tích và đánh giá thuật toán bài toán đường đi ngắn nhất trong đồ thị có hướng, có trọng số

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 (216.44 KB, 20 trang )

LỜI NÓI ĐẦU

Đồ thịđược sử dụngđể giải quyết các bài toán trong nhiều lĩnh vực khác nhau
.Chẳng hạn , đồ thị có thể sử dụngđể xác định các mạch vòng trong vấn đề giải tích mạch
điện,chọn hành trình tiết kiệm nhất….Đồ thị có trọng số trên các cạnh có thể sử dụng để
giải các bài toán như : tìmđườngđi ngắn nhất giữa hai thành phố trong cùng một mạng
giao thông . Chúng ta còn sử dụngđồ thịđể giải các bài toán về lập lịch,thời khoá biểu,và
phân bố tần số cho các trạm phát thanh và truyền hình....
Bài toán tìm đường đi ngắn nhất có ứng dụng rất rộng rãi ở nhiều lĩnh vực khác
nhau.Để tìm ra các thuật toán tối ưu nhằm giải quyết bái toán trên.Đó cũng mụcđích của
để tài mà nhóm chúng e nghiên cứu.Đề tài giới thiệu các khái niệm cơ bản,các bài toán
ứng dụng quan trọng của lý thuyếtđồ thị .Đặc biệt là bài toán tìmđường đi ngắn nhất và
để giải quyết bài toán đó thì trong đề tài sẽ trình bày chi tiết 2 thuật toán kinh điển
:dijkstra và A*.và đó cũng là mục đích nghiên cứu của đề tài “bài toán tìm đường đi ngắn
nhất”

1


CHƯƠNG I :LÝ THUYẾT ĐỒ THỊ
I.1. Các khái niệm cơ bản của lý thuyết đồ thị
I.1.1.Định nghĩa đồ thị
Đồ thị là một cấu trúc rời rạc bao gồm các đỉnh và các cạnh nối các đỉnh
này.Chúng ta phân biệt các loại đồ thị khác nhau bởi kiểu và số lượng cạnh nối hai
đỉnh nào đó của đồ thị . Để có thể hình dung được tại sao lại cần đến
các loại đồ thị khác nhau ,chúng ta sẽ nêu ví dụ sử dụng chúng để mô tả một mạng
máy tính .Giả sử ta có một mạng gồm các máy tính và các kênh điện thoạinối các
máy tính này.
Bắc ninh

Đồng Nai


Huế

Hà Nội

TPHCM

Cần Thơ

Bình Định

Lào cai
Phú Yên

Khánh Hòa

Hình 1.Sơ đồ mạng máy tính
Nhận thấy rằng trong mạng hình 1, giữa hai máy tính bất kỳ chỉ cho phép nhiều nhất là
một kênh thoại nối chúng,kênh thoại này cho phép liên lạc cả hai chiều và không có máy
tính nào lại được nối với chính nó.Sơ đồ mạng máy tính cho trong hình 1 được gọi là đơn
đồ thị vô hướng => ta đi đến định nghĩa sau:
Định nghĩa 1. Đơn đồ thị vô hướng G=(V,E) bao gồm V là tập đỉnh,và E là tập các cặp
không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh.
2


Trong trường hợp giữa hai máy tính nàođó thường xuyên phải truyền tải nhiều thông tin
người ta phải nối hai máy này bởi nhiều kênh thoại . Mạng với đa kênh thoại giữa các
máy tínhđược cho trong hình 2.

Bắc ninhĐồng Nai


Huế

Hà Nội HCM

An Giang

BìnhĐịnh

Lào cai
Phú Yên
Khánh Hòa
Hình 2. Sơ đồ mạng máy tính với đa kênh thoại
Định nghĩa 2. Đa đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh , và E là họ các
cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh .Hai cạnh e1 va e2
được gọi là cạnh lặpnếu chúng cùng tương ứng với một cặp đỉnh.
Bắc ninhĐồng Nai

Hà Nội

Lào cai

Huế

An Giang

TPHCM

BìnhĐịnh


Phú Yên
Khánh Hòa

Hình 3. Sơ đồ mạng máy tính với kênh thông báo

3


Rõ ràng mỗi đơn đồ thị đều là đa đồ thị, nhưng không phải đa đồ thị nào cũng là đơn đồ
thị, vì trong đa đồ thị có hai hay nhiều hơn cạnh nối một cặp đỉnh nào đó.
Trong mạng máy tính có thể có những kênh thoại nối một máy tính nào đó với chính
nó(chẳng hạn với mục đích thông báo).Mạng như vậy được cho trong hình 3.Như vậy đa
đồ thị không thể mô tả được mạng như vậy, bởi vì có những khuyên (cạnh nối một đỉnh
vói chính nó).Trong trường hợp này chúng ta cần sử dụng đến khái niệm giả đồ thị vô
hướng, được định nghĩa như sau:
Định nghĩa 3. Giả đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh, và E là họ các
cặp không có thứ tự gồm hai phần tử (không nhất thiết phải khác nhau) của V gọi là các
cạnh.Cạnh e được gọi là khuyến nếu có dạng e=(u,u).
Các kênh thoại trong mạng máy tính có thể chỉ cho phép truyền tin theo một chiều.Chẳng
hạn trong hình 4 máy chủở Hà Nội chỉ có thể nhận tin từ các máyởđịa phương, có một số
máy chỉ có thể gửi tin đi ,còn các kênh thoại cho phép truyền tin theo cả hai chiềuđược
thay thế bởi hai cạnh có hướng ngược chiều nhau.
Bắc ninhĐồng Nai

Hà Nội

Huế

An Giang


TPHCM

BìnhĐịnh

Lào cai
Khánh Hòa
Hình 4. Mạng máy tính với các kênh thoại một chiều
Định nghĩa 4. Đơn đồ thị có hướng G=(V,E)bao gồm V là tập các đỉnh, và E là tập các
cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung.
Nếu trong mạng có thể có đa kênh thoại một chiều,ta sẽ phải sử dụng đến khái niệm đa
đồ thị có hướng:
4


Định nghĩa 5. Đa đồ thị có hướngG=(V,E) bao gồm V là tập các đỉnh,và E là họ các cặp
có thứ tự gồm hai phần tử khác nhau của V gọi là các cung.Hai cung e1 va e2 tương ứng
với cùng một cặp đỉnh được gọi là cung lặp.
Trong các phần tiếp theo chủ yếu chúng ta sẽ làm việc với đơn đồ thị vô hướng và đơn đồ
thị có hướng.Vì vậy, để cho ngắn gọn , ta sẽ bỏ qua tính từ đơn mỗi khi nhắc đến chúng.
I.2. Các thuật ngữ cơ bản của lý thuyết đồ thị
Trong mục này chúng ta sẽ trình bày một số thuật ngữ cơ bản của lý thuyết đồ thị.Trước
tiên ,ta xét các thuật ngữ mô tả các đỉnh và cạnh của đồ thị vô hướng.
Định nghĩa 1. Hai đỉnh u va v của đồ thị có hướng G được gọi là kề nhau nếu (u,v) là
cạnh của đồ thị G.Nếu e=(u,v) là cạnh của đồ thị thì ta nói cạnh này là cạnh liên thuộc
với hai đỉnh u và v, hoặc cũng nói là cạnh e nối đỉnh u và đỉnh v, đồng thời các đỉnh u và
v sẽ được gọi là các đỉnh đầu của cạnh (u,v).
Để có thể biết có bao nhiêu cạnh liên thuộc với một đỉnh , ta đưa vào định nghĩa sau :
Định nghĩa 2. Ta gọi bậc của đỉnh v trong đồ thị vô hướnglà số cạnh liên thuộc với nó
ta sẽ kí hiệu là deg(v).


a

b

c

f

e

d

g

Hình 5. Đồ thị vô hướng
Thí dụ 1. Xét đồ thị cho trong hình 5 ta có
deg(a)=1, deg(b)=4 , deg(c)=4 , deg(f)=3, deg(d)=1 ,deg(e)=3 , deg(g)=0.

5


Đỉnh bậc 0 gọi là đỉnh cô lập , đỉnh bậc 1 được gọi là đỉnh treo .Trong ví dụ trên đỉnh g là
đỉnh cô lập, a và d là các đỉnh treo. Bậc của đỉnh có tính chất sau :
Định lý 1. Giả sử G=(V,E) là đồ thị vô hướng với m cạnh . Khi đó
2m=∑ deg(v)
v



V


Chứng minh. Rõ ràng trong mỗi cạnh e=(u,v) được tính một lần trong deg(u) và một lần
trong deg(v). Từ đó suy ra tổng tất cả các bậc của các đỉnh bằng hai lần số cạnh
Thí dụ 2. Đồ thị với n đỉnh và mỗi đỉnh có bậc là 6 có bao nhiêu cạnh ?
Giải: Theo định lý 1,ta có 2m=6n.Từ đó suy ra số cạnh của đồ thị là 3n.
Hệ quả. Trong đồ thị vô hướng,số đỉnh bậc lẻ(nghĩa là có bậc là số lẻ) là một số chẵn.
Chứng minh. Thực vậy, gọi O và U tương ứng là tập đỉnh bậc lẻ và tập đỉnh bậc chẵn
của đồ thị,ta có
2m=∑deg(v)= ∑deg(v)+ ∑deg(v)
v



V

v



O

v



U

Do deg(v) là chẵnvới v là đỉnh trong U nên tổng thứ hai trong vế phải ở trên là số
chẵn.Từ đó suy ra tổng thứ nhất(chính là tổng bậc của các đỉnh bậc lẻ) cũng phải là số
chẵn, do tất cả các số hạng của nó là số lẻ, nên tổng này phải gồm một số chẵn các số

hạng.Vì vậy , số đỉnh bậclẻ phải là số chẵn.
Định nghĩa 3.Nếu e=(u,v) là cung của đồ thị có hướng G thì ta nói hai đỉnh u và vlà kề
nhau,và nói cung(u,v) nối đỉnh u với đỉnh v hoặc cũng nói cung này là đi ra khỏi đỉnh u
và đi vào đỉnh v.Đinh u (v) sẽ được gọi là đỉnh đầu (cuối) của cung (u,v).
Tương tự như khái niệm bậc, đối với đồ thị có hướng ta có khái niệm bán bậc ra(vào) của
một đỉnh.

6


Định nghĩa 4.Ta gọi bán bậc ra (vào) của đỉnh v trong đồ thị có hướng là số cung
của đồ thị đi ra khỏi nó (đi vào nó) và kí hiệu la deg+(v)(deg-(v)).
a

b

e

c

d

Hình 6. Đồ thị có hướng G
Thí dụ 3. Xét đồ thị cho trong hình 6. Ta có
deg-(a)=1, deg-(b)=2, deg-(c)=2, deg-(d)=2, deg-(e)=2.
deg+(a)=3, deg+(b)=1 deg+(c)=1, deg+(d)=2, deg+(e)=2
Do mỗi cung (u,v) sẽ được tính một lần trong bán bậc vào của đỉnh v và một lần trong
bán bậc ra của đỉnh u nên ta có
Định lý 2. Giả sử G=(V,E) là đò thị có hướng , khi đó
∑deg+(v)=∑deg-(v)=|E|

v



V

v



V

Rất nhiều tính chất của đồ thị có hướng không phụ thuộc vào hướng trên các cung của nó.
Vì vậy, trong nhiều trường hợp sẽ thuận tiện hơn nếu ta bỏ qua hướng trên các cung của
đồ thị. Đồ thị vô hướng thu được bằng cách bỏ qua hướng trên các cung được gọi là đồ
thị vô hướng tương ứng với đồ thị có hướng đã cho.

7


I.3. Định nghĩa đường đi, chu trình , đồ thị liên thông.
Định nghĩa 1.Đường điđộ dài n từđỉnh u đến đỉnh v, trong đó n là số nguyên dương, trên
đồ thị vô hướng G=(V,E) là dãy
xo, x1, ... , xn-1 , xn


trong đó u=x0 , v=xn , ( xi , xi+1) E , i= 0, 1, 2 ,..., n-1.
Đường đi nói trên còn có thể biểu diễn dưới dạng các cạnh:
(x0 , x1 ) , ( x1 , x2), ... , ( xn-1 , xn).
Đỉnh u gọi làđỉnhđầu, cònđỉnh v gọi làđỉnh cuối củađườngđi. Đường đi cóđỉnhđầu trùng

với đỉnh cuối ( tức là u=v)được gọi làchu trình. Đườngđi hay chu trìnhđược gọi làđơn
nếu như không có cạnh nào bị lặp lại.
Thí dụ 4. Trên đồ thị vô hướng cho trong hình 7: a,d,c,f,e làđường đi đơn độ dài 4. Còn
d,e,c,a không làđường đi do (e,c) không phải là cạnh củađồ thị. Dãy b,c,f,e,b là chu
trìnhđộ dài 4.Đườngđi a,b,e,d,a,b cóđộ dài là 5 không phải làđườngđi đơn, do cạnh (a,b)
có mặt trong nó hai lần.
a

d

b

e

c a

b

f d
e
Hình 7. Đường đi trên đồ thị

c

f

Khái niệm đường đi và chu trình trên đồ thị có hướng được định nghĩa hoàn toàn tương
tự như trường hợp đồ thị vô hướng, chỉ khác là ta chú ý đến hướng trên các cung.
Định nghĩa 2. Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên dương,
trên đồ thị có hướng G=(V,A) là dãy

xo, x1 , ... , xn-1 , xn


trong đó u=x0 , v=xn , ( xi , xi+1 ) A , i= 0, 1, 2 ,..., n-1.
Đường đi nói trên còn có thể biểu diễn dưới dạng các cung:
(x0 , x1 ) , ( x1 , x2), ... , ( xn-1 , xn).
8


Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi có đỉnh đầu
trùng với đỉnh cuối ( tức là u=v)được gọi là chu trình. Đường đi hay chu trình được gọi
là đơn nếu như không có cung nào bị lặp lại.
Thí dụ 5. Trên đồ thị có hướng cho trong hình7: a,d,c,f,e là đường đi đơn độ dài 4. Còn
d,e,c,a không là đường đi do (e,c) không phải là cung của đồ thị. Dãy b,c,f,e,b là chu trình
độ dài 4. Đường đi a,b,e,d,a,b có độ dài là 5 không phải là đường đi đơn, do cung (a,b) có
mặt trong nó hai lần.
Địng nghĩa 3.Đồ thị vô hướng G=(V,E) được gọi là liên thông nếu luôn tìmđượcđường đi
giữa hai đỉnh bất kỳ của nó.
Như vậy hai máy tính bất kỳ trong mạng có thể trao đổi thông tin đượcvới nhau khi và
chỉ khi đồ thị tương ứng với mạng này làđồ thị liên thông.
Thí dụ 6. Trong hình 8: Đồ thị G là liên thông, đồ thị H là không liên thông
a

b
H1
c
d

e
H2


g

f
H3
G

H

Hình 8. Đồ thị liên thông G và đồ thị H gồm 3 thành phần liên thông H1,H2,H3.

Định nghĩa 4. Ta gọi đồ thị con của đồ thị G=(V,E) là đồ thị H=(W,F), trong đó W



V



và F E
Trong trường hợp đồ thị là không liên thông , nó sẽ rã ra thành một số đồ thị con liên
thông đôi một không có đỉnh chung. Những đồ thị con liên thông như vậy ta sẽ gọi là các
thành phần liên thông của đồ thị.
Thí dụ 7. Đồ thị H trong hình 8 gồm 3 thành phần liên thông làH1,H2,H3.
9


Trong mạng máy tính có thể có những máy ( những kênh nối ) mà sự hỏng hóc của nó có
thể ảnh hưởng đến việc trao đổi thông tin trong mạng. Các khái niệm tương ứng với tình
huống này được đưa ra trong định nghĩa sau.

Định nghĩa 5. Đỉnh v được gọi là đỉnh rẽ nhánh nếu việc loại bỏ v cùng với các cạnh
liên thuộc với nó khỏi đồ thị làm tăng số thành phần liên thông của đồ thị. Cạnh e được
gọi là cầu nếu việc loại bỏ nó khỏi đồ thị làm tăng số thành phần liên thông của đồ thị .
Định nghĩa 6. Đồ thị có hướng G=(V,A) được gọi là liên thông mạnh nếu luôn tìm được
đường đi giữa hai đỉnh bất kỳ của nó.
Định nghĩa 7. Đồ thị có hướng G=(V,A) được gọi là liên thông yếu nếu đồ thị vô hướng
tương ứng với nó là đồ thị vô hướng liên thông.
Thí dụ 6. Trong hình 9đồ thị G là liên thông mạnh, còn H là liên thông yếu nhưng không
là liên thông mạnh
a

b
a

b
e
e

c

d
c

G

d
H

Hình 9. Đồ thị liên thông mạnh G
Đồ thị liên thông yếu H

Định lý 1. Đồ thị vô hướng liên thông là định hướng được khi và chỉ khi mỗi cạnh của nó
nằm trên ít nhất một chu trình.

10


CHƯƠNG II:THUẬT TOÁN DIJKSTRA,THUẬT TOÁN A* -BÀI
TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
II.1. THUẬT TOÁN DIJKSTRA- BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
II.1.1.Bài toán
Cho G = (V,E) là đơn đồ thị liên thông (vô hướng hoặc có hướng) có trọng số
V = {1,.., n} là tập các đỉnh , E là tập các cạnh (cung).
Cho s0 € E. Tìm đường đi ngắn nhất đi từ s 0 đến các đỉnh còn lại. Giải bài toán trên bằng
thuật toán Dijkstra .
II.1.2.Phân tích, thiết kế thuật toán
Thuật toán Dijkstra cho phép tìm đường đi ngắn nhất từ một đỉnh s đến các đỉnh còn lại
của đồ thị và chiều dài (trọng số ) tương ứng. Phương pháp của thuật toán là xác định
tuần tự đỉnh có chiều dài đến s theo thứ tự tăng dần. Thuật toán được xây dựng trên cơ sở
gán cho mỗi đỉnh các nhãn tạm thời. Nhãn tạm thời của các đỉnh cho biết cận trên của
chiều dài đường đi ngắn nhất từ s đến đỉnh đó. Nhãn của các đỉnh sẽ biến đổi trong các
bước lặp, mà ở mỗi bước lặp sẽ có một nhãn tạm thời trở thành chính thức. Nếu nhãn của
một đỉnh nào đó trở thành chính thức thì đó cũng chính là chiều dài ngắn nhất của đường
đi từ s đến đỉnh đó.
Ký hiệu :
* L(v) để chỉ nhãn của đỉnh v, tức là cận trên của chiều dài đường đi ngắn
nhất từ s0 đến v.

11



* d(s0 ,v) : chiều dài đường đi ngắn nhất từ s0 đến v.
* m(s0 ,v) là trọng số của cung (cạnh) (s,v).
II.1.3.Mô tả thuật toán Dijkstra tìm chiều dài đường đi ngắn nhất từ đỉnh s đến n-1
đỉnhcòn lại
input: G, s0
Output : d(s0,v), mọi v ≠ s0 ;
Mô tả :
*Khởi động :
L(v) = ∞ , mọi v ≠ s0; //Nhãn tạm thời
S = {s0}; //Tập lưu trữ các đỉnh có nhãn chính thức
* Bước 0 :
d(s0 ,s0 ) = L(s0) = 0;
S = {s0}; // s0 có Nhãn chính thức
* Bước 1:
- Tính lại nhãn tạm thời L(v), v không thuộc S :
Nếu v kề với s0 thì
L(v) = Min{L(v), L(s0) + m(s0,v)};
- Tìm s1 thuộc S và kề với s0 sao cho :

12


* Bước 2:
- Tính lại nhãn tạm thời L(v), v? S :

Nế
u v kề với s1 thì L(v) = Min{L(v), L(s1) + m(s1,v)};
Tính chất tham lam của thuật toán Dijkstra là tại mỗi bước, chọn si không thuộc S và si là
đỉnh kề với sj, với j = 0,i-1 sao cho L(si ) = Min{L(v) : v ? S }. Minh hoạ : Xét đồ thị có
hướng G :


13


Đường đi ngắn nhất từ đỉnh s = 1 đến các đỉnh còn lại :

Bảng các bước đi.

14


II.1.4.Đánh giá thuật toán dijkstra
Thuật toán Dijkstra bình thường sẽ có độ phức tạp là O(). Tuy nhiên ta có thể sử dụng kết hợp với
cấu trúc heap, khi đó độ phức tạp sẽ là O((m+n) ), nếu dùng đống Fibonacci thì độ phức tạp giảm
xuống còn O(m+n . Trong đó m là số cạnh, n là số đỉnh của đồ thị đang xét.

II.2. THUẬT TOÁN A* -BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT
II.2.1.Bài toán
Cho G = (V,E) là đơn đồ thị liên thông (vô hướng hoặc có hướng) có trọng số
V = {1,.., n} là tập các đỉnh , E là tập các cạnh (cung).
Cho s0 € E. Tìm đường đi ngắn nhất đi từ s0 đến các đỉnh còn lại. Giải bài toán trên bằng
thuật toán A*
II.2.2. Phân tích, thiết kế thuật toán
-Thuật toán A* xây dựng tăng dần tất cả các tuyến đường từ điểm xuất phát cho tới khi
nó tìm thấy một đường đi chạm tới đích. Tuy nhiên, cũng như tất cả các thuật toán tìm
kiếm có thông tin , nó chỉ xây dựng các tuyến đường "có vẻ" dẫn về phía đích.
- Để biết những tuyến đường nào có khả năng sẽ dẫn tới đích, A* sử dụng một "đánh giá
heuristic" về khoảng cách từ điểm bất kỳ cho trước tới đích. Trong trường hợp tìm đường

15



đi, đánh giá này có thể là khoảng cách đường chim bay - một đánh giá xấp xỉ thường
dùng cho khoảng cách của đường giao thông.
-Điểm khác biệt của A* đối với tìm kiếm theo lựa chọn tốt nhấtlà nó còn tính đến khoảng
cách đã đi qua. Điều đó làm cho A* "đầy đủ" và "tối ưu", nghĩa là, A* sẽ luôn luôn tìm
thấy đường đi ngắn nhất nếu tồn tại một đường đi như thế. A* không đảm bảo sẽ chạy
nhanh hơn các thuật toán tìm kiếm đơn giản hơn. Trong một môi trường dạng mê cung,
cách duy nhất để đến đích có thể là trước hết phải đi về phía xa đích và cuối cùng mới
quay lại. Trong trường hợp đó, việc thử các nút theo thứ tự "gần đích hơn thì được thử
trước" có thể gây tốn thời gian
II.2.3. Mô tả thuật toán A* tìm chiều dài đường đi ngắn nhất từ đỉnh s đến n-1 đỉnh
còn lại
A* lưu giữ một tập các lời giải chưa hoàn chỉnh, nghĩa là các đường đi qua đồ thị, bắt đầu
từ nút xuất phát. Tập lời giải này được lưu trong một hàng đợi ưu tiên (priority queue).
Thứ tự ưu tiên gán cho một đường đi

được quyết định bởi hàm f(x) = g(x) +h(x)

Trong đó, g(x) là chi phí của đường đi cho đến thời điểm hiện tại, nghĩa là tổng trọng số
của các cạnh đã đi qua. H(x) là hàm đánh giá heuristic về chi phí nhỏ nhất để đến đích
từ . Ví dụ, nếu "chi phí" được tính là khoảng cách đã đi qua, khoảng cách đường chim
baygiữa hai điểm trên một bản đồ là một đánh giá heuristic cho khoảng cách còn phải đi
tiếp.
Hàm f(x) có giá trị càng thấp thì độ ưu tiên của

càng cao (do đó có thể sử dụng một

cấu trúc heap tối thiểu để cài đặt hàng đợi ưu tiên này)


function A*(điểm_xuất_phát,đích)
var đóng:= tập rỗng

16


var q:= tạo_hàng_đợi(tạo_đường_đi(điểm_xuất_phát))
while q không phải tập rỗng
var p:= lấy_phần_tử_đầu_tiên(q)
var x:= nút cuối cùng của p
if x in đóng
continue
if x = đích
return p
bổ sung x vào tập đóng
foreach y in các_đường_đi_tiếp_theo(p)
đưa_vào_hàng_đợi(q, y)
return failure
Trong đó, các_đường_đi_tiếp_theo(p) trả về tập hợp các đường đi tạo bởi việc kéo
dài p thêm một nút kề cạnh. Giả thiết rằng hàng đợi được sắp xếp tự động bởi giá trị của
hàm .
"Tập hợp đóng" (đóng) lưu giữ tất cả các nút cuối cùng của p (các nút mà các đường đi
mới đã được mở rộng tại đó) để tránh việc lặp lại các chu trình (việc này cho ra thuật toán
tìm kiếm theo đồ thị). Đôi khi hàng đợi được gọi một cách tương ứng là "tập mở". Tập
đóng có thể được bỏ qua (ta thu được thuật toán tìm kiếm theo cây) nếu ta đảm bảo được
rằng tồn tại một lời giải hoặc nếu hàm các_đường_đi_tiếp_theo được chỉnh để loại bỏ các
chu trình
II.2.4.Đánh giá thuật toán A*
- A* là thuật toán đầy đủ theo nghĩa rằng nó sẽ luôn luôn tìm thấy một lời giải nếu bài
toán có lời giải.

-Nếu hàm heuristic có tính chất thu nạp được , nghĩa là nó không bao giờ đánh giá cao
hơn chi phí nhỏ nhất thực sự của việc đi tới đích, thì bản thân A* có tính chất thu nạp
17


được (hay tối ưu) nếu sử dụng một tập đóng. Nếu không sử dụng tập đóng thì hàm phải
có tính chất đơn điệu thì A* mới có tính chất tối ưu. Nghĩa là nó không bao giờ đánh giá
chi phí đi từ một nút tới một nút kề nó cao hơn chi phí thực. Phát biểu một cách hình
thức, với mọi nút x,y trong đó y là nút tiếp theo của x:

-A* còn có tính chất hiệu quả một cách tối ưu với mọi hàm heuristic , có nghĩa là
không có thuật toán nào cũng sử dụng hàm heuristic đó mà chỉ phải mở rộng ít nút hơn
A*, trừ khi có một số lời giải chưa đầy đủ mà tại đó dự đoán chính xác chi phí của
đường đi tối ưu.
-Độ phức tạp thời gian của A* phụ thuộc vào đánh giá heuristic. Trong trường hợp xấu
nhất, số nút được mở rộng theo hàm mũ của độ dài lời giải, nhưng nó sẽ làhàm đa
thứckhi hàm heuristic thỏa mãn điều kiện sau:

trong đó là heuristic tối ưu, nghĩa là hàm cho kết quả là chi phí chính xác để đi từ tới
đích. Nói cách khác, sai số của h không nên tăng nhanh hơn lôgarit của "heuristic hoàn
hảo" - hàm trả về khoảng cách thực từ x tới đích (Russell và Norvig 2003, tr. 101).
-Vấn đề sử dụng bộ nhớ của A* còn rắc rối hơn độ phức tạp thời gian. Trong trường hợp
xấu nhất, A* phải ghi nhớ số lượng nút tăng theo hàm mũ. Một số biến thể của A* đã
được phát triển để đối phó với hiện tượng này, một trong số đó là A* lặp sâu dần ,A* bộ
nhớ giới hạn và A* bộ nhớ giới hạn đơn giản
-Một thuật toán tìm kiếm có thông tin khác cũng có tính chất tối ưu và đầy đủ nếu đánh
giá heuristic của nó là thu nạp được Đó là tìm kiếm đệ quy theo lựa chọn tốt nhất

CHƯƠNG III :ĐÁNH GIÁ THỰC NGHIỆM
Trong phần này, chúng tôi sẽ chạy cả hai thuật toán A* và Dijktra với các tập dữ liệu có

độ phức tạp khác nhau ( số lượng đỉnh và số cung của đồ thị). Để từ đó có sự so sánh,
đánh giá về thời gian thực hiện, lượng bộ nhớ chiếm dụng bởi từng thuật toán này.
18


III.1 Dữ liệu đầu vào
Để thuận tiện và linh hoạt trong cách nhập dữ liệu cho đầu vào của thuật toán, chúng tôi
đã xây dựng ba cách nhập dữ liệu.
-

Nhập từ đồ thị trực tiếp: Người dùng có thể dùng chuột vẽ trên ô vẽ để tạo ra các
điểm chấm – tương đương với một đỉnh của đồ thị (thành phố). Để định nghĩa các
cung ( đường đi), người dùng có thể chọn bên bảng liên kết các thành phố. Nếu cột
I, dòng J có giá trị là “TRUE” thì thành phố I có thể đi tới J. Dựa vào cách này
chúng tôi sẽ thu thập được toạ độ của thành phố từ đó làm đầu vào để tính hàm

-

đánh giá heuristic ( khoảng cách trực tiếp toạ độ DECAC).
Cách thứ hai đó là, thay vì vẽ trực tiếp người dùng có thể nhập toạ độ ( đỉnh đồ
thị) và bảng liên kết ( cung đồ thị). Điều này rất có ích khi chúng ta nhập dữ liệu
ngoài thực tế, như toạ độ bến xe bus, nhà ga, ngã tư, ngã ba … trên bản đồ. Từ dữ

-

liệu này chương trình sẽ thực hiện như cách một vs hàm đánh giá heuristic
Cách thứ ba đó là, sẽ không có toạ độ của các thành phố, thay vào đó chúng ta chỉ
nhập ma trận khoảng cách giữa các thành phố, điều này sẽ rất phù hợp cho việc
học tập nghiên cứu, vì đầu vào của các bài toán học tập thường cho ở dạng ma trận
khoảng cách thay vì toạ độ của chúng.


Trong quá trình thực nghiệm của chúng tôi, để thuận lợi và để loại bỏ thời gian không cần
thiết cho tính toán, chúng tôi sử dụng cách 3 ( nhập ma trận khoảng cách) để đánh giá
thời gian và bộ nhớ của chương trình
Chúng tôi sẽ đưa bào ba tập dữ liệu với các kích thước đỉnh và cung lớn dần.
SỐ ĐỈNH
SỐ CUNG

TẬP BÉ
<15
<45

TẬP VỪA
<50
<150

TẬP LỚN
>100
>300

III.2. KẾT QUẢ THỰC NGHIỆM
Dưới đây là bảng kết quả thực nghiệm của chúng tôi (ms/KB)
DIJKTRA
A*

TẬP BÉ
0-10/ 39KB
0-10/ 39KB

TẬP VƯA

3-10/40KB
2-10/40KB

TẬP LỚN
10-30/42KB
5-15/42KB
19


Qua kết quả trên ta có thể thấy rằng, khi tập dữ liệu càng lớn, độ khác biệt về tốc độ của
A* sẽ tăng lên đáng kể so với Dijstra

KẾT LUẬN
Trên đây là toàn bộ cáo báo về đề tài kết thúc môn học “phân tích và đánh giá thuật toán
” .Do thời gian cũng như kiến thức còn hạn chế nên việc nghiên cứu có thể chưa được
đầy đủ, kính mong thầy giáo cùng các bạn đồng nghiệp đóng góp, tôi xin chân thành cảm
ơn thấy giáo TS Đào Thành Tĩnh đã truyền đạt những kiến thức quý giá về thuật toán, tư
duy thiết kế và kỹ thuật đánh giá độ phức tạp.

20



×