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

Về thuật toán tìm đường đi ngắn nhất giữa hai điểm trong một đa giác đơn của LEE và PREPARATA

55 822 1

Đ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 55
Dung lượng 437,16 KB

Nội dung

Bài toán "Tìm đường đi ngắn nhất giữa hai điểm trong một đagiác đơn"với khoảng cách theo chuẩn Euclidean trong mặt phẳng đã được nhiều nhà toán học đưa ra các thuật toán khác nhau để giả

Trang 1

Mục lục

1.1 Lý thuyết đồ thị 6

1.1.1 Định nghĩa đồ thị 6

1.1.2 Đường đi trong đồ thị 8

1.1.3 Một số tính chất về đường đi trong đồ thị 9

1.2 Tam giác phân đa giác 10

1.2.1 Đường gấp khúc đơn điệu và đa giác đơn điệu 10 1.2.2 Các tính chất 12

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

1.3.1 Khái niệm độ phức tạp của thuật toán 15

1.3.2 Các định nghĩa 16

1.3.3 Các tính chất 17

1.3.4 Cách tính độ phức tạp của thuật toán 19

1.3.5 Phép tính cơ sở 19

1.3.6 Dãy các phép tính 19

1.4 Thuật toán tìm tiếp tuyến của O’Rourke 22

2 Thuật toán Dijkstra và thuật toán tam giác phân 24 2.1 Thuật toán Dijstra 24

2.1.1 Thuật toán Dijkstra 24

2.1.2 Chứng minh tính đúng đắn của thuật toán 27

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

1

Trang 2

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

2.2.1 Phân chia đa giác đơn thành các đa giác đơn điệu 31 2.2.2 Thuật toán tam giác phân đa giác đơn điệu 31

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

3 Thuật toán tìm đường đi ngắn nhất giữa hai điểm 37 3.1 Thuật toán của Lee và Preparata 37

3.1.1 Các định nghĩa 37

3.1.2 Các tính chất 40

3.1.3 Thuật toán tạo ra hình ống tay (sleeve) 40

3.1.4 Độ phức tạp của thuật toán SLEEVE(P) 41

3.1.5 Thuật toán Phễu (Funnel) của Lee và Preparata 42 3.1.6 Chứng minh tính đúng đắn của thuật toán 43

3.1.7 Độ phức tạp thuật toán Phễu 44

3.2 Thuật toán tìm đường đi ngắn nhất 47

3.2.1 Thuật toán thuật toán chính 48

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

3.2.3 Chứng minh tính đúng đắn của thuật toán 48

Trang 3

Danh sách hình vẽ

1.1 Đồ thị hữu hạn 7

1.2 Minh hoạ điểm nằm bên trái, bên phải đường thẳng 11

1.3 Minh hoạ đa giác 12

1.4 Minh hoạ sự tồn tại đỉnh lồi 13

1.5 Minh hoạ tính chất đường chéo 13

1.6 Minh hoạ đường gấp khúc đơn điệu và đa giác đơn điệu. 15 1.7 Mô tả quan hệ giữa hai hàm cg(n) và f (n) . 16

1.8 Minh hoạ thuật toán tìm tiếp tuyến 23

2.1 Mô tả đồ thị có trọng số 28

2.2 Quá trình tìm đường đi ngắn nhất theo thuật toán 29

2.3 Minh hoạ đa giác Y - đơn điệu 33

2.4 Minh hoạ quá trình tam giác hoá đa giác Y- đơn điệu 35 3.1 Minh hoạ cây đối ngẫu 38

3.2 Minh hoạ hình ống tay (Sleeve) 38

3.3 Minh hoạ Phễu (Funnel) 39

3.4 Minh hoạ hai trường hợp xác định Phễu mới 39

3.5 Minh hoạ tính chất đường ống tay 40

3.6 Minh hoạ tính chất của Phễu 41

3.7 Minh hoạ hình ống tay(Sleeve) 44

3.8 Quá trình tìm đường đi ngắn nhất theo thuật toán Phễu 47

3.9 Minh họa quá trình tìm đường đi ngắn nhất từ a đến b. 51

3

Trang 4

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ánhiệu quả và thực thi trên máy tính cho những bài toán hình học Tronghình học tính toán thường giải quyết các bài toán kinh tế, như: Tìmđịa điểm để đặt các nhà máy, đặt trạm điện, đặt bến xe, tìm đường

đi ngắn nhất cho những chiếc tàu biển,

Tìm đường đi ngắn nhất giữa hai điểm trong một miền hình học làmột trong những vấn đề cơ bản trong hình học tính toán Điều này cónhiều ứng dụng trong kỹ thuật rôbốt, kỹ thuật tự động, công nghiệp,thông tin địa lý Thực tế đó đã thu hút rất nhiều nhà toán họcquan tâm nghiên cứu như: O’Rourke, Dijkstra, Preparata, Lee, Berg,Kreveld, Guibas, Hershberger, Leven

Bài toán "Tìm đường đi ngắn nhất giữa hai điểm trong một đagiác đơn"(với khoảng cách theo chuẩn Euclidean) trong mặt phẳng

đã được nhiều nhà toán học đưa ra các thuật toán khác nhau để giảiquyết Năm 1984, Lee và Preparata đã đưa ra thuật toán cơ bản đểgiải quyết bài toán này thông qua việc tam giác phân đa giác (xem[13]) và năm 1987, Guibas, Hershberger, Leven, Sharir và Tarjan đã

có sự cải tiến thuật toán này (xem [12])

Trong luận văn này chúng tôi nghiên cứu về thuật toán của Lee vàPreparata (đã có sự cải tiến) để giải bài toán trên Với lý do đó chúng

tôi chọn đề tài của luận văn là:"Về thuật toán tìm đường đi ngắn nhất

giữa hai điểm trong một đa giác đơn của Lee và Preparata".

Luận văn được trình bày trong ba chương:

Trang 5

Chương 1 Kiến thức cơ sở

Với quan điểm là chương cơ sở, trong chương này chúng tôi trình bày

hệ thống kiến thức về lý thuyết đồ thị, tam giác phân đa giác, độ phứctạp của thuật toán, thuật toán tìm tiếp tuyến của O’Rourke nhằm giúplàm cơ sở cho việc nghiên cứu thuật toán của Lee và Preparata.Chương 2 Thuật toán Dijkstra và thuật toán tam giác phân

đa giác

Trong chương này chúng tôi trình bày thuật toán của Dijkstra, thuật

toán phân chia đa giác đơn thành các đa giác y - đơn điệu, thuật toán tam giác phân đa giác y - đơn điệu, thuật toán tam giác phân đa giác

Luận văn được hoàn thành dưới sự hướng dẫn tận tình của thầygiáo TS Phan Thành An Tác giả xin được bày tỏ lòng biết ơn sâusắc tới thầy và xin chân thành cảm ơn các thầy giáo trực tiếp giảngdạy chuyên ngành với những ý kiến đóng góp trong học tập và làmluận văn

Cũng nhân dịp này tác giả xin gửi lời cảm ơn các thầy cô giáo trongkhoa Toán và khoa Đào tạo sau đại học, anh Lê Đình Hậu cao học

13 Hình học - Tôpô, bạn Dương Quốc Nam, các bạn học viên lớp caohọc 14 Hình học - Tôpô, cán bộ giáo viên trường THPT Anh Sơn 3,gia đình và bạn bè đã động viên, giúp đỡ tôi trong quá trình học tậpnghiên cứu trong suốt khóa học

Trang 6

Chương 1

Kiến thức cơ sở

Trong chương này chúng tôi trình bày một số kiến thức về lý thuyết

đồ thị, đa giác đơn điệu, phép tam giác phân đa giác, độ phức tạpthuật toán và thuật toán tìm tiếp tuyến của O’Rourke Đây là nhữngkiến thức cơ sở cho chương 2 và chương 3

1.1 Lý thuyết đồ thị

1.1.1 Định nghĩa đồ thị

Chúng ta nhìn thấy hoặc sử dụng bản đồ các tuyến đường giaothông của một thành phố, sơ đồ tổ chức một cơ quan, sơ đồ khối tínhtoán của một thuật toán, sơ đồ một mạng máy tính Đó là những

ví dụ cụ thể về đồ thị Đồ thị (graph) là một mô hình toán học được

ứng dụng trong nhiều lĩnh vực khoa học, kỹ thuật và được định nghĩanhư sau

Định nghĩa 1.1.1 (xem [5]) Đồ thị là một cặp G = (V, E) trong đó:

Trang 7

và cả hai đỉnh a và b kề với cạnh (a, b).

Trong đồ thị ở ví dụ 1.1.1 hai đỉnh b và c kề với đỉnh a, ba đỉnh a, b

và d kề với đỉnh e Do vậy, ta có thể định nghĩa đồ thị bằng ánh xạ

Cặp đỉnh (x, y) ∈ E không sắp thứ tự được gọi là cạnh vô hướng, còn nó có sắp thứ tự thì được gọi là cạnh có hướng Vì thế, chúng ta

thường phân các đồ thị thành hai lớp

Định nghĩa 1.1.3 (xem [5]) Đồ 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 gọi là

Trang 8

đồ thị có hướng.

Hiển nhiên, mỗi đồ thị vô hướng có thể biểu thị bằng một đồ thị cóhướng bằng cách thay mỗi cạnh vô hướng bằng hai cạnh có hướngtương ứng

Định nghĩa 1.1.4 (xem [5]) Đồ thị G = (V, E) được gọi là đối xứng

nếu:

∀x, y ∈ V : (x, y) ∈ E ⇔ (y, x) ∈ E.

Các đồ thị vô hướng là đối xứng.

Định nghĩa 1.1.5 (xem [5]) Đồ 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ị.

Ta biễu diễn hình học cho đồ thị như sau: Trên mặt phẳng biễu diễnđỉnh bằng các vòng tròn nhỏ, biểu diễn cạnh vô hướng bằng đoạnthẳng, biểu diễn cạnh có hướng bằng mũi tên nối hai đỉnh của đồ thị

Trang 9

hx1, x2, , x i , x i+1 , , x k−1 , x k i.

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

∀i = 2, 3, , k − 1, k : (x i−1 , x i ) ∈ E

Ta nói rằng đường đi này đi từ đỉnh đầu x i đến đỉnh cuối x k Số cạnh

của đường đi được gọi là độ dài của đường đi đó

Đường đi đơn là đường đi mà các đỉnh trên nó khác nhau từng đôimột

Trong một đồ thị, đỉnh nút là đỉnh kề với chính nó Hai cạnh có ít

nhất một đỉnh chung được gọi là hai cạnh kề nhau

Định nghĩa 1.1.9 (xem [5]) Đồ 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

1.1.3 Một số tính chất về đường đi trong đồ thị

Định lý 1.1.1 (xem [5]) Giả sử đồ thị G có n đỉnh Tồn tại đường đi

từ đỉnh a đến đỉnh b trên đồ thị G khi và 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.

Chứng minh Giả sử có đường đi từ đỉnh a tới đỉnh b Ta có thể chọn:

Trang 10

< a = x1, x2, , x k = b, trong đó x1 = x k >

là đường đi có độ dài ngắn nhất

Độ dài của đướng đi là k − 1 Nếu k − 1 ≤ n − 1 thì định lý được

cũng là đường đi từ a đến b nhưng với độ dài ngắn hơn Suy ra mâu

thuẫn với giả thiết của đường đi ngắn nhất ¤

Định lý 1.1.2 (xem [5]) 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ị đó.

Chứng minh Ta tính bậc của các đỉnh Mỗi đỉnh thuộc một cạnh

nào đó thì bậc của nó tăng thêm 1, mà mỗi cạnh thì có hai đỉnh

2

1.2 Tam giác phân đa giác

1.2.1 Đường gấp khúc đơn điệu và đa giác đơn điệu

Trước hết 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]) Trong mặt phẳng R2, cho 3 đ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 4abc, khi đó :

S(a, b, c) = (x2 − x1)(y3 − y1) − (x3 − x1)(y2 − y1)

2

Trang 11

= 12

b

c nằm bên phải đường thẳng ab

Hình 1.2: Minh hoạ điểm nằm bên trái, bên phải đường thẳng

Định nghĩa 1.2.2 (xem [14]) Đa giác là một miền mặt 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 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 Một đa giác gọi là đa giác đơn nếu các cạnh của nó không giao nhau, nghĩa là hai cạnh kề của

nó chỉ có một điểm chung là đỉnh

Trong luận văn này chúng tôi chỉ xét những đa giác mà không có bất

kỳ ba đỉnh nào thẳng hàng

• Một đỉnh của đa giác P được gọi là đỉnh phản xạ (reflex) nếu góc

bên trong của nó lớn hơn Π

• Một đỉnh của đa giác P được gọi là đỉnh lồi (convex vertex) nếu

góc bên trong của nó nhỏ hơn Π

Định nghĩa 1.2.3 (xem [13]) Một đường gấp khúc đa giác q1q2 q k

là một dãy của những điểm q i (i = 1, k) trong mọi cặp nào những điểm

Trang 12

kề q i và q i+1 biểu thị một đoạn với i = 1, k − 1 và không có hai đoạn nào không liên tiếp cắt nhau.

Hình 1.3: Minh hoạ đa giác 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 P = v0, v1, , v n−1 Hai đỉnh không kề nhau vi

và v i−1 với i<j thì đoạn thẳng v i v i−1 là đường chéo (nếu đa giác đơn

thì đòi hỏi thêm, đoạn nối hai đỉnh này phải hoàn toàn nằm trongmiền trong của đa giác đơn)

Tam giác phân một đa giác là dùng những đường chéo không giaonhau của đa giác để chia phần trong của đa giác thành các tam giác

Định nghĩa 1.2.4 Cho đa giác đơn gồm n+1 đỉnh < p0, p1, , p n > Khi đó, ta nói thứ tự các đỉnh p i (i = 0, n) của đa giác sắp thứ tự ngượ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 = 0, 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ồ.

1.2.2 Các tính chất

Bổ đề 1.2.1 (xem [14])

Mọi đa giác đều có ít nhất một đỉnh lồi

Chứng minh Giả sử cho đa giác P có các đỉnh sắp thứ tự ngược chiều

kim đồng hồ, L là đường thẳng đi qua một đỉnh v có tung độ thấp nhất

Trang 13

L v

Hình 1.4: Minh hoạ sự tồn tại đỉnh lồi

của P Nếu có hai đỉnh có cùng tung độ thấp nhất, xét đỉnh v nằm về phía bên phải Khi đó phần trong của P phải nằm về phía trên đường thẳng L do đó cạnh đi sau v cũng phải nằm phía trên L do đó góc trong

Bổ đề 1.2.2 (xem [14]) Mọi đa giác n đỉnh, n ≥ 4 có ít nhất một

đường chéo.

Định lý 1.2.1 (xem [14]) Mọi đa giác P n đỉnh có thể phân chia

thành các tam giác bằng việc thêm các đường chéo (có thể bằng không)

b

a d

Hình 1.5: Minh hoạ tính chất đường chéo

Chứng minh (minh họa hình 1.5) Ta chứng minh bằng quy nạp:

- Nếu n = 3 thì đa giác là một tam giác (hiển nhiên đúng)

- Nếu n ≥ 4, giả sử d = ab là một đường chéo của P (tồn tại do bổ đề

1.2.2) Vì theo định nghĩa d chỉ cắt biên P tại những điểm cuối, nó

Trang 14

phân chia P thành hai đa giác, mỗi đa giác đó nhận d làm một cạnh,

rõ ràng hai đa giác ít hơn n đỉnh và mỗi đa giác ngoài hai đỉnh a, b có

ít nhất một đỉnh khác nữa Do đó áp dụng giả thiết quy nạp cho hai

Mệnh đề 1.2.1 (xem [14]) Mọi phép tam giác phân đa giác n đỉnh

cần sử dụng n − 3 đường chéo trong và chứa n − 2 tam giác.

Chứng minh Ta chứng minh bằng quy nạp:

Định nghĩa 1.2.5 (xem [14], trang 45)

• Đường gấp khúc C là đường gấp khúc đơn điệu nếu tồn tại một đườg thẳng L sao cho mọi đường thẳng vuông góc với L thì hoặc

nó không cắt C, hoặc cắt C tại một điểm, hoặc cắt C theo một đoạn thẳng Và khi đó ta cũng nói đường gấp khúc C là đơn điệu theo phương L.

• Một đa giác được gọi là đơn điệu nếu nó là đa giác đơn và biên

Trang 15

của nó hợp thành từ hai đường gấp khúc đơn điệu cùng theo một phương.

Hình 1.6: Minh hoạ đường gấp khúc đơn điệu và đa giác đơn điệu.

Định nghĩa 1.2.6 (xem [14]) Một đa giác đơn P được gọi là y - đơn điệu nếu nó đơn điệu đối với trục oy.

Định nghĩa 1.2.7 (xem [14], trang 46) Một đỉnh v của một đa giác

đơn được gọi là đỉnh lùi phía trong (interior cusp) nếu góc bên trong tại v lớn hơn Π và hai đỉnh kề bên nó có tung độ lớn hơn hoặc nhỏ hơn tung độ của v.

Mệnh đề 1.2.2 (xem [14], trang 46) Nếu P là một đa giác đơn không

có điểm lùi trong, thì P là một y-đơn điệu.

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

1.3.1 Khái niệm độ phức tạp của thuật toán

(xem [2]) Độ phức tạp của thuật toán là những thước đo để so sánhtính hiệu quả của thuật toán Một thước đo hiệu quả đó là thời gianmáy tính sử dụng để giải bài toán theo thuật toán đang xét, khi cácgiá 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 và bộ nhớ là độ phức tạp không gian Biết được độ

Trang 16

phức tạp thời gian cho một thuật toán rất quan trọng, vì khi đó tabiết được thời gian là một phút, một năm, một tỉ năm để thực hiệnthuật toán đó Độ phức tạp không gian đòi hỏi của thuật toán mà tabiết được thì cho ta một bước chuẩn bị và thấy được khả năng đápứng trong việc tính toán của thuật toán.

Độ phức tạp không gian gắn liền với cấu trúc dữ liệu đặc biệt dùng

để tính toán trong thật toán Trong đề tài này chúng tôi không nghiêncứu về cơ sở dữ liệu nên ta bỏ qua độ phức tạp không gian

Để 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.

1.3.2 Các định nghĩa

(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) 6 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), ( xem hình vẽ 1.7) Những

hàm thuộc O thường dùng như 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

cg(n)

f (n) y

Hình 1.7: Mô tả quan hệ giữa hai hàm cg(n) và f (n).

Trang 17

f (n) ≤ c2.g(n).

Định nghĩa 1.3.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ố dương c và n0 sao cho với mọi n > n0 thì c.g(n) ≤ f (n) Nếu f (n) ∈ Ω¡g(n)¢, thì ta nói f (n) là Ô mê ga lớn của g(n).

1.3.3 Các tính chất

Mệnh đề 1.3.1 (xem [2]) Nếu f1(n) ∈ O¡g1(n)¢ và f2(n) ∈ O¡g2(n)¢

thì

f1(n) + f2(n) ∈ O¡g1(n) + g2(n)¢ Chứng minh Giả sử rằng với mọi n ≥ n1, f1(n) ≤ c1.g1(n) và với mọi

n ≥ n2, f2(n) ≤ c2.g2(n).

Ta đặt n0 = max{n1, n2} và c0 = max{c1, c2} Khi đó với mọi n > n0

ta có

f1(n)+f2(n) ≤ c1.g1(n)+c2.g2(n) ≤ c0.(g1(n)+g2(n)). ¤

Mệnh đề 1.3.2 (xem [2]) Nếu f1(n) ∈ O¡g1(n)¢ và f2(n) ∈ O¡g2(n)¢

thì

f1(n) + f2(n) ∈ O¡max{g1(n), g2(n)}¢.

Trang 18

Chứng minh Giả sử rằng với mọi n ≥ n1, f1(n) ≤ c1.g1(n) và với mọi

n ≥ n2, f2(n) ≤ c2.g2(n).

Ta đặt n0 = max{n1, n2} và c0 = c1.c2 Khi đó với mọi n > n0 ta có

f1(n).f2(n) ≤ c1.g1(n).c2.g2(n) ≤ c0.(g1(n).g2(n)). ¤

Mệnh đề 1.3.4 (xem [2]) Cho P (n) = a k n k +a k−1 n k−1 + +a1n+a0

là đa thức bậc k, a k > 0 Khi đó P (n) ∈ O(n k ).

Chứng minh Do ta có: P (n) = a k n k + a k−1 n k−1 + + a1n + a0

≤ a k n k + | a k−1 | n k−1 + + | a1 | n+ | a0 |

≤ | a k | n k + | ak | n k + + | a1 | n k + | a0 | n k

= (| a k | + | a k−1 | + + | a1 | + | a0 |)n k Nếu c =| a k | + | a k−1 | + + | a1 | + | a0 |, thì P (n) ≤ c.n k với mọi

Trang 19

1.3.4 Cách tính độ phức tạp của thuật toán

Độ 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(g(n)) cho đoạn mã chương trình đó, n là biến số của phép

toán cơ sở

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

1.3.5 Phép tính cơ sở

(Xem[2]) Độ phức tạp của toán tử cơ sở là một hằng số, nghĩa là

O(1) Toán tử cơ sở là gì không phải dễ xác định, với nhũng bắt buộc

khác nhau cho ta định nghĩa lại phép toán cơ sở Theo nguyên tắc,phép toán cơ sở là phép toán thực hiện một hằng số thời gian, phụthuộc vào dung lượng thao tác trên thông tin Thường thường phéptính cơ sở là các phép tính cộng, trừ, nhân, chia Nhưng chú ý rằngkhi ta thực hiện số lớn hàng tỉ thì không thể chấp nhận phép nhâncác số lớn là một phép tính cơ sở Cũng không thể nhận phép tính cơ

sở là các hàm lượng giác, hàm số mũ, hàm số lôgarit, bởi vì chúngtính toán theo dãy

1.3.6 Dãy các phép tính

(Xem[2]) Độ 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 và phân tích trong trường hợp xấu nhất để biết được

Trang 20

thời gian thực hiện những thuật toán trong thời gian xấu nhất là baonhiêu? Người ta định ra độ phức tạp của các phép toán trong trườnghợ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 (While) có độ phức tạp là tổng tất cả các vòng lặp vớithời gian của mỗi vòng lặp đó

Ta phân tích đoạn chương trình trên Dòng số 1 và 2 cố định mất thời

gian hằng số, ta kí hiệu là a Cho ta phép tính toán ở dòng 3 gồm

i := 1, kiểm tra i < n và i := i + 1 cũng chiếm thời gian hằng số, ta

kí hiệu lần lượt là b, c, d Tương tự ở dòng 4 thời gian cho các phép toán j := 1; j < n và j := j + 1 cũng chiếm thời gian hằng số, ta kí hiệu lần lượt là e, f, g Cuối cùng phép toán ở dòng 5 đòi hỏi thời gian hằng số là h.

Với những đại lượng ở trên thì không khó tính được thời gian chung

cho thực hiện đoạn chương trình với giá trị bất kì n nào đó:

T (n) = a + b + nc + nd + n(e + nf + ng + nh)

Trang 21

= a + b + nc + nd + ne + n2f + n2g + n2h

= n2(f + g + h) + n(c + d + e) + a + b Bởi vì a, b, c, e, g, f, h là những hằng số, ta đặt:

i = f + g + g, j = c + d + e, k = a + b

Khi đó thuật toán thực hiện mất thời gian là

T (n) = i.n2 + j.n + k Vậy T (n) = O(n2)

Ví dụ 1.3.2 độ phức tạp của vòng for của đoạn chương trình sau

Dòng 1: phép tính cố định mất thời gian 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 hằng số, ta kí hiệu lần lượt là b, c, d.

Dòng 3: Cũng đòi hỏi thời gian hằng số, kí hiệu là e.

Khi đó, thời gian (độ phức tạp) để thực hiện chương trình 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.3.3 Tìm độ phức tạp của cấu trúc if(p) then s1; else s2

(xem [2])

Nếu độ phức tạp của p, s1, s2 tương ứng là O(P ), O(F1), O(F2) thì độ

phức tạp của cấu trúc if là max{O(P ), O(F1), O(F2)}, nghĩa là độ phức tạp tăng nhanh nhất của hàm P, F1, F2

T (P ) ∈ O(P ); T (s1) ∈ O(F1); T (s2) ∈ O(F2).

Trang 22

Suy ra T (if(p) then s1 else s2) ∈ max{O(P ), O(F1), O(F2)}.

Ta có thể giải thích như sau:

- Giả sử điều kiện p đúng thì dãy lệnh p, s1 được thực hiện có độ phức

tạp là max{O(P ), O(F1)}.

- Giả sử điều kiện p sai thì dãy lệnh p, s2 được thực hiện có độ phức

tạp là max{O(P ), O(F2)}.

Mà ta chưa biết trong hai khối lệnh thì khối nào thực hiện trước Do

đó, ta nhận được độ phức tạp cho toàn vòng if là

T (if(p) then s1 else s2) ∈ max{max{O(P ), O(F1)}; max{O(P ), O(F2)}}

= max{O(P ), O(F1), O(F2)}.

1.4 Thuật toán tìm tiếp tuyến của O’Rourke

Bài toán: Trong mặt phẳng cho đa giác lồi P có n đỉnh, giả sử số

đỉnh là {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 P Hãy tìm thuật toán xác định đường thẳng tiếp tuyến từ p tới P.

Mô tả thuật toán(xem [14])

Để tìm hai tiếp tuyến ta bắt đầu với việc tìm hai tiếp điểm Việctìm hai tiếp điểm được thực hiện như sau:

Giả sử tại điểm thứ p i nếu điểm p nằm bên trái của p i−1 p i và p nằm bên phải của p i p i+1 thì p i là tiếp điểm của tiếp tuyến trái Giả sử tại điểm thứ p j nếu điểm p nằm bên phải của p i−1 p i và p nằm bên trái của p j p j+1 thì p j là tiếp điểm của tiếp tuyến phải kẻ được từ điểm p tới P Để đơn giản hơn trong việc đưa ra thuật toán ta có thể cải tiến

thuật toán như sau:

Tìm điểm pi sao cho hai điểm pi−1 , p i+1 đều nằm bên phải ppi thì

pp i là tiếp tuyến bên trái của P Ngược lại, nếu có điểm p i sao cho hai

Trang 23

left

right

left

Hình 1.8: Minh hoạ thuật toán tìm tiếp tuyến

đ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

P.

Thuật toán 1.4.1

for i = 1 to n do

if p i−1 , p i+1 nằm bên phải pp i then

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

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

Do thuật toán trên sử dụng vòng for nên có độ phức tạp là tuyến

tính O(n) (theo cách xác định độ phức tạp của vòng for ở ví dụ1.3.2)

Trang 24

Chương 2

Thuật toán Dijkstra và thuật toán tam giác phân đa giác

Trong chương này chúng tôi trình bày các thuật toán: thuật toán

Dijkstra, thuật toán phân chia đa giác thành các đa giác y - đơn điệu, thuật toán tam giác phân đa giác y - đơn điệu, thuật toán tam giác

phân đa giác đơn và xem như là những chương trình con của thuậttoán chính về tìm đường đi ngắn nhất giữa hai điểm trong một đa giácđơn ở chương 3

2.1 Thuật toán Dijstra

Bài toán 2.1.1 Cho đồ thị 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 đỉnh b.

2.1.1 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đường đi ngắn nhất giữa hai đỉnh trong đồ thị Thuật toán thực hiện

việc gán và giảm giá trị nhãn d(i) tại mỗi đỉnh i của đồ thị G Thuật

toán được mô tả như sau:

1 Với đỉnh xuất phát a, gán nhãn d(a) := 0.

24

Trang 25

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

Định lý 2.1.1 (xem [4]) Tại mỗi đỉnh b giá trị gán nhãn d(b) cuối

cùng (nếu có) chính là độ dài của đường đi ngắn nhất từ đỉnh a đến đỉnh b.

Chứng minh Sau khi thực hiện xong thuật toán trên, nếu giá trị nhãn d(b) xác định thì ta có đường đi từ đỉnh a đến đỉnh b.

Ta khôi phục đường đi từ a đến b như sau:

Xuất phát từ đỉnh b, tìm cạnh có đỉnh cuối là b và đỉnh đầu là i sao

d(a) + l(a, a1) = d(a1)

d(a1) + l(a1, a2) = d(a2)

d(a a k−1 ) + l(a k−1 , b) = d(b)

Cộng từng vế và khử các giá trị chung ở cả hai vế ta có:

l(a, a1) + l(a1, a2) + + l(ak−1 , b) = d(b)

Vậy giá trị nhãn d(b) chính là độ dài đường đi nói trên.

Bất kỳ đường đi nào khác từ đỉnh a đến đỉnh b cũng có các hệ thức

Trang 26

tương tự nhưng có dấu ≥ Vậy nhãn d(b) là độ dài của đường đi ngắn

Thuật toán 2.1.1 (DIJKSTRA(G, a, b)) (xem [4])

Input: Đồ thị có trọng số không âm G = (V, E) với n đỉnh,

Trang 27

2.1.2 Chứng minh tính đúng đắn của thuật toán Dijkstra

-Thuật toán sẽ dừng sau hữu hạn bước lặp bởi vì đồ thị đã cho là

hữu hạn đỉnh và thuật toán kết thúc khi đỉnh b có nhãn cố định.

-Ta cần chứng minh thuật toán kết thúc thì cho ta đường đi ngắn nhất

từ a đến b Thật vậy:

Giả sử ở một bước lặp nào đó các nhãn cố định, khi đó ở lần lặp tiếp

theo nếu đỉnh u∗ thu được nhãn cố định d(u∗) chính là độ dài đường

đi ngắn nhất từ a đến u∗ (theo định lý 2.1.1)

Ký hiệu S1 là tập hợp các đỉnh có nhãn cố định ở bước lặp đang

xét Do ở lần lặp đầu tiên S1 = {a} và sau mỗi lần lặp ta chỉ thêm vào một đỉnh u∗ nên giả thiết là d(v) cho độ dài đường đi ngắn nhất

từ a đến v với mọi v ∈ S1 là đúng với bước lặp đầu tiên Khi b ∈ S1thì d(b) là độ dài đường đi ngắn nhất từ a đến b 2

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

- 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 là O(n2)

Ví dụ 2.1.1 Xét đồ thị có trọng số G = (V, E) với

V = {a, b, c, d, e, g, h, i, k, z} như hình vẽ 2.1 Hãy xác định đường đi ngắn nhất từ a đến z.

Mô tả thuật toán qua ví dụ:

Bước 1 (minh hoạ bởi hình 2.2 (H1))

Ngày đăng: 15/12/2015, 07:13

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w