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à @z bằng cách sử dụng tam giác
Trang 1|
BO GIAO DUC VA DAO TAO TRUONG DAI HOC VINH
PHAN DUC DUNG
BAI TOAN TIM DUONG DI NGAN NHAT GIUA
HAI DINH TRONG DA GIAC DON DIEU
LUAN VAN THAC Si TOAN HOC
VINH - 2009
Trang 2LUAN VAN THAC Si TOAN HOC
Người hướng dẫn khoa học:
PGS TS PHAN THÀNH AN
VINH - 2009
Trang 3
MỤC LỤC
Trang
„70001 1
CHƯƠNG I KIẾN THỨC CƠ SỞ - 2: 2£©£+EEE+2EE£+EEE2+EEz+Evzeee 3
1.1 Độ phức tạp của thuật tOán - 5+ + +e£sk+kkekerekekeeerereereree 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 - + ++s+++z+x+xexexezerererxr+ 9
1.4 _ Thuật toán tăng đần + +2 ++ + x+e SE ++tEEekrerrrrersrreerereeree 11 1.5 Ly thuryét d6 thie ee eeeeecseeeeeeesscseeeeeneceeeetseeesesesseseeeeeeaeaes 12
1.6 Tam gidc phan da giấc ƠH - <6 «+ vvvvrrvcree 17 1.6.1 Định nghĩa và tính Chất - - 5+ +++£++xE+eEeetesereereereserrersee 17
1.6.2 Thuật toán tam giác phân đa giác đơn - - «+ «=+s=+sx++ee+xe 18
CHƯƠNG II THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA
HAI ĐIỂM TRONG ĐA GIAC DON CUA LEE VA PREPARATA 21
2.1 Thuật toán tìm hình ống tay . - 5+ «5+ ++e£+x++x+eeeexeeeerrerers 21
2.2 Thuật toán phễu - ¿2+ +++E++**E+k+E++EeEeEeEEkrxrerrkrrerereree 22 2.2.1 Khái niệm phễu -¿- ¿+ +5 ++++E+E*#E*E+E+E++EeEekerkrxrerrerrerersree 22 2.2.2 Thuật toán phu -¿- + 5 2+3 SE SE£E£E£E+SEeEeEeEEkrxrkrrrrerereree 23
2.3 Thuat todin Chimh 24
CHUONG III THUAT TOAN DUNG BAO LOI LAM DINH HUONG
TÌM ĐƯỜNG NGẮN NHẤT GIỮA HAI ĐỈNH TRONG ĐA GIÁC
DON DIEU
3.1 Thuật toán con tìm bao lồi tiền vi phạm . 55555 +ssssss++ 27 3.1.1 Mô tả bao lồi tiền vi phạm ¿+ tt eveerereeerreresee 27 3.1.2 Thuật toán con tìm bao lồi tiền vi phạm . 555555 ++s5ss+s++ 28
3.2 Thuật toán con tìm linK «s9 vn ve 28
3.2.1 Khái niệm link . - + 5+ + +*Sx+*+veeetrerrrrrrrerrrrrree 28
Trang 43.2.2 Thuật toán tìm ÏinK - «+ + xxx v.v ve 29 E60 áo on 30
Trang 5Minh họa thuật toán tìm tiếp tuyếnn -++s>++++x+ex+e+es+ 11
Minh hoa thuật toán Dijkstra
Minh họa đường đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu 26 Minh họa thuật toán FQ(‹ ,Y ) tìm bao lồi tiền vi phạm
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à @(z) bằng cách sử dụng tam giác phân đa giác Nam
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
trinh bay 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 chỉ 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 va 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
Vĩnh, tháng 12 năm 2009
Tác giả
Trang 8giải bài toán theo thuật toán đang xét, khi các giá trị đầu vào có một kích
thước xác định Một thước đo thứ hai đó là bộ nhớ đồi hỏi thực hiên thuật
toán đó khi giá trị đầu vào có kích thước cho trước Gắn liên với thời gian
tí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 ti 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
#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ụ
do Nghĩa là tồn tại một số nguyên dương n, sao cho fin) > 0 véi moi n > nạ
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 ham s6 g(n)eF, ta dinh nghia O(g(n))
1a mot tap hgp tat ca cdc ham f(n)eF cé tinh chat: T6n tai hang s6 c va ny sao
cho v6i moi n>n, thi f(n) <c.g(n)
Néu f(1) € O(g(n)), thì ta nói rằng ƒ(n) là Ô lớn của g(n)
Những hàm thuộc Ó 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 ƒ{n) = g(n)+O(h(n)), nghĩa là ƒ(n)-g(n) = O(h0)) Định nghĩa 1.1.2 (Xem [2]) Cho hàm số s(¡) 6F, ta định nghĩa Ø(e())
là tập hợp tất cả các hàm ƒ{n) F có tính chất: Tồn tại hằng số c¡, c; và nạ sao
cho v6i moi n>n, thì c,.g() <ƒ(n) <c;.s(n)
Trang 9Định nghĩa 1.1.3 (Xem [2]) Cho hàm số g(n)eF, ta dinh nghĩa O(g())
là tập hợp tất cả các hàm ƒ{z)eE có tính chất: Tồn tại hằng số dương c và nụ
sao cho v6i moi n>nNp thi c.g(n) <f(n)
Nếu ƒn) e O(e(n)), thì ta ndi rang f(7) 1a Ô mê ga lon cua g(n)
Mệnh đề 1.1.1 (Xem [2]) Néu f,(n)eO(g,(n)) va f(n)€O(g,(n)) thi
filn)+f(n)<O(g,(n)+2,(n))
Mệnh đề 1.1.2 (Xem [2]) Néu f,(n)eO(g,(n)) va f,(n)€O(g(n)) thi
#@)+/20) < O(max[{ g,(1),8,(7)})
Mệnh đề 1.1.3 (Xem [2]) Nếu ƒ@)eO(g,0)) và #(ñ)eO(g;()) thì
Fin) Am) <O(,0).s;(n))
Ménh dé 1.1.4 (Xem [2]) Cho P(n) = a'+a,.n''!+ +an+dy là đa thức
bac k, a,> 0 Khi d6 P(n) Ø0)
1.1.2 Cách tính độ phức tạp của thuát toán
Ta sử dụng 7(<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 7) là độ phức tạp tính toán là hàm biến số 0 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 Ó( ) 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 ham 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ử s, có độ phức tạp Ƒ), s;
có độ phức tạp F; Khi đó:
T(s,)<OŒ)); T(s;)<Ó(Œ,) =T(s¡, s;)emax{@Œ,);OŒ,)}
Để 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ững hàm này tạo ra một dây xích thứ bậc tăng như sau:
Ø()c=O(ogn)cO(5 )cO@) cO(logn)cO(?)cO())CO(2")CO(12")CO(1)) Các hàm như 2", z2", ø", ø! đượ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, VJn,n, nlogn, n,n duoc 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 s6, kf hiéu 1a a
- Dòng 2: Với phép toán gán ¡ := 1, kiểm tra ¡ < úó và ¡ := i+l 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+đ)+n(e) = n(c+d+e)+a+b Suy ra T(n)s< Ó(1)
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 ÓC» ¡ )
i=l
(nó thực hiện nhiều nhất ø - ¡ lần)
Do đó độ phức tạp để thực hiện của thuật toán là
T(n) = ¥ (ni) = (nol) - $i) Suy ra T(n) OW’)
Vi du 1.1.3 (Xem [2]) Phân tích độ phức tạp của thuật toán tìm số ø đầu
tiên có mặt trong khoá A gồm 0 số A;, A;, , A„„ nếu không có trả về kết quả 0 nh
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ử ø 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 z = A, thì đã có 2k +1 phép
so sánh được sử dụng Số phép so sánh nhiều nhất 2 + 2 đòi hỏi phải được sử dụng khi phần tử z không có mặt trong bảng Trong trường hợp đó, 2ø phép so sánh được dùng để xác định z không phải là A, đối với k = I, 2, , ø; một
phép so sánh nữa được dùng để ra khỏi vòng lặp
Như vậy khi ø không có mặt trong bảng, tổng số các phép so sánh đã sử
dụng là 2ø + 2
Từ đó, thuật toán đòi hỏi tối đa là Ó(n) phép so sánh
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 zb là đường thẳng
đi qua hai điểm phân biệt ø và b theo hướng ab
Định nghĩa 1.2.1 (Xem [14]) Giả sử, trong mặt phẳng Oxy cdc diém
a(xi,yi): P(x;„y¿); c(x¿„y¿) Kí hiệu S(ø,b,c) là điện tích đại số của tam giác abc, khi đó diện tích đại số được xác định như sau:
- Điểm c nằm trên đường thẳng ab khi va chi 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 < Dạ pị - D.>
là một dãy những điểm p, (= 0, I, , k) mà trong đó mọi cặp những điểm kề nhau
p, và p,., biểu thị một đoạn thẳng v6i moi i = 0, 1, ., & 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 ø đỉnh <p,, ., Dy 5 Dy >:
Khi đó, ta nói fhứ tự các đỉnh p, (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 va chỉ nếu tiếp giáp với phần bên trái cạnh [p„ p,.,Ì Vi=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, 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 Ð _ 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 Óy
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 =< ứạ, đ¡ , đ„> đơn điệu theo phương L khi chỉ khi tồn tại một hệ trục toạ độ dé các vuông góc
OÓxy có trục hoành cùng phương với L sao cho hoành độ x, của các điểm 4,
thoả mãn x,<+,,¡ với mọi ¡= 0,m—I
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 «Z trong mặt phẳng được gọi là
tập lôi nếu Vxị, x; e cZ thì [x¡, x;]={ 2x,+(1-2)x;:0 < 2 < lhc
Định nghĩa 1.3.2 (Xem [12]) Một tổ hợp lôi của các điểm x,, x, trong mat
phẳng là một tổng có dạng 2 ,x,+2„x„, với V 4¡„24„ >0, sao cho 4¡ +4; = l Định nghĩa 1.3.3 (Xem [12]) Cho tập <Z trong mặt phẳng
- Giao của tất cả các tập lồi chứa «Z gọi là bao lồi của «Z, Kí hiệu là
convzZ.
Trang 1510
- Giao của tất cả các tập lồi đóng chứa ‹Z gọi là bao déng cha &
Kí hiệu là convzZ
Nhận xét 1.3.1 (Xem [12])
(i) conveZ là tập lồi nhỏ nhất chứa <⁄
(ii) cZ là tập lồi ©conveZ=zZ
(iii) convzZ là tập đóng nhỏ nhất chứa «Z
Mệnh đề 1.3.1 (Xem [12]) Tập <Z lồi khi và chỉ khi «Zchứ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 mat phang
Điểm x eM được gọi là điểm cực biên của tập hợp M nếu x e|x,„x;,],
+, 1; M thì x =x, hoặc x =x;¿
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 Š 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 Š 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 Š 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 1611
1.4 Thuật toán tăng dân
1.4.1 Thuật toán tổng quát
Cho § ={pạ, p, , p„.,} là một tập hợp ø điểm trong mặt phẳng Gọi Ó,.,
là bao lồi của {pạ, p¡, j?,¡} các điểm của S
Ta tìm bao lồi Q,= conv{Ó,,Y {p,}} từ i = 3, 4, , n-1 được gọi là tim bao lồi theo thuật toán tăng dân, (Xem [14])
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 @ có ø đỉnh {pạ, pạ 0„¡}
được đánh số theo thứ tự ngược chiều kim đồng hồ và p là một điểm nằm
ngoài Ó Hãy tìm thuật toán xác định đường thẳng tiếp tuyến từ p tới Ó
Thuật toán được mô tả cụ thể như sau, Xem [14]:
Tìm điểm p, sao cho hai điểm p,„, ø,¡ đều nằm bên phải pp, thì pp, là tiếp tuyến bên trái của Q Ngược lại, nếu có điểm p, sao cho hai điểm p,¡, P¡,¡
đều nằm bên trái pp, thì pp, là riếp tuyến bên phải của Q
Trang 1712
Thuát toán 1.4.2
for ¡= 1 to n do
if p, p,,¡ nằm bên phải pp, then
Dp, là tiếp tuyến bên trái end if;
Ïp,¡„ p,., nằm bên trái pp, then
pp, là tiếp tuyến bên phải end ïf;
end for
Độ 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 ¡ 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à Ó(n)
Nhận xét 1.4.1 Nếu X =< pạ.p¡ p„, > là đường gấp khúc đơn điệu thì việc đi tìm bao lồ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;?„ p,p, của Ó,, xuất phát từ đỉnh p, Bởi vì p, £Ó,.,
1.5 Lý thuyết đô thị
1.5.1 Đồ thị và đường đi trong đồ thị
Định nghĩa 1.5.1 (Xem [4]) Dé thi 1a mot cap G = (V, E), trong do:
Trang 1813
Đị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à dé thi) 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.7 (Xem [4]) Đường đi trong đồ thị là một dãy các đỉnh:
(ẤN; Xzy .v Ấy Äjzp; cà Ấz ky Ấy )
sao cho mỗi đỉnh trong dãy (không kể đỉnh đầu tiên) kể với đỉnh trước nó
bằng một cạnh nào đó, nghĩa là: V¿ = 2, 3, , k-1, k: (,¡, x)eE
Đị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 (¡,/) của đồ thị được gán một số nguyên không âm C()
e Nhdn C(i,j) trén cạnh (,/) của đồ thị thường biểu diễn “chi phí” thực
tế đi qua cạnh này
Trang 1914
- Nếu không có đường đi từ ø đến b thi ta đặt khoảng cách bằng œ Định lý 1.5.1 (Xem [4]) Giả sử đồ thị G có ø đỉnh Tồn tại đường đi từ đỉnh z đến đỉnh ? trên đồ thị G khi chỉ khi tồn tại một đường đi từ ø đến b trên
đồ thị này với độ dài không vượt quá ø - 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 Thuat todn Dijkstra
Nam 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(n’), (Xem [3])
Bai toán 1.5.1 Cho dé thi c6 n dinh cé trong s6 G = (V, E) va hai dinh
a, b € G Hãy tìm đường đi có trọng số bé nhất (nếu có) đi từ đỉnh z đến đỉnh b
Hình 2: Minh họa đường di ngắn nhất từ đỉnh I đến đỉnh 6
se Mô tả thuật toán
Thuật toán thực hiện việc gán và giảm giá trị nhãn đ() tại mỗi đỉnh ¡ của đồ thị G
1 Với đỉnh xuất phát z, gán nhãn d(a) := 0
2 Nếu có canh (i,j) mà đỉnh ¡ được gán nhãn và đỉnh j chưa được gán nhãn hoặc đỉnh 7 đã được gán nhãn nhưng
d(i) + Ki.) < d(j) thi giam nhan đ) := d0) + ij)
3 Lap lai budc 2 cho đến khi không gán hoặc giảm nhãn được nữa
Trang 20phù hợp Thuật toán kết thúc khi đỉnh b được bổ sung vào ®$ #„øc[v] ghi nhận
đỉnh đi trước y trong đường ngắn nhất từ ø đế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 ø và
b trong đồ thị G là DLJKSTRA(G, a, b) (xem Thuật toán 1.5.1, trang 16 )
e Độ phức tạp thuật toán
Đánh giá độ phức tạp của thuật toán DIJKSTRA(G, a, ở) như sau:
- Mỗi bước lặp để tìm ra đỉnh 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 ø - I bước lặp vì vậy độ phức tạp của thuật toán
Dijkstra la O(n’)
Để giảm bớt khối lượng tính toán trong việc xác định đỉnh ở mỗi bước
lặp, có thể sử dụng thuật toán sắp xếp Heapsort (xem [3], rang 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à ØŒnlogn), trong đó z là số cạnh của đồ thị
Trang 2116
Thuật toán 1.5.1 (DIJKSTRA (G, a, b))
Cho: D6 thi c6 trong s6 khong 4m G = (V, E) với n đỉnh; a, beV
Tìm: Đường di ngan nhat tir a dén ở
end for;
end;
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ự : đ[v], truoc[v] va
kí hiệu ” cho đỉnh là nhãn.