Bao lồi
Bao lồi hai chiều
Định nghĩa
Đa giác lồi
Đa giác lồi là đa giác đơn giản mà tất cả các góc trong đều nằm trong khoảng \([0,\pi]\).
Bao lồi
Trên mặt phẳng, bao lồi của một tập hợp điểm là đa giác lồi nhỏ nhất chứa tất cả các điểm đó.
Định nghĩa chính xác: Với tập hợp \(X\) cho trước, giao của tất cả các tập lồi chứa \(X\) được gọi là bao lồi của \(X\).
Có thể hình dung như dùng một sợi dây chun bao quanh tất cả các điểm đã cho.
Bao lồi là đa giác có chu vi nhỏ nhất bao quanh tất cả các điểm đã cho. Nếu một đa giác lõm bao quanh tất cả các điểm, chu vi của nó chắc chắn không nhỏ nhất, như hình dưới. Theo bất đẳng thức tam giác, đa giác lồi luôn tối ưu về chu vi.

Thuật toán Andrew tìm bao lồi
Có hai phương pháp phổ biến là Graham scan và Andrew, ở đây chủ yếu giới thiệu thuật toán Andrew.
Tính chất
Độ phức tạp thời gian của thuật toán này là \(O(n\log n)\), với \(n\) là số lượng điểm, chủ yếu do bước sắp xếp các điểm theo hai khóa.
Quy trình
Đầu tiên, sắp xếp tất cả các điểm theo hoành độ tăng dần, nếu hoành độ bằng nhau thì so sánh tung độ.
Rõ ràng, điểm nhỏ nhất và lớn nhất sau khi sắp xếp chắc chắn nằm trên bao lồi. Vì là đa giác lồi, nếu đi ngược chiều kim đồng hồ từ một điểm, đường đi luôn "rẽ trái", nếu xuất hiện "rẽ phải" thì đoạn đó không thuộc bao lồi. Do đó, ta có thể dùng một ngăn xếp đơn điệu để duyệt vỏ trên và vỏ dưới.
Vì hướng quay của vỏ trên và vỏ dưới khác nhau, để ngăn xếp đơn điệu hoạt động đúng, ta duyệt tăng để tìm vỏ dưới, sau đó duyệt giảm để tìm vỏ trên.
Khi tìm vỏ, nếu phát hiện điểm sắp vào ngăn xếp (\(P\)) và hai điểm trên đỉnh ngăn xếp (\(S_1, S_2\), \(S_1\) là đỉnh) tạo thành hướng quay phải, tức là tích có hướng nhỏ hơn \(0\): \(\overrightarrow{S_2S_1}\times \overrightarrow{S_1P}<0\), thì loại bỏ đỉnh ngăn xếp, lặp lại kiểm tra cho đến khi \(\overrightarrow{S_2S_1}\times \overrightarrow{S_1P}\ge 0\) hoặc ngăn xếp chỉ còn một phần tử.
Thông thường không cần giữ các điểm nằm trên cạnh bao lồi, nên điều kiện "\(<\)" ở trên có thể thay bằng "\(\le\)", đồng thời điều kiện sau đổi thành "\(>\)".
Cài đặt
Cài đặt mã nguồn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
Theo đoạn mã trên, cuối cùng bao lồi có \(\textit{ans}\) điểm (mảng \(h\) có \(\textit{ans}+1\) phần tử, do lưu thêm điểm đầu), các điểm được sắp xếp ngược chiều kim đồng hồ. Chu vi là:
Thuật toán Graham scan
Tính chất
Tương tự Andrew, Graham scan cũng có độ phức tạp \(O(n\log n)\), chủ yếu do bước sắp xếp.
Quy trình
Đầu tiên, tìm điểm có tung độ nhỏ nhất (nếu bằng nhau thì lấy hoành độ nhỏ nhất), gọi là \(P\). Theo định nghĩa bao lồi, điểm này chắc chắn nằm trên bao lồi. Sau đó, sắp xếp tất cả các điểm còn lại theo thứ tự tăng dần của góc cực so với \(P\).
Tương tự Andrew, nếu đi ngược chiều kim đồng hồ trên bao lồi, mỗi bước đều là "rẽ trái". Cụ thể, với ba điểm liên tiếp \(P_1, P_2, P_3\) trên bao lồi, luôn có \(\overrightarrow{P_1 P_2} \times \overrightarrow{P_2 P_3} \ge 0\).
Dùng một ngăn xếp để lưu các điểm trên bao lồi, đầu tiên đẩy \(P\) vào ngăn xếp, sau đó lần lượt thử thêm từng điểm theo thứ tự góc cực. Nếu điểm mới vào ngăn xếp cùng hai điểm trên đỉnh tạo thành "rẽ phải", thì loại bỏ đỉnh ngăn xếp, lặp lại cho đến khi điều kiện thỏa mãn hoặc ngăn xếp chỉ còn một phần tử, rồi đẩy điểm mới vào.
Cài đặt mã nguồn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | |
Tổng Minkowski
Định nghĩa
Tổng Minkowski của hai tập điểm \(P\) và \(Q\) được định nghĩa là \(P+Q=\{a+b|a\in P,b\in Q\}\), tức là dịch chuyển mỗi điểm của \(P\) theo từng vector của \(Q\), tập hợp kết quả là \(P+Q\). Ở đây chỉ xét tổng Minkowski của bao lồi.
Ví dụ: Với \(P=\{(0,0),(-3,3),(2,1)\}\) và \(Q=\{(0,0),(-1,3),(1,4),(2,2)\}\),
Dịch \(P\) theo từng vector của \(Q\):
Dễ thấy hình mới cũng là một bao lồi:
Tính chất
-
Nếu \(P\), \(Q\) là tập lồi, thì \(P+Q\) cũng là tập lồi.
Chứng minh
Giả sử \(e,f\in P+Q\), tồn tại \(a,b \in P\), \(c,d\in Q\) sao cho \(e=a+c,f=b+d\), với mọi \(t\in[0,1]\):
\[ \begin{aligned} te + (1-t)f &= t(a+c)+(1-t)(b+d)\\ &=(ta+(1-t)b)+(tc+(1-t)d)\\ &\in P+Q. \end{aligned} \]Q.E.D.
- Nếu \(P\), \(Q\) là tập lồi, thì các cạnh của \(P+Q\) là kết quả nối các cạnh của \(P\), \(Q\) sau khi sắp xếp theo góc cực.
Chứng minh
Giả sử các cạnh của \(P\) và \(Q\) không có cạnh nào cùng độ dốc. Xoay hệ trục tọa độ sao cho một cạnh \(XY\) của \(P\) song song với trục \(x\) và nằm thấp nhất.
Khi đó, điểm thấp nhất của \(Q\) là \(U\), điểm thấp nhất và trái nhất của \(P+Q\) là \(A\).
Ta có \(\vec{A} = \vec{X} + \vec{U}\), nên \(A\) nằm trên biên \(P+Q\).
Tương tự, điểm thấp nhất và phải nhất của \(P+Q\) là \(B\) với \(\vec{B} = \vec{Y} + \vec{U}\), cũng nằm trên biên.
Do đó, \(\vec{AB} = \vec{XY} + \vec{U}\).
Nếu tiếp tục xoay, ta sẽ nhận được liên tiếp các cạnh của \(P+Q\).
Q.E.D.
Cài đặt
Dựa vào tính chất 2, ta sắp xếp các cạnh của \(P,Q\) theo góc cực, lấy \(P_1+Q_1\) làm điểm bắt đầu, sau đó dùng kỹ thuật trộn (merge) để lần lượt thêm các cạnh.
Độ phức tạp: \(O(n+m)\)
Cài đặt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
Bài tập ví dụ
Bài tập ví dụ [JSOI2018] Chiến tranh
Cho hai bao lồi \(P,Q\), dịch chuyển \(Q\) \(q\) lần, hỏi sau mỗi lần dịch chuyển có giao điểm với \(P\) không. \(1\le n,m\le 10^5,1\le q\le 10^5\).
Cài đặt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | |
Bao lồi ba chiều
Kiến thức cơ bản
Phép nghịch đảo tròn: Với tâm \(O\), bán kính \(R\), nếu đường thẳng qua \(O\) đi qua \(P,P'\), và \(OP\times OP'=R^{2}\), thì \(P\) và \(P'\) gọi là nghịch đảo nhau qua \(O\).
Quy trình
Các bước tìm bao lồi ba chiều:
- Đầu tiên, thực hiện nhiễu nhỏ để tránh trường hợp bốn điểm đồng phẳng.
- Với bao lồi đã biết, thêm một điểm \(P\), coi \(P\) là nguồn sáng, chiếu tia tới bao lồi, các mặt nhìn thấy và không nhìn thấy được phân tách bởi các cạnh.
- Xóa các mặt nhìn thấy, thêm các mặt mới tạo bởi các cạnh phân tách và \(P\). Lặp lại quá trình này. Theo Định lý Pick, công thức Euler (\(V−E+F=2\) với đa diện lồi), và phép nghịch đảo tròn, độ phức tạp \(O(n^2)\).1
Bài mẫu
Lặp lại quy trình trên để có đáp án.
Cài đặt mã nguồn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | |
Bài tập luyện tập
Tài liệu tham khảo & chú thích
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:OI-wiki
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply