Mô tả kỷ thuật QuickHull

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 27 - 30)

Bước đầu tiên của thuật toán QuickHull tìm hai điểm cực biên: x là điểm xa nhất về bên phải và y là điểm xa nhất về bên trái của tập n điểm trong mặt phẳng. Khi đó bao lồi của tập n điểm được tạo ra từ bao lồi của tập các điểm bên phải ngặt [x, y] và tập các điểm bên phải ngặt [y, x].

Trong các điểm bên phải ngặt [x, y] tìm hai điểm cực biêna, b. ĐặtS là tập các điểm bên phải ngặt [a, b] (S có thể tập rỗng). Bây giờ ta tìm convS với hai điểm cực biêna, b của convS, bằng cách lấy một điểm c ∈ S sao cho điểm này xa nhất so với đường thẳng ab. c là điểm cực biên thứ ba, loại bỏ tất cả các điểm nằm trên hoặc trongMabc (loại trừa, b và chính điểmc)(theo Bổ đề 1.1). GọiA là tập các điểm ở bên phải ngặt[a, c] vàB là tập các điểm bên phải ngặt của [c, b], tiếp tục quá trình đó trên hai tập A và B (hình vẽ 2.3).

Hình 2.3 Nhận xét2.2.

Tập hợp các điểm có khoảng cách đến ab lớn nhất so với các điểm nằm ngặt về bên phải ab là các điểm nằm trên bao (biên) lồi.

− Output: Điểm cực biên c nằm ngặt về bên phải. Dùng thuật toán QuickHull tìm bao lồi trên (a, c) và (c, b).

Bây giờ ta ký hiệu: " + " để thay cho sự ghép nối các bao lồi để lấy các điểm cực biên. Thuật toán QuickHull tìm được convS là:

(a) + QuickHull(a, b, S) + (b)

2.3.2 Thuật toán QuickHull

Giả sử a, b là điểm cực biên, và S là tập hợp các điểm nằm bên phải ngặt

[ab]. Khi đó ta có hàm QuicHull(a, b, S)

1: if S = ∅ then return () (trở lại(a, b))

2: else

3: c ← điểm với khoảng cách lớn nhất từ ab. 4: A ← các điểm bên phải ngặt của [a, c]. 5: B ←các điểm bên phải ngặt của [c, b].

6: return QuickHull(a, c, A) + (c) + QuickHull(c, b, B). 7: end if.

Hàm này cho ta các điểm cực biên của tập{a, b} ∪S.

Nhận xét2.3. Trong thuật toán trên, thuật toán tìm:

A ← các điểm bên phải ngặt của [a, c1]

B ← các điểm bên phải ngặt của [c2, b]

trong đóc1, c2 là các điểm mút của đọan thẳng mà các điểm trên đó có khoảng cách lớn nhất đến ab. Như thế các điểm của S nằm trong hình thang ac1c2b bị loại bỏ(nhiều hơn các điểm trong M abc).

Ví dụ2.4. Trong mặt phẳng lấy tậpP = {p0, p1, p2, ...., p17, p18},(trong đó:

p8(3; 3), p9(2; 4), p10(1; 3), p11(−3; 5), p12(−2; 1), p13(−2; 2), p14(−4; 4), p15(−3; 0), p16(−5; 2), p17(−1; 1), p18(−1;−2) ). Dùng thuật toán QuickHull tìmconvP.

Trong tập các điểmp0, p1, ..., p18 củaP thìp2 là điểm xa nhất về bên phải(vì có hoành độ lớn nhất), và p11 là điểm cực biên thứ hai của convS (vì có tung độ lớn nhất).

Hình 2.4

Gọi: {p3, p5, p6, p7, p8, p9, p10} là tập các điểm bên phải ngặt [p2, p11],

và{p0, p1, p4, p12, p13, p14, p15, p16, p17, p18}là tập các điểm bên phải ngặt[p11, p2].

a) Tìm có các bước:

+ p8 là điểm có khoảng cách đến đường thẳng p2p11 là lớn nhất.

+ Không có điểm nào nằm bên phải [p2, p8].

+ Điểm p9 là điểm duy nhất nằm bên phải của [p8, p11], p9 là điểm có khoảng cánh xa nhất đến đường thẳng p8p11.

Đặt S = {p3, p5, p6, p7, p8, p9, p10}. Ta có: A= ∅

và B = {p9}. (adsbygoogle = window.adsbygoogle || []).push({});

QuckHull(p2, p11, S) = QuckHull(p2, p8,∅) +{p8}+QuckHull(p8, p11, B) = {p2, p8}+{p8}+{p8, p11, p9}

= {p2, p8, p11, p9}.

b)Tìm các điểm cực biên của tập điểm:{p0, p1, p4, p12, p13, p14, p15, p16, p17, p18}.

+ p16 là điểm có khoảng cách lớn nhất đến đường thẳng p11p2.

+ p14 là điểm duy nhất ở bên phải ngặt [p11, p16].

+ p0, p1, p18 ở bên phải ngặt [p16, p2].

Đặt S = {p0, p1, p4, p12, p13, p14, p15, p16, p17, p18}. Ta có: A = {p14},

B = {p0, p1, p15, p18}.

QuckHull(p11, p2, S) = QuckHull(p11, p16, A) +{p16}+QuckHull(p16, p2, B) = {p2, p8, p14}+ {p16}+QuckHull(p16, p2, B)

= {p2, p8, p14, p16}+QuckHull(p16, p0,∅) + {p0}+QuckHull(p0, p2,∅)

= {p2, p8, p14, p16}+{p16, p0}+{p0}+ {p0, p2}

= {p2, p8, p14, p16, p0, p2}.

Vậy tìm được các điểm cực biên của convP là:{p2, p8, p9, p11, p14, p16, p0}.

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 27 - 30)