Thuật toán tìm đ-ờng đi ngắn nhất giữa hai điểm trong đa giác đơn của Lee và Preparata .... Thuật toán dùng bao lồi làm định h-ớng tìm đ-ờng ngắn nhất giữa hai đỉnh trong đa giác đơn điệ
Trang 1Phan Đức Dũng
BàI TOáN TìM ĐƯờNG ĐI NGắN NHấT giữa hai đỉnh TRONG ĐA GIáC ĐƠN ĐIệU
Luận văn thạc sĩ toán học
Trang 2Tr-ờng đại học vinh
Trang 3Mở đầu 1
Ch-ơng I Kiến thức cơ sở 3
1.1 Độ phức tạp của thuật toán 3
1.2 Đa giác đơn, đ-ờng gấp khúc đơn điệu và đa giác đơn điệu 8
1.3 Tập lồi, bao lồi và điểm cực biên 9
1.4 Thuật toán tăng dần 11
1.5 Lý thuyết đồ thị 12
1.6 Tam giác phân đa giác đơn 17
1.6.1 Định nghĩa và tính chất 17
1.6.2 Thuật toán tam giác phân đa giác đơn 18
Ch-ơng II Thuật toán tìm đ-ờng đi ngắn nhất giữa hai điểm trong đa giác đơn của Lee và Preparata 21
2.1 Thuật toán tìm hình ống tay 21
2.2 Thuật toán phễu 22
2.2.1 Khái niệm phễu 22
2.2.2 Thuật toán phễu 23
2.3 Thuật toán chính 24
Ch-ơng III Thuật toán dùng bao lồi làm định h-ớng tìm đ-ờng ngắn nhất giữa hai đỉnh trong đa giác đơn điệu 26
3.1 Thuật toán con tìm bao lồi tiền vi phạm 27
3.1.1 Mô tả bao lồi tiền vi phạm 27
3.1.2 Thuật toán con tìm bao lồi tiền vi phạm 28
3.2 Thuật toán con tìm link 28
3.2.1 Khái niệm link 28
Trang 43.3 Thuật toán chính 30
3.3.1 Mô tả thuật toán 31
3.3.2 Tính đúng đắn của thuật toán 32
Kết luận 35
Tài liệu tham khảo 36
Trang 5Hình 1: Minh họa thuật toán tìm tiếp tuyến 11 Hình 2: Minh họa thuật toán Dijkstra 14 Hình 3: Minh họa đ-ờng đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu 26
Hình 4: Minh họa thuật toán FQ(X ,Y ) tìm bao lồi tiền vi phạm 28
Hình 5: Minh họa bài toán sử dụng bao lồi làm định h-ớng 33
Trang 6Mở đầu
Hình học tính toán là lĩnh vực nghiên cứu để tìm ra các thuật toán hiệu quả và thực thi trên máy tính cho những bài toán tối -u hình học Đ-ờng đi ngắn nhất Euclidean giữa hai điểm trong đa giác đơn là vấn đề cơ bản trong hình học tính toán Năm 1984, trong [13] và [17], Lee và Preparata đã đ-a ra một thuật toán tìm đ-ờng đi ngắn nhất giữa hai điểm trong đa giác đơn có độ
phức tạp thuật toán là O(n2) bằng cách sử dụng tam giác phân đa giác Năm
2008, trong [9] và [10], Phan Thành An không cần quá trình tam giác phân đa giác tìm đ-ờng đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu Một số chi tiết bài toán đ-ờng đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu đ-ợc trình bày trong [5]
Trong luận văn này chúng tôi nghiên cứu “Bài toán tìm đ-ờng đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu”, cụ thể trình bày chi tiết hai thuật
toán của Lee và Preparata và của Phan Thành An dùng bao lồi làm định h-ớng (đ-ợc trình bày lần đầu tiên trong [9] và [10]) tìm đ-ờng ngắn nhất giữa hai
đỉnh trong đa giác giác đơn điệu
Luận văn gồm ba ch-ơng
Ch-ơng I: Kiến thức cơ sở
Trong ch-ơng này chúng tôi nêu hệ thống một số kiến thức và một thuật toán về tìm bao lồi của tập hữu hạn điểm, tam giác phân đa giác đơn,
đ-ờng đi ngắn nhất trong đồ thị trọng số, để làm cơ sở cho các ch-ơng sau
Ch-ơng II: Thuật toán tìm đ-ờng đi ngắn nhất giữa hai điểm trong
đa giác đơn của Lee và Preparata
Trong ch-ơng này chúng tôi trình bày thuật toán tìm hình ống tay và thuật toán phễu của Lee và Preparata tìm đ-ờng đi ngắn nhất giữa hai điểm
trong đa giác đơn nh-ng có sự cải tiến của Guibas, Hershberger, Leven,
Sharir, và Tarjan (Xem [17]) Trình bày thuật toán chính để giải bài toán tìm
đ-ờng đi ngắn nhất giữa hai điểm trong đa giác đơn của Lee và Preparata
Trang 7Ch-ơng III: Thuật toán dùng bao lồi làm định h-ớng tìm đ-ờng đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu
Trong ch-ơng này chúng tôi trình bày thuật toán tìm bao lồi tiền vi phạm, thuật toán tìm Link của bài toán tìm đ-ờng đi ngắn nhất giữa hai đỉnh trong đa
giác đơn điệu dùng bao lồi làm định h-ớng Dựa vào một số tính chất đơn điệu
của đa giác, bao lồi tiền vi phạm, .trong [5], trình bày thuật toán chính sử
dụng bao lồi làm định h-ớng để giải bài toán tìm đ-ờng đi ngắn nhất giữa hai
đỉnh trong đa giác đơn điệu
Luận văn đ-ợc hoàn thành d-ới sự h-ớng dẫn tận tình của thầy giáo
PGS TS Phan Thành An Tác giả xin đ-ợc bày tỏ lòng biết ơn sâu sắc tới
Thầy, ng-ời đã h-ớng dẫn, giúp đỡ tác giả trong quá trình thực hiện đề tài
Tác giả xin chân thành cảm ơn các Thầy PGS TS Nguyễn Hữu Quang, PGS TS Phạm Ngọc Bội, TS Nguyễn Duy Bình là những ng-ời hết sức quan tâm giảng dạy cũng nh- động viên tác giả trong quá trình học tập
Tác giả xin chân thành cảm ơn đến các Giáo s-, phó Giáo s-, Tiến sĩ… Khoa Đào tạo Sau Đại học Tr-ờng Đại học Vinh, Viện Toán học, những ng-ời
đã tham gia quản lý, giảng dạy, giúp đỡ và h-ớng dẫn tác giả trong suốt quá trình học tập, nghiên cứu
Tác giả xin cảm ơn anh D-ơng Quốc Nam, anh Đoàn Văn Thanh (Khoá 14) và gia đình, bạn bè, đồng nghiệp đã động viên khích lệ và giúp đỡ tác giả trong quá trình học tập cũng nh- hoàn thành luận văn này
Mặc dù rất cố gắng trong quá trình học tập, nghiên cứu nhiều tài liệu cũng nh- tham khảo nhiều ý kiến trong quá trình viết và hoàn thành luận văn, nh-ng luận văn khó tránh khỏi những thiếu sót, rất mong nhận đ-ợc ý kiến
đóng góp của của hội đồng chấm luận văn Thạc sĩ Toán - Tr-ờng Đại học Vinh, những ý kiến trao đổi của đồng nghiệp về nội dung luận văn này
Vinh, tháng 12 năm 2009
Trang 8tính toán của thuật toán là độ phức tạp thời gian Biết đ-ợc độ phức tạp thời
gian cho một thuật toán rất quan trọng, vì khi đó ta biết đ-ợc thời gian là một phút, một năm, một tỉ năm để thực hiện thuật toán đó
Để tính toán độ phức tạp của thuật toán ta chỉ xét những hàm thực
f:N R xác định trên tập số nguyên d-ơng và hầu nh- d-ơng làm công cụ
đo Nghĩa là tồn tại một số nguyên d-ơng n0 sao cho f(n) > 0 với mọi n > n0
Kí hiệu F là tập hợp tất cả các hàm nh- vậy
Định nghĩa 1.1.1 (Xem [2]) Cho hàm số g(n)F, ta định nghĩa O(g(n))
là một tập hợp tất cả các hàm f(n)F có tính chất: Tồn tại hằng số c và n0 sao
cho với mọi n>n0 thì f(n) c.g(n)
Nếu f(n)O(g(n)), thì ta nói rằng f(n) là Ô lớn của g(n)
Những hàm thuộc O th-ờng dùng nh- bị chặn d-ới của hàm thực hiện
tính toán trong thuật toán để giải một bài toán
Ng-ời ta dùng kí hiệu f(n) = g(n)+O(h(n)), nghĩa là f(n)-g(n) = O(h(n))
Định nghĩa 1.1.2 (Xem [2]) Cho hàm số g(n)F, ta định nghĩa (g(n))
là tập hợp tất cả các hàm f(n)F có tính chất: Tồn tại hằng số c1, c2 và n0 sao
cho với mọi n>n0 thì c1.g(n) f(n) c2.g(n)
Trang 9Định nghĩa 1.1.3 (Xem [2]) Cho hàm số g(n)F, ta định nghĩa (g(n))
là tập hợp tất cả các hàm f(n)F có tính chất: Tồn tại hằng số d-ơng c và n0sao cho với mọi n>n0 thì c.g(n) f(n)
Nếu f(n) (g(n)), thì ta nói rằng f(n) là Ô mê ga lớn của g(n)
Mệnh đề 1.1.1 (Xem [2]) Nếu f1(n)O(g1(n)) và f2(n)O(g2(n)) thì
1.1.2 Cách tính độ phức tạp của thuât toán
Ta sử dụng T(<khối mã>) cho độ phức tạp tính toán của một toán tử
riêng cũng nh- một đoạn mã ch-ơng trình Khi mã ch-ơng trình đ-ợc tách
biệt rõ ràng thì ta kí hiệu T(n) là độ phức tạp tính toán là hàm biến số n với n
là số phép toán cơ sở Độ phức tạp tính toán đ-ợc đo bằng hàm O( ) là chính
Vì vậy để tính độ phức tạp tính toán của thuật toán tức là ta đi xác định
hàm T(n)O( ) cho đoạn mã ch-ơng trình đó
Các phép toán đ-ợc dùng để đo độ phức tạp thời gian có thể là phép so sánh các số nguyên, phép cộng, phép trừ, nhân, chia các số nguyên hoặc bất
kỳ một phép toán sơ cấp nào khác
Định nghĩa 1.1.4 (Xem [2]) Phép tính cơ sở là phép cộng, trừ, nhân,
chia và các hàm l-ợng giác, hàm mũ, hàm logarit hoặc bất kì một phép toán sơ cấp nào khác Độ phức tạp của toán tử cơ sở là O(1)
Trang 10Tuy nhiên khi thực hiện tính toán với những số lớn thì phép nhân và các hàm trên cũng không là phép tính cơ sở nữa Vì phép nhân các số lớn, các hàm
đ-ợc thực hiện tính toán trên các dãy
Độ phức tạp thời gian của dãy liên tiếp các phép tính xác định bởi độ
phức tạp cao nhất trong chúng Tức là, giả sử toán tử s1 có độ phức tạp F1, s2
có độ phức tạp F2 Khi đó:
T(s1)O(F1); T(s2)O(F2) T(s1, s2)max{O(F1);O(F2)}
Để dễ dàng cho việc phân tích thuật toán ta kết hợp những kí hiệu độ đo phức tạp và phân tích trong tr-ờng hợp xấu nhất để biết đ-ợc thời gian thực hiện những thuật toán trong thời gian xấu nhất là bao nhiêu?
Ng-ời ta định ra độ phức tạp của các phép toán trong tr-ờng hợp xấu nhất là:
(1) Phép gán có độ phức tạp O(1)
(2) Phép nhập vào thủ tục có độ phức tạp O(1)
(3) Phép ra khỏi thủ tục có độ phức tạp O(1)
(4) Mệnh đề if<điều kiện> độ phức tạp là thời gian so sánh cộng với
O(max của hai nhánh)
(5) Vòng lặp (While) có độ phức tạp thời gian là tổng tất cả vòng lặp với thời gian của mỗi vòng lặp đó
Thứ bậc trong tập hàm số (Xem [3])
Trong phân tích thuật toán ng-ời ta th-ờng hay dùng các hàm sau đây
1, logn, n , n, nlogn, n2, n3, 2n , n2 n , n!
Những hàm này tạo ra một dây xích thứ bậc tăng nh- sau:
O(1)O(logn)O( n)O(n)O(nlogn)O(n2)O(n3)O(2 n)O(n2 n)O(n!)
Các hàm nh- 2n , n2 n , n n , n! đ-ợc gọi là hàm loại mũ Một giải thuật mà
thời gian thực hiện của nó có cấp là các loại hàm mũ thì tốc độ rất chậm
Trang 11Các hàm nh- logn, n , n, nlogn, n2, n3 đ-ợc gọi là các hàm loại đa thức Giải thuật với thời gian thực hiện có cấp hàm đa thức thì th-ờng chấp nhận đ-ợc
Ví dụ 1.1.1 (Xem [2]) Phân tích độ phức tạp của vòng for
- Dòng 1: Phép gán cố định mất thời gian là hằng số, kí hiệu là a
- Dòng 2: Với phép toán gán i := 1, kiểm tra i < n và i := i+1 cũng chiếm thời gian là hằng số, lần l-ợt kí hiệu là b; c; d
- Dòng 3: Cũng đòi hỏi thời gian là hằng số e
Khi đó thời gian (độ phức tạp) để thực hiện ch-ơng trình trên là:
T(n) = a+b+n(c+d)+n(e) = n(c+d+e)+a+b Suy ra T(n)O(n)
Ví dụ 1.1.2 (Xem [2]) Phân tích độ phức tạp của thuật toán sắp xếp dãy
Trang 12- Vòng lặp từ dòng 1 đến dòng 7 có độ phức tạp O(
1
(nó thực hiện nhiều nhất n - i lần)
Do đó độ phức tạp để thực hiện của thuật toán là
Ví dụ 1.1.3 (Xem [2]) Phân tích độ phức tạp của thuật toán tìm số a đầu
tiên có mặt trong khoá A gồm n số A1, A2, , A n, nếu không có trả về kết quả 0
Việc phân tích độ phức tạp thời gian của thuật toán tìm kiếm tuyến tính này đ-ợc cụ thể nh- sau:
Số các phép so sánh đ-ợc dùng trong thuật toán này sẽ đ-ợc xem nh- th-ớc đo độ phức tạp thời gian của nó ở mỗi b-ớc của vòng lặp trong thuật toán, có hai phép toán so sánh đ-ợc thực hiện: một để xem đã tới cuối bảng
ch-a và một để so sánh phần tử a với một số hạng của dãy Cuối cùng còn một phép so sánh nữa làm ở ngoài vòng lặp Do đó nếu a = A k thì đã có 2k +1 phép
so sánh đ-ợc sử dụng Số phép so sánh nhiều nhất 2n + 2 đòi hỏi phải đ-ợc sử dụng khi phần tử a không có mặt trong bảng Trong tr-ờng hợp đó, 2n phép so sánh đ-ợc dùng để xác định a không phải là A k đối với k = 1, 2, ., n; một
5: return(0) end
Trang 131.2 Đa giác đơn, đ-ờng gấp khúc đơn điệu và đa giác đơn điệu
Tr-ớc khi nêu các khái niệm ta quy -ớc đ-ờng thẳng ab là đ-ờng thẳng
đi qua hai điểm phân biệt a và b theo h-ớng ab
Định nghĩa 1.2.1 (Xem [14]) Giả sử, trong mặt phẳng Oxy các điểm
a(x1,y1); b(x2,y2); c(x3,y3) Kí hiệu S(a,b,c) là diện tích đại số của tam giác abc,
khi đó diện tích đại số đ-ợc xác định nh- sau:
S(a,b,c) =
2
) )(
( ) )(
(
1 2 1 3 1 3 1
- Điểm c nằm trên đ-ờng thẳng ab khi và chỉ khi S(a,b,c) = 0
Định nghĩa 1.2.2 (Xem [14]) Đa giác là miền phẳng đ-ợc giới hạn bởi
một đ-ờng gấp khúc khép kín những đoạn thẳng trong mặt phẳng Những
đoạn thẳng đ-ợc gọi là cạnh của đa giác và những điểm chung của hai đầu
đoạn thẳng gọi là đỉnh của đa giác
Đa giác đơn là đa giác mà hai cạnh bất kì của nó hoặc là không giao
nhau, hoặc là giao nhau tại điểm chung duy nhất là đỉnh
Định nghĩa 1.2.3 (Xem [13]) Một đ-ờng gấp khúc đa giác < p0, p1, , p k >
là một dãy những điểm p i (i= 0, 1, , k) mà trong đó mọi cặp những điểm kề nhau
p i và p i+1 biểu thị một đoạn thẳng với mọi i = 0, 1, , k và không có hai đoạn nào không liên tiếp cắt nhau Khi đó ta còn gọi là đ-ờng gấp khúc không tự cắt
Định nghĩa 1.2.4 Cho đa giác đơn gồm n đỉnh <p1, ., p k , ., p n >
Khi đó, ta nói thứ tự các đỉnh p i (i=1 ,n ) của đa giác sắp xếp theo thứ tự
Trang 14ng-ợc chiều kim đồng hồ nếu và chỉ nếu tiếp giáp với phần bên trái cạnh [p i , p i+1], i=1 ,n 1 là phần trong đa giác
Trong tr-ờng hợp ng-ợc lại, ta nói các đỉnh p i của đa giác sắp xếp theo thứ tự cùng chiều kim đồng hồ
Định nghĩa 1.2.5 (Xem [14]) Đ-ờng gấp khúc P là đ-ờng gấp khúc
đơn điệu nếu tồn tại một đ-ờng thẳng L sao cho mọi đ-ờng thẳng vuông góc với L thì hoặc không cắt P, hoặc cắt P theo một điểm, hoặc cắt P theo một
đoạn thẳng Và khi đó ta cũng nói đ-ờng gấp khúc P là đơn điệu theo ph-ơng L.
Một đa giác đ-ợc gọi là đa giác đơn điệu nếu nó là đa giác đơn và biên
của nó đ-ợc hợp thành từ hai đ-ờng gấp khúc đơn điệu theo cùng một ph-ơng
Định nghĩa 1.2.6 (Xem [14]) Một đa giác đơn đ-ợc gọi là y-đơn điệu
nếu nó đơn điệu đối với trục Oy
Trong luận văn này, chúng tôi không xét tr-ờng hợp đ-ờng gấp khúc
đơn điệu có cạnh nằm trên đ-ờng thẳng vuông góc với ph-ơng đơn điệu
Nhận xét 1.2.1 (Xem [5]) Đ-ờng gấp khúc Y =< q0, q1, , q m > đơn điệu theo ph-ơng L khi chỉ khi tồn tại một hệ trục toạ độ đề các vuông góc Oxy có trục hoành cùng ph-ơng với L sao cho hoành độ x i của các điểm q i thoả mãn
x i <x i+1 với mọi i=0 ,m 1
1.3 Tập lồi, bao lồi và điểm cực biên
Định nghĩa 1.3.1 (Xem [12]) Một tập A trong mặt phẳng đ-ợc gọi là tập lồi nếu x1, x2 A thì [x1, x2]={x1 +(1-)x2: 0 1} A
Định nghĩa 1.3.2 (Xem [12]) Một tổ hợp lồi của các điểm x1, x2 trong mặt phẳng là một tổng có dạng 1x1+2x2, với 1,2 0, sao cho 1 +2 = 1
Định nghĩa 1.3.3 (Xem [12]) Cho tập A trong mặt phẳng
- Giao của tất cả các tập lồi chứa A gọi là bao lồi của A , Kí hiệu là convA
Trang 15- Giao của tất cả các tập lồi đóng chứa A gọi là bao đóng của A,
Kí hiệu là convA
Nhận xét 1.3.1 (Xem [12])
(i) convA là tập lồi nhỏ nhất chứa A
(ii) A là tập lồi convA =A
(iii) convA là tập đóng nhỏ nhất chứa A
Mệnh đề 1.3.1 (Xem [12]) Tập A lồi khi và chỉ khi A chứa tất cả các tổ
hợp lồi của nó
Định nghĩa 1.3.4 (Xem [12]) Cho tập lồi M trong mặt phẳng
Điểm x M đ-ợc gọi là điểm cực biên của tập hợp M nếu x [x1,x2],
x1, x2 M thì x x1 hoặc x x2
Một số dấu hiệu nhận dạng điểm cực biên của bao lồi của tập S hữu hạn
điểm trong mặt phẳng, (Xem [12]):
- Ta gọi điểm cao nhất của tập S là điểm có tung độ lớn nhất Trong các
điểm cao nhất điểm có hoành độ lớn nhất và điểm có hoành độ nhỏ nhất là các
điểm cực biên của convS
- Ta gọi điểm thấp nhất của tập S là điểm có tung độ nhỏ nhất Trong
các điểm thấp nhất điểm có hoành độ lớn nhất và điểm có hoành độ nhỏ nhất
là các điểm cực biên của convS
- Ta gọi điểm xa nhất về bên phải của tập S là điểm có hoành độ lớn nhất Trong các điểm xa nhất về bên phải điểm có tung độ lớn nhất và điểm có tung độ nhỏ nhất là các điểm cực biên của convS
- Ta gọi điểm xa nhất về bên trái của tập S là điểm có hoành độ nhỏ nhất Trong các điểm xa nhất về bên trái điểm có tung độ lớn nhất và điểm có tung độ nhỏ nhất là các điểm cực biên của convS
Trang 161.4 Thuật toán tăng dần
1.4.1 Thuật toán tổng quát
Cho S ={p0, p1, , p n-1 } là một tập hợp n điểm trong mặt phẳng Gọi Q i-1
là bao lồi của {p0, p1, ,p i-1 } các điểm của S
Ta tìm bao lồi Q i = conv{Q i-1{p i }} từ i = 3, 4, , n-1 đ-ợc gọi là tìm bao lồi theo thuật toán tăng dần, (Xem [14])
Thuật toán 1.4.1
1.4.2 Thuật toán tìm tiếp tuyến
Bài toán: Trong mặt phẳng cho đa giác lồi Q có n đỉnh {p0, p1, , p n-1}
đ-ợc đánh số theo thứ tự ng-ợc chiều kim đồng hồ và p là một điểm nằm ngoài Q Hãy tìm thuật toán xác định đ-ờng thẳng tiếp tuyến từ p tới Q
Thuật toán đ-ợc mô tả cụ thể nh- sau, Xem [14]:
Tìm điểm p i sao cho hai điểm p i-1 , p i+1 đều nằm bên phải pp i thì pp i là tiếp tuyến bên trái của Q Ng-ợc lại, nếu có điểm p i sao cho hai điểm p i-1 , p i+1
đều nằm bên trái pp i thì pp i là tiếp tuyến bên phải của Q
Hình 1: Minh họa thuật toán tìm tiếp tuyến
Đặt Q2 conv{p0,p1,p2}
For i = 3 to n - 1
Q i conv{Q i-1 {p i}}
Trang 17Thuật toán 1.4.2
Độ phức tạp của thuật toán tìm tiếp tuyến
Trong vòng lặp for có cấu trúc tuần tự là hai cấu trúc rẽ nhánh if nên
theo cách đánh giá độ phức tạp thuật toán thì tr-ờng hợp xấu nhất i chạy đến
cuối vòng lặp for mới xác định đ-ợc tiếp tuyến còn lại
Từ đó ta suy ra độ phức tạp thuật toán tìm tiếp tuyến là O(n)
Nhận xét 1.4.1 Nếu X = < p0,p1, , p n-1 > là đ-ờng gấp khúc đơn điệu
thì việc đi tìm bao lồi Q i theo thuật toán tăng dần của X , t-ơng ứng với đi tìm hai tiếp tuyến trái và phải p i p l , p i p r của Q i-1 xuất phát từ đỉnh p i Bởi vì p iQ i-1
1.5 Lý thuyết đồ thị
1.5.1 Đồ thị và đ-ờng đi trong đồ thị
Định nghĩa 1.5.1 (Xem [4]) Đồ thị là một cặp G = (V, E), trong đó:
if p i-1 , p i+1 nằm bên phải pp ithen
pp i là tiếp tuyến bên trái end if;
if p i-1 , p i+1 nằm bên trái pp i then
pp i là tiếp tuyến bên phải end if;
end for
Trang 18Định nghĩa 1.5.3 (Xem [4]) Đồ thị chỉ chứa các cạnh vô h-ớng đ-ợc gọi
là đồ thị vô h-ớng, còn đồ thị chỉ chứa các cạnh có h-ớng đ-ợc gọi là đồ thị
có h-ớng
Định nghĩa 1.5.4 (Xem [4]) Đồ thị G =(V, E) mà mỗi cặp đỉnh đ-ợc nối
nhau bởi không quá một cạnh đ-ợc gọi là đơn đồ thị (th-ờng gọi tắt là đồ thị)
còn nếu đồ thị có những cặp đỉnh đ-ợc nối với nhau nhiều hơn một cạnh thì
đ-ợc gọi là đa đồ thị
Định nghĩa 1.5.5 (Xem [4])
1 Hai đỉnh của đồ thị G đ-ợc gọi là liên thông, nếu trên đồ thị có
đ-ờng đi vô h-ớng nối chúng với nhau
2 Đồ thị đ-ợc gọi là liên thông nếu mọi cặp đỉnh của đồ thị đều liên
Định nghĩa 1.5.8 (Xem [4]) Đồ thị G đ-ợc gọi là đồ thị có trọng số nếu
mỗi cạnh (i,j) của đồ thị đ-ợc gán một số nguyên không âm C(i,j)
Nhãn C(i,j) trên cạnh (i,j) của đồ thị thường biểu diễn “chi phí” thực
tế đi qua cạnh này
Đ-ờng đi có trọng số bé nhất:
- Độ dài của đ-ờng đi trong đồ thị có trọng số bằng tổng các trọng số của các cạnh trên đ-ờng đi đó
- Độ dài của đ-ờng đi trong đồ thị có trọng số bé nhất từ đỉnh a đến
đỉnh b gọi là khoảng cách từ đỉnh a đến đỉnh b
Trang 19- Nếu không có đ-ờng đi từ a đến b thì ta đặt khoảng cách bằng
Định lý 1.5.1 (Xem [4]) Giả sử đồ thị G có n đỉnh Tồn tại đ-ờng đi từ
đỉnh a đến đỉnh b trên đồ thị G khi chỉ khi tồn tại một đ-ờng đi từ a đến b trên
đồ thị này với độ dài không v-ợt quá n - 1
Định lý 1.5.2 (Xem [4]) Tổng tất cả các bậc của các đỉnh trong một đồ
thị bằng hai lần số cạnh của đồ thị đó
1.5.2 Thuật toán Dijkstra
Năm 1959, Dijkstra đ-a ra một thuật toán rất hiệu quả giải bài toán tìm
đ-ờng đi ngắn nhất giữa hai đỉnh trong đồ thị có trọng số với độ phức tạp là
O(n2), (Xem [3])
Bài toán 1.5.1 Cho đồ thị có n đỉnh có trọng số G = (V, E) và hai đỉnh
a, b G Hãy tìm đ-ờng đi có trọng số bé nhất (nếu có) đi từ đỉnh a đến
1 Với đỉnh xuất phát a, gán nhãn d(a) := 0
2 Nếu có cạnh (i,j) mà đỉnh i đ-ợc gán nhãn và đỉnh j ch-a đ-ợc gán nhãn hoặc đỉnh j đã đ-ợc gán nhãn nh-ng
d(i) + l(i,j) < d(j) thì giảm nhãn d(j) := d(i) + l(i,j)
3 Lặp lại b-ớc 2 cho đến khi không gán hoặc giảm nhãn đ-ợc nữa
Trang 20Khi đó tại đỉnh b giá trị gán nhãn d(b) cuối cùng (nếu có) chính là độ dài đ-ờng đi ngắn nhất từ đỉnh a đến đỉnh b (Xem [4])
E j i khi
E j i khi j i l j i L
0
) , (
) , ( )
, ( ] ,
Từ tập hợp động S, ban đầu S = , sau đó nhập đỉnh a vào đ-ợc S = {a} Trong các đỉnh ngoài S, ta chọn đỉnh v có nhãn d(v) bé nhất, bổ sung vào S Tập S đ-ợc mở rộng thêm một đỉnh, khi đó ta cần cập nhật lại các nhãn d cho phù hợp Thuật toán kết thúc khi đỉnh b đ-ợc bổ sung vào S truoc[v] ghi nhận
đỉnh đi tr-ớc v trong đ-ờng ngắn nhất từ a đến b
Tính đúng đắn của thuật toán (Xem [3])
Ta gọi thuật toán của Dijkstra tìm đ-ờng đi ngắn nhất giữa hai đỉnh a và
b trong đồ thị G là DIJKSTRA(G, a , b) (xem Thuật toán 1.5.1, trang 16 )
Độ phức tạp thuật toán
Đánh giá độ phức tạp của thuật toán DIJKSTRA(G, a, b) nh- sau:
- Mỗi b-ớc lặp để tìm ra đỉnh u có độ phức tạp là O(n)
- Việc gán lại nhãn có độ phức tạp là O(n)
Thuật toán thực hiện n - 1 b-ớc lặp vì vậy độ phức tạp của thuật toán Dijkstra là O(n2)
Để giảm bớt khối l-ợng tính toán trong việc xác định đỉnh u ở mỗi b-ớc lặp, có thể sử dụng thuật toán sắp xếp Heapsort (xem [3], trang 221) trên đồ
thị cho bởi danh sách kề Khi đó ta có thể thu đ-ợc thuật toán Dijkstra với độ
phức tạp tính toán là O(mlogn), trong đó m là số cạnh của đồ thị
Trang 21Thuật toán 1.5.1 (DIJKSTRA (G, a, b))
Ví dụ minh họa thuật toán Dijkstra tìm đ-ờng đi ngắn nhất từ đỉnh 1
đến đỉnh 6 cho bởi Hình 2 đ-ợc thực hiện nh- sau:
Ta quy -ớc viết hai thành phần của nhãn theo thứ tự : d[v], truoc[v] và