1. Trang chủ
  2. » Luận Văn - Báo Cáo

bài toán tìm đường đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu

42 653 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 42
Dung lượng 6,58 MB

Nội dung

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 2

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC VINH

PHAN ĐỨC DŨNG

BÀI TỐN TÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA HAI DINH TRONG DA GIAC DON DIEU

CHUYEN NGANH: HINH HOC - TOPO

MA SO: 60 46 10

LUAN 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 TỐ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

Trang 5

Hình I: Hình 2: Hình 3: Hình 4: Hình 5: DANH SÁCH HÌNH VẼ

Minh 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

Trang 6

MỞ ĐẦ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 tố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,

Trang 7

Chươ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 tố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

Trang 8

Chương I

KIẾN THỨC CƠ SỞ

1.1 Độ phức tạp của thuật toán 1.1.1 Các định nghĩa và tính chất

Độ phức tạp của thuật toán là những thước đo để so sánh tính hiệu quả của thuật toán Một thước đo hiệu quả đó là thời gian máy tính sử dụng để

giả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

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

Trang 10

Tuy 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ất là:

(1) Phép gán có độ phức tap O(1)

(2) Phép nhập vào thủ tục có độ phức tạp Ó(1)

(3) Phép ra khỏi thủ tục có độ phức tạp Ó(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 cua 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, Vn, n, nlogn, n°, n°, 2", n2", n!

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à

Trang 11

Cá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 1: fact:= 1; 2 for i:=1 ton do; 3: fact:= fact + i; 4 end 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)

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 1 for ¡ := I to ø do 2 if a = A, then 3: return(A,) 4 end for 5 return(0) end

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

Trang 13

1.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:

S(a,b.c) = IDI) Oe WIT Khi đó ta gọi: - Điểm c nằm bên trái đường thẳng ab (ki hiéu Left(a,b,c)) khi va chi khi S(a,b,c) > 0 - Diém c nam bén phdi duéng thang ab(ki hiệu Righf(a,b,c)) khi và chỉ khi S(a,b,c) < 0

- Đ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 >:

Trang 14

ngượ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à

Trang 15

10

- 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ó

Trang 16

11 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]) Thuật toán 1.4.1 Đặt Ó; c conv{po,Ði.D;} For i=3ton-1 Q;<— conv{Q;, Y {p;}}

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 tố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¡,¡

Trang 17

12

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ị

Trang 18

13

Đị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.5 (Xem [4])

1 Hai đỉnh của đồ thị G được gọi là /é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 thông với nhau

Định nghĩa 1.5.6 (Xem [4]) Bác của một đỉnh đồ thị là số cạnh kê với

đỉnh đó

Đị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

©_ Đườ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 đó

Trang 19

14

- 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)

Trang 20

15

Khi đó tại đỉnh b giá trị gán nhãn đ(b) cuối cùng (nếu có) chính là độ dài đường đi ngắn nhất từ đỉnh z đến đỉnh b (Xem [4])

i,j) khỉ (LJj)<E

Ta xây dựng ma trận trọng số: 7{[¡, j]= 4% khi (i.j)# E

0 khi i=j

Từ tập hợp động S, ban dau § = ø, sau đó nhập đỉnh ø vào được S = {đ]} Trong các đỉnh ngoài Š, ta chọn đỉnh y có nhãn đ(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 đ cho

phù 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 độ

Trang 21

16

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 ở for veV do d(v) := ~; d(a) :=0; S:= ¢; truoc[v] := 4; end for While b¢S do Begin := đỉnh không thuộc Š có nhãn d(u) nhỏ nhất; S:=S Y{u}; for veV\S do if d(u) + I(u,v) < d(v) then d(v) := d(u) + lu,v); truoc[v] := ; end if; 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

Trang 22

17 Khi đó ta xây dựng bảng: Bước lặp s Dinh Đỉnh | Đỉnh | Đỉnh | Đỉnh | Đỉnh | Dinh được chọn 1 2 3 4 5 6 Khởi tạo ó 0.1 112 | ø,1 2,1 o,1 | 0,1 1 1 2 0 - 6,2 21° wo, 1 8,2 2 1,2 4 0 - 34 - 6,4 8,2 3 1,2,4 3 0 - - - 6.4 43”

Bảng kết quả tính toán theo thuật toán DỤkstra của ví dụ cho bởi Hình 2

Trong ví dụ này, thuật toán dừng ở bước thứ 3 của vòng lặp While vì xác định đỉnh 6 là nhãn

Vậy đường đi ngắn nhất từ đỉnh 1 đến đỉnh 6 là 1 - 4 - 3 - 6 và có độ dài

bằng 4

Trong Chương 2 của luận văn, chúng tôi sử dụng phép tam giác phân

cho đa giác đơn bất kỳ và chi tiết phép tam giác phân vào đa giác đơn điệu 1.6 Tam giác phân đa giác đơn

1.6.1 Định nghĩa và tính chất

Một đa giác đơn chia mặt phẳng ra thành phần trong, biên và phần ngoài Giả sử đa giác đơn P_ = <vwạ, vị, , v„¡> Hai đỉnh không kê nhau y, và v, với ¿ < j thì đoạn thang vy, nối hai đỉnh này nằm trong miền của đa giác

đơn gọi là đường chéo

Định nghĩa 1.6.1 (Xem [14]) Tam giác phân một đa giác là dùng những đường chéo không giao nhau của đa giác để chia phần trong của đa giác thành các tam giác

Định lý 1.6.1 (Xem [14]) Mọi phép tam giác phân đa giác nø đỉnh cần sử

Trang 23

18

Từ định nghĩa đa giác y - đơn điệu (xem Mục 1.2), ta định nghĩa đỉnh lùi phía trong của đa giác đơn

Định nghĩa 1.6.2 (Xem [14]) Một đỉnh v của đa giác đơn được gọi là đỉnh lài phía trong nếu góc bên trong tại v lớn hơn Z và hai đỉnh kề bên nó có tung độ lớn hơn hoặc nhỏ hơn tung độ của v

Chúng tôi trình bày ở đây thuật toán tam giác phân đa giác đơn có độ phức tạp Ó(logø) với ý tưởng phân chia đa giác đơn thành các đa giác đơn

điệu, sau đó tam giác phân đa giác đơn điệu 1.6.2 Thuật toán tam giác phân đa giác đơn

Bài toán 1.6.2 Cho đa giác đơn P có ø đỉnh Tìm phép tam giác phân

đa giác đơn P

Để giải bài toán, ta cần thực hiện hai thuật toán

se Thuật toán phân chia đa giác đơnP thành các đa giác đơn điệu (Xem [14], trang 48)

Thuật toán dựa vào các đường thẳng nằm ngang đi qua các đỉnh đa giác

với giả thiết không có hai đỉnh nằm trên một đường nằm ngang Trong mỗi

hình thang đó chính xác hai đỉnh (đỉnh hộ trợ), một đỉnh nằm ở cạnh trên và

một đỉnh nằm ở cạnh dưới Nếu một đỉnh hộ trợ nằm giữa cạnh của hình thang

thì nó là điểm lùi phía trong Mọi đỉnh hộ trợ được nối với đỉnh đối điện của

hình thang: nối xuống với điểm “lùi xuống”, và nối lên cho điểm lùi “hướng

lên” thì các đường chéo nay sé phan chia thành các đa giác đơn điệu theo

phương thẳng đứng Khi đó các điểm lùi trong được loại bỏ, do đó các đa giác

này là các đa giác y - đơn điệu

Trang 24

19

Thuát toán I.6.I MNT(P ) (Xem [14])

Bước 1 Phân loại các đỉnh bởi tung độ y giảm dần

Bước 2 Kẻ các đường thẳng theo phương trục Óx lần lượt qua các đỉnh của đa giác

Bước 3 Phân chia đa giác thành các đa giác đơn điệu bởi việc

nối từ các điểm lùi phía trong

se Thuật toán tam giác phan đa giác đơn điệu TGPI(P )

Đa giác đơn điệu xác định bởi hai đường gấp khúc có các đỉnh phân loại bởi tung độ y Ta gọi đường gấp khúc phải của đa giác P là đường gấp khúc gồm các đỉnh lấy theo chiều kim đồng hồ từ đỉnh có tung độ cao nhất đến điểm có tung độ thấp nhất của P, đường gấp khúc còn lại là đường gấp khúc trái của đa giác đó

Trang 25

20 Thuật toán 1.6.2 TGPI(P ) (Xem [LI])

1 Kết hợp các đỉnh đường gấp khúc trái và đường gấp khúc phải của P vào một dãy dựa trên việc giảm tung độ y các đỉnh

Giả sử > „ > > u„ biểu thị dãy các đỉnh của P 2 Khởi tạo Stack S = ø, đẩy u,, u, vao S

3 for j=3 ton- 1

4 do if u, va dinh cua S nam trén hai dudng gap khtic

5 then day ra tất cả các đỉnh từ S

6 Chèn vào trong /) một đường chéo từ ; đến mỗi

đỉnh đã được đẩy ra từ S, trừ đỉnh cuối cùng 7 Day u;., va u; vao S

8 Else đẩy ra một đỉnh từ S

9 Đẩy ra những đỉnh khác từ S với điều kiện những

đường chéo từ , tới các dinh dé nam trong P

Chèn những đường chéo này vào trong D

Đẩy đỉnh cuối cùng mà đã được đưa ra sau vào Š 10 Đẩy u; vao S

11 Thêm những đường chéo từ u,, dén tat cả các đỉnh của S và trừ đi đỉnh đầu tiên và đỉnh cuối cùng đã được đẩy ra từ S

Thuật toán tam giác phân đa giác đơn

Ta kí hiệu thuật toán tam giác phân đa giác đơn P là TGP(P ) Thuật toán 1.6.3 TGP(P )

Cho: Đa giác đơn P

Tìm: Một phép tam giác phân đa giác đơn P Bước 1 ïif P là đa giác đơn điệu then

Thực hiện TGPI(P ) Bước 2 else Thực hiện MNT(P )

Trang 26

21

Chương II

THUẬT TỐN TÌM ĐƯỜNG ĐI NGÁN NHẤT GIỮA HAI ĐIỂM TRONG ĐA GIÁC ĐƠN CỦA LEE VÀ PREPARATA

Từ thuật toán tam giác phân đa giác đơn, 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 (Xem [17]) dựa

vào các thuật toán Dijkstra trên đồ thị, thuật toán tìm hình ống tay và thuật

tốn phếu

Chúng tơi trình bày các kiến thức liên quan và thuật toán chính 2.1 Thuật toán tìm hình ống tay

Định nghĩa 2.1.1 (Xem [13], rang 395) Cây đối ngẫu của một phép

tam giác phân đa giác đơn P_ là một đồ thị G = (V, E) mà trong đó mỗi nốt của V tương ứng là một tam giác của phép tam giác phân và mỗi cạnh của # là đoạn nối hai nốt của V khi chỉ khi hai tam giác có một cạnh chung là đường chéo của P Đường chéo của P va cạnh trong G được gọi là đối ngẫu

Định nghĩa 2.1.2 (Xem [13], rang 395) Một đa giác gọi là hình ống fay nếu cây đối ngẫu của phép tam giác phân đa giác đó là một dãy những cạnh

của đồ thị (cây đối ngẫu) nối tiếp nhau mà mỗi điểm nối là đầu mút của vừa đúng hai cạnh của đồ thị đó (trừ điểm đầu và điểm cuối) Khi đó, nếu dãy đó

có điểm đầu là z và điểm cuối là b thì ta nói hình ống tay đó xác định bởi

điểm a va b

Theo phép tam giác phân đa giác đơn và định nghĩa hình ống tay, ta có

hình ống tay là một đa giác đơn

Bài toán 2.1.1 Cho đa giác đơn Z, s và / là hai điểm trong miền đa giác P.- Tìm thuật toán xác định hình ống tay xác định bởi s và ¿

Trang 27

22 Thuật toán 2.1.1 (SLEEVE(Œ ))

Cho: Một phép tam giác phân T đa giác đơnP Tìm: Một đa giác đơn Ð ˆ là hình ống tay

Bước 0 Tạo ra cây đối ngẫu Ớ = (V, E) của phép tam giác phân

đa giác đơn P, se A (s), £eA() với A(s),A()<V

Bước 1 Thực hiện DLJKSTRA(G,A(s),A()) (xem Thuật toán 1.5.1)

Đặt P “= UA, A, là các đỉnh của đường đi ngắn nhất

từ A(s) đếnA (7) (¡= 1,)

Độ phức tạp thuật toán tạo hình ống tay là ÓŒ¡ˆ)

2.2 Thuật toán phéu 2.2.1 Khái niệm phêu

Giả sử P 14 mot đa giác đơn có ø đỉnh; s, v là hai điểm thuộc đa giác P

Ký hiệu đường đi ngắn nhất từ s tới y trong#_ là [](œ.v)và U [| [(.v) Giả

sử đ = „w là một đường chéo hay một cạnh của P và ø là điểm mà hai đường

[][@ và [ [(a.w) rẽ ra Khi đó ] [(z.z), [ [(a.w) là các đường lồi ngoài, tức là: với Œ là miền trong giới hạn bởi | [(.z) | ](a.w) và đoạn uw, khi đó:

conv(] ](a,w))1 C= ¢, conv([ ](a,w))1 C= ¢

Dinh nghia 2.2.1 (Xem [17], trang 211) Hop cua céc đường Il@

[][.) v6i d = uw goi la Phéu F Khi đó, a gọi là đỉnh của phễu (điểm sâu

nhất của phếu), ki hiéu: CUSP(F_ ) = a

Đối với phễu “_ và đường chéo ww của ta có hai trường hợp xác định

phéu mới được nối trực tiếp từ w” đến z (phéu co rút lại) hay tiếp tuyến từ w°đến

] l(á.¿) hoặc [ [(a.w) (đỉnh phễu dịch chuyển, đuôi mở rộng, phễu co rút lại)

Bài toán 2.2.1 Cho hình ống tay P ˆ, xác định bởi s và / Hãy tìm thuật

Trang 28

23

Chúng tôi trình bày thuật toán Phễu của Lee và Preparata nhưng có sự cải tiến của Guibas, Hershberger, Sharir và Tarjan (Xem [17]) để giải bài này

2.2.2 Thuật toán phễu

Giả sử đ = uw là một đường chéo của P ˆ, với phễu hiện thời F= F,, 1a

một danh sách phân loại [ư, w,;„ , đ, wạ, .,„], ở đây ø = „ạ= wạ là đỉnh của

£', J |(a.,)= [mọ, ., m], | [(a.w)= [a, ., w,] và tụ = u, w, = w Ching ta kí hiệu trong thuật toán đỉnh của cái phếu hiện tại là CUSP(Z' )

Thuật toán bắt đầu từ s với CUSP(F ) = s và tiếp tục một cách đệ quy như sau: Thuật todn 2.1.2 (FUNNEL(F_ )) (xem[13], trang 212) Cho: Đa giác P ˆ là hình ống tay Tìm: Các đỉnh y = CUSP(Z)

Giả sử ¡„ w là điểm đầu tiên và điểm cuối cùng của 7, và a= CUSP(F) (nhu vay '=[ [(a.u)U[ |(a.w) )

Giả sử Auwx là tam giác trong phép tam giác phân T cua

đa giác P ˆ với đường chéo w là một cạnh của tam giác

(a) — Tìm kiếm phần tử v của 7', sao cho vx là một tiếp tuyến của 7 tại y (nếu đường thẳng ax không cắt Z thì y = a) Viéc tìm kiếm hoàn toàn tương tự như việc tìm kiếm một tiếp tuyến của đa giác

lồi từ một điểm bên ngồi (heo Thuật tốn 1.4.2), Chia F Ux thành hai phễu mới 7= [u, , v, x] và ?;= [x, v, w] Nếu

ve [ [(a.z) thì đặt CUSP()) := v, CUSPŒ;) := a Mặt khác, nếu ve [](.w)thì CUSP(F,) := a, CUSP(E,) := v (b) Dat [](s.x) := [ [(.v) Uv+ (c) Nếu ux là đường chéo của P ‘ thi goi FUNNEL(F,) mot cach đệ quy (d) Nếu wx là đường chéo của P ˆ thì gọi FUWNEL(Z,) một cách đệ quy

(e) Nếu / nằm trong Awx thì ta chon f := x

Kết quả thuật toán cho ta đường đi ngắn nhất Z từ s đến ¿ với

2 = [s=v,, V5, ., v„„ /]J Trong đó v,, ¿ = 1, 2, , m là các đỉnh của

cdc phéu F

Trang 29

24 e Tinh ding dan của thuật toán

Chứng minh tính đúng đắn của thuật toán phễu (Xem [17])

e_ Độ phức tạp của thuật toán

Độ phức tạp của thuật toán phếu là Ó(n) (Xem [L7], trang 213-215) 2.3 Thuật toán chính

Cho: Đa giác đơn # và hai điểm s, / nằm trong P

Tìm: Đường đi ngắn nhất từ s đến / trong đa giác đơn P Bước I1 Thực hiện phép tam giác phân TGP(P ), ta gọi phép

tam giác phân đó là T

Bước 2 Với phép tam giác phân T_, thực hiện SLEEVE(P )

ta được hình ống tay P ’

Bước 3 Thực hiện FUNNEL(F ) với hình ống tay P “

Tính đúng đắn của thuật toán

Để chứng minh tính đúng đắn của thuật toán ta dựa vào một số mệnh đề sau:

Mệnh đề 2.3.1 (Xem [13]) Giả sử s và ứ là hai điểm trong đa giác đơn P,

Š là tập các đỉnh của đường ống tay xác định bởi s và / (phép tam giác phân) Khi đó, các đỉnh mà đường ngắn nhất từ s đến ¢ thudc tap S U {s, f}

Mệnh đề 2.3.2 (Xem [17]) Giả sử A „wx là một tam giác trong phép tam giác phân của đa giác sao cho AwxI '= d Khi đó đường ngắn nhất từ s

tới x là từ [ [(s.a) và đến ax Nếu axI #'= ø thì đi thẳng tới x, hay ngược lại sẽ đi theo một phần ] [(.z) | |(a.w) tới v nếu vx là tiếp tuyến của #” tai v sau

đó tiếp tục theo đoạn thẳng vx

Từ đó ta suy ra:

Trang 30

25

e Thuật toán kết thúc thì tìm được đường đi ngắn nhất từ s đến ¿ vì luôn tìm được duy nhất đường ngắn nhất nằm trong hình ống tay

Độ phức tạp thuật toán

Thuật toán chính có độ phức tạp là Ó(?)

Nhận xét 2.3.1 Trường hợp đa giác đơn điệu có ø đỉnh hợp bởi hai

đường gấp khúc đơn điệu theo cùng một phương < a=pp, p;, Ð > và

< asqg, q¡ b > thì đường đi ngắn nhất trong miền đa giác đơn điệu từ đỉnh a đến đỉnh b như là một đặc biệt thuật toán trên

Việc đánh giá độ phức tạp thuật toán này dựa vào: - Bước 1 có độ phức tạp là O(n)

- Bước 2 có độ phức tạp là ÓŒˆ)

- Bước 3 có độ phức tạp là Ó()

Do đó độ phức tạp thuật toán của Lee và Preparata tìm đường đi ngắn

nhất giữa hai đỉnh trong đa giác đơn điệu 14 O(n’)

Phần minh họa của thuật toán của Lee và Preparata được trình bày

Trang 31

26

Chương II

THUAT TOAN DUNG BAO LOI LAM ĐỊNH HƯỚNG

TÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA HAI ĐỈNH

TRONG ĐA GIÁC ĐƠN ĐIỆU

Trong [9] và [10], Phan Thành An đã đưa ra ý tưởng tìm đường di ngắn nhất giữa hai đỉnh trong đa giác đơn không cần quá trình tam giác phân đa giác Vấn đề này được trình bày lại trong [5] cho trường hợp đa giác đơn điệu

Trang 32

27

Bài toán: Cho đa giác đơn điệu PQ tao boi hai đường gấp khúc don điệu P = < a=pạ, 0 D„¡ =b > và Q= < a=qụ, qị đ„¡=D >

Tìm đường đi ngắn nhất, Z, trong miền đa giác P@_ nối hai đỉnh ø và b 3.1 Thuật toán con tìm bao lôi tiền vi phạm

Cho hai đường gấp khúc đơn điệu X va Y theo cùng một phương có chung đỉnh đầu a và đỉnh cuối ð X = < a=pụ, p¡ , p„¡=b > các đỉnh sắp xếp

cùng chiêu kim đồng hồ, Y = < ø=qụ, đ¡ , đ„,=b > các đỉnh sắp xếp ngược

chiều kim đồng hồ và đặt Ó, = conv(%, = < vụ, Vị, ., 9, >), ( <m-]) 3.1.1 Mô tả bao lôi tiền vi phạm (Xem [Š])

Trong thuật toán tăng dần đi tìm bao lồi của X, ta có các bao lồi Ó,, Ó;, „ Ở, „¡ Giả sử Ó,., là bao lồi đầu tiên chứa đỉnh nào đó của Y_ \{gạ}

Khi đó ta gọi Ợ, là bao lôi tiển vỉ phạm của X— đối với Y_ và kí hiệu là Ợ

Tại p,,, kẻ hai tiếp tuyến trái p,,,, và tiếp tuyến phải p,,¡, tới Q,

Kí hiệu:

-X = <P,:D› ve D >, là đường nối các điểm cực biên bên trái của

bao lồi Ở” từ p, đến p„

-Y= <q, q-: ¬ > là đường nối các đỉnh của Y_ \{zạ¿} sắp theo

thứ tự tăng dân chỉ số nằm trong miền < p,,¡Ð¿ Ø,,¡Ð„ X >> (g có thể

trùng với ?„¡)

-FQ(X „Y ) là quá trình đi tìm @,X và Ÿ

Như vậy, quá trình FQ(x „Y ) cho ta kết quả: bao lồi tiền vi phạm Q*

Trang 33

28

Hình 4: Minh họa thuật toán FQ(%X,Y ) tìm bao lôi tiền vỉ phạm

3.1.2 Thuật toán FQ(% ,Y ) tìm bao lồi tiên vi phạm Thuát toán 3.1.1 Bước — Dat O':= 0; i:=1; Buéc1 While @” không là bao lồi tiền vi phạm do icitl

Tính đúng đắn của thuật toán (xem [5], trang 27-28)

Thuật tốn FQ(X ,¥ ) tìm bao lồi tiền vi phạm có độ phức tạp tính toán la O((m-1)(n-2))

Nhận xét 3.1.1 Trong qué trinh tim bao 16i tién vi pham cla X_ đối

voi Y , dé kiém tra dinh g, cua Y \{qo} cé nam trong bao Idi cia Q,,, hay

không, ta chi can xem q; c6 thudc vao mién tam gidc p,,,p,p, hay không

3.2 Thuật toán con tim link 3.2.1 Khái niệm link

Cho đa giác đơn điệu PQ_ Xét hai đường gấp khúc X và Y_ trên đa

giác PO làxX = P vàY =@ có chung đỉnh đầu z và đỉnh cuối b Đường

Trang 34

29

Định nghĩa 3.2.1 (Xem [9]) Link nối hai đường X và Y là đoạn thẳng

[z,v'] thoã mãn điều kiện ¿e X và ve Ÿ và mọi đỉnh của X \{u"} nam bên trái đường thẳng zw và Ÿ \{v'}I # =ø, (E' là miền mặt phẳng giới hạn bởi <9”, X, p¿ịp, >)

Tương tự ta cũng có khái niệm link của đường gấp khúc X vàY trong

đa giác đơn điệu XY_ trường hợp X =< j, pị , 0„¡ > có các đỉnh sắp xếp

ngược chiều kim đồng hồ và Y = < đụ, đ¡ , đ„¡ > có các đỉnh sắp xếp cùng chiều kim đồng hồ

Xét bài toán tìm link trong trường hợp X có các đỉnh sắp xếp cùng chiều kim đồng hồ

3.2.2 Thuật toán tìm link (Xem [5])

Mơ tả thuật tốn

Gia sit X= <P,:Dp- ws D> va Y=< q: LAI 1 đg>- trong đó

1<s<n-2 va 1<t<m-2 Ching ta di tim link theo su tang dan tir nhiing đỉnh

đầu tiên của X và Ÿ rồi đến những điểm kế tiếp

Cụ thể, bắt đâu với hai đỉnh p, := pQ, đ, := g„ ta xét link tam

[u,v'] := [p”„ 4] ta kiểm tra tất cả các đỉnh của X\{#} xem có tồn tại đỉnh

thuộc bên phải „/v” (nếu có thì gọi đó là vi phạm X) Nếu tồn tại vi phạm X

thì ta bỏ đỉnh p và tiếp tục với ic i+1, gan lại „” := p”„

Tiếp tục quay lại quá trình kiểm tra các đỉnh X \{u”} so với link tạm

[z',v"] vừa thiết lập và tiếp tục như vậy đến lúc không còn đỉnh vi phạm nữa

Khi không tồn tại đỉnh nào của X vi phạm nữa thì ta sẽ kiểm tra các đỉnh của

Ÿ Nếu không tồn tại đỉnh nào của Ÿ \{v”} thuộc vào Z thì [z,v'] là đường

Trang 35

30

Ngược lại, ta có đỉnh của Ÿ \{v”} thuộc vào # (gọi là vi phạm Ÿ ) thì ta

bỏ đỉnh q, và tiép tuc v6i j<—j+1(gan lại v' := q’)

Bây giờ ta dugc link tam [v’,v'] mới và quay lại sự kiểm tra như ban đầu đối với sự vi phạm X rồi vi phạm Ÿ_ đến khi nào đồng thời không còn vi phạm Xvà Ÿ thì dừng lại Và ta nhận được [zÏ,v'] là đường link của X và Y

Thuật toán 3.2.1 Link(X ,Y )

Bước) — Thuc hin FQ(X ,¥ ) Giả sử

KES Pye Porm D7 Y ESI Qo >

Buéc 1 uc= Đụ vis q,: 1:=0;7 :=0; Bước2 While [z ,v'] không phải link do While [w,v'] vi phạm X do ici+l:u =p; While [w’,v'] vi pham Y do ich vq 3.3 Thuật toán chính

Gia sit O° va [u",v’] lần lượt là bao lồi tiền vi phạm và link của đường gấp khúc cùng chiều (tương ứng ngược chiều) kim đồng hồ X đối với Y ngược chiều (tương ứng cùng chiều) kim đồng hồ Khi đó ta gọi: - TC(% ) là biên trái (tương ứng biên phải) của bao lồi @” lấy từ đỉnh a dén u’ - TCL(% ,¥ ) 1a viéc di tim TC(X_) va link [u",v’] gittaX và Y (Xem [5])

Quy uée: Néu [u',v'], (u':= p,; v= q, Ia link cha X = < a=pg pạ 0„¡=b>

Trang 36

31

< w”,v', b> tương ứng là [wÏ,v”]Y < đ„ đ,„ - đ„a b> và đường gấp khúc < ứ”, b > tương ứng là < #”, pạ„¡ , D„a„ Ð >

3.3.1 Mô tả thuật toán

Xét đa giác đơn điệu PQ@_ Bắt đầu gán / := 0,xX=P ,Y =@ Thực hiện TCL(X ,Y ) có link là [z,v'] và TC@ ) Đặt Z¿= TC(X )

- Nếu y” = b thì đường ngắn nhất Z = Z¿Y [',v'] Nếu vzb thì ta gán

lại !:= 1,X =<HÏvÏ, ,b>,Y =<H, b> Sau đó thực hiện TCLŒ ,Y ) với X va Y vita gan, ta lại có link là [z',v'] và TC@ ) Đặt Z= TC(X )

Nếu v'= b thì đường ngắn nhất Z = Zạ YZ, Y [w',v']

- Tương tự nếu vÌ zb thì ta gán lại !:= 2, rồi /:=3, và X = < nÏ,„v”, , b >, Y =<r, ,b > Cho đến khi v”= b thì kết thúc và lúc đó ta có đường ngắn I nhat 2= Y 2, Y [wv] j=0 Thuật toán chính

Bước 1 Bat dau tai a = py= qo Dat /:=0,X =P ,Y=Q

Buée2 — Thuc hién TCL(X ,Y ) Dat 2,=TC(x ) 1 Ifv'=bthen2 = Y 2, Y [z,v'] Stop j-0 Else, datX =<u,Vv, ,b>VAY =<u, ,b> 1:=1+ 1 go to (2)

Nhận xét: Viéc dat X =P ,Y =Q hoặc X =Q, Y =P trong Buéc 1

Trang 37

32 3.3.2 Tính đúng đắn của thuật toán

Thuật toán chính sử dụng bao lồi làm định hướng cho ta cách tìm đường đi từ đỉnh a đến đỉnh ð trong miền đa giác đơn điệu PQ@

Tính đúng đắn của thuật toán chính và đường chỉ ra trong thuật toán

này là đường ngắn nhất trong miền đa giác đơn điệu được chứng minh chỉ tiết bởi các Mệnh đề 3.2.1, 3.2.2, 3.2.3, 3.2.4 và Bổ đề 3.2.1 (Xem [5])

Đường ngắn nhất từ đỉnh ø dến đỉnh ð trong miền đa giác đơn là tồn tại

và duy nhất (Xem [18], trang 633- 701 ), do đó bài toán đường đi ngắn nhất

giữa hai đỉnh trong đa giác đơn điệu xét trong Luận văn này chỉ là một trường

hợp đặc biệt

Nhận xét:

- Trong thuật toán tăng dần tìm bao lồi tiền vi phạm đầu tiên của

đường X=P đối với đường Y =@ ta chỉ cần xuất phát từ hai đường đơn điệu XY chung đỉnh cuối ở là X = <a=pgạ 0„¡;=b> và Y = <q), ., q„¡=b>

- Vì [u”,y"] nằm trên đường đi ngắn nhất nên nếu vˆz b thì trong Bước 2

của thuật toán chính, đối với đường X chỉ cần xét từ đỉnh v' (tức là ta đặt X =<y', b>vàY =<r, b>)

Độ phức tạp tính toán của thuật toán là Ó(|P' |.|Ø |) (|P | |@ | lần lượt là

số đỉnh của đường P và @ ) (Xem [Š]) Ví dụ mình họa thuật toán chính

Cho đa giác đơn điệu tạo bởi hai đường gấp khúc đơn điệu

P =< d=Dp, P15 Pr P35 P4s Ps Dạ; Dạ» Dạ: Dạ» Dịo: Dịns Địa: PDịa Pigs +3 P21 =9 > VA

Q =< A=, is Vs V3 Vas V5 Vo đại đạc đo địa» Tits địa địa địa -› đạọ=Ð >

(xem Hinh 3, trang 26)

Sử dụng thuật toán dùng bao lồi làm định hướng, tìm đường đi ngắn

Trang 38

33 2 “SN ne NY : 4 NI ; nh NI \ I3 va ENVIS N 1 ; z RS ¬ Bà SINS 118 en NSS mu 7 SSNSN WAS #12 as aes 19

Hình 5: Minh họa bài toán sử dụng bao lôi làm định hướng

Bat dau ta dat /:=0,X = P,Y = Ø\{z} Khi đó tìm bao lồi tiền vi

phạm của X đối với Y ta được Ợ = conv{đg, đ - , đ¡ạ} tiếp theo thực hiện

TCL(X ,Y ) khi đó ta nhận được Zạ= TCŒ )= [2 p,]Y [p¿, p;] và link [w',v']

= [Pr asl

Vi (v'=q,)# b, nén ta đặt lại J := 1, X = < vÏ=q;, qụ, , b >, Y =< HÌ=p;, Dy

, b>, Tìm bao lồi tiền vi phạm của X đối với Y ta được @”= conv{v', , đ¡;},

Trang 39

Pisl-34

Tiếp theo, vi (v= p,;) # b, nên ta đặt lại J := 2, X =< vÏ=ps, pụa, ., Ð >,

Y =<=4¿¿„ q¡; b > Tìm bao lồi tiền vi phạm của X đối với Y ta được

Ø = conv{v'”, , p;ạ} và thực hiện TCU( ,Y_ ) khi đó ta nhận được

Z,= TCŒL ) = [p, p;ÌY [p,s, pị;] và link [zÝ„v `] = [p,;, b] Lúc này, ta nhận thấy v = b, nên quá trình tìm đường ngắn nhất kết thúc

Đường ngắn nhất Z = Zạ Y Z, Y2; Y [w,v'] = [ø=pạ p,ÌY [p„ p„] Y [p, Us] Y

[48> G10] ¥ [4105 2] ¥ (4i2» V6] ¥ Lie Pisl Y (Piss Pisl Y [Pìs; pị;] Y [no; P]:

Như vậy thuật toán thứ nhất dùng bao lồi làm định hướng cần thực hiện việc tìm bao lồi theo thuật toán tăng dần các điểm xuất phát từ một đường đơn

điệu cho đến lúc tìm được bao lồi tiền vi phạm ta xác định link [z',v'] Ta

được đoạn đầu tiên của đường ngắn nhất từ øz đến vỶ và lặp lại quá trình với

hàm đệ quy cho đến lúc v'=b

Thuật toán thứ hai sử dụng tam giác phân đa giác đơn đòi hỏi tập đỉnh đa

giác đơn, trong bài toán là đa giác đơn điệu cho trước, thực hiện quá trình tam

giác phân đa giác, tiếp đến thực hiện thuật toán Dijkstra trên cây đối ngẫu, cuối

cùng thực hiện thuật toán phễu mới xác định được đường đi ngắn nhất

Trang 40

35

KẾT LUẬN

1 Trong luận văn này, chúng tôi đạt được những kết quả sau:

e Trình bày đầy đủ các chương trình con để đi đến thuật toán chính 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

e_ Chỉ ra được trong thuật toán chính 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, thuật toán tìm bao

lồi tiền vi phạm đầu tiên chỉ cần xuất phát từ hai đường đơn điệu theo cùng một phương có chung đỉnh cuối và trong lần lặp tiếp theo của thuật toán TCL(X ,Y ) (với link [z ,v'] trước đó) ta chỉ xét cho đường X tính từ đỉnh v

e Trinh bay thuật toán chính tìm đường đi ngắn nhất giữa hai điểm trong đa giác đơn của Lee và Preparata, chi tiết thuật toán tìm đường đi ngắn

nhất giữa hai đỉnh trong đa giác đơn điệu 2 Những vấn đề tiếp tục nghiên cứu:

e Tiếp tục tìm cách giảm độ phức tạp của thuật toán tìm đường đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu sử dụng bao lồi làm định

Ngày đăng: 18/11/2014, 12:50

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w