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

Thuật toán tìm đường đi xấp xỉ ngắn nhất giữa hai điểm trên mặt khối đa diện lồi của li và klette

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 (671.59 KB, 45 trang )

Mục lục
Trang
Danh mục ký hiệu
Lời nói đầu

2
3

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

5

1.1
1.2
1.3
1.4
1.5

Lý thuyết đồ thị…………………………………………
Độ phức tạp của thuật toán……………………………..
Khối đa diện lồi…………………………………………
Sai số ………..………………………………………….
Đường đi xấp xỉ ngắn nhất trên mặt……………………

Chương 2. Thuật toán tìm đường đi xấp xỉ ngắn nhất giữa hai điểm
trên mặt khối đa diện lồi của Li và Klete
2.1 Bài toán tìm đường đi ngắn nhất………………………...
2.2 Đa giác cắt ………………………………………………
2.3 Thuật toán tìm đường đi xấp xỉ ngắn nhất giữa hai điểm
trên mặt khối đa diện lồi của Li và Klete…………………………..
2.3.1 Lược đồ thuật toán……………………………….


2.3.2 Thủ tục 2.3.2……………………………………..
2.3.3 Thủ tục 2.3.3……………………………………..
2.3.4 Thuật toán 2.3.4………………………………….
2.3.5 Thuật toán 2.3.5………………………………….
2.4 Ví dụ tính toán…………………………………………...

5
8
13
15
19

21
21
21
22
22
22
24
25
26
28

Kết luận

44

Tài liệu tham khảo

45


1


DANH SÁCH KÝ HIỆU

G
E
V


¡ 3
p.x

   p0 , p1 ,..., pn 

d e  p, q 




pq
W

Đồ thị
Tập các cạnh của đồ thị
Tập các đỉnh của đồ thị
Khối đa diện
Biên của khối đa diện 
Không gian Euclide 3 chiều

Hoành độ của điểm p
Đường gấp khúc bắt đầu từ p0 kết thúc ở pn
Khoảng cách (Euclide) giữa hai điểm p và q
Phép toán Lôgíc “và”
Phép toán Lôgíc “hoặc”
Giao của các tập hợp
Hợp của các tập hợp
Đoạn thẳng pq
Kết thúc chứng minh

2


Lời nói đầu
Hình học tính toán là một 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 được biểu diễn bởi
ngôn ngữ hình học. Hình học tính toán thường giải quyết những bài toán
như: xác định địa điểm để đặt nhà máy, trạm điện, bến xe, trường học; xác
định đường đi ngắn nhất cho tàu biển, lập trình cho robot điện tử,… Có rất
nhiều nhà toán học nghiên cứu về hình học tính toán, chẳng hạn như D. R.
Chand (1970), P. Mcmullen (1971), R. L Graham (1972), F. P. Preparata
(1988), P. T. An (2007),…
Một trong những bài toán cơ bản của Hình học tính toán là “Tìm đường
đi ngắn nhất giữa hai điểm trên khối đa diện lồi”. Đây là một vấn đề đã được
rất nhiều nhà toán học quan tâm nghiên cứu và đưa ra các thuật toán khác
nhau để giải quyết bài toán này. Năm 2011, F. Li và R. Klette đã đưa ra
thuật toán xấp xỉ để giải quyết bài toán này thông qua việc cắt khối đa diện
lồi bởi các mặt phẳng song song.
Trong luận văn này chúng tôi nghiên cứu về thuật toán này của F. Li và
R. Klette. Với lý do đó chúng tôi chọn đề tài của luận văn là: “Thuật toán

tìm đường đi xấp xỉ ngắn nhất giữa hai điểm trên mặt khối đa diện lồi của
Li và Klette”.
Luận văn được trình bày trong hai chương:
Chương 1. Kiến thức cơ sở
Trong chương nay chúng tôi trình bày hệ thống kiến thức về lý thuyết
đồ thị, độ phức tạp của thuật toán, khối đa diện lồi, đường đi xấp xỉ ngắn
nhất trên mặt và sai số tính toán nhằm làm cơ sở cho việc nghiên cứu thuật
toán của Li và Klette.
Chương 2. Thuật toán tìm đường đi xấp xỉ ngắn nhất giữa hai điểm trên
mặt khối đa diện lồi của Li và Klete
Trong chương này chúng tôi trình bày chi tiết các thủ tục; thuật toán liên
quan và thuật toán chính để giải bài toán “tìm đường đi xấp xỉ ngắn nhất
giữa hai điểm của khối đa diện lồi” của Li và Klette. Các ví dụ tính toán
được nêu ra.
Luận văn được hoàn thành dưới sự hướng dẫn tận tình của PGS. TS
Phan Thành An, Viện Toán học, Viện Hàn lâm Khoa học và Công nghệ Việt
3


Nam. Tác giả xin bày tỏ lòng biết ơn sâu sắc tới thầy, người đã hướng dẫn
tác giả trong suốt quá trình học tập và nghiên cứu.
Cũng nhân dịp này tác giả xin chân thành cảm ơn các thầy cô giáo trong
khoa Toán và khoa Đào tạo sau đại học, các nghiên cứu sinh, các học viên
cao học thuộc nhóm Seminar Hình học tính toán, Viên Toán học cũng như
của lớp cao học 19 Hình học - Tô pô Đại học Vinh. Ngoài ra tác giả cũng
muốn gửi lời cảm ơn chân thành đến Ban giám hiệu, các thầy cô trong tổ
Toán trường THPT Diễn châu 2, gia đình và bạn bè đã động viên, giúp đỡ
tác giả rất nhiều trong quá trình học tập, nghiên cứu trong suốt khoá học.
Vinh, tháng 10 năm 2013
Tác giả.


4


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ức tạp của thuật toán, khối đa diện lồi, đường đi xấp xỉ ngắn nhất
trên mặt và sai số tính toán. Đây là những kiến thức cơ sở cho chương 2.
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 giao thông
của thành phố, sơ đồ tổ chức của một cơ quan, sơ đồ khối của một thuật
toán, sơ đồ một mạng máy tinh… Đó 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ĩa như sau.
Định nghĩa 1.1.1 (xem [3]) Đồ 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).
b
c

a
d

e

Hình 1.1: Đồ thị hữu hạn
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  .

5


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 (xem [3]) Đồ 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à 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ối 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ự gọi là cạnh vô hướng, còn nó sắp thứ
tự 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 [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 được 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 (xem [3]) Đồ thị G  V , E  mà mỗi cặp đỉnh được nối
nhau không quá một cạnh được gọi là đồ thị đơn ( 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 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ị.
Định nghĩa 1.1.5 (xem [3])
1. Hai đỉnh của đồ thị G được gọi là liên thông, nếu trên đồ thị đườ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.
6


Định nghĩa 1.1.6 (xem [3]) 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.7 (xem [3]) Đườ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ề với đỉ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 x1 đế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 đồ 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.8 (xem [3]) Đồ 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ư đỉnh a đến đỉnh b thì ta đặt khoảng
cách bằng  .
1.1.3 Một số tính chất về đường đi trong đồ thị
Định lý 1.1.1 (xem [3]) 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 đến đỉnh b . Ta có thể chọn:
a  x1 , x2 ,..., xi , xi 1 ,..., xk 1 , xk  b (trong đó x1  xk )
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 chứng minh.
Nếu ngược lại k  1  n  1 nghĩa là k  n , thì trong dãy của đường đi có ít
nhất hai đỉnh trùng nhau, chẳng hạn xi  x j . Khi đó thì :
7


a  x1 , x2 ,..., xi , xi 1 ,..., xk 1 , xk  b

cũng là đường đi từ a đến b nhưng với độ dài lớn hơn. Điều này mâu thuẫn
với giả thiết của đường đi ngắn nhất.
Vậy 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 (xem [3]) 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 có hai đỉnh.

Vậy 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ị đó.
W
Hệ quả: (xem [3]) Số đỉnh có bậc lẻ trong một đồ thị phải là một số chẵn.
1.2 Độ phức tạp thuật toán
1.2.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à một trong những thước đo để so sánh tính
hiệu quả của thuật toán. Một thước đo của thuật toán là thời gian máy tính sử
dụng để giải bài toán theo thuật toán đang xét, khi các giá trị đầu vào có một
kích thước xác định. 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 độ phức tạp thời gian cho một thuật toán là rất quan
trọng. Độ phức tạp không gian đòi hỏi của thuật toán mà ta biế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 thuật toán. Trong luận văn này chúng tôi không nghiên cứu về
cấu trúc dữ liệu nên ta bỏ qua độ phức tạp không gian.
Để tính độ 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 n  n0 . Kí hiệu F là
tập hợp tất cả các hàm như vậy.
1.2.2 Các định nghĩa (xem [2])
Cho hàm số g  n   F, ta định nghĩa O  g  n   là tập hợp các hàm
8


f  n   F có tính chất: Tồn tại hằng số c và n0 sao cho với n  n0 thì


f  n   c.g  n  . Nếu f  n   O  g  n   , ta nói rằng f  n  là Ô lớn của g  n  .

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 dể giải một bài toán. Người ta dùng kí hiệu
f  n   g  n   O  h  n   , nghĩa là f  n   g  n   O  h  n   .
Ví dụ: f  n   2n3  7n 2  6n  2 , thì ta có thể viết f  n   2n3  O  n 2  .
Định nghĩa 1.2.1 (xem [2]) Cho hàm số g  n   F, ta định nghĩa   g  n   là
tập hợp các hàm f  n   F có tính chất: Tồn tại hằng số dương c1 , c2 sao cho
với n  n0 thì c1.g  n   f  n   c2 .g  n  .
Định nghĩa 1.2.2 (xem [2]) Cho hàm số g  n   F, ta định nghĩa   g  n   là
tập hợp 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
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.2.3 Các tính chất
Mệnh đề 1.2.1 (xem [2]) Nếu f1  n   O  g1  n   và f 2  n   O  g 2  n   thì
f1  n   f 2  n   O  g1  n   g 2  n   .
Chứng minh
Giả sử rằng với n  n1 , f1  n   c1.g1  n  và với n  n2 , f 2  n   c2 .g 2  n 
Ta đặt no  max n1 , n2  và co  max c1 , c2  . Khi đó với n  no ta có
f1  n   f 2  n   c1.g1  n   c2 .g 2  n   c0 .  g1  n   g 2  n   .

W

Mệnh đề 1.2.2 (xem [2]) Nếu f1  n   O  g1  n   và f 2  n   O  g 2  n   thì
f1  n   f 2  n   O  max{g1  n  , g 2  n } .
Chứng minh
Giả sử rằng với n  n1 , f1  n   c1.g1  n  và với n  n2 , f 2  n   c2 .g 2  n 
Ta đặt no  max n1 , n2  và c0  c1  c2 . Khi đó với n  no ta có
f1  n   f 2  n   c1.g1  n   c2 .g 2  n   c0 .  max{g1  n  , g 2  n }


 f1  n   f 2  n   O  max{g1  n  , g 2  n } .

W

Mệnh đề 1.2.3 (xem [2]) Nếu f1  n   O  g1  n   và f 2  n   O  g 2  n   thì
9


f1  n  . f 2  n   O  g1  n  .g 2  n   .

Chứng minh
Giả sử rằng với n  n1 , f1  n   c1.g1  n  và với n  n2 , f 2  n   c2 .g 2  n 
Ta đặt no  max n1 , n2  và c0  c1.c2 . Khi đó với n  no ta có
f1  n  . f 2  n   c1.g1  n  .c2 .g 2  n   c0 .  g1  n  .g 2  n   .

W

Mệnh đề 1.2.4 (xem [2]) Cho P  n   ak n k  ak 1n k 1  ...  a1n  a0 là đa thức bậc
k , ak  0 . Khi đó P  n   O  n k  .
Chứng minh
Do ta có P  n   ak n k  ak 1n k 1  ...  a1n  a0
 ak n k  ak 1 n k 1  ...  a1 n  a0
 ak n k  ak 1 n k  ...  a1 n k  a0 n k
 ( ak  ak 1  ...  a1  a0 )n k

Nếu c  ak  ak 1  ...  a1  a0 , thì P  n   c.n k với n  n0 . Vậy P  n   O  n k  . W
1.2.4 Cách tính độ phức tạp của thuật toán
Độ phức tạp của thuật toán đo bằng hàm O ... là chính. Vì thế để 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.2.5 Phép tính cơ sở (xem [2])
Độ phức tạp của toán tử là một hằng số, nghĩa là O 1 . Việc xác định toán
tử là gì, là không dễ, 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ép tính cơ sở là phép toán cộng, trừ, nhân, chia… Nhưng
chú ý rằng khi ta thực hiện số lớn hàng tỉ thì không chấp nhận phép nhân các
số lớn là 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 lôgarít,… bởi vì chúng tính toán theo dãy.
1.2.6 Dãy các phép tính (xem [2])

10


Độ phức tạp thời gian của dãy liên tiếp các phép toán 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 F2 ,
s2 có độ phức tạp F1 . 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 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 là bao nhiêu? Người ta định ra độ
phức tạp của các phép toán trong trường hợp xấu nhất là:
1. Phép gán có độ phức 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ới thời

gian của mỗi vòng lặp đó.
Ví dụ 1.2.1 (xem [2])
Xét đoạn chương trình tính tổng sau:
1. n : 100 ;
2. sum : 0 ;
3. for i : 1 to n do
4.
for j : 1 to n do
5.
sum : sum  1 ;
6.
end for;
7. end for;
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 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 gain bằ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)

 a  b  nc  nd  ne  n 2 f  n 2 g  n 2 h
 n 2 ( f  g  h )  n (c  d  e )  a  b ,

bởi vì a, b, c, d , e, f , g , h là những hằng số, ta đặt:
11



i  f  g h , 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.n 2  j.n  k .
Vậy T  n   O  n 2  .
Ví dụ 1.2.2 Tìm độ phức tạp của vòng for của đoạn chương trình sau (xem
[2])
1. fact : 1 ;
2. for i : 1 to n do
3.
fact : fact  i;
4. end for
Dòng 1: phép toán 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 lần lượt kí hiệu 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 )  ne  n  c  d  e   a  b

Vậy T  n   O  n  .
Ví dụ 1.2.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 của hàm P, F1 , F2 .
T  P   O  P  ; T  s1   O  F1  ; T  s2   O  F2  ,
suy ra T ( f  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 đú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 , s1 đượ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 bộ vòng if là
T ( f  p  then s1 else s2 )  max(max O  P  , O  F1  ; max O  P  , O  F2 }
= max O  P  , O  F1  , O  F2  .

12


1.3 Khối đa diện lồi
Định nghĩa 1.3.1 (xem [6]) Cho  là một ánh xạ từ khoảng  a, b   ¡ vào
mặt phẳng thực,  :  a, b   ¡ 2 , sao cho a  b,   a     b  , và   s     t  cho
tất cả các s, t với a  s  t  b . Tập hợp    x, y  :   t    x, y   a  t  b được
gọi là đường cong đơn.
Định nghĩa 1.3.2 (xem [6]) Một đa giác đơn P được xác định bởi đường
cong đa giác đơn; đường cong đa giác này xác định biên P của P , mà nó
bao quanh (nội tiếp) phần trong P 0 của P .
Minh họa Hình 1.3.1

Hình 1.3.1: Minh họa hai đa giác đơn
Định nghĩa 1.3.3 (xem [6]) Một khối đa diện đơn  được xác định bởi một
tập hợp hữu hạn các mặt đa giác mà phủ kín hoàn toàn bề mặt của nó, và có
thể được biến đổi hình học vào bề mặt của khối cầu; hợp của tập hợp các đa
giác xác định biên  của  , mà chứa phần trong  0 của  .
Minh hoạ Hình 1.3.3 và Hình 1.3.4
Định nghĩa 1.3.4 (xem [6]) Một khối đa diện  được gọi là khối đa diện lồi
nếu đoạn thẳng nối hai điểm bất kì của  luôn thuộc  .
Minh hoạ Hình 1.3.4

13



Hình 1.3.2: Minh họa hai đa giác không đơn

Hình 1.3.3: Minh họa khối đa diện không lồi

14


Hình 1.3.4: Minh họa khối đa diện lồi
1.4 Sai số
1.4.1 Khái niệm số gần đúng
Trong thực tế chúng ta thường phải xử lý phải tính toán với các đại lượng
như các số đo vật lý, các dữ liệu ban đầu, đó là các số được làm tròn với sai
số nào đó, tức là các số gần đúng. Việc ước lượng sai số hợp lý cho phép ta
áp dụng được chất lượng của quá trình tính toán, quyết định số chữ số giữ lại
trong các phép tính trung gian và trong kết quả cuối cùng.
1.4.2 Sai số tuyệt đối và sai số tương đối.
1.4.2.1. Sai số tuyệt đối. (xem [4])
Nếu số gần đúng a có giá trị đúng là a0 thì ta nói a xấp xỉ a0 hay a là số
gần đúng của a0 . Khi đó sai số của a là
Ea  a  a0
(4.1)
Nhưng giá trị này nói chung ta không biết được mà chỉ ước lượng được cận
trên của giá trị tuyết đối của nó.
Định nghĩa 1.4.1. (xem [4]) Giá trị ước lượng a sao cho:
a  a0  a

(4.2)

được gọi là sai số tuyệt đối của số gần đúng a .

Sai số tuyệt đối nhỏ nhất có thể biết được gọi là sai số tuyệt đối giới hạn của
a . Thông thường ước lượng sai số tuyệt đối giới hạn là rất khó và nhiều khi
không cần thiết nên người ta chỉ cần ước lượng sai số tuyệt đối đủ nhỏ và

15


dùng từ 1 đến 3 chữ số có nghĩa (là số chữ số bắt đầu từ chữ số khác không
đầu tiên từ trái sang phải) để biểu diễn sai số tuyệt đối của số gần đúng.
Thay cho biểu thức (4.2) người ta còn dùng biểu diễn sau để chỉ sai số tuyệt
đối:
a  a0  a
(4.3)
Ví dụ: Một mảnh đất hình chữ nhất có chiều dài d  15, 45m và chiều rộng
r  3,94m với sai số 1cm . Khi đó ta hiểu là:
d  0, 01m hay d  15, 45m  0, 01m
r  0, 01m hay r  3,94m  0, 01m
Khi đó diện tích của mảnh đất được tính là:
S  d .r  15, 45.3,94  60,873m 2

với cận trên là 15, 45  0, 01 .  3,94  0, 01  61, 067m2
và cận dưới là 15, 45  0, 01  3,94  0, 01  60, 679m 2
hay
60, 679  S  61, 067       
Vậy ước lượng sai số tuyệt đối của S là:
S  S0  0,194m 2

hay làm tròn 0, 2 m 2 .
1.4.2.2 Sai số tương đối. (xem [4])
Hai số gần đúng có sai số tuyệt đối bằng nhau sẽ có “mức độ chính xác

khác nhau nếu số độ lớn của chúng khác nhau. Số bé hơn sẽ có độ chính xác
kém hơn.
Định nghĩa 1.4.2 (xem [4]) Sai số tương đối của số gần đúng a (được ký
hiệu là  a ) là tỷ số giữa sai số tuyệt đối và giá trị tuyệt đối của nó:
a 

a
a

(5.4)

Thường sai số tương đối được biễu diễn dưới dạng  % với 2 hoặc 3 chữ số.
Dễ thấy:
a  a . a
(5.5)
nên chỉ cần biết một trong hai loại sai số là tính được loại kia.
Ví dụ: Nếu a  57 và a  0,5 thì  a  0, 0087719 hoặc 0,88%
1.4.3. Các loại sai số (xem [4])
Dựa vào nguyên nhân gây sai số, ta có các loại sau:
- Sai số giả thiết: xuất hiện do việc giả thiết bài toán đạt được một số điều
kiện lý tưởng nhằm làm giảm độ phức tạp của bài toán.
16


- Sai số do số liệu ban đầu: xuất hiện do việc đo đạc và cung cấp giá trị đầu
vào không chính xác.
- Sai số phương pháp : xuất hiện do việc giải bài toán bằng phương pháp
gần đúng.
- Sai số tính toán : xuất hiện do làm tròn số trong quá trình tính toán, quá
trình tính càng nhiều thì sai số tích luỹ càng lớn.

Chúng ta chỉ quan tâm tới sai số phương pháp và sai số tính toán.
1.4.3.1. Sai số tính toán (xem [4])
Giả sử dùng n số gần đúng xi  i  1, 2,..., n  để tính đại lượng y , với
y  f  xi   f  x1 , x2 ,..., xn 

trong đó : f là hàm khả vi liên tục theo các đối số xi .
Khi đó sai số của y được xác định theo công thức sau:
n

Sai số tuyệt đối:

y  

Sai số tương đối:

y

i 1
n

i 1

f
xi .
xi
 ln f
xi .
xi

- Trường hợp f có dạng tổng: y  f  xi    x1  x2  ...  xn

n
f
 1, i suy ra y   xi .
xi
i 1

- Trường hợp f có dạng tích: y  f  xi  
ln f  ln

x1.x2 .....xk
xk 1.....xn

x1.x2 .....xm
  ln x1.ln x2 .....ln xm    ln xm 1.ln xm  2 .....ln xn 
xm 1.....xn
n
n
x
 ln f
1

, i suy ra  y   i   xi
xi
xi
i 1 xi
i 1

n

Vậy  y    xi .

i 1

- Trường hợp f có dạng luỹ thừa: y  f  x   x   0 
ln y  ln f   ln x

x
 ln f


suy ra  y     x .
x
x
x

Vậy  y   x .
Ví dụ: Cho a  10, 25; b  0,324; c  12,13
Tính sai số của:
17


y

Giải:

a3
b c
1
2

Ta có  y    a 3     b c   3 a   b  c

3

a b 1 c


.
a
b 2 c

1.4.3.2. Sai số phương pháp (xem [4])
Khi giải gần đúng một bài toán phức tạp ta phải thay bài toán đã cho bằng
một bài toán đơn giản hơn có thể giải được thông qua việc thực hiện các
phép toán thông thường bằng tay hoặc trên máy tính điện tử. Phương pháp
thay bài toán phức tạp bằng bài toán đơn giản hơn như thế gọi là phương
pháp gần đúng.
Ví dụ: Hãy tính đại lượng
1 1 1
n 1 1
 3  3  ...   1
 ...
3
1 2 3
n3
Với sai số tuyệt đối không vượt quá 5.103 .
B

Giải:
Vế phải của B là một chuỗi số đan dấu hội tụ. Do đó việc tính B là hợp lý.
Nhưng vế phải là một “tổng vô hạn số”, ta không thể cộng hết số này đến số
khác mãi được. Do đó để tính B ta sử dụng một phương pháp gần đúng, cụ

thể là thay B bằng tổng của n số hạng đầu:
1 1 1
n 1 1
 3  3  ...   1
3
1 2 3
n3
Bài toán tính Bn đơn giản hơn bài toán tính B . Lúc đó B  Bn là sai số
Bn 

phương pháp, và số n phải được chọn sao cho sai số phương pháp cộng với
sai số tính toán nhỏ hơn 5.103 . Ta có:
B  Bn 

1

 n  1

3



1

 n  2

3

 ... 


1

 n  1

(theo lý thuyết về chuỗi số đan dấu). Với n  6 ta thấy:
B  B6 

ta có

1
1

 3.103
3
7
343

1 1 1 1 1 1
      0,899
13 23 33 43 53 63
với sai số không vượt quá 9.104 .
B6  0,899  9.10 4 .
B6 

Vậy ta có

18

3



B  0,899  B  B6  B6  0,899
B  0,899  3.103  9.104  4.103 .

Do đó B  0,899 với sai số tuyệt đối không vượt quá 4.103 :
B  0,899  4.103 .
1.5 Đường đi xấp xỉ ngắn nhất trên mặt
Định nghĩa 1.5.1 (xem [6]) Trong hình học Euclide, một đường từ một điểm
p đến một điểm q là một tập hợp các đỉnh; nó đi từ đỉnh đến đỉnh, bắt đầu từ
đỉnh p và kết thúc tại đỉnh q . Chiều dài của nó là tổng các khoảng cách
Euclide giữa các cặp đỉnh của đường. Một đường đi giữa hai đỉnh có chiều
dài ngắn nhất được gọi là một đường đi ngắn nhất.
Minh hoạ Hình 1.5
Cho p   p.x, p. y, p.z  và q   q.x, q. y, q.z  khi đó khoảng cách (Euclide)
giữa hai điểm p và q được tính bởi công thức
d e  p, q  

 p.x  q.x    p. y  q. y    p.z  q.z  .
Hệ quả (Xem [6]) Chiều dài của đường đi    p0 , p1 ,..., pn  được tính bởi
2

công thức

2

2

n 1

L      d e  pi , pi 1  .

i 0

Nếu p  q và n  0 thì L     0 .

Định nghĩa 1.5.2 Cho khối đa diện lồi  , hai điểm p, q   và   0 . Giả
sử đường đi ngắn nhất giữa p0  p và pn  q trên mặt khối đa diện lồi  là
   p0 , p1 ,..., pn  có chiều dài
n 1

L      d e  pi , pi 1  .
i 0

Giả sử một đường đi    p0 , p ,..., pn' 1 , pn  trên mặt khối đa diện lồi  có
chiều dài
'

'
1

n 1

L   '    d e  pi' , pi' 1  với p0'  p0 , pn'  pn
i 0

thoả mãn L     L      . Khi đó ta nói đường đi
'

 '   p0 , p1' ,..., pn' 1 , pn 

là đường đi xấp xỉ ngắn nhất từ p đến q trên mặt khối đa diện  với sai số

tuyệt đối   0 .
19


p

Đường 1

q

Đường 2
Đường 3
Hình 1.5: Minh họa 3 đường đi từ đỉnh p tới đỉnh q mà không đi qua các
vật cản (các hình được tô đậm) trong đó đường 1 và đường 2 (các đường in
đậm) là đường đi ngắn nhất từ đỉnh p đến đỉnh q .

20


Chương 2. Thuật toán tìm đường đi xấp xỉ ngắn
nhất giữa hai điểm trên mặt khối đa diện lồi của
Li và Klete
Chương này chúng tôi trình bày chi tiết thuật toán chính để giải bài toán
“Tìm đường đi xấp xỉ ngắn nhất giữa hai điểm trên bề mặt của khối đa diện
lồi” của Li và Klette (xem [6]) và ví dụ tính toán minh hoạ.
Chương này là nội dung chính của luận văn
2.1. Bài toán tìm đường đi ngắn nhất
2.1.1 Bài toán
Cho khối đa diện lồi  và hai điểm p, q   . Hãy tìm đường đi ngắn nhất
giữa p và q trên mặt khối đa diện lồi  .

2.1.2 Lịch sử bài toán
Bài toán trên đã được rất nhiều nhà toán học quan tâm nghiên cứu và đưa
ra các thuật toán khác nhau để giải quyết bài toán này. J. O’Rourke, S. Suri,
H. Booth năm 1984, D. Mount năm 1985, M. Shair, A. Schor năm 1986, J.
Chen, Y. Han năm 1990,… với các thuật toán tính chính xác. L. Mark, M.
Anil năm 1996, P. K. Agarwal, P. Har, M. Karia năm 2000, J. S. B. Mitchell
năm 2012,C. H. Papadimitriou, F. Li, R. Klette năm 2011,…. với các thuật
toán tính xấp xỉ.
2.2. Đa giác cắt (xem [6])
Cho  là khối đa diện lồi và V  v1 , v2 ,..., vn  là tập tất cả các đỉnh của  .
Ký hiệu F  F1 , F2 ,..., Fm  là tập hợp tất cả các mặt (tức là các đa giác đơn)
của biên  của  . Ký hiệu E  e1 , e2 ,..., el  là tập hợp tất cả các cạnh của tất
cả các mặt của  .
Với mỗi v  V , ký hiệu  v là mặt phẳng trong ¡ 3 chứa v và song song
với mặt phẳng Oxy (nghĩa là  v được xác định bởi phương trình z  v ). Ký
hiệu Pv   v   .
Định nghĩa 2.2.1 (xem [6]) Pv được gọi là đa giác cắt (của  ) tương ứng
với mỗi đỉnh v .
21


Vì  là đa diện lồi, Pv   v   nên Pv là đa giác lồi. Nếu u.z  v.z và u là
một đỉnh của Pv thì Pu  Pv . Ký hiệu Pu .z thay cho ký hiệu u.z . Hai đa giác
cắt P1 và P2 được gọi là liền kề khi và chỉ khi
P1.z  P2 .z hoặc P1.z  P2 .z
và không có một đỉnh v  V nào mà v.z nằm giữa v1.z và v2 .z .
   P1 , P2 ,..., Pk  được gọi là tập hợp tất cả các đa giác cắt của  khi và chỉ
khi Pi và Pi 1 là liền kề, với i  1, 2,..., k  1 .
Cho u và v là các đỉnh của  sao cho các đa giác cắt Pu , Pv là liền kề. Ký
hiệu

Suv  w : w  Pu  vw  e  E .
Chú ý rằng Suv  Svu với u  v . Tập hợp Suv có thể chứa các điểm mà không
phải là đỉnh của  . Vì u , v là các đỉnh của đa diện, chúng ta có u  Suv khi và
chỉ khi uv là một cạnh của  . Tập Suv được xác định như trên là đường gấp
khúc của Pu .
Định nghĩa 2.2.2 ([6]) Cho u, v  V sao cho u.z  v.z , đoạn uv chứa trọn vẹn
trong một cạnh của tập E, và các đa giác cắt là liền kề. Khi đó tập Suv ( Svu
tương ứng) được được gọi là đường gấp khúc có thể nhìn xuống (lên tương
ứng) thấy được từ đỉnh v ( u tương ứng) trong  .
2.3 Thuật toán tìm đường đi xấp xỉ ngắn nhất giữa hai điểm trên mặt
khối đa diện lồi của Li và Klete
2.3.1 Lược đồ thuật toán
- Thuật toán 2.3.5: đây là thuật toán chính, trong thuật toán này sẽ gọi
Thuật toán 2.3.4.
- Thuật toán 2.3.4: sẽ được sử dụng như một chương trình con của
Thuật toán 2.3.5, trong thuật toán này sẽ gọi Thủ tục 2.3.3.
- Thủ tục 2.3.3: trong thủ tục này sẽ gọi Thủ tục 2.3.2.
- Thủ tục 2.3.2: Thủ tục 2.3.2 sẽ được áp dụng ở dòng 10 của Thủ tục
2.3.3.
2.3.2 Thủ tục 2.3.2 (Tìm đường gấp khúc có thể nhìn thấy được) ([6])
Input: E ,V và u  V .
Ouput: Tập hợp các đỉnh của đường gấp khúc có thể nhìn xuống (lên) thấy
được từ đỉnh u .
1: Đặt v  max w : w.z  u.z  w V  .
22


2: Đặt Vu  w : e(e  E  w  e   v ) .
3: Áp dụng Thuật toán Graham (xem [5]) để sắp xếp các đỉnh của đường gấp
khúc có thể nhìn xuống thấy được từ u .

4: Tương tự, tìm tập hợp các đỉnh của đường gấp khúc có thể nhìn lên thấy
được từ đỉnh u .
Minh họa Thủ tục 2.3.2 Hình 2.1 và Hình 2.2.

u

w1
w3

w2

Hình 2.1: Đường gấp khúc   w1 , w2 , w3  (đường in đậm) là đường gấp khúc
có thể nhìn xuống thấy được từ u .

w3
w1

w2

u

Hình 2.2 : Đường gấp khúc   w1 , w2 , w3  (đường in đậm) là đường gấp khúc
có thể nhìn lên thấy được từ u.
23


2.3.3. Thủ tục 2.3.3 (Tìm đường gấp khúc lớn nhất có thể nhìn thấy được)
([6])
Input: Cho 3 đa giác cắt P1 , P2 và P3 của đa diện lồi  , và 2 điểm
pi  Pi , i  1,3 và p1.z  p3 .z .

Output: Tập hợp các đỉnh của đường gấp khúc lớn nhất P2*  P2 mà mỗi
điểm p  P2* có thể nhìn thấy được cả từ p1 và p3 .
1: Gán Pi '   với i = 1,3.
2: Nếu p1 không phải là đỉnh của P1 thì
3: Tìm cạnh biên duy nhất e trong P2 mà p1 và e chứa trong một mặt
của  .
4: Gán Pi '  e .
5: Ngược lại
6: Nếu p1 là đỉnh của P1 nhưng không là đỉnh của  thì
7:
Tìm 2 cạnh biên e1 , e2 của P2 mà p1 và ei chứa trong các mặt của  ,
với i  1, 2 .
8:
Gán P1'  e1 , e2  .
9:
Ngược lại
10:
Sử dụng E ,V và p1 cho đầu vào của Thủ tục 2.3.2; sử dụng kết quả
để cập nhật V ( p1' ) .
11: Kết thúc vòng lặp từ dòng 6
12: Kết thúc vòng lặp từ dòng 1
13: Tương tự cập nhật V ( p3' ) .(Đối với p3  P3 , tìm tương tự từ dòng 1 đến
dòng 12)
14: Gán V ( p 'j ) = max w j1 , w j 2 ,....w jk  , với j  1,3 .
j

15: Gán 21  max 11 ,31 and 2k  min 1k ,3k .




2



1

16: Đầu ra V ( p ) = w2 , w2 ,....w2 .
*
2

1

2

k2

Minh họa Thủ tục 2.3.3 hình 2.3.

24

3


P3

p3

w4

P2


w1
w2

w3
P1
p1

Hình 2.3: Đường gấp khúc P2*    w2 , w3 , w4  (đường tô đậm) là đường gấp
khúc lớn nhất có thể nhìn thấy được. Vì   w1 , w2 , w3 , w4  là đường gấp khúc
có thể nhìn xuống thấy được từ p3 ,   w2 , w3 , w4  là đường gấp khúc có thể
nhìn lên thấy được từ p1 .
Trong hình 2.3, p1 là một đỉnh của đa giác P1 nhưng không là đỉnh của đa
diện  , p3 là vừa là đỉnh của đa giác P3 vừa là đỉnh của đa diện  .
2.3.4. Thuật toán 2.3.4 (Thuật toán tìm đường ngắn nhất trên các đa giác
cắt) ([6])
Input: Cho k đa giác cắt tách rời P1 , P2 , P3 ,….., Pk , và P '   p1 , p2 ,..., pk  sao
cho pi  Pi .   0 .
Output: Tập hợp các điểm p, p1 , p2 ,..., pk , q với sai số tương đối

1  2(k  1)r ( ) / L 

của đường gấp khúc mà điểm bắt đầu tại p , sau đó tới đa giác cắt
Pi tại các điểm pi theo thứ tự nhất định và cuối cùng kết thúc tại
q , trong đó L là chiều dài của đường gấp khúc ngắn nhất, r ( ) là
sai số tuyệt đối cho khoảng cách tương ứng giữa pi và các điểm
chính xác pi' sao cho d e ( pi , pi' )  r ( ) với i  1, 2,..., k , trong đó de là
khoảng cách Euclide.
1: Gán L1   i 0 Lp ( pi , pi 1 ) ( p  p0  P0 , q  pk 1  Pk 1 ); và gán L0   .
2: Trong khi L0  L1   thực hiện

3:
Với mỗi i  1, 2,..., k thực hiện
k

25


×