.Hơn nữa bài toán tìm bao lồi còn được áp dụng để tìm ra các bài toán tính toánhình học khác như tìm tam giác phân Delaunay, tìm đường kính của một tậphợp, tìm các lớp lồi của một tập hợ
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC KHOA HỌC
NGUYỄN KIỀU LINH
BÀI TOÁN TÌM BAO LỒI
Trang 2Lời cảm ơn
Sau một thời gian cố gắng, nỗ lực học tập và nghiên cứu, đến nay tôi đã hoànthành luận văn tốt nghiệp thạc sỹ của mình Để có được kết quả này, tôi xinbày tỏ lòng biết ơn sâu sắc và lời cảm ơn chân thành nhất đến thầy tôi, TS.Hoàng Nam Dũng, người đã định hướng nghiên cứu cho tôi trong suốt thời gianthực hiện luận văn của mình Cám ơn thầy đã mang đến cho tôi những bài họcquý báu về phương pháp nghiên cứu khoa học Đó chính là nền tảng cơ bản,
là những hành trang vô cùng quý giá để tôi có thể tiếp cận được với khoa họcthật sự Thầy đã dạy cho tôi không chỉ những kiến thức khoa học mà còn cảnhững bài học về cuộc sống, về tình người Xin cảm ơn về tất cả những gì thầy
đã mang đến cho tôi
Tôi xin gửi lời cảm ơn chân thành tới các thầy cô ở trường Đại học Khoa học,Đại học Thái Nguyên và các thầy cô ở Viện Toán học đã luôn tận tình giúp đỡ,theo dõi và động viên cho tôi trong suốt quá trình thực hiện luận văn này.Xin cám ơn những người thân trong gia đình đã hết sức thông cảm, chia sẻ vàtạo điều kiện tốt nhất cho tôi để tôi có thể học tập, nghiên cứu và hoàn thànhnhững công việc của mình
Xin cám ơn tất cả những người bạn thân yêu, những người đã yêu mến, chia
sẻ với tôi những khó khăn vui buồn trong khi tôi thực hiện luận văn này
Trang 3Mục lục
1.1 Bài toán tìm bao lồi 7
1.1.1 Tập lồi 7
1.1.2 Bao lồi 7
1.1.3 Bài toán tìm bao lồi 9
1.2 Ứng dụng của bài toán tìm bao lồi 9
1.2.1 Nhận dạng 10
1.2.2 Tìm đường đi ngắn nhất 11
1.2.3 Hệ thống thông tin địa lý (GIS) 12
1.2.4 Thống kê 14
1.2.5 Tìm đường kính của một tập hợp điểm 15
2 Các thuật toán tìm bao lồi 19 2.1 Một số khái niệm và thuật toán cơ bản 19
2.2 Thuật toán gói quà 22
2.3 Thuật toán quét Graham 23
2.3.1 So sánh hai góc trong mặt phẳng 24
2.3.2 Sắp xếp 25
2.3.3 Thuật toán quét Graham 29
2.4 Thuật toán Quickhull 30
2.5 Thuật toán Chan 35
3 Cải tiến các thuật toán 39 3.1 Xóa điểm 39
3.2 Cải tiến thuật toán Quickhull 41
4 Kết quả tính toán 45 4.1 Tạo tập hợp điểm ngẫu nhiên và thuật toán xóa điểm 45
Trang 44.2 Các kết quả tính toán 48
Trang 5Mở đầu
Bài toán tìm bao lồi là một trong những bài toán đặc biệt quan trọng tronglĩnh vực hình học tính toán bởi các ứng dụng đa dạng của nó Chẳng hạn nhưnhận dạng mẫu, xử lý hình ảnh, tìm đường đi cho robot, số liệu thống kê, Hơn nữa bài toán tìm bao lồi còn được áp dụng để tìm ra các bài toán tính toánhình học khác như tìm tam giác phân Delaunay, tìm đường kính của một tậphợp, tìm các lớp lồi của một tập hợp, Vì các ứng dụng quan trọng của nónên nhiều nhà khoa học đã bắt tay vào việc nghiên cứu và đưa ra các thuật toántìm bao lồi của một tập hợp Điển hình như sự phát hiện của Chand và Kapurvào năm 1970 và Jarvis vào năm 1973 với thuật toán gói quà, Ronald Grahamvào năm 1972 với thuật toán quét Graham, W Eddy năm 1977 và A.Bykatnăm 1978 với thuật toán Quickhull, Timothy Chan vào năm 1993 với thuật toánChan, Hiện nay có rất nhiều nhà khoa học dựa vào các thuật toán này đểcải tiến và tăng tốc cho chúng nhằm đáp ứng các yêu cầu của cuộc sống hiệnđại như xử lí các vấn đề ở tốc độ cao với số lượng lớn Xuất phát từ lí do trênluận văn này đưa ra một một số cải tiến nhằm tăng tốc cho việc tính toán khitìm bao lồi của một tập hợp điểm trên mặt phẳng
Luận văn này gồm bốn chương Chương 1 phát biểu bài toán tìm bao lồi
và trình bày một số ứng dụng quan trọng của bài toán này trong thực tiễn.Chương 2 trình bày các thuật toán tìm bao lồi trong không gian hai chiều nhưthuật toán gói quà, thuật toán quét Graham, thuật toán Quickhull và thuậttoán Chan Chương 3 đưa ra thuật toán xóa điểm, là thuật toán dựa vào tínhchất của những điểm cực nằm trong tập các đỉnh của bao lồi, để xóa bớt nhữngđiểm nằm trong đa giác tạo bởi các điểm cực, nhằm mục đích giảm bớt số lượngcác điểm đầu vào cho các thuật toán tìm bao lồi Đồng thời chương này cũngtrình bày một cải tiến cho thuật toán Quickhull Chương 4 nêu các kết quả tínhtoán của các thuật toán đã được trình bày ở chương 3 như thuật toán xóa điểm,thuật toán Quickhull và Quickhull cải tiến
Trong quá trình nghiên cứu và tìm tòi để hoàn thành luận văn này, mặc dù
Trang 6tác giả đã có nhiều nỗ lực cố gắng, nhưng chắc chắn luận văn sẽ không tránhkhỏi những thiếu sót Tác giả rất mong nhận được sự góp ý của các thầy cô vàcác bạn để luận văn được hoàn thiện hơn.
Trang 7Chương 1
Bài toán tìm bao lồi và ứng dụng
Như đã biết, bài toán tìm bao lồi là một trong những bài toán đặc biệt quantrọng trong lĩnh vực hình học tính toán Chương này phát biểu bài toán tìm baolồi và đưa ra một số ứng dụng quan trọng của bài toán trong thực tế
1.1 Bài toán tìm bao lồi
Trước khi trình bày định nghĩa bài toán tìm bao lồi ta trình bày các kháiniệm tập lồi, tổ hợp lồi, [19]
1.1.1 Tập lồi
Định nghĩa 1.1 Cho hai điểm p, q ∈Rn Tập hợp tất cả các điểm x có dạng
x = (1 − λ)p + λq
với 0 ≤ λ ≤ 1 gọi là đoạn thẳng nối p với q và được kí hiệu là pq
Định nghĩa 1.2 Chop1, p2, , pk ∈Rn Những điểm x ∈Rn có dạng x =
kPi=1
λipi
trong đó pi ∈ Rn và 0 ≤ λi ≤ 1 với
kPi=1
λi = 1 được gọi là một tổ hợp lồi của
Trang 8(a) Tập lồi (b) Tập không lồi
Hình 1.2 Bao lồi của một tập hữu hạn
Hình 1.3 Bao lồi của một tập hữu hạn
Trang 9Nhận xét 1.2 Nếu gọi tập hợp các đỉnh của conv(P ) là H thì ta có
conv(P ) = conv(H).
Định nghĩa 1.6 Trong mặt phẳng, đa giác tạo bởi các đỉnh của một bao lồiđược gọi là biên của bao lồi đó
1.1.3 Bài toán tìm bao lồi
Cho một tập hợp P hữu hạn điểm, bài toán tìm bao lồi của P là bài toán tìmtập hợp H các đỉnh của bao lồi conv(P ) củaP
Input: Tập hợp P hữu hạn n điểm p1, p2, , pn
Output: Tập đỉnh của bao lồi conv(P ), H = {h1, h2, , hm}(hình 1.4)
Hình 1.4
1.2 Ứng dụng của bài toán tìm bao lồi
Bài toán tìm bao lồi của một tập hợp hữu hạn điểm có ứng dụng đa dạngtrong nhiều lĩnh vực chẳng hạn như nhận dạng mẫu, xử lý hình ảnh, tìm đường
đi cho robot, số liệu thống kê, Bài toán tìm bao lồi còn được áp dụng rộngrãi để tìm ra các bài toán tính toán hình học khác và các bài toán này có rấtnhiều ứng dụng trong thực tế như bài toán tìm tam giác phân Delaunay, bàitoán tìm đường kính của một tập hợp, bài toán tìm các lớp lồi của một tập hợp, Sau đây ta sẽ trình bày một số ứng dụng quan trọng của bài toán tìm baolồi
Trang 101.2.1 Nhận dạng
Bài toán tìm bao lồi có ứng dụng rất quan trọng trong lĩnh vực nhận dạng.Nhận dạng nhằm mục đích phân loại dữ liệu (là các mẫu) dựa vào thông tinthống kê được khai thác từ các mẫu có sẵn Các mẫu cần phân loại thường đượcbiểu diễn thành các nhóm của các dữ liệu đo đạc hay quan sát được
Các ứng dụng phổ biến trong thực tế là nhận dạng tiếng nói tự động, phânloại văn bản thành nhiều loại khác nhau (ví dụ những thư điện tử spam/non-spam), nhận dạng tự động các mã bưu điện viết tay trên các bao thư, hay hệthống nhận dạng mặt người, nhận dạng biển số xe, Sau đây ta xét một ứngdụng cụ thể của bài toán tìm bao lồi trong nhận dạng biển số xe Nội dung vàhình vẽ được trích trong [14]
Hình 1.5
Quy trình của quá trình xử lý nhận diện biển số xe thường thông qua cácbước như hình 1.5 và bài toán tìm bao lồi được ứng dụng trong bước 4 của quátrình nhận dạng Trong bước này ta cô lập từng kí tự trong biển số xe được trích
ra ở bước 3 Tiếp theo sử dụng thuật toán tìm bao lồi tìm vùng tối thiểu chứamỗi kí tự đó để chuẩn bị tiến hành nhận dạng ở bước 5 Hình 1.6 biểu diễn các
Trang 11bước của quá trình xử lý nhận diện biển số xe.
(a) Chụp ảnh từ camera (b) Tiền xử lý ảnh
(c) Trích vùng biển số xe (d) Tìm bao lồi cho mỗi kí tự
Hình 1.6 Các bước của quá trình nhận dạng
1.2.2 Tìm đường đi ngắn nhất
Bài toán đặt ra là tìm một đường đi ngắn nhất cho một robot đi từ điểm s
đến điểm t với các chướng ngại vật nằm giữa hai điểm đó Giả sử để tránh cácchướng ngại vật thì robot không thể đi xuyên qua chúng được Vì vậy nếu tatìm được bao lồi của tậpP ∪ {s, t}, vớiP là tập các chướng ngại vật, thì đi theođường ngắn hơn trong hai đường biên trên và biên dưới của bao lồi sẽ khônggặp các chướng ngại vật và đường đi ấy là ngắn nhất (hình 1.7)
Hình 1.7 Đường đi ngắn nhất
Trang 121.2.3 Hệ thống thông tin địa lý (GIS)
Bài toán tìm bao lồi được ứng dụng trong các mô hình biểu diễn dữ liệu của
hệ thống thông tin địa lý GIS GIS được thiết kế như một hệ thống chung đểquản lý dữ liệu không gian, nó có rất nhiều ứng dụng trong việc phát triển đôthị và môi trường tự nhiên như là quy hoạch đô thị, quản lý nhân lực, nôngnghiệp, điều hành hệ thống công ích, lộ trình, nhân khẩu, bản đồ, giám sát vùngbiển, cứu hoả, bệnh tật, . Các ứng dụng này của GIS được trình bày cụ thểtrong [2]
Trong các mô hình biểu diễn dữ liệu của GIS, chúng ta thường nhắc đến mộtkhái niệm là feature Feature là một đối tượng trên bản đồ có hình dạng, vị trí
và các thuộc tính xác định cụ thể Có ba mô hình dữ liệu trong GIS như môhình dữ liệu vector, mô hình dữ liệu raster và mô hình TIN Bài toán tìm baolồi được áp dụng một cách gián tiếp trong các mô hình dữ liệu vector và môhình dữ liệu TIN Dưới đây ta trình bày ứng dụng cụ thể của bài toán tìm baolồi trong mô hình dữ liệu vector Nội dung và các hình vẽ trong phần này trích
Trang 13một vùng nhỏ nhất bao kín đối tượng Những đối tượng mới này có tính chất,hình dạng và kích thước gần với các tập thực thể cơ sở nhất Do vậy những đốitượng này phù hợp để đưa vào bản đồ (hình 1.9).
(a) Bản đồ với mô hình dữ liệu vector (b) Đối tượng điểm trên bản đồ.
(c) Đối tượng đường trên bản đồ (d) Đối tượng vùng trên bản đồ.
Hình 1.8
(a) Thuật toán tìm bao lồi cho đối tượng điểm.
(b) Thuật toán tìm bao lồi cho đối tượng đường.
(c) Thuật toán tìm bao lồi cho đối tượng vùng.
Hình 1.9
Trang 141.2.4 Thống kê
Như ta biết, một bài toán trọng tâm trong thống kê là ước lượng đánh giáthông số dân số (population parameter) từ một mẫu dữ liệu ngẫu nhiên đượcrút ra Tuy nhiên một số thông số đó lại cực kỳ nhạy cảm với giá trị ngoại lai(outliers), đó là những điểm có số liệu cách xa một cách bất thường với trungtâm của các quan sát Các giá trị ngoại lai có thể có ảnh hưởng lớn đến việc tínhtoán các ước lượng thông số trong phân tích hồi quy (regression analysis) hoặccác số thống kê tóm tắt (brief statistics) chẳng hạn như trung bình và phươngsai mẫu mà kết quả là có thể lấy cả những giá trị không tiêu biểu Do đó cácgiá trị ngoại lai thường hay bị bỏ qua để không gây ra lỗi trong dự đoán Mộtứng dụng của bao lồi có thể giải quyết được vấn đề này, đó là thuật toán tìmcác lớp lồi của một tập hợp bất kỳ Với đầu vào là các điểm của một mẫu dữliệu ngẫu nhiên, ta có thể sử dụng thuật toán này cho vấn đề xóa lớp lồi đếnkhi loại bỏ được các giá trị ngoại lai và giữ lại phần gần với trung tâm của cácquan sát hơn Sau đây chúng ta đi trình bày thuật toán tìm các lớp lồi của mộttập hợp điểm Nội dung của phần này tham khảo trong [3]
Giả sử ta có tập P, biên của conv(P ) được gọi là lớp lồi đầu tiên của P, kíhiệu là cl(1) Nếu chúng ta xóa những điểm nằm trên cl(1) và tìm một bao lồimới của những điểm còn lại ta sẽ nhận được lớp lồi thứ hai của P, kí hiệu là
cl(2) Như vậy chúng ta sẽ tìm được lớp lồi thứ i + 1 sau khi loại bỏ những điểmcủa lớp lồi thứ i Đây chính là nội dung của bài toán tìm các lớp lồi của một tậphợp Từ đó ta có định nghĩa độ sâu của một điểm trong một tập P như sau.Định nghĩa 1.7 Độ sâu của một điểm p trong một tập P bằng số lớp lồi được
bỏ đi từ tập P trước khi p bị loại bỏ Độ sâu của một tập P là độ sâu của điểmsâu nhất của nó, tức là độ sâu của điểm cuối cùng bị loại bỏ Độ sâu của tập P
kí hiệu là depth(P ) (hình 1.10)
Trong hình 1.10, pi có độ sâu là i với i = 0, 1, 2, 3, 4.
Phương pháp tốt nhất để tìm bao lồi của một tập P gồm n điểm có độ phứctạp tính toán của thuật toán là O(n log n) Định nghĩa độ phức tạp tính toáncủa thuật toán được trình bày cụ thể ở chương 2 Đầu tiên ta loại bỏ các đỉnhcủa lớp lồi thứ nhất, sau đó tiếp tục tìm bao lồi của các tập điểm còn lại Do
đó để tìm được độ sâu depth(P ) củaP thì độ phức tạp tính toán của thuật toán
là O(n2log n) Tuy nhiên áp dụng thuật toán gói quà tại mỗi lớp lồi cho ta mộtthuật toán có độ phức tạp tính toán tốt hơn Giả sử hi là số đỉnh của lớp lồithứi Tại lớp lồi thứ i thì thuật toán gói quà có độ phức tạp là O(nhi) và do đó
Trang 15độ phức tạp của thuật toán tìm các lớp lồi là O(nh 0 + nh 1 + nh 2 + + nhk) với
k là độ sâu của tập điểm đầu vào Vì h0+ h1+ h2+ + hk = n nên độ phức tạpcủa thuật toán này là O(n2)
1.2.5 Tìm đường kính của một tập hợp điểm
Bài toán tìm đường kính của một tập hợp điểm là một bài toán rất quantrọng trong hình học tính toán và có ứng dụng trong những bài toán phân cụm(clustering), đây là bài toán làm việc với các nhóm đối tượng tương tự nhauđược trình bày cụ thể ở [17], trang 170 Trước khi trình bày thuật toán của bàitoán tìm đường kính của một tập hợp điểm ta có định nghĩa sau
Định nghĩa 1.8 Cho một tập S có n điểm, tìm trong tập S một cặp điểm saocho khoảng cách (khoảng cách Euclid) giữa chúng là lớn nhất Nếu có nhiều cặpđiểm như vậy thì ta chọn một cặp trong số đó Độ dài cạnh nối cặp điểm xanhất được gọi là đường kính của tập hợp S và cặp điểm xa nhất đó được gọi làhai đỉnh của đường kính
Như vậy bài toán tìm đường kính của một tập hợp là bài toán tìm cặp điểm
xa nhất của tập hợp đó Phương pháp có thể áp dụng giải bài toán này là ta đitìm tất cả các khoảng cách giữa hai điểm bất kỳ của tập S và đường thẳng nốimột trong những cặp điểm có khoảng cách lớn nhất là đường kính của một tậphợp điểm Cách làm này có độ phức tạp tính toán làO(n2) Tuy nhiên dưới đây
ta sẽ trình bày một phương pháp là ứng dụng của bao lồi với độ phức tạp tínhtoán là O(n log n)
Mệnh đề 1.1 Cho tập S gồm n điểm trong mặt phẳng Hai đỉnh đường kínhcủa tập S là hai điểm cực biên của S, tức là hai điểm đó phải là hai đỉnh của
Hình 1.10 Độ sâu của một điểm và các lớp lồi của một tập hợp.
Trang 16Hình 1.11
bao lồi conv(S)
Chứng minh Bây giờ ta giả sử rằng một đỉnh của đường kính không phải làđiểm cực biên của S Gọi (d, a)là cặp điểm xa nhất và giả sử rằng a không phải
là điểm cực biên của S Khi đó a phải nằm trong tam giác dcb nào đó (tính cảbiên) với c, b ∈ S Từ hình 1.11 ta thấy rõ ràng rằng độ dài đoạn thẳng da, kíhiệu |da|, nhỏ hơn độ dài đoạn thẳng da0, kí hiệu |da 0 | Và vì
|da 0 | < max{|db|, |dc|}
nên
|da| < max{|db|, |dc|}.
Điều này mâu thuẫn với giả sử da là đường kính của tập hợp S
Định nghĩa 1.9 Cho tập S gồm n điểm, nếu đường thẳng l đi qua một haynhiều điểm của tập S sao cho tập hợp S nằm hoàn toàn trong một nửa mặtphẳng xác định bởi đường thẳng l thì l được gọi là đường thẳng tựa trên tập S.Định nghĩa 1.10 Nếu l1 và l2 là hai đường thẳng tựa trên tập S tương ứng điqua p1 và p2 (p1, p2 ∈ S) và l1 song song với l2 thì cặp điểm (p1, p2) được gọi làcặp điểm đối cực của S
Dưới đây ta đưa ra một định lí đã được trình bày và chứng minh ở [17] Định
lý này đưa ra một ý tưởng quan trọng cho thuật toán tìm cặp điểm xa nhất củamột tập điểm trong mặt phẳng
Định lý 1.1 ([17], định lý 4.18, trang 17) Cặp điểm xa nhất của một tập S làmột cặp đối cực của S mà có khoảng cách lớn nhất
Trang 17Như vậy để tìm cặp điểm xa nhất thì ta phải tìm tất cả các cặp đối cực vàchọn một cặp có khoảng cách lớn nhất Từ mệnh đề 1.1 và định lý 1.1 thì tất cảcác cặp điểm đối cực phải nằm trên bao lồi của tập S Do đó đầu tiên ta phảitìm bao lồi của của tập S, sau đó xác định các cặp đối cực từ các đỉnh của baolồi và tìm ra cặp có khoảng cách xa nhất Thuật toán tìm cặp điểm xa nhất cóthể được trình bày như Algorthm 1.
Hình 1.12
Ta có sự phân tích độ phức tạp tính toán của Algorithm 1 như sau Bước(1) có độ phức tạp là O(n log n) Xét đến bước (2), (a) có độ phức tạp là O(h),(b) - (d) lặp lại như bước (a) cho mỗi cặp đối cực nên cũng có độ phức tạp là
O(h) Cuối cùng (e) cũng có độ phức tạp là O(h) Vì tập S có n điểm nên baolồi conv(S) có nhiều nhấtn đỉnh, khi đó trong trường hợp xấu nhất thì bước (2)
có độ phức tạp là O(n) Do đó bài toán tìm đường kính của một tập hợp điểm
có độ phức tạp tính toán là O(n log n)
Trang 18Algorithm 1 Thuật toán tìm cặp điểm xa nhất của một tập hợp
1 Tìm bao lồi của tập S.
2 Cho H = {p0, p1, , ph} là các đỉnh của bao lồi conv(S).
Giả sử bước 1 cho các đỉnh của bao lồi sắp xếp theo thứ tự ngược chiều kim đồng hồ Ta tìm tất cả các cặp đối cực bằng cách quét tròn một đường thẳng quanh các đỉnh của bao lồi, cụ thể như sau.
(a) Cho l 1 là đường thẳng tựa của S xác định bởi hai điểm p 0 và p 1 thuộc H Với mọi điểm
p j ∈ H, trong đó 2 ≤ j ≤ h ta xác định khoảng cách giữa các điểm p j và l 1 Vì tất cả các điểm này là tập đỉnh của bao lồi conv(S) nên khi ta lần lượt xét tới các điểm theo thứ tự ngược chiều kim đồng hồ thì các khoảng cách này sẽ tăng dần tới khi gặp một điểm mà
có khoảng cách lớn nhất và sau đó khi xét tiếp đến các đỉnh tiếp theo thì các khoảng cách này lại giảm dần Gọi p i là điểm có khoảng cách lớn nhất và l 2 là đường thẳng đi qua p i
sao cho l2song song với l1(Nếu có hai điểm giống pi thì l2đi qua cả hai điểm đó) Rõ ràng
là l1 và l2là các đường thẳng tựa trên cặp điểm đối cực của S (hình 1.12a).
(b) Gán θ01bằng góc nhọn tạo bởi l1và p1p2.
Gán θ001 bằng góc nhọn tạo bởi l2 và pipi+1.
(Nếu có hai điểm pi thì ta chọn điểm pi ở bên trái để xác định θ001).
d 1 := d001 và e 1 := p 1 p i Sau đó đánh dấu các điểm p 0 , p 1 và p i là những điểm đã được xét tới (Nếu có hai điểm như p i thì ta tính khoảng cách từ p 0 và p 1 đến mỗi điểm p i đó, giá trị lớn nhất sẽ chọn là
d1, cạnh tương ứng đặt là e1 và đánh dấu các điểm pi đó).
θ02, θ200, d02 và d002 được tính tương tự như ở bước trên (hình 1.12b) Gán d 2 := max{d02, d002}
và e 2 là cạnh tương ứng với d 2 và ta đánh dấu các đỉnh giống như bước trên.
(d) Tiếp tục gán l 1 , l 2 và thực hiện giống bước (c) tới khi mọi đỉnh của bao lồi được đánh dấu Khi đó ta có nhiều nhất h khoảng cách d 1 , d 2 , , d h và tương ứng có nhiều nhất h cạnh
e 1 , e 2 , , e h
(e) Đường kính của S là max{d 1 , d 2 , , d h } và cạnh tương ứng sẽ cho ta cặp điểm xa nhất của S.
Trang 19Chương 2
Các thuật toán tìm bao lồi
Trong chương này ta xét các thuật toán tìm bao lồi trong không gian haichiều như thuật toán gói quà, thuật toán quét Graham, thuật toán Quickhull vàthật toán Chan Trong rất nhiều tài liệu viết về bài toán tìm bao lồi đòi hỏi giảthiết không có ba điểm bất kỳ nào thẳng hàng nhưng điều kiện này là khôngcần thiết và làm mất tính tổng quát của bài toán Một số thuật toán cần có điềukiện không thẳng hàng nhưng không phải là ba điểm bất kỳ mà những bộ bađiểm đặc biệt tùy thuộc vào thuật toán cụ thể nào đó Những điều kiện này cóthể vượt qua bằng cách đơn giản và hiệu quả như chúng ta sẽ thấy chương này.Trước khi trình bày các thuật toán này ta đưa ra một số khái niệm và thuậttoán cơ bản sau
2.1 Một số khái niệm và thuật toán cơ bản
Đầu tiên ta trình bày định nghĩa sự định hướng của các điểm bất kỳ Địnhnghĩa này là cơ sở của những định nghĩa ta sẽ trình bày dưới đây
Định nghĩa 2.1 Cho một bộ ba điểm đã sắp thứ tự (p, q, r) trong mặt phẳng,
ta nói rằng chúng có định hướng dương nếu theo thứ tự đã sắp xếp chúng tạothành hình ngược chiều kim đồng hồ, có định hướng âm nếu chúng tạo thànhhình thuận chiều kim đồng hồ và hướng không nếu chúng thẳng hàng (trong đóbao gồm cả trường hợp có hai hay nhiều hơn các điểm trùng nhau) (hình 2.1).Lưu ý rằng sự định hướng phụ thuộc vào thứ tự các điểm được đưa ra Để xéthướng của các điểm sắp thứ tự (p, q, r) với p = (px, py), q = (qx, qy) và r = (rx, ry)
thì ta có thể sử dụng công thức tính định thức cấp ba như dưới đây Ta địnhnghĩa
Trang 20(a) Định hướng dương (b) Định hướng âm
Trang 21Nhận xét 2.2 Công thức tính Orient cũng được dùng để tính diện tích tamgiác Chẳng hạn để tính diện tích Spqr của tam giác pqr ta có công thức
Spqr = 1
2 |Orient(p, q, r)|.
Sau đây ta định nghĩa một điểm bên trái hoặc bên phải một đoạn thẳng.Định nghĩa của các điểm này được sử dụng trong các thuật toán tìm bao lồi nhưthuật toán gói quà, thuật toán quét Graham, thuật toán Quickhull,
Định nghĩa 2.2 Trong không gian 2 chiều, cho ba điểm phân biệt p 1 , p 2 và p 3,điểm p3 được gọi là bên trái đoạn thẳng p1p2 nếu Orient(p1, p2, p3) > 0 Điểm p3
được gọi là bên phải đoạn thẳng p1p2 nếu Orient(p1, p2, p3) < 0 và điểm p3 đượcgọi là nằm trên đoạn thẳng p1p2 nếu Orient(p1, p2, p3) = 0
Tiếp theo ta đưa ra định nghĩa các điểm tận cùng bên trái dưới, bên phảidưới, bên trái trên, bên phải trên, bên dưới trái, bên dưới phải, bên trên trái vàbên trên phải Những điểm này thuộc bao lồi và thường được dùng làm điểmxuất phát cho các thuật toán tìm bao lồi sẽ được trình bày trong chương này.Định nghĩa 2.3 Cho tập P = {p 1 , p 2 , , p n } Điểm tận cùng bên phải dưới làđiểm có tung độ bé nhất trong những điểm có hoành độ lớn nhất Điểm tận cùngbên phải trên là điểm có tung độ lớn nhất trong những điểm có hoành độ lớnnhất Điểm tận cùng bên trên phải là điểm có hoành độ lớn nhất trong nhữngđiểm có tung độ lớn nhất Điểm tận cùng bên trên trái là điểm có hoành độ nhỏnhất trong những điểm có tung độ lớn nhất Điểm tận cùng bên trái trên là điểm
có tung độ lớn nhất trong những điểm có hoành độ nhỏ nhất Điểm tận cùngbên trái dưới là điểm có tung độ nhỏ nhất trong những điểm có hoành độ nhỏnhất Điểm tận cùng bên dưới trái là điểm có hoành độ nhỏ nhất trong nhữngđiểm có tung độ nhỏ nhất Điểm tận cùng bên dưới phải là điểm có hoành độlớn nhất trong những điểm có tung độ nhỏ nhất (hình 2.2)
Trong hình 2.2, q 1 là điểm tận cùng bên trái trên, q 2 là điểm tận cùng bêntrên trái, q3 là điểm tận cùng bên trên phải, q4 là điểm tận cùng bên phải trên,
q5 là điểm tận cùng bên phải dưới, q6 là điểm tận cùng bên dưới phải, q7 là điểmtận cùng bên dưới trái, q8 là điểm tận cùng bên trái dưới
Một khái niệm mà ta cũng cần phải làm rõ đó là độ phức tạp tính toán củathuật toán
Định nghĩa 2.4 Độ phức tạp tính toán của thuật toán được đo trên số lượngcác phép toán cơ bản như phép cộng, phép trừ, phép nhân, phép chia và phép
Trang 22Hình 2.2
so sánh mà nó thực hiện Với mỗi thuật toán cụ thể số lượng này phụ thuộc vào
cỡ (size) của dữ liệu nhập Như thế ta có thể xem độ phức tạp tính toán củamột thuật toán là một hàm phụ thuộc vào cỡ của dữ liệu nhập Nếu cỡ mã hóacủa dữ liệu nhập là n thì độ phức tạp có thể được xem là một hàm theo n
2.2 Thuật toán gói quà
Một trong những thuật toán đơn giản nhất trong các thuật toán hình họcphẳng là thuật toán gói quà Thuật toán này phát hiện độc lập bởi Chand vàKapur vào năm 1970 và Jarvis vào năm 1973 [11] Cho tập P hữu hạn n điểm,thuật toán bắt đầu với i = 1, ta xác định một điểm thuộc bao lồi, chẳng hạn tachọn điểm v 1 là điểm tận cùng bên phải dưới (hình 2.3b) và gán H := v 1 Sau
đó giả sử t là chỉ số cao nhất trong H mà ta tìm được tới nay thì nếu tìm đượcđiểm vi sao cho tất các điểm còn lại của P đều nằm bên trái đoạn thẳng vtvi
thì ta gán H := H ∪ {vi} Nếu tìm được điểm vj sao cho tất cả các điểm còn lạicủaP đều nằm bên trái hoặc nằm trên vtvj thì trong các điểm nằm trên vtvj tatìm điểm xa vt nhất, giả sử là vi và gán H := H ∪ {vi} Ta có thể lặp lại điềunày để tìm ra các điểm tiếp theo (hình 2.3e), đến khi nào tìm được điểm trùngvới v1 thì dừng lại (hình 2.3f) Như vậy để tìm mỗi điểm mới của bao lồi ta mấtthời gian là O(n) Do vậy thuật toán này có độ phức tạp tính toán là O(nh),trong đó n là số điểm trong tập hợp ban đầu cần tìm bao lồi và h là số đỉnh củabao lồi Trong trường hợp xấu nhất, độ phức tạp của thuật toán là O(n2) khi
h = n Thuật toán gói quà có thể được trình bày như thuật toán 2, thuật toánnày được tham khảo từ [13] Tuy nhiên thuật toán trong [13] giả thiết không có
ba điểm nào thẳng hàng còn ở đây ta sẽ xét trong trường hợp tổng quát
Trang 23(a) (b) (c)
Hình 2.3 Thuật toán gói quà
Algorithm 2 Thuật toán gói quà
Input: Tập P gồm n điểm p 1 , p 2 , , p n , giả sử n ≥ 2.
Output: Tập H gồm các điểm là đỉnh của conv(P ).
1 Gán v là điểm bên phải dưới.
2.3 Thuật toán quét Graham
Thuật toán quét Graham là một thuật toán phức tạp hơn thuật toán gói quàđược phát hiện bởi Ronald Graham vào năm 1972 [7] Giả sử cho tập hợp P bất
kỳ, đầu tiên thuật toán sắp xếp lại các điểm của tập hợp này theo một thứ tự
Trang 24xác định Việc sắp xếp hoàn thành có độ phức tạp tính toán là O(n log n) và cho
ta một đa giác khép kín Đa giác này có thể không lồi nhưng ta có thể dựa vào
nó để tìm tập H các đỉnh của bao lồi conv(P ) Sau khi các điểm của tập hợp P
được sắp xếp thì việc tìm bao lồi của nó có độ phức tạp tính toán là O(n) Vìvậy thuật toán quét Graham có độ phức tạp tính toán là O(n log n) Trước tiên
ta trình bày việc so sánh hai góc trong mặt phẳng Việc so sánh này cần choviệc sắp xếp các điểm trong thuật toán quét Graham ở mục sau
2.3.1 So sánh hai góc trong mặt phẳng
Sự so sánh hai góc trong mặt phẳng mà ta nói đến ở đây là sự so sánh haigóc có hướng Sau đây ta trình bày định nghĩa và nhận xét về góc có hướng.Góc có hướng được định nghĩa dựa vào việc quay một tia hay một đoạn thẳngquanh một điểm trong mặt phẳng Để khảo sát việc quay này ta cần chọn mộtchiều quay, gọi là chiều dương, ngược chiều quay của kim đồng hồ Khi đó ta cóthể định nghĩa góc có hướng như dưới đây
Định nghĩa 2.5 Cho hai đoạn thẳng IAvà IB NếuIC quay theo chiều dươngxuất phát từIA đến trùng với IB thì ta nói đoạn thẳng IC quay một góc AIB,
ta gọi góc AIB là góc có hướng, kí hiệu là AIBd với cạnh đầu là IA và cạnh cuối
là IB (hình 2.4)
Hình 2.4 Góc có hướng [ AIB
Trong thuật toán quét Graham ta chỉ cần so sánh hai góc có độ lớn nằm trongnửa đoạn (0, π] và có tính chất như sau Chẳng hạn cho ba điểm p1, p2 và p3 đôimột khác nhau thỏa mãn tung độ của p1 nhỏ hơn hoặc bằng tung độ của p2 vàtung độ của p 3, nếu xảy ra dấu bằng thì hoành độ của p 1 phải lớn hơn hoành
độ của điểm có tung độ bằng tung độ của p1 Ta phải so sánh góc tạo bởi p1p2
với trục hoành và góc tạo bởi p1p3 với trục hoành (hình 2.5)
Trang 25tự tăng dần của các góc tạo bởi chiều dương của trục hoành và đoạn thẳng nối
p1 với mỗi điểm đó Rõ ràng độ lớn của các góc này đều nằm trong nửa đoạn
(o, π] và cách so sánh chúng ta đã nêu ở nhận xét 2.3 Tiếp theo ta xét trườnghợp có hai điểmpi, pj khác nhau nào đó trong P tạo vớip1 ba điểm thẳng hàng,tức là Orient(p1, pi, pj) = 0 hay [pip1x = p[jp1x với p1x song song và cùng chiềudương với trục hoành Ta ký hiệu góc [pip1x là góc(pi) Trong trường hợp nàynếu|p1pi| < |p1pj| thì rõ ràng pi không thuộc bao lồi conv(P ) nên ta sẽ xóa điểmnày đi Ở hình 2.6 những điểm màu trắng là những điểm bị xóa còn những điểmmàu đen không bị xóa Các thuật toán 3, 4, 5 và 6 ở dưới đây được chỉnh sửa
từ những thuật toán trong [15]
Trang 26Hình 2.6
Ta dùng thuật toán Quicksort để sắp xếp các điểm trong tập P Trước tiên
ta trình bày hàm so sánh (compare), là một hàm con sẽ được gọi trong thuậttoán Quicksort, trình bày ở thuật toán 3 Thuật toán này dùng để so sánh haigóc(pi)và góc(pj)với hai điểmpi, pj bất kỳ và đánh dấu số 2 tại những điểm cầnxóa trong trường hợp thẳng hàng Nếu góc(pj) > góc(pi) hàm compare sẽ trả vềgiá trị -1, góc(pj) < góc(pi) trả về giá trị 1 và góc(pj) = góc(pi) trả về giá trị 0
Algorithm 3 Compare
Input: Điểm p 1 là điểm tận cùng bên dưới phải, hai điểm p i và p j bất kỳ với giả thiết p i 6= p j Output: Thứ tự của hai điểm p i và p j và trong trường hợp góc(p i ) = góc(p j ) thì đánh dấu điểm thích hợp để xóa.
Compare(p i , p j )
1 Gán a := Orient(p 1 , p i , p j ).
2 If ( a > 0) then return -1;
else if ( a < 0) then return 1;
else if |p1pi| < |p1pj| then đánh dấu điểm pi là 2, return 0;
else đánh dấu điểm pj là 2, return 0.
Trong hàm quicksort ta gọi một hàm nữa đó là hàm partition, hàm này cónhiệm vụ phân hoạch một tập hợp điểm bất kỳ thành hai phần Giả sử đầu vàocho tập A là một dãy các điểm bất kỳap, ap+1, , ar và x là một điểm được chọnngẫu nhiên trong A Để đơn giản ở thuật toán 4 ta chọn x bằng ar là phần tửcuối cùng của dãy Ta sẽ dùng điểm này để phân hoạch tập A Đầu ra của thuậttoán ta nhận được tập B có các phần tử bp, bp+1, , bi, bi+1, , br vẫn là các phần
tử của tập A nhưng có thứ tự sắp xếp khác Ở bước cuối cùng của thuật toán
ta có lệnh returni + 1 để hàm này trả về vị trí mới của điểm a r, lúc này điểma rkhông còn nằm ở vị trí cuối dãy mà được chuyển lên vị trí i + 1, tức là sau khiphân hoạch thì điểm ar của tập A bây giờ là điểm bi+1 của tập B Tập B được
Trang 27sắp xếp như sau: Những điểm b p , b p+1 , , b i có góc nhỏ hơn góc(b i+1 ) và nhữngđiểm bi+1, bi+2, , br có góc lớn hơn hoặc bằng góc(bi+1) Thuật toán 4 biểu diễnhàm patition này.
Gán i := i + 1 và đổi vị trí hai điểm a j , a i
3 Đổi chỗ hai điểm ai+1 và ar.
4 Return i + 1.
Thuật toán 5 trình bày việc sắp xếp các điểm {p s , p s+1 , , p t } của tập P = {p1, p2, , ps, ps+1, , pt, , pn}bất kỳ được thực hiện bằng cách gọi hàm patition
đã trình bày ở trên, hàm này trả về giá trị q, sau đó giá trị q được dùng để gọi
đệ qui trong hàm Quicksort
Algorithm 5 Thuật toán Quicksort(P, s, t)
Input: Cho P là tập bất kỳ p 1 , p 2 , , p s , p s+1 , , p t , , p n có nhiều hơn t − s + 1 điểm.
Output: Tập các điểm của P nhưng các điểm từ vị trí thứ s đến vị trí thứ t đã được sắp xếp lại theo thứ tự tăng dần của các góc tạo bởi chiều dương trục hoành và đoạn thẳng nối p1 với mỗi điểm đó,
p1 là điểm tận cùng bên dưới phải.
Bước 1 : Ta gọi hàm Quicksort(P, 1, n) để sắp xếp n điểm của tập P theo thứ tự