Tải bản đầy đủ (.pdf) (44 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.37 MB, 44 trang )

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

NGUYỄN TUẤN ANH

THUẬT TỐ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


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

NGUYỄN TUẤN ANH

THUẬT TỐ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




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 tốn
hình phễu tìm đường đi ngắn nhất giữa hai điểm trong đa giác đơn” là
hồn tồ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

1


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 q 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 q 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ể hồ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 q 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 hồ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

2


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 tốn tìm tiếp tuyến với một đường gấp khúc
lồi .................................................................................................................................7
Chương 3: Thuật tố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 TỐN DIJKSTRA VÀ THUẬT TỐ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 tốn Dijkstra .................................17
2.1.3 Độ phức tạp thuật toán Dijkstra ...............................................................18
2.2 Thuật tốn tìm tiếp tuyến với một đường gấp khúc lồi ...................................18
Chương 3. THUẬT TỐ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
3


3.1 Cây đối ngẫu ...................................................................................................22
3.2 Hình ống tay và hình phễu ..............................................................................24
3.3 Thuật tố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 tốn ...............................................29
3.4.2 Đánh giá độ phức tạp của thuật tốn ........................................................31
3.5 Ví dụ minh họa ................................................................................................31
TÀI LIỆU THAM KHẢO .........................................................................................44

4


Danh mục ký hiệu
[a, b] hoặc ab


Đoạn thẳng nối 2 điểm a và b

a1a2...ak

Đường gấp khúc đi qua các đỉnh a1, a2, ..., ak

d(x, y)

Khoảng cách Euclid giữa hai điểm x, y dọc theo S

length(x, y)

Độ dài đoạn thẳng nối 2 điểm x và y

SP(x, y)

Đường đi ngắn nhất từ x đến y

L(x, y)

Đường đi tùy ý từ điểm x đến y

xyz

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

5


MỞ ĐẦU

1. Sự cần thiết của vấn đề nghiên cứu
Hình học tính tố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 tốn hình học. Trong hình học tính
tốn thường giải quyết các bài tố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 tố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 tố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 tố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 tố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 tố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 tố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 tốn hình phễu của Lee và
Preparata.

6



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 tốn hình phễu của Lee và Preparata;
- Các ứng dụng của thuật tố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 tố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 tốn phễu và đưa ra ví dụ minh họa thuật tốn đó.
Nghiên cứu các tài liệu về thuật tố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 tốn Dijkstra và thuật tố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 tốn: Thuật tốn
Dijkstra, thuật tố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 tố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.

7


Chương 3: Thuật tố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 tốn, cũng như đưa ra các nhận xét và
đánh giá về thuật toán.

8


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 tốn của một thuật
tố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 tố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).
• E ⊆ V × V là tập các cạnh (edge).
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)}.
b
c
d


a

e
Hình 1.1: Đồ thị hữu hạn có 5 đỉnh

9


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


Đị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ị
Giả sử G = (V, E) là đồ thị.
Định nghĩa 1.1.8. Đường đi trong đồ thị là một dãy các đỉnh:
<x1, x2, ..., xi, xi+1, ..., xk−1, xk>.
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 : (xi−1, xi) ∈ E
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ố ngun 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 ∞.

11


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 ngồ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.

12


Không gian ℝn (∀n > 1) được trang bị chuẩn ‖𝑥‖ = √𝑥12 + 𝑥22 + ⋯ 𝑥𝑛2
với x = (x1, x2, ..., xn) ∈ ℝ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
hữu hạn các số thực ti, i = 0, ..., n thỏa mãn a = t0 ≤ t1 < ... < tn−1 ≤ tn = b
với n ≥ 1.
Định nghĩa 1.2.1. Độ dài của đường γ : [a, b] → Rn kí hiệu là length(γ) được
xác định như sau:
length(γ) := sup ∑𝑛−1
𝑖=0 𝑑(𝛾(𝑡𝑖 ), 𝛾(𝑡𝑖+1 )).
𝜎

Đ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à ei+1 có duy nhất một điểm chung là vi+1.
Tức là ei ∩ ei+1 = vi+1 với i = 0, ..., n −1.

13


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

Đa giác đơn

Đa giác khơng
đơn

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

Đường gấp khúc q1q2...qk 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 qi 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.

q2

q3

q1

q7

q1

q9

q2

q6

q4

q8

q4

q8
q9

q6

q3

q5


Hình 1.3: Đường gấp khúc có 9 đỉnh

q5

q7

Hình 1.4: Đường gấp khúc đơn có 9 đỉnh

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 hồn tồ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.
14


1.3 Phép tam giác phân đa giác
Đường chéo của đa giác đơn P là đoạn thẳng [vi, vj] nằm trong đ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 ý ln
tồn tại ít nhất một cách tam giác phân đa giác. Có nhiều thuật tố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.

d1

d2

d3

d6

d9

d7

d5
d4

d8

Hình 1.5: Một phép tam giác phân đa giác có 12 đỉnh thành 10 tam giác bởi
9 đường chéo

15


Chương 2
THUẬT TỐN DIJKSTRA VÀ THUẬT TỐ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 tốn: Thuật tốn
Dijkstra, thuật tố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 tố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 tố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) := ∞;
16


d(a) := 0;
S :=;

truoc[v] := u;
end for
While b ∉ S do
Begin
u: = đỉnh khơng thuộc S có nhãn d(u) nhỏ nhất;
S := S ∪ {u};
for v ∈ V\S do
if d(u) + l(u, v) < d(v) then
d(v) := d(u) + l(u, v);
truoc[v] := u;
end if;
end for;
end;
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 tố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.
17


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 tố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 tố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 uaua+1...ub và uaua−1...u0 với
đỉnh là ua.
Input Cho hai đường gấp khúc lồi D1 = uaua+1...ub và D2 = uaua−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 uaua−1 và uaua+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
slope([x, ua]) thì tiếp tục tìm kiếm ở đường gấp khúc chứa đoạn có hệ số góc
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 tố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.

18


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

ua-1
ua


x

ua+1

ub
Hình 2.1: Tiếp điểm y trùng với đỉnh ua

- Trường hợp slope([x, ua]) nhỏ hơn hệ số góc của các đoạn uaua−1
và uaua+1.
u0

ua-1
ua

ua+1

ub

x

Hình 2.2: Hệ số góc của 2 đoạn uaua−1 và uaua+1 đều lớn hơn slope([x,ua])

19


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

ua


x

ua-1
ua+1

ub
Hình 2.3: Hệ số góc của 2 đoạn uaua−1 và uaua+1 đều nhỏ hơn slope([x, ua])

• 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, ui]) thì y là đỉnh kề ở phía bên trái của ui.

u0
x
y

ui

ua

ub
Hình 2.4: Tiếp điểm y là đỉnh kề ở phía bên trái của ui

20



– Nếu cả hai cạnh kề tại đỉnh ui đều có hệ số góc nhỏ hơn hoặc bằng với
slope([x, ui]) thì y là đỉnh kề ở phía bên phải của ui.
x

u0
y

ui
ua

ub
Hình 2.5: Tiếp điểm y là đỉnh kề ở phía bên phải của ui

– Nếu slope([x, ui]) nằm giữa hệ số góc của hai cạnh kề tại ui thì y := ui.
u0

x

ui=y
ua

ub
Hình 2.6: Tiếp điểm y trùng với ui

21


Chương 3
THUẬT TỐ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
Như đã trình bày trong phần mở đầu, bài tốn tìm đường đi ngắn nhất có
rất nhiều ứng dụng trong thực tế. Trong chương này, chúng tơi trình bày thuật
tốn hình phễu của tác giả Lee và Preparata. Nội dung chương này được trích
dẫn từ tài liệu [5, 6].
Bài toán đặt ra như sau: Cho một đa giác đơn có n đỉnh và hai điểm x, y
nằm trong đa giác đó. u cầu tìm đường đi ngắn nhất từ đỉnh nguồn x đến
đỉnh đích y và đường đi đó phải nằm trong đa giác (tức là đường ngắn nhất này
không được vượt ra khỏi miền trong của đa giác).
3.1 Cây đối ngẫu
Một khái niệm quan trọng trong lý thuyết đồ thị là “đối ngẫu” của đồ thị.
Trong luận văn này, tác giả trình bài khái niệm đối ngẫu của một phép tam giác
phân đa giác như sau.
Xét một đa giác P đã được phân chia thành các tam giác, ta có thể xem
đa giác P như là một đồ thị G nằm trong mặt phẳng, trong đó mỗi tam giác của
phép tam giác phân là một mặt thuộc miền trong của G, khi đó khái niệm cây
đối ngẫu T được xây dựng như sau.
Định nghĩa 3.1.1. Đối ngẫu T của một đa giác đã được tam giác phân là một
đồ thị T = (V, E) với V là tập đỉnh, E là tập cạnh. Trong đó mỗi đỉnh của V tương
ứng với một tam giác của phép tam giác phân và một cạnh của E nối 2 đỉnh nếu
và chỉ nếu các tam giác tương ứng với chúng có chung một cạnh.
Bổ đề 3.1.1. Đối ngẫu T của đa giác đã tam giác phân là một cây, với mỗi đỉnh
có bậc khơng vượt q 3.

22


x

y


Hình 3.1: Cây đối ngẫu của một phép tam giác phân có 17 đỉnh

Như vậy, với đa giác P đã được phân thành các tam giác, hai đỉnh x và y
tương ứng sẽ thuộc vào hai tam giác (x) và (y) nằm trong P.

x

Vì T = (V, E) là một cây nên trong T sẽ tồn tại duy nhất một đường đi π
nối 2 đỉnh của V tương ứng với (x) và (y) (2 đỉnh này có thể khơng trùng
với x và y). Hơn nữa, mỗi cạnh thuộc π lần lượt cắt mỗi đường chéo di
(với i = 1, ..., p) của P (theo thứ tự từ x đến y) tại một điểm duy nhất, và mỗi
đường chéo di chia P thành 2 miền tương ứng chứa x và y. Vì thế đường đi
ngắn nhất từ x đến y nằm trong P cũng sẽ cắt mỗi và chỉ mỗi đường chéo di tại
một điểm duy nhất.
Một đường đi ngắn nhất giữa hai điểm trong một mặt phẳng cũng là một
đường gấp khúc, vì thế khái niệm “đỉnh” của đường đi ngắn nhất được phát
biểu trong bổ đề dưới đây được đồng nhất với khái niệm đỉnh của một đường
gấp khúc đã trình bày trong chương 1.
Bổ đề 3.1.2. Giả thiết đa giác đơn P có n đỉnh được chia thành các tam giác
bởi các đường chéo d1, d2, ..., dn−3. Gọi S là tập các điểm cuối của các đường
chéo di (i = 1, ..., n − 3). Khi đó, các đỉnh của đường đi ngắn nhất từ x đến y
thuộc vào tập S ∪ {x, y}.

23


×