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

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 2

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

3.2.2 Thuật toán tìm ÏinK - «+ + xxx v.v ve 29 E60 áo on 30

Trang 5

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

Minh họa bài toán sử dụng bao lồi làm định hướng 33

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

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

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

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

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

convzZ.

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ó

tung độ nhỏ nhất là các điểm cực biên của convS

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

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

Định nghĩa 1.5.1 (Xem [4]) Dé thi 1a mot cap G = (V, E), trong do:

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

3 Lap lai budc 2 cho đến khi không gán hoặc giảm nhãn được nữa

Trang 20

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

phức tạp tính toán là ØŒnlogn), trong đó z là số cạnh của đồ thị

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 ở

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.

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