ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊNĐẶNG THỊ NGỌC ÁNH SỬ DỤNG KỸ THUẬT "PHỄU" TÌM ĐƯỜNG NGẮN NHẤT GIỮA HAI ĐIỂM TRONG ĐA GIÁC ĐƠN VÀ TRÊN MẶT KHỐI ĐA DIỆN LUẬN VĂN TH
Đồ thị, cây và chu trình
Lý thuyết đồ thị là một trong những ngành khoa học ra đời khá sớm và gắn kết nhiều ngành khoa học với nhau, giúp chúng ta mô tả hình học và giải quyết nhiều bài toán thực tế phức tạp liên quan đến các khái niệm như đường đi, chu trình, đường đi ngắn nhất
Các khái niệm sau được trình bày theo tài liệu [3]. Định nghĩa 1.1.1 Tập hợp V 6 = ∅ các đối tượng và bộ E các cặp sắp thứ tự và không sắp thứ tự các phần tử của V được gọi là một đồ thị Kí hiệu là
• V là tập hợp các đỉnh.
• E ⊆ V × V là tập hợp các cạnh.
Nếu cặp đỉnh không sắp thứ tự được gọi là cạnh, cặp đỉnh sắp thứ tự được gọi là cạnh có hướng.
Ví dụ 1.1.1 Cho đồ thị G như trong hình dưới đây. a b c d e
Hình 1.1: Đồ thị hữu hạn có 5 đỉnh
Nếu (a, b) là một cạnh của đồ thị G thì ta nói đỉnh b kề với đỉnh a, hay hai đỉnh a và b cùng kề với cạnh (a, b).
Hai cạnh kề nhau là hai cạnh có ít nhất một đỉnh chung. Đồ thị vô hướng là đồ thị chỉ chứa các cạnh vô hướng. Đơn đồ thị (gọi tắt là đồ thị) là đồ thị mà mỗi cặp đỉnh được nối với nhau bởi không quá một cạnh. Định nghĩa 1.1.2 Cho đồ thịG = (V, E),đường đi trong đồ thị là một dãy các đỉnh< x 1 , x 2 , , x k >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 cạnh (x i−1 , x i ) ∈ E.
Ta nói đường đi này đi từ đỉnh đầu x 1 đến đỉnh cuối x k. Định nghĩa 1.1.3 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.
Độ phức tạp thuật toán
Một công việc có thể có nhiều cách khác nhau để thực hiện, nhất là thuật toán Có thể có nhiều thuật toán khác nhau thực hiện một công việc Ta phải tìm một ngôn ngữ nào đó để so sánh được tốc độ thực hiện thuật toán khi làm cùng một việc.
Một thước đo hiệu quả của thuật toán là đo thời gian mà 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 Gắn với thời gian gian tính toán là độ phức tạp thời gian Việc biết được độ phức tạp thời gian cho một thuật toán là rất quan trọng, vì ta có thể kiểm soát được thời gian chạy thuật toán là một phút, một năm hay một triệu năm.
Một thước đo thứ hai là đo 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 với bộ nhớ tính toán làđộ phức tạp không gian Việc biết độ phức tạp về không gian cho ta bước chuẩn bị và thấy được khả năng đáp ứng trong việc thực thi thuật toán Độ phức tạp về không gian gắn với cấu trúc dữ liệu nên trong phạm vi luận văn, chúng tôi bỏ qua độ phức tạp về không gian. Độ phức tạp về thời gian của thuật toán có thể được xem xét qua các phép toán được dùng Thông thường số các phép tính được thực hiện phụ thuộc vào cỡ của bài toán, tức là độ lớn của đầu vào Vì thế độ phức tạp thuật toán là một hàm phụ thuộc cỡ đầu vào n của thuật toán Tùy thuộc từng bài toán mà n có thể nhận những giá trị khác nhau Ví dụ bài toán tính giai thừa thì n là số cần tính giai thừa, nhưng trong phép tính đối với ma trận thì n lại là số hàng hoặc số cột của ma trận.
Tuy nhiên, phần lớn số các phép toán cơ bản thực hiện thuật toán là hoàn toàn khác nhau với cùng một cỡ đầu vào Do đó người ta đưa ra các khái niệm sau (xem [1]).
• Độ phức tạp trường hợp tốt nhất
• Độ phức tạp trường hợp xấu nhất
• Độ phức tạp trường hợp trung bình
Tuy nhiên, trong ứng dụng thực tiễn chúng ta không cần biết chính xác hàm tính toán này mà chỉ cần biết một ước lượng đủ tốt của chúng. Để ước lượng độ phức tạp thuật toán, ta thường dùng khái niệm bậc Ô-lớn. Định nghĩa 1.1.4 (xem [1]) Cho một hàm số g(n) xác định dương, ta định nghĩa O(g(n)) là tập hợp tất cả các hàm f (n) xác định dương và thỏa mãn: ∃ hằng số c và n 0 sao cho ∀ n> n 0 và f(n)6 cg(n)
Khi đó nếu f (n) ∈ O(g(n)) thì ta nói rằng f (n) là Ô lớn của g(n).
Một số tính chất về độ phức tạp của thuật toán
3 Cho P (n) = a k n k + a k−1 n k−1 + + a 1 n + a 0 là đa thức bậc k, a k > 0 Khi đó
Một số độ phức tạp thường gặp
• Độ phức tạp hằng số, O(1) Số phép tính/thời gian chạy/dung lượng bộ nhớ không phụ thuộc vào độ lớn đầu vào.
• Độ phức tạp tuyến tính, O(n) Số phép tính/thời gian chạy/dung lượng bộ nhớ có xu hướng tỉ lệ thuận với độ lớn đầu vào.
• Độ phức tạp đa thức, O(P (n)) với P là đa thức bậc cao (từ bậc 2 trở lên).
• Ngoài ra còn có các độ phức tạp logaritO(logn)hoặc hàm mũO(2 n ) Trường hợp hàm mũ là trường hợp xấu nhất và khó thực hiện trên thực tế.
Đị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 bỳ 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 (xem [12] hoặc [15]). Để 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ínJ (xem [12]) còn gọi làđường cong Jordan, là ảnh của một ánh xạ liên tục 1-1 từ R / Z vào R 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 (xem thêm [15]). Đâ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 (xem [16]). Không gian R n ( ∀ n > 1 ) được trang bị chuẩn k x k = q x 2 1 + x 2 2 + + x 2 n với x = (x 1 , x 2 , , x n ) ∈R n được gọi là không gian Euclid n chiều, kí hiệu E = R 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 R 2 là một ánh xạ liên tục γ : [a, b] ⊂R→R 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 t i, i = 0, , n thỏa mãn a = t 0 6 t 1 < < t n−1 6 t n = b với n> 1 Định nghĩa 1.2.1 Độ dài của đường γ : [a, b] → R n kí hiệu là length(γ) được xác định như sau: length(γ) := sup σ n−1
X i=0 d(γ(t i ), γ(t i+1 )) Đoạn thẳng đi qua hai điểm a và b, kí hiệu là [a, b] hoặc ab(xem [15]) 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.
Theo [15] đ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 (xem [15]) Cho v 0 , v 1 , v 2 , , v n−1 là n điểm thuộc cùng một mặt phẳng, kí hiệue i = [v i , v i+1 ] với 06 i 6 n − 1 và v n ≡ v 0 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 e i và e i+1 có duy nhất một điểm chung là v i+1. Tức là e i ∩ e i+1 = v i+1 với i = 0, , n − 1.
2 Các đoạn thẳng không kề nhau thì không cắt nhau Tức là e i ∩ e j =∅ với j 6 = i + 1. Điểmv i được gọi làđỉnh của đa giác đơn và đoạn e i gọi làcạnh của đa giác đơn.
Kí hiệu đa giác đơn với các đỉnh v i là P = (v 0 , v 1 , , v n−1 ).
Hình 1.2: Đa giác không đơn Hình 1.3: Đa giác đơn Đường gấp khúc q 1 q 2 q k là một dãy có thứ tự các điểm q i (i = 1, 2, , k) sao cho mỗi cặp điểm kề nhau q i và q i+1 (i = 1, 2, , k − 1) thể hiện một đoạn thẳng. Các điểm q i gọi là các đỉnh của đường gấp khúc (xem [13]).
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. q 1 q 2 q 3 q 4 q 5 q 6 q 7 q 8
Hình 1.4: Đường gấp khúc có 8 đỉnh q 1 q 2 q 3 q 4 q 5 q 6 q 7 q 8
Hình 1.5: Đường gấp khúc đơn có
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 [20] như sau.
Một đường thẳngl đi qua một điểm A của đường congγ được gọi là mộttiế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 (xem [20] trang 15). Đườ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 (xem [20] trang 15).
Phép tam giác phân đa giác
Đường chéo của đa giác đơnP là đoạn thẳng[v i , v j ]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ớij 6 = i + 1và 06 i, j 6 n − 1 (xem [13]).
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 (xem [15], trang 7).
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(nlog n)(xem [15], [10]) hoặc độ phức tạp là O(n)(xem
Sau đây là một số kết quả đã được chứng minh trong [15]:
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 (Bổ đề 1.2.2).
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 (Định lý 1.2.3).
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 (Bổ đề 1.2.4). d 1 d 2 d 3 d 4 d 5 d 6 d 7 d 8
Hình 1.6: Một phép tam giác phân đa giác có 11 đỉnh thành
9 tam giác bởi 8 đường chéo
Khái niệm điểm trong và điểm trong tương đối
Cho một tập C ⊂ R n , bao đóng của C kí hiệu C là giao của tất cả các tập đóng chứa C (xem [4]).
Một điểm x ∈ C gọi là một điểm trong của C nếu có một hình cầu tâm x nằm trọn trong C Tập các điểm trong của C gọi làphần trong củaC và ký hiệu là intC.
Tập C ⊂R n gọi là mộttập lồi nếu nó chứa trọn đoạn thẳng nối hai điểm bất kỳ thuộc nó Nói cách khác, (1 − λ)a + λb ∈ C với mọi a, b ∈ C và 06 λ 6 1
Một điểm x thuộc tập lồiC ⊂R n gọi là một điểm trong tương đối của C nếu với mỗi a ∈ C đều có một số λ > 0 để điểm x + λ(a − x) ∈ C Tập các điểm trong tương đối của C gọi là phần trong tương đối của C kí hiệu là riC.
Tập hợp C \ riC gọi là biên tương đối của C kí hiệu là ∂C Một điểm thuộc
∂C gọi là điểm biên của tập lồi C. x ∈ intC x ∈ ∂C C
Hình 1.7: Minh họa điểm trong và điểm biên của tập C
Định nghĩa dãy mặt tam giác và đường đi dọc theo dãy mặt tam giác
theo dãy mặt tam giác
Trước hết, ta trình bày một số khái niệm cơ bản sau.
Khối đa diện trong không gian R 3 được xác định bởi một tập hữu hạn các đa giác sao cho mỗi cạnh của đa giác này trùng với đúng một cạnh của đa giác khác (tức là các đa giác kề nhau) Khi đó các đỉnh và các cạnh của đa giác cũng là các đỉnh và cạnh của khối đa diện (xem [21]).
Bề mặt của khối đa diện bao gồm tất cả các đỉnh, các cạnh và miền trong của các đa giác Trong luận văn này chúng tôi giả thiết rằng bề mặt của khối đa diện bao gồm các mặt tam giác.
Hình 1.8: Minh họa một khối đa diện có 98 mặt tam giác
(Tham khảo [7]) Cho S = { f 1 , f 2 , , f m+1 }là một dãy mặt tam giác nằm trên bề mặt của khối đa diện P , cho x và y là hai điểm thỏa mãn điều kiện:
(A 1 ) x ∈ f 1 , y ∈ f m+1 và f i ∩ f i+1 là một cạnh của P với (i = 1, , m).
Từ sau phần này, khi cho x, y ∈ S có nghĩa là x, y thỏa mãn điều kiện (A 1 ) và f i ∩ f i+1 := e i. Định nghĩa 1.5.1 (xem [7]) Đường đi dọc theo dãy mặt S = { f 1 , f 2 , , f m+1 } nối hai điểm x và y là một ánh xạ liên tụcγ : [a, b] ⊂R→ S thỏa mãn điều kiện:
• Tồn tại một phân hoạch σ của đoạn [a, b], sao cho a 6 t 1 < < t m 6 b và γ(t i ) ∈ e i với (i = 1, , m).
Tiếp theo ta làm rõ định nghĩa độ dài đường đi dọc theo dãy mặt tam giác
S như sau. Định nghĩa 1.5.2 (xem [7]) Cho γ là một đường đi từ điểm x tới điểm y dọc theo dãy mặt S , khi đó length(x, y) := length(γ ) := sup σ n−1
X i=0 d(γ(t i ), γ(t i+1 )) được gọi là độ dài đường γ. Ở đây supremum được lấy theo tập hợp các phân hoạchσ = { t i } n i=0 của[a, b]. Một đường đi được gọi là đo được nếu độ dài của nó là hữu hạn.
Bổ đề 1.5.1 (xem [7]) Cho x và y là hai điểm thuộc dãy mặt S , khi đó luôn tồn tại một đường đi đo được nối x và y dọc theo S
Gọi Γ là tập hợp tất cả các đường γ : [a, b] → S nối điểm x và y. Định nghĩa 1.5.3 Đường đi γ ∗ nối xvà y dọc theo S gọi là một đường đi ngắn nhất nếu thỏa mãn: length(γ ∗ ) = inf γ∈Γ { γ }
Khái niệm góc tại một điểm trên bề mặt khối đa diện
Trong phần này, ta nhắc lại các khái niệm về tổng các góc tại một đỉnh, và góc bên trái, bên phải tại một điểm của đường đi trên bề mặt khối đa diện (xem [17]).
Cho v là một đỉnh của S và { f 1 , f 2 , , f k } ⊂ S là một tập các mặt tam giác có chung đỉnhv và θ i lần lượt là các góc nằm trong tam giác f i tạiv (16 i 6 k ). Khi đó, tổng các góc tại đỉnh v là góc θ được xác định bởi θ = P k i=1 θ i. γ 1 γ 2 γ 3 v p p 0
Hình 1.9: Góc tại một điểm trên 3 đường đi γ 1 , γ 2 và γ 3
Xét đường đi γ trên bề mặt khối đa diện, góc trái và góc phải của đường γ tại một điểm lần lượt kí hiệu là θ l và θ r Khi đó θ l + θ r = θ.
Nếu γ đi qua một đỉnh v khi đi từ mặt f i đến mặt f j (1 6 i < j 6 k ), giả thiết v ∈ f i ∩ f j thì một trong hai góc θ l hoặc θ r nằm trên bề mặt của S và góc đó được gọi là góc trong của đường γ tại đỉnh v.
Nếu đường γ đi qua một điểm trong tương đối p của cạnh e i ∈ E, khi đó cả θ l và θ r đều gọi là góc trong của đường γ tại điểm p.
- Tại đỉnh v thuộc cả 3 mặt tam giác f 4 , f 5 , f 6 và đường γ 3 đi qua v Khi đó, góc θ r là góc trong vì góc này nằm trên bề mặt của S
- Tại điểm p (hoặc p 0 ) thuộc đường γ 1 (hoặc γ 2) có 2 góc θ l và θ r đều là góc trong.
Phép lật
Hai mặt tam giác f và f 0 được gọi là kề nhau nếu chúng có chung một cạnh và cạnh chung này được gọi là cạnh kề của 2 mặt tam giác đó. f 1 f 2 f 3 f 4
Hình 1.10: Mặt f 1 không kề với f 4 Hình 1.11: Mặt f 1 kề với f 2
Dãy các mặt tam giác kề nhau là một dãy các mặt F = { f 1 , f 2 , , f k+1 } với k ≥ 1 sao cho mặt f i kề với f i+1, i = 1, 2 , k. Định nghĩa phép lật ở đây được trình bày theo [14] trang 649.
Trước hết chúng tôi trình bày định nghĩa phép lật tam giác f 0 lên tam giácf quanh cạnh kề e như sau Phép lật mặt f 0 lên mặt f là xác định ảnh của f 0 lên mặt phẳng chứa mặt f qua phép quay f 0 quanh cạnh kề e sao cho mặt f 0 nằm ở phía đối diện với f (tức là mặt f và f 0 nằm ở hai phía đối với cạnh e).
Gọi (α) là mặt phẳng chứa mặt f Khi đó, định nghĩa phép lật ở trên tương đương với định nghĩa phép lật là ánh xạ r được cho như sau: r : f 0 ⊂R 2 → (α) ⊂R 2 x = x 1 x 2
Trong đó θ = π − arccos(~a 1 , ~a 2 ) với 0 6 θ 6 π và ~a 1, ~a 2 lần lượt là các véc tơ pháp tuyến của các mặt phẳng chứa f và f 0
Từ đó phép lật cho một dãy các mặt tam giác được định nghĩa như sau.Định nghĩa 1.7.1 (xem [14]) Cho dãy các mặt tam giác S = { f 1 , f 2 , , f m+1 } với E = { e 1 , e 2 , , e m } là dãy các cạnh kề có thứ tự Phép lật dãy mặt tam giác này được xác định như sau: Xoay f 1 quanh e 1 đến khi mặt phẳng chứa f 1 trùng với mặt f 2 (f 1 và f 2 nằm ở hai phía đối với e 1), tiếp theo xoay f 1 và f 2 quanh cạnh e 2 đến khi mặt phẳng của chúng trùng với mặt f 3, tiếp tục làm như vậy đến khi các mặt f 1 , f 2 , , f m nằm trên cùng mặt phẳng với f m+1.
Mỗi mặt tam giác được gắn với một hệ tọa độ trong R 2 , vì vậy kết quả của phép lật dọc theo E cho phép chúng ta biểu diễn các điểm thuộc mặtf 1 , f 2 , , f m theo hệ tọa độ chứa mặt f m+1.
Bổ đề 1.7.1 Cho hai mặt tam giác f 1 và f 2 với cạnh kề là e 1 Khi đó, phép lật mặt f 1 lên f 2 là bảo toàn góc và khoảng cách Tức là:
1 Nếu cho 2 điểm p và q bất kỳ thuộc mặt f 1, gọi p và q lần lượt là ảnh của p và q qua phép lật Khi đó length(p, q) = length(p, q)
2 Nếu cho A b là góc bất kỳ nằm trong mặt f 1 tạo bởi các tia −→ Ax và −→ Ay Gọi
−→ Ax, −→ Ay lần lượt là ảnh của các tia −→ Ax, −→ Ay qua phép lật lên mặt f 2 Khi đó ảnh của góc A b là A b tạo bởi −→ Ax, −→ Ay có số đo bằng góc A b ban đầu.
Chứng minh 1 Xét ánh xạ r : f 1 ⊂R 2 → (α) ⊂R 2 x = x 1 x 2
Như vậy r là phép lật mặtf 1 lên mặt f 2 bằng cách xoay mặt f 1 với góc xoay là θ quanh cạnh kề e 1 đến khi mặt f 1 thuộc cùng mặt phẳng nhưng ở phía đối diện với mặt f 2.
Trong đó θ = π − arccos(~a 1 , ~a 2 ) với 0 6 θ 6 π , ~a 1 và ~a 2 lần lượt là các véc tơ pháp tuyến của mặt phẳng chứa f 1 và f 2.
Dùng định nghĩa của song ánh, dễ dàng chỉ ra được phép lật r là song ánh.
Vì thế các điểm ảnh r(p) = p và r(q) = q tồn tại duy nhất.
Tiếp theo ta chứng minh r bảo toàn khoảng cách.
Thật vậy, giả sử p = (p 1 , p 2 ) T và q = (q 1 , q 2 ) T Như vậy độ dài đoạn [p, q] là: length(p, q) = q(q 1 − p 1 ) 2 + (q 2 − p 2 ) 2 e 1 f 2 f 1 p q
Hình 1.12: f 1 và f 2 trước khi lật f 2 p q f 1 f 2 e1
Hình 1.13: f 1 và f 2 sau khi lật
Tọa độ các điểm r(p) và r(q) là: r(p) = p = (p 1 cos θ − p 2 sin θ, p 1 sin θ + p 2 cos θ) r(q) = q = (q 1 cos θ − q 2 sin θ, q 1 sin θ + q 2 cos θ). Để đơn giản, ta đặt q 1 − p 1 = x; q 2 − p 2 = y Như vậy, length(p, q) = p
2 Để chứng minh phép lật là bảo toàn góc, lấy hai điểm B và C lần lượt thuộc các tia −→ Ax và −→ Ay Như vậy góc A blà góc trong tam giác 4 ABC.
Do tính chất phép lật bảo toàn khoảng cách đã chứng minh ở trên, 4 ABC =
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à
Như đã trình bày trong phần mở đầu, bài toá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 toán hình phễu của tác giả Lee và Preparata, sau đó chứng minh tính đúng đắn, đánh giá độ phức tạp của thuật toán và đưa ra ví dụ minh họa thuật toán bằng chương trình được viết bằng ngôn ngữ java bởi Josh Tyler năm 1998.
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 đó Yê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).
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 theo [13] và [15] 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 2.1.1 (xem [15]) Đố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ủaE 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.
Như vậy, đố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 quá 3 (chứng minh trong [15] Bổ đề 1.2.6 trang 14). x y
Hình 2.1: Cây đối ngẫu của một phép tam giác phân có 12 đỉ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 4 (x) và 4 (y) nằm trong P.
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 4 (x) và 4 (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éod i (vớii = 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 d i 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 d i 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 (xem [8]), vì thế khái niệm “đỉnh” của đường đi ngắn nhất được phát biểu trong bổ đề dưới dâ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ổ đề 2.1.1 (Xem [13]) 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 d 1 , d 2 , , d n−3 Gọi S là tập các điểm cuối của các đường chéo d i (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 }.
Việc chứng minh bổ đề này có thể đọc thêm trong [8].
Rõ ràng tập S cũng chính là tập các đỉnh của đa giác P Như vậy, tất cả những gì chúng ta cần làm để có thể tìm được đường đi ngắn nhất từ x đếny là lần lượt xây dựng các đường đi ngắn nhất từ x tới các điểm cuối của các đường chéo cho đến khi tới y Hợp của các đường này tạo thành một cây T với gốc x chứa đường đi ngắn nhất cần tìm.
Hình ống tay và hình phễu
Theo nhận xét ở trên, tập các đỉnh của cây T là tập con của S ∪ { x, y }, như vậy để tìm các đỉnh của T không cần phải xét hết toàn bộ đỉnh của đa giác P ban đầu, ta chỉ cần tìm miềnP 0 nằm trong đa giácP và là hợp của các tam giác sao cho mỗi tam giác đó tương ứng 1-1 với một đỉnh của T Miền P 0 như vậy gọi là hình ống tay. Định nghĩa 2.2.1 (xem [13]) Hình ống tay là một đa giác đơn mà cây đối ngẫu tương ứng với đa giác đó là một đường gấp khúc đơn. Để tìm miền P 0 ta cần tìm ra các tam giác tương ứng 1-1 với các đỉnh nằm dọc theo π, bài toán này tương đương với việc tìm đường đi ngắn nhất từ một đỉnh ứng với tam giác 4 (x) đến đỉnh tương ứng với tam giác 4 (y) của cây T Để tìm đường đi này có thể áp dụng rất nhiều thuật toán tìm đường đi ngắn nhất giữa 2 điểm trong lý thuyết đồ thị như thuật toán Bellman-Ford, Dijkstra, Folyd-Warshall (xem thêm trong phụ lục).
Như vậy, ta đã có thể chuyển bài toán tìm đường đi ngắn nhất trong đa giác đơn tùy ý về bài toán tìm đường đi ngắn nhất trong một hình ống tay. x y
Hình 2.2: Đa giác P và cây đối ngẫu của đa giác đó s t x y
Hình 2.3: Hình ống tay tìm được từ cây đối ngẫu của đa giác P
Tiếp theo, chúng tôi trình bày cách xây dựng định nghĩa hình phễu được đưa ra bởi Lee và Preparata như sau.
Cho một hình ống tayP cón đỉnh, xlà một điểm thuộcP, vàd ilà các đường chéo của P (16 i 6 n − 3) Kí hiệu:
• v i (1) và v i (2) là hai điểm cuối của đường chéo d i, (16 i 6 n − 3).
• SP (x, v i (j) )là đường đi ngắn nhất từ xtới v i (j) , (j = 1, 2) nằm trong P Theo kết quả của Bổ đề 2.1.1, tập các đỉnh của đường SP (x, v i (j) ), j = 1, 2 nằm trong tập các đỉnh của P.
• Gọis là điểm chung của các đường SP (x, v i (1) ) và SP (x, v i (2) ) sao cho s nằm xa đỉnh x nhất.
Gọi D i là hợp của SP (s, v (1) i ) với SP (s, v (2) i ) và d i Như vậy, D i là một đường gấp khúc đơn khép kín Theo định lý đường cong Jordan, D i chia mặt phẳng thành hai phần là phần trong và phần ngoài. Định nghĩa 2.2.2 (xem [13]) Miền R i bao gồm đường biên D i và miền trong giới hạn bởi D i được gọi là phễu Đoạn d i gọi là nắp phễu và điểm s gọi là đỉnh của phễu. x d i v i (1) v i (2) s
Hình 2.4: Ví dụ minh họa hình phễu với đỉnh s và nắp phễu d i
Từ định nghĩa của phễu, tính chất sau được chứng minh (xem [13]).
Tính chất 2.2.1 SP (s, v i (j) ),j = 1, 2là các đường gấp khúc lồi hướng vào trong. Tức là mặt lồi của nó hướng vào miền trong của P.
Chứng minh Trước hết, chúng ta chỉ ra các hình phễu R i nằm hoàn toàn trong
P bằng phương pháp quy nạp Giả sử SP (s, v (1) i )và SP (s, v (2) i )đi qua các đường chéo theo thứ tự d s , d s+1 , , d s+k (k > 0 ) Rõ ràng, phễu ứng với đường chéo đầu tiên d s là R s = 4 sv (1) s v s (2) nằm trong P.
Giả thiết là R i−1 ⊂ P, khi đó phễu R i được tạo ra bằng cách ghép thêm vào
R i−1 một phần hoặc toàn bộ tam giác trong P Vậy R i ⊂ P. s d i
Hình 2.5: Minh họa tính lồi hướng vào trong của SP (s, v i (j) )
Giả sử SP (s, v (1) i ) và SP (s, v i (2) ) không phải là các đường gấp khúc lồi hướng vào trong, khi đó theo bất đẳng thức tam giác, tồn tại một đường ngắn hơn từ s đến v i (j) nằm trong P Như vậy mâu thuẫn với giả thiết SP (s, v i (j) ) là đường đi ngắn nhất từ s đến v i (j) (xem hình 2.5).
Tính lồi của hai đườngSP (s, v i (1) )vàSP (s, v (2) i )cũng chỉ ra rằng đườngSP i =
SP (x, v (1) i ) ∪ SP (x, v i (2) ) rẽ thành hai nhánh tại nhiều nhất một điểm s, điểm s này cũng gọi là đỉnh của SP i.
Chú ý rằng một trong hai đường SP (s, v (1) i ) hoặc SP (s, v i (2) ) có thể rỗng, nhưng cả hai không thể đồng thời bằng rỗng vì v (1) i 6 = v i (2)
Nếu có một đường rỗng, giả sử là SP (s, v i (1) ), khi đó rõ ràng SP (s, v i (2) ) = d i, trong trường hợp này phễu R i suy biến không có miền trong và SP i trở thành đường gấp khúc đơn.
Trong phần tiếp theo của chương này, chúng tôi trình bày chi tiết thuật toán tìm đường đi ngắn nhất trong một hình ống tay có n đỉnh.
Thuật toán tìm đường đi ngắn nhất giữa 2 điểm trong hình ống tay 24
Input: Cho hình ống tay P có n đỉnh và hai điểm x, y thuộc P.
Output: Đường đi ngắn nhất từ x đến y nằm trong P. Ý tưởng của thuật toán là xuất phát từ đỉnh nguồn x, xây dựng các đường
SP i = SP (x, v (1) i ) ∪ SP (x, v i (2) ) chứa đường biên của phễuR i cho tới khi đến được đích, tức là đến khi v i (2) ≡ y
Thuật toán 1: Tìm đường đi ngắn nhất giữa 2 điểm trong hình ống tay.
1 Bước khởi tạo Xây dựng SP 1 bằng cách nối x với v 1 (1) và v 1 (2)
2 Bước tổng quát Xây dựng SP i+1 từ SP i
Gọi s là đỉnh của SP i = SP (x, v (1) i ) ∪ SP (x, v (2) i ), SP i rẽ thành 2 nhánh tại s, kí hiệu 2 đường rẽ nhánh đó làu a u a+1 u b và u a u a−1 u 0 với s = u a ; v i (1) = u b ; v (2) i = u 0 và v (1) i = v i+1 (1) (xem hình 2.6 và 2.7).
Bắt đầu từu 0 lần lượt duyệt các đỉnh theo thứ tự từ u 0 , u 1 , , u b và gọi j là chỉ số nhỏ nhất sao chov (2) i+1 u j là tiếp tuyến với đườngSP (s, v (1) i ) ∪ SP (s, v i (2) ) của R i Xét 2 trường hợp:
- Thực hiện xóa tất cả các đoạn u l u l+1 với 06 l 6 j − 1
- Thực hiện xóa tất cả các đoạn u l u l+1 với 06 l 6 j − 1
3 Bước kết thúc Sau khi xây dựng được SP n−3, đường chéo d n−3chia P thành hai miền, một trong hai miền đó chứa điểm đích y.
- Áp dụng bước tổng quát ở trên vớii = n − 3ta được SP n−2 = SP (x, v n−2 (1) ) ∪
Trong đó, một đường thẳng l được gọi là tiếp tuyến với một đường cong lồi
C nếu nó có ít nhất một điểm chung với C và toàn bộ các điểm thuộc C nằm về một phía của l (xem [13]) Điểm chung duy nhất đó được gọi là tiếp điểm.
Cách tìm tiếp tuyến được trình bày chi tiết trong mục phụ lục.
Chứng minh tính đúng và đánh giá độ phức tạp của thuật toán 26
Chứng minh tính đúng đắn của thuật toán
Trong phần này chúng tôi trình bày lại chi tiết chứng minh tính đúng đắn của thuật toán trong [13].
Mệnh đề 2.4.1 Tập các đỉnh của phễu cùng với đỉnh nguồn x và đỉnh đích y lập thành đường đi ngắn nhất từ x đến y.
Chứng minh Kí hiệu 4 i+1 (i = 1, 2, , n − 3) là tam giác nằm trong P có hai cạnh là hai đường chéo d i và d i+1. Để chứng minh mệnh đề trên, ta cần chỉ ra với một điểm u bất kỳ thuộc
4 i+1 , đường đi ngắn nhất từ x tới u phải đi qua đỉnh s của phễu R i.
Xét 2 đường gấp khúc SP (s, v i (1) ) := D (1) i và SP (s, v i (2) ) := D (2) i
- Nếu một trong hai đường này là rỗng, khi đó đường còn lại chính là đường chéo d i và đỉnh s là một điểm cuối của d i Như vậy đường đi ngắn nhất từ xđến u là SP (x, s) ∪ su, tức là đường SP (x, u) phải đi qua đỉnh s.
- Nếu cả hai đường này đều khác rỗng, xét đỉnh kề với đỉnhs trên một trong hai đường D (1) i hoặc D i (2) , vì P là hình ống tay nên ít nhất một trong các đỉnh kề đó là một đỉnh của P.
Giả sử v 0 ∈ D i (2) là đỉnh kề với s và cũng là đỉnh của P, như vậy sv 0 là một đường chéo của P (có thể không phải là đường chéo của phép tam giác phân ban đầu) Giả sử sv 00 là một đoạn khác nằm trong P.
Do tính lồi hướng vào trong của các đường SP (s, v i (j) ), j = 1, 2, các đường thẳng đi qua sv 0 và sv 00 giao với d i và chia miền trong của tam giác 4 i+1 thành nhiều nhất là 3 miền con, điểm uthuộc một trong các miền đó Không mất tổng quát, giả thiết u nằm ở vị trí như trong hình 2.8.
Giả sử tồn tại đường l(x, u) là đường đi ngắn nhất từ x đến u mà không đi qua đỉnh s, và l(x, u) cắt sv 0 tại một điểm p 6 = s, và l(x, u) cắt sv 00 tại điểm p 1. s v i (1) v i (2) v 00 v 0 d i+1 d i
Hình 2.8: Minh họa tính đúng đắn của thuật toán 1
Do tính chất l(x, u) là đường ngắn nhất: length(l(x, p)) + length(l(p, p 1 )) < length(SP (x, s)) + length(sp 1 ) (2.1) Trong đó l(p, p 1 ) là đường đi từ p đến p 1 nằm trong l(x, u).
Mặt khác, theo bất đẳng thức tam giác ta lại có: length(sp 1 )6length(sp) + length(l(p, p 1 )) (2.2) từ đó length(SP (x, s)) + length(sp) > length(l(x, p)) (2.3) Cộng thêm 2 vế của (2.3) với length(pv 0 ) ta được: length(SP (x, s)) + length(sv 0 ) > length(l(x, p)) + length(pv 0 ) (2.4)
Do s là đỉnh của R i và với cách chọn của v 0 ở trên nên s, v 0 ∈ SP (x, v i (2) ), tư đó ta có length(SP (x, v 0 )) = length(SP (x, s)) + length(SP (s, v 0 )) (2.5)
Do ta chọn v 0 là đỉnh kề với s nên SP (s, v 0 ) := sv 0 , thay vào (2.5) length(SP (x, v 0 )) = length(SP (x, s)) + length(sv 0 ) (2.6)
Tức là đường đi ngắn nhất từ x đến v 0 phải đi qua s.
Nhưng theo (2.4), đi từ x đến v 0 theo đường l(x, p) ∪ pv 0 có độ dài ngắn hơn đường SP (x, s) ∪ sv 0 , từ đó mâu thuẫn với tính chất vừa chỉ ra là SP (x, s) ∪ sv 0 là đường ngắn nhất từ x tới v 0
Như vậy mệnh đề trên được chứng minh. Áp dụng mệnh đề trên với SP i := SP n−2 và y := u Ta thấy đường đi ngắn nhất từ x tới y phải đi qua đỉnh s của SP n−2 = SP (x, v n−2 (1) ) ∪ SP (x, v (2) n−2 ) Mặt khác, trong bước cuối của thuật toán đã gán y := v (2) n−2
Vậy thuật toán được chứng minh.
Đánh giá độ phức tạp của thuật toán
Độ phức tạp của thuật toán trong trường hợp xấu nhất được đánh giá như sau (xem chi tiết trong [13]):
• Các bước khởi tạo và kết thúc chi phí là O(1).
• Trong bước tổng quát, mỗi lần duyệt một đỉnh u i và kiểm tra đó có phải là đỉnh của phễu mới hay không mất chi phí làO(1), khi một đỉnh đã được duyệt mà không phải là đỉnh của phễu mới thì nó sẽ bị xóa đi và trong suốt quá trình xây dựng các hình phễu thì đỉnh đó cũng sẽ không bao giờ được duyệt lại nữa.
Vậy tổng thời gian để duyệt tất cả các đỉnh cho tới khi tìm được phễu mới đúng bằng số đỉnh đã bị xóa, trong trường hợp xấu nhất số đỉnh bị xóa là n − 2 (trừ đỉnh nguồn và đỉnh đích) với n là số đỉnh của đa giác, từ đó bước tổng quát của thuật toán mất chi phí là O(n).
Như vậy tổng chi phí của thuật toán này là O(n).
Chương trình minh họa thuật toán trên java
Trong phần này, chúng tôi trình bày ví dụ minh họa chi tiết các bước của thuật toán cho một đa giác đơn Các hình ảnh minh họa cho ví dụ bên dưới ghi lại từ chương trình được tác giả Josh Tyler viết bằng ngôn ngữ lập trình java, năm 1998.
Ví dụ 2.5.1 Cho đa giác đơn P có 22 đỉnh như trong hình 2.9, và điểm nguồn x tương ứng với chấm đỏ, điểm đích y tương ứng với chấm xanh Yêu cầu tìm đường đi ngắn nhất từ x đến y nằm trong P.
Hình 2.9: Đa giác đơn có 22 đỉnh với hai điểm nguồn và điểm đích nằm trong đó Chi tiết các bước của thuật toán được minh họa theo các hình vẽ bên dưới:
Hình 2.10: Đa giác đơn được thực hiện tam giác phân thành các tam giác
Hình 2.11: Cây đối ngẫu tìm được từ phép tam giác phân
Hình 2.12: Tìm ra hình ống tay chứa điểm nguồn và điểm đích
Hình 2.21: Phễu thứ chín, trường hợp này phễu suy biến có miền trong bằng rỗng
Hình 2.22: Đường đi ngắn nhất nối đỉnh nguồn và đỉnh đích
Thuật toán tìm đường đi ngắn nhất giữa hai điểm trên bề mặt khối đa diện
Bài toán tìm đường đi ngắn nhất giữa 2 điểm trên bề mặt khối đa diện là một bài toán cơ bản trong hình học tính toán và đã thu hút nhiều nhà khoa học quan tâm nghiên cứu.
Bài toán đặt ra như sau: Cho P là một khối đa diện trong R 3 có các mặt là các tam giác (nếu các mặt là một đa giác đơn thì có thể thực hiện tam giác phân các mặt đó), giả thiếtx và y là 2 điểm nằm trên bề mặt của khối đa diện. Yêu cầu đặt ra là tìm đường đi ngắn nhất từ x đến y sao cho đường đi đó nằm trên bề mặt khối đa diện P
Gọi S là bề mặt của P được xác định bởi các mặt tam giác, các cạnh kề và các đỉnh của nó sao cho 2 điểm x và y thuộc vào hai mặt tam giác của S Như vậy bài toán tìm đường đi ngắn nhất trên bề mặt khối đa diện P chuyển về bài toán tìm đường đi ngắn nhất giữa 2 điểm trên một dãy mặt tam giác được tạo ra từ bề mặt khối đa diện đó Cách tiếp cận này đã được nghiên cứu bởi rất nhiều tác giả (xem [22], [23]).
Khi xét bài toán tìm đường đi ngắn nhất trên bề mặt khối đa diện lồi trongR 3 ,Sharir và Schorr ([19]) đưa ra thuật toán đầu tiên với độ phức tạp làO(n 3 logn),trong đón là số mặt của khối đa diện Sau đó Mitchell, Mount và Papadimitriou([14]) đã xây dựng một thuật toán tốt hơn với chi phí là O(n 2 logn) và giải bài toán trên một khối đa diện bất kỳ Đến năm 1990, Chen và Han đã đưa ra thuật toán cải tiến với độ phức tạp là O(n 2 ) ([9]) Gần đây, Xin và Wang đã đưa ra nhiều cải tiến để giải bài toán với độ phức tạp trong trường hợp xấu nhất là O(k 2 ) trong đó k là số cạnh kề trong dãy mặt tam giác S ([23]).
Trong các nghiên cứu trên, có rất nhiều tác giả đã sử dụng kỹ thuật planar unfolding (tạm dịch là phép lật) (xem [22] trang 309-310 hoặc [23]).
Trong chương này, luận văn sẽ trình bày các nội dung chính như sau:
• Định nghĩa phễu trong không gian 3 chiều được đưa ra bởi nhóm tác giả
An, Giang, Phú và Polthier (xem [7]) và đưa ra một số tính chất mới của phễu trong 3 chiều.
• Thuật toán tìm đường đi ngắn nhất giữa 2 điểm trên dãy mặt tam giác bằng cách xây dựng các hình phễu kết hợp với kỹ thuật lật dựa trên ý tưởng được trình bày trong [7].
• Phần cuối chương chúng tôi đưa ra ví dụ cụ thể minh họa cho thuật toán bằng phần mềm javaview.
Hình phễu trong không gian 3 chiều
Cho S = { f 1 , f 2 , , f m+1 } là một dãy m + 1 mặt tam giác với tập các cạnh kề tương ứng là E = { e 1 , e 2 , , e m }, u là một điểm nằm trong mặt f i và e k là một cạnh có 2 điểm cuối là các đỉnh α k và β k , với 1 6 i 6 k 6 m Gọi s là điểm chung của SP (u, α k )và SP (u, β k ) sao cho s nằm xa điểm u nhất, khi đó hợp của các đường SP (s, α k ), SP (s, β k ) cùng với [α k , β k ] chia bề mặt của khối đa diện P thành 2 miền bị chặn và chỉ một trong hai miền này nằm trong dãy mặt S Định nghĩa 3.1.1 (xem [7]) Miền bị chặn F k thỏa mãn điều kiện nằm trong dãy mặt S và được giới hạn bởi các đườngSP (s, α k ), SP (s, β k ), [α k , β k ] được gọi làphễu dọc theo S Đoạn [α k , β k ] được gọi là nắp phễu, điểms gọi là đỉnh phễu,các đường SP (s, α k ), SP (s, β k ) cũng thuộc phễu và gọi là đường biên của phễu. α 4 β 4 s 4 s 4 α 4 β 4 α 5 β 5 s 5 α 5 β 5 α 6 β 6 α 5 β 5 α 6 β 6 s 6 β 7 α 7 β 7 α 7 α 8 β 8 β 8 α 8 s 8 β 10 s 10 α 10 β 10 s 10 s 11 β 11 α 11 x y s u α k β k SP(u, α k )
Hình 3.1: Minh họa hình phễu trong 3 chiều dọc theo dãy mặt tam giác, với nắp phễu là [α k , β k ] và đỉnh phễu là s
Chú ý 3.1.1 Điểm s được gọi là nằm xa điểm u nhất nếu các điều kiện sau được thỏa mãn:
Tính chất 3.1.1 Điểm s thỏa mãn điều kiện nằm xa điểm u nhất được xác định như trên luôn tồn tại duy nhất.
Chứng minh Xét hàm f xác định trên tập T như sau f : T →R t 7→ f (t) = length(u, γ(t))
Vì t thuộc các khoảng đóng [a, b] hoặc [a, c] nên dễ thấy tập T bị chặn.
Ta chỉ ra T là tập đóng Thật vậy, lấy dãy { t n } ∞ n=1 tùy ý nằm trong T, giả sử t n → t khi n → ∞.
Do các ánh xạ γ 1 và γ 2 là liên tục, nên khi n → ∞, γ 1 (t n ) → γ 1 (t) và γ 2 (t n ) → γ 2 (t) Cũng do t n ∈ T nên γ 1 (t n ) = γ 2 (t n ) = γ(t n ) từ đóγ 1 (t) = γ 2 (t) = γ(t) hay t ∈ T Vậy theo định nghĩa T là tập đóng.
Vì f là hàm sơ cấp nên cũng là hàm liên tục, mặt khác T là tập đóng và bị chặn Do đó, tồn tại duy nhất điểmt 0 ∈ T sao cho f (t 0 )= max { f (t) | t ∈ T } Tức là luôn tồn tại duy nhất s = γ(t 0 ).
Bổ đề 3.1.1 Cho dãy mặt tam giác S = { f 1 , f 2 , , f m+1 } và hai điểm x ∈ f 1, y ∈ f m+1 Khi đó đường đi ngắn nhất SP (x, y) từ x đến y dọc theo dãy mặt S là một đường gấp khúc, và mỗi đoạn thẳng của SP (x, y) thuộc vào duy nhất một mặt tam giác của S
Chứng minh Theo bổ đề 3.3 trình bày trong tài liệu [19], các tác giả Sharir và Schorr đã chỉ ra đường ngắn nhất SP (x, y) phải đi qua các cạnh e i của khối đa diện và tồn tại duy nhất (hoặc có thể xem chứng minh tính chất này trong [7]). Như vậy SP (x, y)phải cắt các cạnh kề e i tại một điểm t i duy nhất (16 i 6 m) f i f 1 f m+1 e 1 e i−1 e i γ i x y t i − 1 t i
Hình 3.2: Đường ngắn nhất SP (x, y) là đường gấp khúc và giao với mỗi mặt tam giác f i bằng một đoạn thẳng γ i duy nhất
Giả sử SP (x, y)giao với mặtf i bởi đoạnγ i = L(t i−1 , t i ) vớit i ∈ e i (1 < i6 m ),nghĩa là mỗi đường γ i là một đường ngắn nhất đi từ điểm đầu t i−1 đến điểm cuối t i Ở đây kí hiệu L(t i−1 , t i ) để chỉ đường đi bất kỳ từ điểm t i−1 đến t i (có thể cong, thẳng, gấp khúc ).
Vì các điểm t i−1 và t i cùng thuộc mặt f i nên đường ngắn nhất nối 2 điểm này chính là đoạn thẳng [t i−1 , t i ] Hay γ i = [t i−1 , t i ] là đoạn giao duy nhất của
Như vậy bổ đề trên được chứng minh.
Tiếp theo ta chứng minh một số tính chất của hình phễu như sau:
Tính chất 3.1.2 Các hình phễu nằm hoàn toàn trong dãy mặt S
Chứng minh Không mất tổng quát, giả sử điểm đầu u ∈ f 1, khi đó phễu F 1 =
4 uα 1 β 1 hiển nhiên nằm trong mặt tam giác f 1 ∈ S.
Nếu có phễu F k nằm trên dãy mặt S với 1 6 k 6 m , khi đó phễu mới F k+1 được tạo ra bằng cách ghép thêm vào F k một phần hoặc toàn bộ mặt tam giác f k+1.
Vậy F k+1 cũng nằm hoàn toàn trên S Từ đó tính chất được chứng minh. α 4 β 4 s 4 s 4 α 4 β 4 α 5 β 5 s 5 α 5 β 5 α 6 β 6 α 5 β 5 α 6 β 6 s 6 β 7 α 7 β 7 α 7 α 8 β 8 β 8 α 8 s 8 β 10 s 10 α 10 β 10 s 10 s 11 β 11 α 11 x y s u α k β k f k+1
Hình 3.3: Minh họa tính chất các hình phễu nằm trên bề mặt S
Tính chất 3.1.3 Góc trong tại các đỉnh nằm trên đường đi ngắn nhấtSP (s, α k ) và SP (s, β k ) (không kể các đỉnh s, α k và β k) có số đo lớn hơn hoặc bằng π.
Chứng minh Kí hiệu D = SP (s, α k ) ∪ SP (s, β k ) và V là tập các đỉnh nằm trên
Giả sử có một đỉnh v ∈ V mà tại đó góc trong θ < π Không mất tính tổng quát, giả thiết v là điểm thuộc SP (s, α k ) và là điểm chung của n mặt tam giác như trong hình bên dưới (trường hợp v thuộc vào SP (s, β k ) chứng minh tương tự). v α k αk n αk 1 L s
Hình 3.4: Minh họa tính chất tổng các góc trong tại đỉnh v lớn hơn hoặc bằng 180 0
Theo mệnh đề 3.2 (xem [7] trang 12) tồn tại một đường trắc địa thẳng nhất
L 1 nối hai đỉnh α k 1 với α k n Áp dụng bổ đề 3.1 trang 10 trong [7], L 1 cũng là đường ngắn nhất từ α k 1 đến α k n Khi đó: length( L 1 )6 length(α k 1 v) + length(vα k n ) (3.1) Mặt khác, theo giả thiết ban đầu: length(SP (s, α k )) = length(SP (s, α k 1 )) + length(α k 1 v)
So sánh (3.1) và (3.2) length(SP (s, α k )) ≥ length(SP (s, α k 1 )) + length( L 1 ) + length(α k n α k ) (3.3) Điều này mâu thuẫn với giả thiết độ dài đường SP (s, α k ) là ngắn nhất.
Vậy không có đỉnh nào của V có góc trong nhỏ hơn π (điều phải chứng minh).
Tính chất 3.1.4 Cho điểm u thuộc mặt f i bất kỳ (1 6 i 6 m + 1) nằm trong dãy mặt S và F k (u) là các hình phễu có nắp phễu là cạnh e k = [α k , β k ] của khối đa diện với i6 k 6 m + 1 Khi đó các hình phễu F k (u) đều nằm về một phía của cạnh [α k , β k ] dọc theo dãy mặt S
Chứng minh Ta chứng minh bằng phương pháp quy nạp Không giảm tổng quát, giả thiết đỉnh u ∈ f 1, phễu F 1 = 4 uα 1 β 1 hiển nhiên nằm trong mặt f 1 và nằm về 1 phía của đoạn [α 1 , β 1 ] Giả thiết phễu F k nằm về một phía của đoạn u α k β k f k+1 e k e k+1
Hình 3.5: Minh họa tính chất 3
[α k , β k ] với 16 k 6 m , kí hiệu miền R = F k ∪ f k+1 Ta thấy R nằm về một phía của đoạn [α k+1 , β k+1 ], mặt khác phễu F k+1 ⊆ R.
Suy ra phễu F k+1 phải nằm về 1 phía của đoạn [α k+1 , β k+1 ] Như vậy tính chất được chứng minh.
Thuật toán tìm đường đi ngắn nhất giữa hai điểm dọc theo dãy mặt tam giác
điểm dọc theo dãy mặt tam giác
Input: Cho S = { f 1 , f 2 , , f m+1 }, (m > 1) là một dãy mặt tam giác với dãy các cạnh kề tương ứng là E = { e 1 , e 2 , , e m }, và 2 điểm x, y lần lượt nằm trong hai mặt f 1 và f m+1.
Output: Đường đi ngắn nhấtSP (x, y) từxtới ydọc theo S (x là đỉnh nguồn và y là đỉnh đích).
1 e i = [α i , β i ], tức là mỗi cạnh kề e i có 2 điểm cuối là các đỉnh α i và β i của khối đa diện (16 i 6 m ).
2 Giả sử a là điểm bất kỳ thuộc mặt phẳng chứa f i, kí hiệu r i (a) là ảnh của điểm a lên mặt phẳng chứa f i+1 qua phép lật r i quanh cạnh e i, 16 i 6 m
Thuật toán 2: Tìm đường đi ngắn nhất giữa 2 điểm dọc theo dãy mặt tam giác bằng kỹ thuật phễu
• F 1 là miền giới hạn bởi D 1 và e 1
• Trong mặt phẳng chứa ảnh của Fi và f i+1 thực hiện:
(a) D i+1 := u 0 u 1 u a u a+1 u b , trong đó D i+1 là ảnh của D i qua phép lật và u a := r i (s i ); u 0 := v i (2) ; u b := v (1) i
(c) Từ v i+1 (2) lần lượt duyệt các đỉnh theo hướng bắt đầu từ u 0 đến u b để tìm tiếp tuyến với đường biên của miền R i (R i là miền giới hạn bởi các đường SP (r i (s i ), α i ), SP (r i (s i ), β i )và e i) Gọiu k là tiếp điểm tìm được Ta xét các trường hợp sau: i Nếu k6 a :
- Xóa các đoạnu l u l+1 với 06 l 6 k − 1 và thêm vào D i+1 đoạn v (2) i+1 u k
- Xóa các đoạnu l u l+1 với 06 l 6 k − 1 và thêm vào D i+1 đoạn v (2) i+1 u k
• Fi+1 là miền giới hạn bởi D i+1 và e i+1 u a :=s i u 0 :=v i (2) u b :=v (1) i :=v (1) i+1 e i v i+1 (2)
Hình 3.6: Minh họa thuật toán với trường hợp (i) u a := s i u 0 := v (2) i e i
Hình 3.7: Minh họa thuật toán với trường hợp (ii)
• Áp dụng bước 2 ở trên với Fi thay bằngFm ta được Fm+1 là miền giới hạn bởi D m+1 và e m+1.
• Lật Fm+1 trở lại bề mặt khối đa diện ban đầu ta tìm được đường đi ngắn nhất SP (x, y) thuộc vào đường biên của Fm+1.
Chứng minh tính đúng đắn và đánh giá độ phức tạp của thuật toán 42
Chứng minh tính đúng đắn của thuật toán
Để chứng minh tính đúng đắn của thuật toán, trước hết ta có nhận xét sau:
Nhận xét 3.3.1 Bằng kỹ thuật chứng minh tương tự trong bổ đề 1.7.1, ta có thể chỉ ra được bổ đề này vẫn đúng tính chất bảo toàn góc và khoảng cách nếu ta thay giả thiết f 1, f 2 và e 1 lần lượt bằng Fi, f i+1 và e i với 16 i 6 m
Tiếp theo ta chứng minh mệnh đề sau.
Mệnh đề 3.3.1 Trong miền Fk, các đường đi ngắn nhất từ điểm ảnh r k (x) đến một điểm u bất kỳ trong mặt f k+1 luôn phải đi qua r k (s k ) với 16 k 6 m Trong đó r k là phép lật Fk quanh cạnh kề e k lên mặt f k+1 và s k là đỉnh của phễu Fk.
Chứng minh Với k = 1, s 1 = x Khi đó r 1 (s 1 ) = r 1 (x), vậy với u bất kỳ thuộc f 2 ta có SP (r 1 (x), u) = SP (r 1 (s 1 ), u).
Giả thiết SP (r i−1 (x), u) đi qua r i−1 (s i−1 ) với u là điểm tùy ý thuộc f i và mọi số 16 i 6 m Cần chỉ ra nhận định này đúng với i = m + 1, tức là SP (r m (x), u) phải đi qua r m (s m ) trong đó u ∈ f m+1 Để đơn giản trong trình bày, ta kí hiệu lại các điểm như sau:
Trường hợp 1, giả sử một trong hai đường C 1 hoặc C 2 bằng rỗng Đường còn lại sẽ chứa cạnh e m và v trùng với một đỉnh cuối củae m.
Khi đóSP (x ∗ , u) = SP (x ∗ , v) ∪ [v, u] Như vậy, mệnh đề trên được chứng minh. Trường hợp 2, giả sử cả hai đường C 1 và C 2 khác rỗng.
Vì v ∈ SP (v, α i ) và v ∈ SP (v, β i ) nên tồn tại điểm v 1 thuộc SP (v, α i ) hoặc
SP (v, β i ) sao cho [v, v 1 ] là một đoạn thẳng nối 2 ảnh của đỉnh của dãy mặt S Mặt khác, phép lật bảo toàn góc (bổ đề 1.7.1) và các đường SP (x, α i ) và
SP (x, β i ) lồi hướng vào trong (tính chất 3.1.2) nên ảnh của chúng là C 1 và C 2 cũng là các đường lồi hướng vào trong Suy ra, các đường thẳng chứa hai đoạn [v, v 1 ]và [v, v 2 ](trong đó[v, v 2 ] là một đoạn nằm tùy ý trong Fi) sẽ cắt e i và chia tam giác f i+1 thành nhiều nhất 3 miền, điểm usẽ thuộc một trong các miền đó. Không mất tổng quát, xem u nằm ở vị trí như trong hình 3.7 Giả sử ngược lại rằngSP (x ∗ , u)không đi qua đỉnh v, như vậy nó sẽ cắt [v, v 1 ], [v, v 2 ]tương ứng tại các điểm p 1 6 = v và p 2 6 = v.
Do tính chất đường ngắn nhất, ta có: length(SP (x ∗ , p 1 )) + length(L(p 1 , p 2 )) < length(SP (x ∗ , v)) + length(vp 2 ) (3.4) p 1 p 2 u e i
Hình 3.8: Minh họa chứng minh cho tính đúng của thuật toán 2 Ở đây, L(p 1 , p 2 ) ⊂ SP (x ∗ , u). Áp dụng bất đẳng thức tam giác: length(vp 2 )6 length(vp 1 ) + length(p 1 p 2 ) (3.5) Thay (3.5) vào bất đẳng thức (3.4) ta được: length(SP (x ∗ , v)) + length(vp 1 ) > length(SP (x ∗ , p 1 )) Suy ra, length(SP (x ∗ , v)) + length(vv 1 ) > length(SP (x ∗ , p 1 )) + length(p 1 v 1 ) (3.6)
Dov, v 1 ∈ SP (x ∗ , v) nênSP (x ∗ , v 1 ) = SP (x ∗ , v) + SP (v, v 1 ) Mặt khác SP (v, v 1 ) = vv 1.
Tức là đường đi ngắn nhất từx ∗ đếnv 1 đi quav, như vậy mâu thuẫn với (3.6) vì đường đi ngắn nhấtSP (x ∗ , v)có độ dài lớn hơn đi theo đường SP (x ∗ , p 1 ) ∪ pp 1.
Như vậy mệnh đề trên được chứng minh.
Vì điểm uchọn bất kỳ nên lấy utrùng với điểm đíchy, và x ∗ là ảnh của điểm nguồnx qua phép lật lên mặt f m+1 Khi đó đường đi từ điểm x ∗ đếny tìm được từ thuật toán là đường ngắn nhất trong mặt phẳng chứa f m+1.
LậtSP (x ∗ , y)trở lại bề mặt S ta được đườngD(x, y) Ta sẽ chỉ ralength(D(x, y)) = length(SP (x ∗ , y )), tức là mỗi khi ta thực hiện phép lật mặt f i+1 ngược trở lại mặt f i trước nó thì phép lật ngược này vẫn bảo toàn khoảng cách.
Thật vậy, xét phép lật r i từ mặt phẳng (α i ) chứa tam giác f i lên mặt phẳng (α i+1 ) chứa tam giác f i+1 như sau: r i : (α i ) ⊂R 2 → (α i+1 ) ⊂R 2 x = (x 1 , x 2 ) 7→ r i (x) = (x 1 cos θ − x 2 sin θ; x 1 sin θ + x 2 cos θ)
Ta tìm được ánh xạ ngược r i −1 : r i −1 : (α i+1 ) ⊂R 2 → (α i ) ⊂R 2
Bằng cách chứng minh tương tự trong Bổ đề 1.7.1, ta cũng chỉ ra được length(r i −1 (p), r i −1 (q)) = length(p, q), với p, q là hai điểm tùy ý trong mặt phẳng α i+1.
Như vậy ta có length(D(x, y)) = length(SP (x ∗ , y)).
Giả sử tồn tại một đườngL(x, y)là đường đi khác từxtớiy ngắn hơnD(x, y), và cùng nằm trên S Tức là length(L(x, y)) < length(D(x, y)).
Lật các đường D(x, y) và L(x, y) lên mặt tam giác f m+1 lần lượt bằng các phép lật r 1 , r 2 , r m Kí hiệu D(x, y) và L(x, y) lần lượt là ảnh thu được của các đường này.
Theo nhận xét đã chứng minh ở trên D(x, y) ≡ SP (x ∗ , y) nên: length(D(x, y)) = length(SP (x ∗ , y))6length(L(x, y) Mặt khác phép lật bảo toàn khoảng cách, tức là length(D(x, y)) = length(D(x, y)) và length(L(x, y)) = length(L(x, y)).
Mâu thuẫn với giả thiết L(x, y)là đường đi ngắn hơn D(x, y) Nghĩa là không tồn tại một đường đi nào khác từxđếny mà ngắn hơnD(x, y) Hơn nữa, đường đi ngắn nhất dọc theo một dãy mặt tam giác tồn tại duy nhất (xem chứng minh trong [7], trang 8) Vậy D(x, y) ≡ SP (x, y), hay đường đi ngắn nhất tìm được từ thuật toán 2 là nghiệm cần tìm của bài toán.
Đánh giá độ phức tạp của thuật toán
Độ phức tạp của thuật toán được đánh giá trong trường hợp xấu nhất như sau:
• Bước 1 chi phí là hằng số.
• Bước 2 và bước 3, thuật toán thực hiện m bước lật Mỗi lần lật, thực hiện tìm phễu mới trong 2 chiều với chi phí là O(m) (đánh giá tương tự thuật toán trong chương 2), nên chi phí ở 2 bước này là O(m 2 ).
Vậy tổng chi phí cho thuật toán là O(m 2 ) + O(m) ≈ O(m 2 ), với m là số mặt tam giác để đi từ đỉnh nguồn x tới đỉnh đích y dọc theo S
Ví dụ minh họa cho thuật toán trên phần mềm javaview
Ví dụ 3.4.1 Xét một khối đa diện P như trong hình, giả thiết x và y là 2 điểm trên bề mặt khối đa diện, không mất tổng quát, ta giả thiết đó là 2 đỉnh của khối đa diện Yêu cầu đặt ra là tìm đường đi ngắn nhất từ x tới y trên bề mặt P
Trước hết, ta lấy trên bề mặt khối đa diện một dãy mặt tam giác chứa đỉnh x và y Trong ví dụ này, ta chọn dãy 11 mặt tam giác S = { f 1 , f 2 , , f 11 } như trong hình 3.10, sau đó xóa bỏ các mặt còn lại để thu được dãy mặt trong hình3.11. x y
Hình 3.9: Khối đa diện P ban đầu x y
Hình 3.10: Chọn các mặt tam giác sẽ xóa bỏ trên bề mặt khối đa diện P x y
Hình 3.11: Dãy 11 mặt tam giác chứa điểm nguồn và điểm đích nằm trên P
Tiếp theo chúng ta áp dụng thuật toán 2 để tìm đường đi từ x tới y Chi tiết các bước như sau:
Hình 3.12: Khởi tạo F 1 với nắp phễu là cạnh e 1 và đỉnh phễu là s 1 ≡ x r 1 (s 1 ) := s 2 α 1 β 1 f 2
Hình 3.14: F 2 là miền giới hạn bởi D 2 và cạnh e 2 u b f 3 r 2 (s 2 ) := s 3 u 0 α 3
Hình 3.16: F 3 là miền giới hạn bởi
Hình 3.18: F 4 là miền giới hạn bởi
Hình 3.20: F 5 là miền giới hạn bởi D 5 và cạnh e 5 r 5 (s 5 ) = s 6 β 5 α 5
Hình 3.22: F 6 là miền giới hạn bởi D 6 và cạnh e 6 r 6 (s 6 ) = s 7 u 0 u b
Hình 3.24: F 7 là miền giới hạn bởi
Hình 3.26: F 8 là miền giới hạn bởi
Hình 3.28: F 9 là miền giới hạn bởi
Hình 3.30: F 10 là miền giới hạn bởi D 10 và cạnh e 10 r 10 (s 9 ) r 10 (s 10 ) = s 11 β 10 α 10
Hình 3.32: F 11 là miền giới hạn bởi D 11 và cạnh e 11
Hình 3.33: Đường đi ngắn nhất nối 2 điểm x và y nằm trên S
Tiếp theo chúng tôi trình bày ví dụ chi tiết tìm đường đi ngắn nhất nối 2 điểm dọc theo một khối đa diện có 8 mặt.
Ví dụ 3.4.2 Cho khối đa diện P có 8 mặt như trong hình, X và Y là các điểm nguồn và điểm đích của khối đa diện.
Hình 3.34: Khối đa diện có 8 mặt tam giác Để tìm đường đi ngắn nhất từ X tới Y ta thực hiện các bước sau:
Chia khối đa diện P thành 4 dãy mặt S 1 , S 2 , S 3 , S 4 sao cho các dãy mặt này có ít tam giác nhất có thể và đều chứa điểm nguồn và điểm đích.
Hình 3.35: Dãy mặt thứ nhất S 1 Hình 3.36: Dãy mặt thứ hai S 2
Hình 3.37: Dãy mặt thứ ba S 3 Hình 3.38: Dãy mặt thứ tư S 4
Lần lượt tìm đường đi ngắn nhất từ X tới Y trên các dãy mặt S 1 , S 2 , S 3 , S 4 bằng cách áp dụng thuật toán 2.
Gọi SP 1 , SP 2 , SP 3 , SP 4 lần lượt là các đường đi ngắn nhất tìm được ở bước trên.
Trong hình vẽ bên dưới minh họa thuật toán với một dãy S 2.
Trong các dãy mặt tam giác còn lại làm tương tự ta tìm được 4 đường đi ngắn nhất từ X đến Y.
Tìm trong 4 đường đi ngắn nhất ở trên đường đi có độ dài nhỏ nhất Kết luận đường đi ngắn nhất cần tìm trên P là đường có độ dài nhỏ nhất đó.
Hình 3.40: Lật phễu F 1 lên mặt tam giác thứ 2
Hình 3.41: Trong mặt phẳng f 2 , tìm phễu mới F 2
Hình 3.42: Lật phễu F 2 trở lại bề mặt của P ta được SP 2 (X, Y )
Luận văn tập trung nghiên cứu về thuật toán tìm đường đi ngắn nhất giữa
2 điểm trong một miền hình học Trong đó thuật toán tìm đường đi ngắn nhất giữa 2 điểm trong một đa giác đơn trình bày lại theo thuật toán của Lee và Preparata, thuật toán tìm đường đi ngắn nhất giữa 2 điểm trên bề mặt khối đa diện dựa trên thuật toán của An, Giang, Phú và Polthier.
Tóm tắt các kết quả chính mà luận văn đã đạt được như sau:
• Trình bày lại các khái niệm cơ bản về lý thuyết đồ thị, thuật toán, đa giác đơn và đường gấp khúc, phép tam giác phân đa giác.
• Trình bày lại các khái niệm dãy mặt tam giác và đường đi dọc theo dãy mặt tam giác, các khái niệm góc tại một điểm trên bề mặt khối đa diện, định nghĩa về phép lật.
• Trình bày lại khái niệm cây đối ngẫu, hình ống tay, phễu trong đa giác đơn và phễu trong dãy mặt tam giác.
• Trình bày lại thuật toán Dijkstra, thuật toán tìm tiếp tuyến với một đường cong lồi.
• Trình bày lại các bước chi tiết, chứng minh tính đúng đắn và đánh giá độ phức tạp của 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.
• Minh họa trực quan thuật toán tìm đường đi ngắn nhất giữa 2 điểm trong đa giác đơn bằng phần mềm java được xây dựng bởi Josh Tyler năm 1998.
• Xây dựng và chứng minh một số tính chất mới của hình phễu trong dãy mặt tam giác.
• Trình bày chi tiết thuật toán tìm đường đi ngắn nhất giữa 2 điểm trên bề mặt khối đa diện sử dụng kỹ thuật lật dựa trên ý tưởng đã được đưa ra bởi An, Giang, Phú và Polthier.
Tuy nhiên, để đơn giản hơn thuật toán chúng tôi trình bày trong luận văn không sử dụng đệ quy và không sử dụng khái niệm đường định hướng.
Ngoài ra, luận văn đã đưa ra được chứng minh tính đúng đắn của thuật toán mới.
• Giới thiệu về phần mềm javaview, một phần mềm hữu ích dùng trong hình học tính toán.
• Đưa ra được minh họa trực quan từng bước của thuật toán tìm đường đi ngắn nhất trên bề mặt khối đa diện bằng phần mềm javaview.
Do hạn chế về thời gian và kiến thức Còn rất nhiều hướng nghiên cứu mới có thể phát triển thêm mà chúng tôi chưa đạt được trong luận văn.
Chúng tôi xin đưa ra một số vấn đề có thể tiếp tục nghiên cứu và phát triển như sau:
• Lập trình cho thuật toán tìm đường đi ngắn nhất giữa 2 điểm trên bề mặt khối đa diện.
• Xây dựng thuật toán tìm đường đi ngắn nhất giữa 2 điểm trong một miền hình học cụ thể với đỉnh nguồn và đỉnh đích không cố định mà có thể chuyển động trên một đường cong nào đó.
• Xây dựng thuật toán tìm dãy mặt tam giác chứa điểm nguồn và điểm đích từ một khối đa diện tùy ý sao cho thời gian chạy của thuật toán là tốt nhất.
[1] Nguyễn Hữu Điển (2005), Một số vấn đề về thuật toán, NXB Giáo dục, Hà Nội.
[2] Nguyễn Hữu Ngự (2001), Lý thuyết đồ thị, NXB Đại Học Quốc Gia, Hà Nội.
[3] Đặng Huy Ruận (2004), Lý thuyết đồ thị và ứng dụng, NXB Khoa học Kỹ thuật, Hà Nội.
[4] Trần Vũ Thiệu, Nguyễn Thị Thu Thủy (2011), Giáo trình tối ưu phi tuyến, NXB Đại học Quốc gia Hà Nội.
[5] Agarwal P L., Har-Peled S., Karia M (2002), “Computing approximate shortest paths on convex polytopes”, Algorithmica, pp 227-242.
[6] Amato N M., Goodrich M T., Ramos E A (2000), "Linear-Time Trian- gulation of a Simple Polygon Made Easier Via Randomization", ACM New York, 201-212.
[7] An P T., Giang D T., Phu H X., Polthier K (2015), Straightest geodesics for finding locally and globally shortest paths on polyhedral sur- faces, manuscript.
[8] Chein O and Steinberg L (1983), “Routing past unions of disjoint rectilin- ear battiers”, Networks, 13, 389-398.
[9] Chen J, Han Y (1990), “Shortest paths on polyhedron”, In: Proceedings of the sixth annual symposium on computational geometry, p 360-9.
[10] Garey M R., Johnson D S., Preparata F P., and Tarjan R E (1978),
“Triangulating a simple polygon”, Information Processing Lett, 7, 175-179.
[11] Guibas L., Hershberger J., Leven D., Sharir M and Tarjan R E (1987),
“Linear-Time Algorithms for Visiblitity and Shortest path Problems Inside Triangulated Simple Polygons”, Springer New York, Algorithmica 2, 1-4: 209-233.
[12] Hales T C (2007), “Jordan’s Proof of the Jordan Curve Theorem”, Studies in Logic, Grammar and Rhetoric, 10 (23), pp 45-60.
[13] Lee D T and Preparata F P (1984), “Euclidean shortest paths in the presence of rectilinear battiers”, Networks, 14, pp 393-410.
[14] Mitchell JSB, Mount DM, Papadimitriou CH (1987), “The discrete geodesics problem”, SIAM Journal on Computing, 16 (4): 647-68.
[15] O’Rourke J (2004), Computational Geometry in C, second edition, Cam- bridge University Press.
[16] Papadopoulos A (2005), Metric spaces, convexity and non-positive cur- vature, IRMA Lectures in Mathematics and Theoretical Physics, vol 6, European Mathematical Society (EMS), Zurich.
[17] Polthier K and Schmies M (1998), “Straightest Geodesics on Polyhedral Surfaces”, in H C Hege and K Polthier, Editors, Mathematical Visualiza- tion, Springer Verlag, Heidelberg, pp 135-150.
[18] Sethian J A (1999), “Fast marching methods”, SIAM Review, 41 (2), pp.199-235.
[19] Sharir M., Schorr A (1986), “On shortest paths in polyhedral spaces”,SIAM Journal on Computing, 15 (1): 193-215.
[20] Toponogov, Victor Andreevich (2006), Differential Geometry of Curves and Surfaces: A Concise Guide, Springer, p 15, ISBN 9780817643843.
[21] Trong V.P (2001), “Determination geometrique de chemins geodesiques sur des sufaces de subdivision”, Applied Mathematics, University Joseph Fourier, Laboratory LMC-IMAG, PhD Thesis.
[22] Trong V.P, Szafran N., Biard L (2001), “Pseudo-geodesics on three- demensional surfaces and pseudo-geodesic meshes”, Numerical Algorithms,
[23] Xin S.-Q., Wang G.-J (2007), “Efficiently determining a locally shortest path on polyhedral surfaces”, Computer-Aided Design, 39, pp 1081-1090.
[24] Guibas L., Hershberger J., Leven D., Sharir M., Tarjan R E (1987),
“Linear-Time Algorithms for Visibility and Shortest Path Problems InsideTriangulated Simple Polygons”, Algorithmica, textbf2, pp 209-233.
JavaView là một phần mềm dùng trong hình học tính toán, được viết bằng ngôn ngữ lập trình Java bởi nhóm tác giả Polthier JavaView cho phép hiển thị các đối tượng hình học dưới dạng 3D, ngoài ra nó còn được trang bị một thư viện các phần mềm tính toán giúp cung cấp lời giải và các công cụ hữu ích cho nhiều bài toán hình học khác nhau Giúp người dùng có thể nhìn các đồ thị với đồ họa sinh động trong không gian 3 chiều.
Hơn nữa, javaview còn cho phép tích hợp dễ dàng với các phần mềm khác như Mathematica và Maple Đây cũng là một phần mềm miễn phí với các lớp thư viện của nó có thể tải về từ địa chỉ www.javaview.de.
1 Hướng dẫn cách cài đặt JavaView
Các bước cài đặt JavaView như sau:
1 Xác định xem bạn muốn cài đặt JavaView riêng biệt (mặc định) hay muốn chạy JavaView trong Mathematica hay Maple.
2 Tải bộ cài đặt hoặc file ZIP tương ứng bằng cách nhấn vào tên của nó.
3 Khởi động chương trình cài đặt tương ứng từ các file ZIP vào một thư mục bạn muốn lưu.
4 Khi giải nén, bạn cần đảm bảo cấu trúc thư mục của file ZIP và tên file không thay đổi.
5 Bạn có thể tải về các file bổ sung từ mục Tools và giải nén vào cùng thư mục.
6 Để có thể xem hướng dẫn chi tiết bạn có thể tham khảo www.javaview.de/download/.
2 Giới thiệu sơ lược các chức năng của JavaView
JavaView là công cụ giúp người dùng hình dung một cách trực quan và chính xác đường đi giữa hai điểm trên bề mặt của một vật thể 3D Nó cho phép thêm đồ thị 3D vào tài liệu dạng HTML để sử dụng trực tuyến.
Các chức năng chính mà JavaView cung cấp bao gồm:
1 Minh họa các đối tượng hình học dưới dạng 3D và các thể hiện tính toán số học của chúng.
2 Đưa ra các thể hiện toán học trong các tạp chí điện tử trực tuyến.
3 Phát triển các thuật toán trong một lớp thư viện mở.
4 Các thuật toán riêng và các định dạng file để cung cấp cho các mô hình tính toán.
5 Có thể tích hợp với một phần mềm thứ ba thông qua JavaView API.
3 Minh họa một số chức năng cơ bản
Kỹ thuật 1 Tạo một dãy các mặt tam giác trong 3D
1 Mở một khối đa diện.
2 Dùng chức năng đánh dấu một dãy mặt (Method > Mark > Mark Ele- ments).
3 Đảo ngược sự đánh dấu ở trên (Method > Invert Elements Marked)
4 Xóa các mặt đã đánh dấu (Delete > Remove Marked Elements)
Các bước trên được minh họa cụ thể trong hình bên dưới.
Kỹ thuật 2 Tìm đường trắc địa (hoặc đường đi ngắn nhất) trên dãy mặt tam giác trong 3D
1 Mở một dãy mặt đã tạo được ở trên
2 Mở hộp thoại chức năng (Method > Effect > Compute Geodesics)
3 Chọn điểm nguồn và điểm đích nằm trên dãy mặt
4 Tích chọn tìm đường trắc địa hoặc tìm đường đi ngắn nhất
5 Chọn nút bắt đầu tìm đường.
Hình 3.47: Hộp thoại chức năng tìm đường trắc địa
Hình 3.48: Đường trắc địa dọc theo dãy mặt tam giác
B Thuật toán Dijkstra tìm đường đi ngắn nhất trong đồ thị
Trong mục này, chúng tôi trình bày thuật toán Dijkstra để tìm đường đi ngắn nhất giữa 2 điểm trong đồ thị Đây là thuật toán phụ cần thiết để tìm ra hình ống tay trong thuật toán 1.
Thuật toán Dijkstra được đưa đưa ra năm 1959, nhằm tìm đường đi ngắn nhất giữa 2 điểm a và b trong một đồ thị G có n đỉnh và trọng số không âm. Input Đồ thị G = (V, E) có n đỉnh, hai điểm a, b ∈ V.
Output Đường đi ngắn nhất từ a đếnb.
Thuật toán thực hiện trên ý tưởng gán và giảm giá trị các nhãn d(i) tương ứng tại mỗi đỉnh i của đồ thị G (xem [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 đỉnhj đã gán nhãn nhưng d(i) + l(i, j) < d(j)thì thực hiện giảm nhãn d(j) := d(i) + l(i, j)
• Lặp lại bước 2 cho đến khi không gán hoặc giảm nhãn được nữa.
Thuật toán chi tiết được mô tả như sau: (xem [2])
Begin u := đỉnh không thuộc S và có nhãn d(u) nhỏ nhất;
S := S ∪ u; for v ∈ V \ S do if d(u) + l(u, v) < d(u) then d(v) := d(u) + l(u, v); truoc[v] := u; end if end for End
C Thuật toán tìm tiếp tuyến với một đường gấp khúc lồi