Cấu trúc thuật toán tăng dần

Một phần của tài liệu Một số thuật toán tìm bao lồi của họ hữu hạn điểm trong mặt phẳng (Trang 32)

1: Giả sử H2 ←− Conv {p0, p1, p2}

2: for k = 3 to (n−1) do 3: Hk ←− conv { Hk−1 ∪pk }

4: and for

Trong đó H2 là tam giác hoặc đoạn thẳng, Hk là đa giác lồi.

Vấn đề là tìm conv{Q∪ {p}}, trong đóQlà đa giác lồi, p là một đỉnh. Xét hai trường hợp là p ∈ Q hay p /∈ Q.

Trường hợp 1: p∈ Q.

Nếu p nằm bên trái ngặt các cạnh của Q. Lúc đó conv(Q∪ {p}) = Q (Mệnh đề 1.8 Chương I).

Trường hợp 2: p /∈ Q.

Trong mục 2.4.3 ta xét cách tìm conv(Q∪ {p}). 2.4.3 Xác định bao lồi bằng hàm bên trái

Giả sử Q được xác định bởi các điểm cực biên {p0, p1, ...., pn−1}. Ta gọi pi

là điểm tiếp xúc của đường thẳng ppi nếu tất cả các điểm cực biên còn lại của

Q cùng nằm về bên phải ngặt hoặc trên (hoặc cùng nằm về bên trái ngặt hoặc trên) đoạn[p, pi].

− Theo [7] nếu pi và pj là hai đỉnh tiếp xúc (i < j) thì các điểm cực biên của conv(Q∪ {p}) là p0, ..., pi, p, pj, ..., pn−1.

− Theo[7], pi là điểm tiếp xúc nếu:

+ pnằm về bên trái hẳn hoặc trên [pi−1, pi] và

+ pnằm về bên phải hẳn hoặc trên [pi, pi+1].

− Theo[7], pj là điểm tiếp xúc nếu:

+ pnằm về bên phải hẳn hoặc trên [pj−1, pj] và

+ pnằm về bên trái hẳn hoặc trên [pj, pj+1]. Thuật toán tìm tiếp điểm thứ nhất:

1: for i = 0 to n−1 do

2: if p là bên trái hoặc trên[pi−1, pi], p bên phải hoặc trên [pi, pi+1] then

3: pi là tiếp điểm 4: end if

5: end for

Thuật toán tìm tiếp điểm thứ hai: 1: for j = 0 to n−1 do

2: if p là bên phải hoặc trên [pj−1, pj], p bên trái hoặc trên [pj, pj+1] then

3: pj là tiếp điểm 4: end if

5: end for

Nhận xét2.4. Qúa trình thực thi thuật toán tăng dần ta thấy có thể tìm bao lồi trong không gian ba chiều với các điểm là hữu hạn, vì trong qúa trình tìm các tiếp điểm có thể thực hiện được trong không gian ba chiều.

p1(1;−2), p2(2; 3), p3(−2; 2), p4(−1; 1), p5(5;−1), p6(1; 2), p7(3; 1), p8(4; 5), p9(4; 3), p10(−4; 6), p11(3; 3), p12(−2; 4), p13(−1; 5), p14(−4; 2), p15(−5; 1), p16(−3; 3), p17(−2;−2), p18(−3;−3), p19(−1;−2), p20(−3;−4)). Dựa vào thuật toán tăng dần tìm convS.

Hình 2.7

− Lấy ba điểm p1, p2, p3, bao lồi ban đầu tạo thành là conv{p1, p2, p3}. Các điểm p4, p6 nằm trong bao lồi, bị xóa. (adsbygoogle = window.adsbygoogle || []).push({});

−Xét tiếp điểmp5(nằm ngoài bao lồi). Tìm conv{p1, p2, p3} ∪ {p5}, bằng cách xét điểm p2 vàp1 là các tiếp điểm hay không.

+ Xét tại điểm p1: với p5 ở bên trái [p3, p1] và p5 ở bên phải [p1, p2]. Do đó

p1 là một tiếp điểm của bao lồi với điểmp5.

+ Xét tại điểm p2: với p5 ở bên phải [p1, p2] và bên trái [p2, p3]. Do đó p2 là một tiếp điểm của bao lồi với điểm p5.

Bao lồi được tạo thành là conv{p1, p5, p2, p3}, và điểm p7 nằm trong bao lồi bị xóa.

− Xét điểm p8, thuật toán tìm bao lồi giữa conv{p1, p5, p2, p3} ∪{p8}.

+ p5 là tiếp điểm: vì p8 ở bên trái [p1, p5] và ở bên phải [p5, p2].

Bao lồi được tạo thành là conv{p1, p5, p8, p3,}, các điểmp2, p9, p11nằm trong bao lồi nên bị xoá.

− Xét điểm p10, thuật toán tìm bao lồi giữa conv{p1, p5, p8, p3} ∪ {p10}.

+ p8 là tiếp điểm: vì p10 ở bên trái [p5, p8] và ở bên phải [p8, p3].

+ p3 là tiếp điểm: vì p10 ở bên phải [p8, p3] và ở bên trái [p3, p1].

Bao lồi tạo thành là conv{p1, p5p8, p10, p3}, các điểm p12, p13 nằm trong bao lồi bị xóa.

− Xét điểm p15: thuật toán tìm bao lồi giữa conv{p1, p5, p8, p10} ∪ {p15}.

+ p10 là tiếp điểm: vì p15 ở bên trái [p8, p10] và ở bên phải [p10, p3] + p1 là tiếp điểm: vì p15 ở bên phải [p3, p1] và ở bên trái [p1, p5].

Bao lồi tạo thành là conv{p1, p5p8, p10, p15}, các điểm p14, p16, p3 nằm trong bao lồi bị xóa.

− Xét điểm p20: thuật toán tìm bao lồi giữa conv{p1, p5, p8, p10, p15} ∪ {p20}.

+ p15 là tiếp điểm: vì p20 ở bên trái [p10, p15] và ở bên phải [p15, p1].

+ p5 là tiếp điểm: vì p20 ở bên phải [p1, p5] và ở bên trái [p5, p8].

Bao lồi tạo thành là conv{p5, p8, p10, p15, p20}, các điểmp18, p17, p19, p1 nằm trong bao lồi bị xóa.

Vậy qua một số hữu hạn bước, thuật toán tìm được bao lồi là conv{p5, p8, p10, p15, p20}.

Nhận xét2.5. Trong qúa trình dùng bốn thuật toán Khờ khạo, Gói quà tặng, QuickHull, Tăng dần để tìm bao lồi của hữu hạn điểm trong không gian hai chiều ta thu được kết quả sau:

Thuật toán Khờ khạo Gói quà tặng QuickHull Tăng dần Mở rộng

2.5Thuật toán song song tìm bao lồi

Chúng tôi đã nghiên cứu một số thuật toán tìm bao lồi của họ hữu hạn điểm trong mặt phẳng (Mục 2.2, 2.3 và 2.4). Các thuật toán này , có thuật toán tìm được bao lồi của họ hữu hạn điểm trong không gian ba chiều (xem 8). Tuy nhiên tìm bao lồi khi cho số điểm rất lớn, thì các thuật toán thực hiện với thời gian lâu hơn. Bài toán đặt ra là cần đến song song hoá các thuật trong những trường hợp này, để rút ngắn thời gian cho từng thuật toán.

2.5.1 ý tưởng song song hoá

Xét S là tập n+ 1điểm trong mặt phẳng. Giả sử trong S tìm được hai điểm cao nhất ph và thấp nhất pl, khi đó đoạn thẳng plph chia tập S thành hai tập A

(là những điểm nằm hẳn bên phải plph) và B (là những điểm nằm hẳn bên trái

plph). ý tưởng song song hoá thuật toán là tìm đồng thời bao lồi của A và B

(bằng các thuật toán đã biết). Từ đó rút ra được convS.

2.5.2 Thuật toán song song (adsbygoogle = window.adsbygoogle || []).push({});

Trong mặt phẳng lấy tập S = {p0, p1, ..., pn}. Khi đó thuật toán song song tìm convS(về mặt lý thuyết) như sau:

Bước 1: Tìm điểm thấp nhất giả sử pl, điểm cao nhất giả sử ph của S. Bước 2: Trong S tìm các điểm bên phải ngặt của [pl, ph], giả sử các điểm là

{a1, a2, ..., ak−1}.

Trong S tìm các điểm bên trái ngặt [pl, ph], giả sử các điểm là {b1, b2, ..., bt−1}.

Đặt A = {a0, a1, ..., ak}, với a0 := pl, ak := ph. B = {b0, b1, ..., bt}, với b0 := ph, bt := pl

Bước 3: Tìm đồng thờiconvAvàconvA. Giả sử các điểm cực biên của convA

là {q0, q1, ..., qm} và các điểm cực biên của convB là {qm+1, qm+2, ..., qr}, với q0 := a0, qm := qh, qm+1 := qh, qr := ql.

Thì {q0, q1, q2, ..., qm, qm+2, ..., qr−1} là các điểm cực biên của convS.

Nhận xét2.6. Trong bước 3) để tìm convAvà convB ta có thể dùng các thuật toán: Khờ khạo tìm điểm cực biên, Gói quà tặng, QuickHull, Tăng dần...

Ví dụ 2.6. Trong mặt phẳng lấy tập S = {p0, p1, p2, ..., p29, p25}, (trong đó

p0(0;−1), p1(1;−1), p2(2;−2), p3(3;−1), p4(5;−3), p5(4; 0), p6(4; 1), p7(1;−5), p8(1; 1), p9(1; 4), p10(1; 6), p11(2; 3), p12(1; 5), p13(0; 2), p14(−1; 3), p15(−1; 4), p16(−2; 6), p17(−3; 4), p18(−4; 4), p19(−4; 2), p20(−5;−1), p21(−2; 1), p22(−4;−3), p23(−1;−3), p24(−2;−4), p25(0;−4) ). Dùng thuật toán song song tìmconvS.

Vì p7 là điểm có tung độ bé nhất nên p7 là điểm thấp nhất, và p16 là điểm có tung độ lớn nhất nên p16 là điểm cao nhất.

Thì: A = {p7, p0, p1, p2, p3, p4, p5, p6, p8, p9, p10, p11, p12, p13, p14, p15, p16} là các điểm nằm bên phải hẳn của đường thẳngp7p16,

và B = {p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p7} là các điểm nằm bên trái hẳn của đường thẳng p7p16.

Hình 2.9

∗ Dùng thuật toán Gói quà tặng tìm convA và convB đồng thời (xem cách tìm ở mục2.2.2), ta tìm được các điểm cực biên của convAlà:{p7, p4, p6, p10, p16}

và các điểm cực biên của convB là: {p16, p18, p20, p22, p24, p7}. Vậy các điểm cực biên cần tìm của convS là:

{p7, p4, p6, a10, p16, p18, p20, p22, p24}.

Ví dụ 2.7. Với giả thiết như trong ví dụ 2.4 dùng thuật toán song song tìm convP.

Vìp2 là điểm có tung độ bé nhất nênp2 là điểm thấp nhất, vàp11 là có tung độ lớn nhất nên p11 là điểm cao nhất.

∗ Tìm các điểm bên phải hẳn của đường thẳng p2p11.

Thì: A = {p2, p3, p5, p6, p7, p8, p9, p10, p11} là các điểm nằm bên phải hẳn của đường thẳng p2p11,

và B = {p0, p1, p2, p4, p13, p11, p14, p15, p16.p17, p18} là các điểm nằm bên trái hẳn của đường thẳngp2p11.

∗Dùng thuật toán QuickHull tìm convAvà convB đồng thời(xem cách tìm ở mục 2.3.2), ta tìm được các điểm cực biên của

convA là {p2, p8, p9, p11},

và convB là{p11, p14, p16, p0, p11}.

Vậy các điểm cực biên cần tìm của convP là:

kết luận 1. Các kết quả chủ yếu luận văn đã thu được:

1.1. Trình bày các thuật toán tìm bao lồi của họ hữu hạn điểm: Khờ khạo tìm điểm cực biên, Gói quà tặng, QuickHull, Tăng dần. Lấy ví dụ minh họa từng thuật toán.

1.2. Đề xuất (về mặt lý thuyết) một thuật toán song song tìm bao lồi của họ hữu hạn điểm trong mặt phẳng và lấy các ví dụ minh hoạ. (adsbygoogle = window.adsbygoogle || []).push({});

2. Những vấn đề tiếp tục nghiên cứu:

2.1. Nghiên cứu ứng dụng tách hai hai tập lồi của họ hữu hạn điểm trong mặt phẳng, và trong không gian nhiều chiều.

2.2. Dùng ý tưởng của các thuật toán Gói quà tặng, QuickHull, Tăng dần tìm bao lồi của họ hữu hạn điểm trong không gian nhiều chiều.

Tài liệu tham khảo

Tiếng Việt

[1] Phan Thành An (2005), Giáo án bài giảng môn hình học tính toán, Viện Toán học.

[2] Nguyễn Hữu Điển (2005), Một số vấn đề về thuật toán, Nhà xuất bản Đại học và Trung học chuyên nghiệp Hà nội.

[3] Nguyễn Hữu Điển (2005), Một số chuyên đề Hình học tổ hợp, Nhà xuất bản Giáo Dục.

[4] Hà Mạnh HùngvàNguyễn Đức Thành(2006), Thuật toán Graham tìm bao lồi cho một tập hữu hạn điểm trong mặt phẳng, chuẩn bị gửi đăng tạp chí Khoa học Đại học Vinh.

[5] Đỗ Văn Lưu và Phan Huy Khải (2000), Giải tích lồi, Nhà xuất bản Khoa học và Kỷ thuật Hà nội.

Tiếng Anh

[6] J. JáJá(1992), An Introduction to Parallel Algorithms, Addison-Wesley Publishing Pompany.

[7] V. L. Klee (1963), Convexity, American Mathematical Society, Prov- idence Rhode Island.

[8] J. O’Rourke (1998), Computional Geometry in C, Camberidge Uni- versity Press, Second Edition.

[9] J. V. Tiel (2004), Convex Analysis, Roval Netherlands Metcorolovical Institute.

Một phần của tài liệu Một số thuật toán tìm bao lồi của họ hữu hạn điểm trong mặt phẳng (Trang 32)