Khái niệm link

Một phần của tài liệu Bài toán tìm đường đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu (Trang 33 - 36)

Cho đa giác đơn điệu PQ. Xét hai đ-ờng gấp khúc XY trên đa giác PQ là X = P và Y = Q cóchung đỉnh đầu a và đỉnh cuối b. Đ-ờng gấp khúc

X các đỉnh sắp xếp cùng chiều kim đồng hồ, Y có các đỉnh sắp xếp ng-ợc chiều kim đồng hồ. Thực hiện FQ(X ,Y ), ta có X~ và Y~.

B-ớc 0 Đặt Q*:= Q1; i := 1;

B-ớc 1 While Q* không là bao lồi tiền vi phạm do

Định nghĩa 3.2.1 (Xem [9]) Link nối hai đ-ờng X và Y là đoạn thẳng [u*,v*] thoã mãn điều kiện u*X~ và v*Y~ và mọi đỉnh của X~\{u*} nằm bên trái đ-ờng thẳng u*v* và Y~\{v*} F =, (F là miền mặt phẳng giới hạn bởi < u*v*, X~, pk+1pr >).

T-ơng tự ta cũng có khái niệm link của đ-ờng gấp khúc XY trong đa giác đơn điệu XY tr-ờng hợp X = < p0, p1, ..., pn-1 > có các đỉnh sắp xếp ng-ợc chiều kim đồng hồ và Y = < q0, q1, ..., qm-1 > có các đỉnh sắp xếp cùng chiều kim đồng hồ.

Xét bài toán tìm link trong tr-ờng hợp X có các đỉnh sắp xếp cùng chiều kim đồng hồ.

3.2.2. Thuật toán tìm link(Xem [5])

Mô tả thuật toán

Giả sử X~= < p,0, p1,, ..., ps,> và Y~= < q,0, q1,, ..., qt,>, trong đó 1sn-2 và 1tm-2. Chúng ta đi tìm link theo sự tăng dần từ những đỉnh đầu tiên của X~và Y~rồi đến những điểm kế tiếp.

Cụ thể, bắt đầu với hai đỉnh pi := p’0, qj := q’0, ta xét link tạm [u*,v*] := [p’i, q’j] ta kiểm tra tất cả các đỉnh của X~\{u*} xem có tồn tại đỉnh thuộc bên phải u*v* (nếu có thì gọi đó là vi phạm X~). Nếu tồn tại vi phạm X~ thì ta bỏ đỉnh p’i và tiếp tục với ii+1, gán lại u* := p’i.

Tiếp tục quay lại quá trình kiểm tra các đỉnh X~\{u*} so với link tạm [u*

,v*

] vừa thiết lập và tiếp tục nh- vậy đến lúc không còn đỉnh vi phạm nữa. Khi không tồn tại đỉnh nào của X~ vi phạm nữa thì ta sẽ kiểm tra các đỉnh của Y~. Nếu không tồn tại đỉnh nào của Y~\{v*} thuộc vào F thì [u*,v*] là đ-ờng link cần tìm.

Ng-ợc lại, ta có đỉnh của Y~\{v*} thuộc vào F (gọi là vi phạm Y~) thì ta bỏ đỉnh q,j và tiếp tục với jj+1(gán lại v* :=q’j).

Bây giờ ta đ-ợc link tạm [u*,v*] mới và quay lại sự kiểm tra nh- ban đầu đối với sự vi phạm X~ rồi vi phạm Y~ đến khi nào đồng thời không còn vi phạm

X~và Y~thì dừng lại. Và ta nhận đ-ợc [u*,v*] là đ-ờng link của X Y.

Thuật toán 3.2.1 Link(X ,Y )

3.3. Thuật toán chính

Giả sử Q* và [u*,v*] lần l-ợt là bao lồi tiền vi phạm và link của đ-ờng gấp khúc cùng chiều (t-ơng ứng ng-ợc chiều) kim đồng hồ X đối với Y ng-ợc chiều (t-ơng ứng cùng chiều) kim đồng hồ.

Khi đó ta gọi:

- TC(X ) là biên trái (t-ơng ứng biên phải) của bao lồi Q* lấy từ đỉnh a

đến u*.

- TCL(X ,Y ) là việc đi tìmTC(X ) và link [u*,v*] giữa X Y .

(Xem [5])

Quy -ớc:Nếu [u*,v*], (u*:= pk ; v*:= qt) là link của X = < ap0, p1,..., pn-1b > và Y = < aq0, q1, ..., qm-1b > trong đa giác đơn điệu XY thì đ-ờng gấp khúc

B-ớc0 Thực hiện FQ(X ,Y ). Giả sử

X~= < p,0, p1,, ..., ps,>; Y~= <q,0, q1,, ...,qt,>

B-ớc1 u* := p,0; v* := q,0; i := 0; j := 0;

B-ớc 2 While [u*,v*] không phải link do While [u*,v*] vi phạm X~ do

ii+1; u* :=pi,; (adsbygoogle = window.adsbygoogle || []).push({});

While [u*,v*] vi phạm Y~ do

< u*,v*, ..., b > t-ơng ứng là [u*,v*]< qt, qt+1, ..., qm-2, b> và đ-ờng gấp khúc < u*, ..., b > t-ơng ứng là < u*, pk+1, ..., pn-2, b >.

Một phần của tài liệu Bài toán tìm đường đi ngắn nhất giữa hai đỉnh trong đa giác đơn điệu (Trang 33 - 36)