Thuật toán tìm kiếm phụ thuộc tối tiểu vế phải

Một phần của tài liệu Tài liệu Luận văn tốt nghiệp: Tiếp cận lý thuyết tập thô do Z.Pawlak pdf (Trang 79 - 81)

3.3. Thuật toán kiểm định và tìm kiếm phụ thuộc

3.3.3.Thuật toán tìm kiếm phụ thuộc tối tiểu vế phải

Một phụ thuộc X →→Y được gọi là tối tiểu vế phải và ký hiệu X→→minY nếu với mọiY0 ⊂Y,X →/→Y0. Ta đã biết rằng, nếu X →→Y thìY =Y1∪Y2∪ · · · ∪Yn

với X→→minYi với mọi 1 ≤ i ≤ n. Vì vậy, trong phần này chúng tôi chỉ đặt vấn đề tìm kiếm tất cả các phụ thuộc tối tiểu vế phải với vế trái X là một tập con cho trước các thuộc tính.

Thuật toán chúng tôi sắp đề nghị sử dụng một phần ý tưởng của Thuật toán Tane [25] được các tác giả này thiết kế nhằm tìm các phụ thuộc hàm không tầm thường dạng X\ {c} → c. Cụ thể, chúng tôi sẽ tìm các tập con Y ⊆ A thoả mãn

X→→minY theo thứ tự tăng dần của Card(Y). Nghĩa là, việc tìm kiếm vế phải của phụ thuộc xuất phát từ họ các tập có một phần tử, tập có hai phần tử ...

GọiLi là họ các tập thuộc tínhY có kích thướcivà có khả năng thoảX →→Y. Vì X→→minY thì X∩Y =∅ nên chúng ta khởi tạo L1 :={{a} | a ∈A\X}. Hơn nữa, nếu Y ∈ Li và X→→minY thì Y không thể là tập con của tập Y0 ∈ Lj với

j > i mà X→→minY0, nói cách khác, Y sẽ không tham gia vào việc xây dựng họ

Lj, với mọij > i. Vì vậy ở đây chúng tôi dùng thêm họ Mi lưu các tập Z ∈Li mà

X →/→Z và xây dựng họLi+1 dựa vàoMi. Cụ thể, sau khi tìm tất cả các phụ thuộc

X→→minY với Y ∈ Li, chúng ta xây dựng Li+1 bằng cách lấy hợp hai tập bất kỳ

Y1, Y2 ∈Mi, nếu hợp này cho ta một tập có i+ 1 phần tử thì đưa nó vào Li+1. Rõ ràng, ban đầu chúng ta cần khởi tạo Mi bằng Li, và sau đó mỗi khi có một phụ thuộc X →→Y đúng với Y ∈Li thì loạiY khỏi Mi.

Cuối cùng, nếu Z = A\(X ∪Y) thì từ X →→ Y ta cũng có X →→ Z và

Card(Y) + Card(Z) = Card(A\X). Vì vậy quá trình tìm kiếm của chúng tôi chỉ diễn ra trong các họ Li với i≤Card(A\X)/2.

Thuật toán 3.3. Tìm kiếm tất cả phụ thuộc tối tiểu.

Input: Hệ thống thông tin A= (U, A), Tập conX ⊆A.

Output: Tất cả phụ thuộc X→→minY. Method: 1. i:= 1; 2. L1 :={{a} |a ∈A\X}; 3. While i≤Card(A\X)/2do 4. Mi :=Li; 5. ForY ∈Mi do 6. If X →→Y then 7. Output X→→minY; 8. Mi :=Mi\ {Y}; 9. EndIf; 10. EndFor; 11. Compute_Li+1; 12. i:=i+ 1; 13. EndWhile; Proc Compute_Li+1 1. Li+1 :=∅; 2. For X, Y ∈Mi, X 6=Y do 3. Z :=X∪Y; 4. IfCard(Z) = i+ 1 then 5. Li+1 :=Li+1∪ {Z}; 6. EndIf; 7. EndFor;

EndProc Compute_Li+1;

Độ phức tạp tính toán của thuật toán này được xác định bởi vòng lặp While ở 3. Tại mỗi bước của vòng lặp, chúng ta xét tất cả các phần tử của Mi và kiểm tra phụ thuộc, sau đó tính Li+1 theo Mi. Chú ý rằng Card(Mi) ≤ Ci

k (Ci

k là tổ hợp k

chập iphần tử, với k = Card(A\X)). Mặt khác, độ phức tạp của thuật toán kiểm tra phụ thuộc là O(nlogn+

m

X

i=1

x6i), còn độ phức tạp của thủ tục Compute_Li+1

là O(C2

Card(Mi)) =O(Card(Mi)2). Vì vậy độ phức tạp tính toán của Thuật toán 3.3 trong trường hợp xấu nhất là O(

k/2 X i=1 Cki ×(nlogn+ m X i=1 x6i)) = O(2k/2 ×(nlogn+ m X i=1

x6i)). Trong đó, k = Card(A\X), n = Card(U), m là số lớp tương đương của

IN D(X) và xi là lực lượng của lớp tương đươngVi, 1≤i≤m.

Một phần của tài liệu Tài liệu Luận văn tốt nghiệp: Tiếp cận lý thuyết tập thô do Z.Pawlak pdf (Trang 79 - 81)