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

Thuật toán hình phễu tìm đường đi ngắn nhất giữa hai điểm trong đa giác đơn

44 26 0

Đ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 44
Dung lượng 1,37 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

LỜI CAM ĐOAN Tôi xin cam đoan: Những kết quả nghiên cứu được trình bày trong luận văn: “Thuật toán hình phễu tìm đường đi ngắn nhất giữa hai điểm trong đa giác đơn” là hoàn toàn trung t

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC VINH

_

NGUYỄN TUẤN ANH

THUẬT TOÁN HÌNH PHỄU TÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA HAI ĐIỂM TRONG ĐA GIÁC ĐƠN

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

NGHỆ AN, 2017

Trang 2

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC VINH

_

NGUYỄN TUẤN ANH

THUẬT TOÁN HÌNH PHỄU TÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA HAI ĐIỂM TRONG ĐA GIÁC ĐƠN

Chuyên ngành: CÔNG NGHỆ THÔNG TIN

Mã số: 60.48.02.01

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

Người hướng dẫn khoa học: TS LÊ HỒNG TRANG

NGHỆ AN, 2017

Trang 3

LỜI CAM ĐOAN

Tôi xin cam đoan:

Những kết quả nghiên cứu được trình bày trong luận văn: “Thuật toán hình phễu tìm đường đi ngắn nhất giữa hai điểm trong đa giác đơn” là

hoàn toàn trung thực, không vi phạm luật sở hữu trí tuệ và pháp luật Việt Nam Nếu sai, tôi hoàn toàn chịu trách nhiệm trước pháp luật

TÁC GIẢ LUẬN VĂN

Nguyễn Tuấn Anh

Trang 4

LỜI CẢM ƠN

Lời đầu tiên tôi xin bày tỏ lòng cảm ơn và biết ơn chân thành nhất của mình tới tất cả những người đã hỗ trợ, giúp đỡ tôi trong quá trình thực hiện luận văn tốt nghiệp

Tôi xin cảm ơn Khoa Công nghệ Thông tin, phòng Sau Đại học cũng như các thầy cô giáo trong khoa đã giúp đỡ, tạo mọi điều kiện thuận lợi nhất,

hỗ trợ, giảng dạy giúp đỡ tôi trong quá trình học tập và làm luận văn tốt

nghiệp Đặc biệt tôi muốn gửi lời cảm ơn chân thành đến TS Lê Hồng Trang,

là người hướng dẫn, nhận xét, giúp đỡ để tôi có thể hoàn thành được luận văn này

Nhân đây, tôi xin kính chúc các Thầy, Cô giáo sức khỏe và tiếp tục đạt nhiều thành công trong nghiên cứu khoa học và trong sự nghiệp giảng dạy, chúc Khoa Công nghệ Thông tin ngày một phát triển

Mặc dù đã có nhiều cố gắng nhưng quá trình thực hiện luận văn không thể tránh khỏi thiếu sót, vì vậy tôi rất mong nhận được những ý kiến đóng góp

bổ sung của thầy cô giáo và các bạn để luận văn của tôi được hoàn thiện hơn

Tôi xin chân thành cảm ơn !

Hà Tĩnh, tháng 05 năm 2017

Học viên Nguyễn Tuấn Anh

Trang 5

MỤC LỤC

LỜI CẢM ƠN 1

Danh mục ký hiệu 5

MỞ ĐẦU 6

1 Sự cần thiết của vấn đề nghiên cứu 6

3 Mục tiêu nghiên cứu 6

4 Đối tượng và phạm vi nghiên cứu 6

5 Nội dung nghiên cứu 7

6 Đặc điểm và Phương pháp nghiên cứu 7

7 Kết cấu của luận văn 7

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

Chương 2: Thuật toán Dijkstra và thuật toán tìm tiếp tuyến với một đường gấp khúc lồi 7

Chương 3: Thuật toán tìm đường đi ngắn nhất giữa 2 điểm trong đa giác đơn sử dụng kỹ thuật “phễu” của Lee và Preparata 8

Chương 1 KIẾN THỨC CƠ SỞ 9

1.1 Lý thuyết đồ thị và độ phức tạp của thuật toán 9

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

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

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

1.1.4 Cây và chu trình 12

1.2 Định nghĩa đa giác đơn và đường gấp khúc 12

1.3 Phép tam giác phân đa giác 15

Chương 2 THUẬT TOÁN DIJKSTRA VÀ THUẬT TOÁN TÌM TIẾP TUYẾN VỚI MỘT ĐƯỜNG GẤP KHÚC LỒI 16

2.1 Thuật toán Dijstra 16

2.1.1 Thuật toán Dijkstra 16

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

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

2.2 Thuật toán tìm tiếp tuyến với một đường gấp khúc lồi 18

Chương 3 THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT GIỮA HAI ĐIỂM TRONG ĐA GIÁC ĐƠN SỬ DỤNG KỸ THUẬT “PHỄU” CỦA LEE VÀ PREPARATA 22

Trang 6

3.1 Cây đối ngẫu 22

3.2 Hình ống tay và hình phễu 24

3.3 Thuật toán tìm đường đi ngắn nhất giữa hai điểm trong hình ống tay 27

3.4 Chứng minh tính đúng và đánh giá độ phức tạp của thuật toán 29

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

3.4.2 Đánh giá độ phức tạp của thuật toán 31

3.5 Ví dụ minh họa 31

TÀI LIỆU THAM KHẢO 44

Trang 7

Danh mục ký hiệu

[a, b] hoặc ab Đoạn thẳng nối 2 điểm a và b

a 1 a 2 a k Đường gấp khúc đi qua các đỉnh a1, a 2, , a k

xyz Tam giác có 3 đỉnh lần lượt là x, y, z

Trang 8

MỞ ĐẦU

1 Sự cần thiết của vấn đề nghiên cứ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 hình học Trong hì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, Chính vì vai trò quan trọng của ứng dụng tìm đường đi ngắn nhất nên trong luận văn này chúng tôi tập trung nghiên cứu thuật toán để giải quyết vấn

đề này

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ọc quan tâm nghiên cứu như: O’Rourke, Dijkstra, Preparata, Lee, Berg, Kreveld, Guibas, Hershberger,

Leven, Với những ưu điểm đó nên tôi chọn để tài “Thuật toán hình phễu tìm đường đi ngắn nhất giữa hai điểm trong đa giác đơn” làm luận văn tốt

nghiệp Luận văn tập trung nghiên cứu thuật toán tìm đường đi ngắn nhất giữa hai điểm trong một đa giác đơn trong không gian 2 chiều

3 Mục tiêu nghiên cứu

Luận văn trình bày khái niệm của đồ thị và chứng minh tính chất chi tiết của đồ thị, từ đó trình bày chi tiết thuật toán chính 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

4 Đối tượng và phạm vi nghiên cứu

- Nghiên cứu và tìm hiểu vể lý thuyết đồ thị;

- Nghiên cứu về thuật toán hình phễu của Lee và Preparata;

- Nghiên cứu ngôn lập trình C và cài đặt thuật toán hình phễu của Lee và Preparata

Trang 9

5 Nội dung nghiên cứu

- Nghiên cứu về thuật toán hình phễu của Lee và Preparata;

- Ưu điểm, nhược điểm của thuật toán hình phễu của Lee và Preparata;

- Các ứng dụng của thuật toán hình phễu của Lee và Preparata

6 Đặc điểm và Phương pháp nghiên cứu

Nghiên cứu, tìm hiểu một số kiến thức về lý thuyết đồ thị, phép tam giác phân đa giác, độ phức tạp thuật toán để làm kiến thức cơ sở ban đầu

Nghiên cứu hiểu rõ các định nghĩa và các tính chất về cây đối ngẫu của một phép tam giác phân đa giác đơn, hình ống tay, phễu và các thuật toán xác định hình ống tay, thuật toán phễu của Lee và preparata Chứng minh tính đúng đắn của thuật toán phễu và đưa ra ví dụ minh họa thuật toán đó

Nghiên cứu các tài liệu về thuật toán hình phễu của Lee và Preparata và

sử dụng ngôn ngữ lập trình C cài đặt bài toán và chạy thử để đánh giá kết quả

7 Kết cấu của luận văn

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

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ị, phép tam giác phân đa giác Đây là những kiến thức cơ sở cần thiết cho chương 2 và chương 3

Chương 2: Thuật toán Dijkstra và thuật toán tìm tiếp tuyến với một đường gấp

khúc lồi

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 tìm tiếp tuyến với một đường gấp khúc lồi và xem như là những chương trình con của thuật toá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

Trang 10

Chương 3: Thuật toán tìm đường đi ngắn nhất giữa hai điểm trong đa giác đơn

sử dụng kỹ thuật “phễu” của Lee và Preparata

Chương này trình bày chi tiết thuật toán sử dụng kỹ thuật phễu của Lee

và Preparata trong bài báo đăng trên tạp chí Networks năm 1984 Nội dung chương cũng sẽ trình bày cài đặt thuật toán, cũng như đưa ra các nhận xét và đánh giá về thuật toán

Trang 11

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ị, phép tam giác phân đa giác Đây là những kiến thức cơ sở cần thiết cho chương 2 và chương 3 Nội dung của chương được trích dẫn từ các tài liệu [1, 3, 5, 6, 7]

1.1 Lý thuyết đồ thị và độ phức tạp của thuật toán

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 giao thông của một thành phố, sơ đồ tổ chức một cơ quan, sơ đồ khối tính toá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ị

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ĩa như sau

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

• V là tập đỉnh (vertex)

Ví dụ 1.1.1 Đồ thị G cho ở Hình 1.1 với tập các đỉnh V = {a, b, c, d, e} và tập

các cạnh E = {(a, b), (a, c), (b, c), (d, b), (d, c), (e, a), (e, b), (e, d)}

Trang 12

Nếu (a, b) là một cạnh của đồ thị thì ta nói rằng đỉnh b kề với đỉnh a 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ạ kề như sau:

Định nghĩa 1.1.2 Đồ thị G là một cặp G = (V, F), trong đó:

• V là tập đỉnh

• F : V → Z, F là ánh xạ cho ta mỗi liên hệ giữa một đỉnh với tập các

đỉnh kề với nó (ánh xạ kề) Sự tương đương của hai định nghĩa được thể hiện bằng mệnh đề sau đây

x, y ∈ V : (x, y) ∈ E ⇔ y ∈ F(x)

Về bản chất, đồ thị là một tập hợp các đối tượng được biểu diễn bằng các đỉnh và giữa các đối tượng này có một quan hệ nhị nguyên biểu diễn bằng các

cạnh 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 Đồ 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à đồ 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ướng tương ứng

Định nghĩa 1.1.4 Đồ 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 Đồ 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ạn thẳng, biểu diễn

cạnh có hướng bằng mũi tên nối hai đỉnh của đồ thị

Trang 13

Định nghĩa 1.1.6

1 Hai đỉnh của đồ thị G được gọi là liên thông, nếu trên đồ thị có đường

đi vô hướng nối chúng với nhau

2 Đồ thị được gọi là liên thông nếu mọi cặp đỉnh của đồ thị đều liên thông với nhau

Định nghĩa 1.1.7 Bậc của một đỉnh đồ thị là số cạnh kề với đỉnh đó

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

Ta nói rằng đường đi này đi từ đỉnh đầu xi đến đỉnh cuối xk 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 đôi mộ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 Đồ thị G được gọi là đồ thị có trọng số nếu mỗi cạnh (i, j)

của đồ thị được gán một số nguyên không âm C(i, j)

• Nhãn C(i, j) trên cạnh (i, j) của đồ thị thường biễu diễn "chi phí" thực

tế đi qua cạnh này

• Đường đi có trọng số bé nhất:

Độ dài của đường đi trong đồ thị có trọng số bằng tổng các trọng số của các

cạnh trên đường đi đó Độ dài đường đi có trọng số bé nhất đi từ đỉnh a đến đỉnh b gọi là khoảng cách từ đỉnh a đến đỉnh b Nếu không có đường đi từ a đến b thì ta đặt khoảng cách bằng ∞

Trang 14

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

Định lý 1.1.1 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

Định lý 1.1.2 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.1.4 Cây và chu trình

Định nghĩa 1.1.1 Chu trình là một đường đi khép kín (đỉnh cuối trùng với đỉnh

đầu của đường đi)

Chu trình đơn là chu trình mà các đỉnh trên nó khác nhau từng đôi một

Trong đồ thị G = (V, E), bậc của đỉnh v trong đồ thị, kí hiệu là deg(v) là số cạnh

kề với đỉnh v Tiếp theo, chúng tôi trình bày một khái niệm cơ bản trong lý

thuyết đồ thị Đó là khái niệm cây được Caley đưa ra đầu tiên vào năm 1857

Cây là đồ thị vô hướng liên thông không có chu trình

1.2 Định nghĩa đa giác đơn và đường gấp khúc

Để có thể định nghĩa chính xác về đa giác đơn, ta cần phải sử dụng kết

quả của định lý đường cong Jordan Định lý đường cong Jordan đã chỉ ra rằng bất kỳ một đường cong đơn khép kín nào cũng chia mặt phẳng thành 2 phần, trong đó có một phần bị giới hạn bởi phần còn lại

Để có thể định nghĩa về đường cong đơn khép kín là một vấn đề không

dễ Theo lý thuyết topo đường cong đơn khép kín J còn gọi là đường cong

Jordan, là ảnh của một ánh xạ liên tục 1 - 1 từ ℝ/ℤ vào ℝ2

Hai phần được xác định bởi một đường cong Jordan được gọi là phần

trong và phần ngoài của đường cong Trong đó, miền bị chặn được gọi là phần

trong và miền không bị chặn được gọi là phần ngoài Đây cũng là cơ sở để có

thể xây dựng định nghĩa về đa giác đơn Trước hết, ta cần nhắc lại một số khái

niệm cơ bản có liên quan

Trang 15

Không gian ℝn (∀n > 1) được trang bị chuẩn ‖𝑥‖ = √𝑥12+ 𝑥22+ ⋯ 𝑥𝑛2

với x = (x1 , x 2 , ., x n) ∈ ℝn được gọi là không gian Euclid n chiều, kí

hiệu 𝔼 = ℝn

Kí hiệu d(x, y) là khoảng cách Euclid giữa hai điểm x,y trong E Đường

đi trong ℝ 2 là một ánh xạ liên tục γ : [a, b] ⊂ ℝ → ℝ 2

Nếu γ(a) = x và γ(b) = y thì x, y là các điểm cuối của γ và ta nói rằng

đường γ nối các điểm x và y

Một phân hoạch của đoạn [a, b], kí hiệu là 𝜎 được xác định bởi một dãy

Đoạn thẳng đi qua hai điểm a và b, kí hiệu là [a, b] hoặc ab là một tập

con đóng của đường thẳng đi qua hai điểm a và b, các điểm này được gọi là các

điểm cuối của đoạn thẳng [a, b] Tập con đóng ở đây bao gồm cả các điểm cuối

Đa giác đơn là miền phẳng được giới hạn bởi một tập hữu hạn các đoạn

thẳng tạo thành một đường cong đơn khép kín Tuy nhiên, để tránh đưa lý

thuyết topo vào bài viết chúng ta trình bày định nghĩa đa giác đơn như sau

Định nghĩa 1.2.2 Cho v0, v1, v2, , vn−1 là n điểm thuộc cùng một mặt phẳng,

kí hiệu ei = [vi, vi+1] với 0 ≤ i ≤ n − 1 và vn ≡ v0 là n đoạn thẳng nối các điểm đã

cho Khi đó miền trong được giới hạn bởi những đoạn thẳng này được gọi là

một đa giác đơn nếu và chỉ nếu chúng thỏa mãn các điều kiện sau:

1 Mỗi đoạn thẳng kề nhau ei và e i+1 có duy nhất một điểm chung là vi+1

Tức là ei ∩ e i+1 = vi+1 với i = 0, , n −1

Trang 16

2 Các đoạn thẳng không kề nhau thì không cắt nhau Tức là ei ∩ ej =

với j ≠ i + 1 Điểm vi được gọi là đỉnh của đa giác đơn và đoạn ei gọi là cạnh

của đa giác đơn Kí hiệu đa giác đơn với các đỉnh vi là P = (v0, v1, , vn−1)

Đường gấp khúc q1q2 q k là một dãy có thứ tự các điểm qi (i = 1, 2, , k) sao cho mỗi cặp điểm kề nhau q i và qi+1 (i = 1, 2, , k−1) thể

hiện một đoạn thẳng Các điểm qi gọi là các đỉnh của đường gấp khúc

Một đường gấp khúc gọi là đơn nếu bất kỳ hai đoạn thẳng không liên

tiếp trong đó đều không cắt nhau

Tiếp theo, chúng tôi trình bày định nghĩa về tiếp tuyến và đường cong

lồi theo như sau Một đường thẳng l đi qua một điểm A của đường cong γ được

gọi là một tiếp tuyến với γ tại A nếu đường cong đó nằm hoàn toàn trong nửa

mặt phẳng được xác định bởi l Đường cong γ được gọi là đường cong lồi nếu

mỗi điểm trên đó đều tồn tại duy nhất một đường tiếp tuyến

Đa giác không

đơn

Đa giác đơn

Hình 1.2: Minh họa đa giác

Trang 17

1.3 Phép tam giác phân đa giác

và thỏa mãn điều kiện không cắt bất kỳ cạnh nào của P, với j ≠ i + 1 và

0 ≤ i, j ≤ n − 1 Hai đường chéo gọi là không cắt nhau nếu tập hợp các giao

điểm của chúng nằm trong tập hợp các điểm cuối của chúng

Phép tam giác phân đa giác là phép phân chia một đa giác P thành các

tam giác bởi các đường chéo không cắt nhau của P Với một đa giác tùy ý luôn

tồn tại ít nhất một cách tam giác phân đa giác Có nhiều thuật toán tam giác

phân khác nhau đã được nghiên cứu với độ phức tạp về thời gian là O(nlogn)

hoặc độ phức tạp là O(n)

1 Mỗi đa giác có số đỉnh lớn hơn hoặc bằng 4 đều tồn tại ít nhất một

đường chéo

2 Mỗi đa giác P có n đỉnh đều có thể phân chia thành các tam giác bằng

cách thêm vào (tối thiểu là 0) các đường chéo

3 Mỗi phép tam giác phân một đa giác P có n đỉnh sử dụng n − 3 đường

chéo và chia P thành n − 2 tam giác

Trang 18

Chương 2 THUẬT TOÁN DIJKSTRA VÀ THUẬT TOÁN TÌM TIẾP TUYẾN

VỚI MỘT ĐƯỜNG GẤP KHÚC LỒI

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 tìm tiếp tuyến với một đường gấp khúc lồi và xem như là những chương trình con của thuật toá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 Nội dung của chương này được trích dẫn từ tài liệu [2, 8]

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

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

Thuật toán 2.1.1 (DIJKSTRA(G, a, b))

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

a, b ∈ V

Output: Đường đi ngắn nhất từ a đến b

for v ∈ V do

d(v) := ∞;

Trang 19

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∗

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 ∈ S1 thì d(b) là độ dài đường đi ngắn nhất từ

a đến b

Trang 20

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)

2.2 Thuật toán tìm tiếp tuyến với một đường gấp khúc lồi

Trong mục này, chúng tôi trình bày các bước chi tiết để từ điểm x tìm

tiếp tuyến với một trong hai đường gấp khúc lồi ua u a+1 ub và ua u a−1 u0 với

đỉnh là ua

Input Cho hai đường gấp khúc lồi D1 = ua u a+1 ub và D2 = ua u a−1 u0

với đỉnh là ua

Output Tiếp tuyến với một trong hai đường gấp khúc trên

Kí hiệu slope([a, b]) là hệ số góc của đoạn [a, b] và gọi y là tiếp điểm của tiếp

tuyến cần tìm

• So sánh slope([x, ua]) với hệ số góc của các đoạn ua u a−1 và ua u a+1

– Nếu slope([x, ua]) nằm giữa hai hệ số góc còn lại thì gán y := ua

– Nếu cả hai hệ số góc của các đoạn uaua−1 và uaua+1 đều lớn hơn

nhỏ hơn

– Ngược lại, thực hiện tìm kiếm ở đường gấp khúc có hệ số góc lớn hơn

Các hình vẽ chi tiết cho từng trường hợp của thuật toán tìm tiếp tuyến

với một đường gấp khúc lồi được chúng tôi minh họa như sau

Trang 21

- Trường hợp slope([x, ua]) nằm giữa hệ số góc của các đoạn ua u a−1

Trang 22

- Trường hợp slope([x, ua]) lớn hơn hệ số góc của các đoạn ua u a−1

và ua u a+1

• Tìm kiếm tiếp tuyến tại một trong hai đường gấp khúc đã xác định được

ở trên như sau:

Lần lượt xét các đỉnh ui với 0 ≤ i ≤ a nếu tìm trên đường D2 hoặc với

a < i ≤ b nếu tìm trên D1

– Nếu cả hai cạnh kề tại đỉnh ui đều có hệ số góc lớn hơn hoặc bằng với

slope([x, u i]) thì y là đỉnh kề ở phía bên trái của ui

Ngày đăng: 10/02/2021, 21:57

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[4] Hales T. C. (2007), Jordan’s Proof of the Jordan Curve Theorem, Studies in Logic, Grammar and Rhetoric, 10 (23), pp. 45-60 Sách, tạp chí
Tiêu đề: Jordan’s Proof of the Jordan Curve Theorem
Tác giả: Hales T. C
Năm: 2007
[5] D. T. Lee and F. P. Preparata (1984), Euclidean Shortest Paths in the Presence of Rectilinear Barriers, Networks, Vol. 14 (3), pp. 393-410 Sách, tạp chí
Tiêu đề: Euclidean Shortest Paths in the Presence of Rectilinear Barriers
Tác giả: D. T. Lee and F. P. Preparata
Năm: 1984
[6] O’Rourke J (2004), Computational Geometry in C, second edition, Cambridge University Press Sách, tạp chí
Tiêu đề: Computational Geometry in C
Tác giả: O’Rourke J
Năm: 2004
[7] Toponogo and Victor Andreevich (2006), Differential Geometry of Curves and Surfaces: A Concise Guide, Springer, ISBN: 9780817643843 Sách, tạp chí
Tiêu đề: Differential Geometry of Curves and Surfaces: A Concise Guide, Springer
Tác giả: Toponogo and Victor Andreevich
Năm: 2006
[8] L. Guibas, J. Hershberger, D. Leven, M. Sharir, and R. E. Tarjan (1987), Linear-Time Algorithms for Visibility and Shortest Path Problems Inside Triangulated Simple Polygons, Algorithmica, Vol. 2, pp. 209-233 Sách, tạp chí
Tiêu đề: Linear-Time Algorithms for Visibility and Shortest Path Problems Inside Triangulated Simple Polygons
Tác giả: L. Guibas, J. Hershberger, D. Leven, M. Sharir, and R. E. Tarjan
Năm: 1987
[1] H. C. Thành và L. T. Vĩnh, Bài giảng lý thuyết đồ thị và áp dụng Khác
[2] N. H. Ngự, Lý thuyết đồ thị, NXB Đại Học Quốc Gia Hà Nội, (2001) Khác
[3] Đ. Đ. Giao, Toán rời rạc, NXB Giáo Dục, (2007) Tiếng Anh Khác

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm