Thắc mắc về thuật toán VF

Xin chào thầy cùng các anh chị,

Em có đôi chút thắc mắc về thuật toán VF như sau, mong thầy và các anh chị giải đáp để lúc thi chúng ta thống nhất với nhau.

Theo như bài tập cũ của thầy, chúng ta có 4 thuộc tính trong 1 quan hệ (A1, A2, A3 và A4). Thầy cũng đã chỉ định thuộc tính A1 là khóa chính, do đó trong ma trận ái lực thuộc tính (AA) chỉ còn 3 dòng 3 cột (loại dòng A1 và cột A1). Tuy nhiên, khi bước sang thuật toán BEA để tìm ma trận CA chúng ta cần phải tính giá trị Cont cho các trường hợp chèn, trong công thức tính Cont thì có công thức tính Bond.
Trong công thức tính Bond(Ai, Aj) = Σ aff(Az, Ai).aff(Az,Aj) với z chạy từ 1 đến n (trong bài này thì n=4). Em muốn hỏi là từ đầu chúng ta đã loại A1 thì z phải chạy từ 2 hay từ 1, nếu từ 1 thì chúng ta nên tạo ma trận AA có 4 dòng 4 cột vì nó sẽ phục vụ cho việc tính Bond nhanh hơn.
Và em cũng muốn hỏi thêm là thật ra chúng ta có phải loại A1 ra ngay từ đầu không? vì có 1 vài bài giải đến tận bước triển khai thuật toán VF mới loại khóa ra, còn trong lúc xây dựng ma trận CA thì không bỏ khóa mà xét nó như các thuộc tính bình thường khác.

Kính mong thầy cùng các anh chị giải đáp khúc mắc trên của em, nó cũng ảnh hưởng đến bài thi của mình. Xin chân thành cảm ơn thầy cùng các anh chị!

Thân chào!

Chào thầy và các bạn!

Linh cũng có 1 vài khúc mắc giống như các bạn ở trên. Linh xin tóm lại 2 câu hỏi chính sau:
1. A1 là thuộc tính khóa chính, do đó ta phải loại ra khi tính toán. Vấn đề là loại ra từ giai đoạn nào? Lúc tính ma trận AA, CA hay khi tìm điểm chia?
2. Trong phần tính ma trận CA, giá trị n trong công thức tính bond chạy từ 1 or 2?

Sau khi đọc lại lý thuyết, suy nghĩ 1 tí và làm 1 vài bài tập, Linh nhận thấy:
1. A1 là thuộc tính khóa chính (đề bài cho trước) thì tất nhiên phải có mặt trong từng phân mảnh –> nên loại ra từ lúc tính AA luôn, không cần phải đợi tới lúc tìm điểm chia (mắc công tính toán <!–emo&:)–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/smile.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘smile.gif’ /><!–endemo–> )
2. khi loại thuộc tính khóa –> cthức bond cho z chạy từ 2 vì cột thứ 1 (A1) đã loại ra. Điều này hoàn toàn không ảnh hưởng đến kết quả tính toán cuối cùng.

Có bạn nào hok tán thành thì reply lại để chúng ta cùng thảo luận nhé!

Thân.

Chào chị Phượng,

z chạy từ 1 đến n, trong đó n là số thuộc tính chứ không phải là số Site đâu chị. Em muốn hỏi thầy và các anh chị là ngay từ đầu ta đã loại A1 ra, vậy có phải l2 nên cho n chạy từ 2 đến n không?

Ở thuật toán VF, ta tìm các tập AQ trước, kết quả như sau:
AQ(q1)= {A2,A3}
AQ(q2)= {A2,A3}
AQ(q3)= {A4}
AQ(q4)= {A3}

Với 2 tập TA={A2} và BA={A3,A4}, ta sẽ có:
TQ={}=========>CTQ=0
BQ={q3,q4}=====>CBQ=50
OQ={q1,q2}=====>COQ=45
Vậy tính được CTQ*CBQ-COQ^2=0-45^2=-2025

Với 2 tập TA={A2,A3} và BA={A4}, ta sẽ có:
TQ={q1,q2,q4} ====> CTQ=30+15+10=55
BQ={q3}========> CBQ=40
OQ={}=========> COQ= 0
Vậy tính được CTQCBQ-COQ^2=5540-0=2200

Kết quả của thầy sai tại vì hôm đó lúc đầu thầy tính AQ sai, thầy không loại bỏ A1 ra khỏi các AQ(q2) và AQ(q3), lúc sau có 1 anh phát biểu nên thầy đã chỉnh lại rồi.

Còn vấn đề thắc mắc của em có anh chị nào giải đáp giúp em không???

Chào chị Linh,

Em rất đồng ý với câu trả lời của chị, và em còn rút ra 1 điều: nếu như A1 đã không xuất hiện trong ma trận AA cũng như không cần trong lúc tính giá trị Bond vậy thì tại sao từ đầu không loại thuộc tính A1 luôn. Khi đó, có nghĩa là ma trận đầu vào Use ta cũng không cần cột A1 nữa. Chỉ cần sau khi phân mảnh xong chúng ta nhớ là đưa A1 vào mỗi mảnh là Ok. Các anh chị và thầy góp ý nhé, để ôn tập trước khi thi nữa.

Thân chào,

Nguyễn Quốc Huy

Chào chị Phượng,

Em thấy có chút gì đó không ổn, tại vì trong ví dụ trong bài giảng của thầy khi thực hiện tạo ma trận AA và ma trận CA đều xét mọi thuộc tính. Do đó, nếu như ta quyết định chọn A1 là khóa thì khi thực hiện tính giá trị cont thì n cũng không nên chạy từ 1, vì ma trận CA là ma trận ái lực gom cụm, tức là gom cụm lại các thuộc tính trong ma trận AA, mà ma trận AA ta đã loại A1 rồi. Em hy vọng thầy và các anh chị giải đáp sớm vì bài này có trong nội dung thi nên em muốn chắc chắn cách giải.

Chào chị Thà,

Như chị đã thấy, A1 A2 A3 hay A4 tất cả chỉ đều là tên tượng trưng ánh xạ cho 1 thuộc tính trong quan hệ của mình thôi nên việc chọn ai là khóa chính cũng được cả, chỉ cần lúc đó ta ánh xạ tên khóa chính với A? mà ta muốn.

Trong phần tính ma trận CA, theo thuật toán BEA thì không quan trọng là đặt ai trước ai. Ta chỉ đơn giản là lấy lần lượt các thuộc tính đặt vào và tính toán thôi. Ví dụ có 4 thuộc tính B1 B2 B3 B4 B5. Đầu tiên ta lây ra thuộc tính B1 và đặt nó vào ma trận CA thì nó chỉ có duy nhất 1 cách sắp xếp, tiếp theo cứ lấy B2, lúc này sẽ có 2 vị trí có thể xảy ra là B1 B2 hay B2 B1, mà ta tính được giá trị cont cho 2 vị trí này như nhau nên ta cứ chọn B1 B2 cho đẹp, đó là lý do thầy chọn trước B1 B2 cho khỏe. Khi chị sắp tiếp B3 vào thì lúc đó mới phải tính toán cụ thể.

P.S: Hic, sao không thấy thầy vô giải đáp thắc mắc của em vậy kìa? Mí anh chị coi rồi giải đáp và góp ý thêm nha. Xin chân thành cảm ơn!

Theo mình hiểu thì bond(Ax,Ay)=Tổng(aff(Az,Ax)aff(Az,Ay) với z chạy từ 1 –>n (n là số site S, theo bài tập Thầy cho thì ta có 3 site S1,S2,S3 nên n=3). Vì A1 là khóa nên trong quá trình tính toán mình bỏ A1 đi, nên ma trân AA chỉ còn 3 thuộc tính A2,A3,A4, khi tính bond(Ax,Ay) thì z sẽ chạy từ 2–>4(vì đã bỏ mất A1 rồi). Mình hiểu như vậy không biết đúng không, mong các bạn góp ý.
Mình cũng có một thắc mắc khi phân mảnh dọc tập thuộc tính trong ma trân CA, trong phần điểm chia ma trân CA thành 2 tập TA={A2,A3}, BA={A4}, mình tính dựa vào ma trận USE va ACC thì TQ={q1,q2,q4}; BQ={q3}; OQ=rỗng, nhưng theo kết qủa của Thầy là -1625 thì TQ ={q4}; BQ={q3}; OQ={q1,q2}. Bạn nào hiểu rõ phần này giải thích giúp mình.

Vậy chắc mình sai rồi, mình ghi trong bài n là số site <!–emo&:rolleyes:–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/rolleyes.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘rolleyes.gif’ /><!–endemo–> còn phần VF bạn nghĩ giống mình, cũng yên tâm được tí, bạn cứ làm bài thi theo Thầy hướng dẫn đi, là bỏ A1 ngay từ đầu nếu A1 là khóa.

Chao ban Huy

Minh thấy khi thực hiện tạo ma trận CA tính giá trị cont thì n chạy từ 2 thì kết quả đúng như bài giải của thầy, nên nghĩ là không chọn n =1 vì đã loại khóa chính A1, hỏng biết có đúng không?

Xin chào thầy cùng các anh chị,

Em muốn hỏi:

  1. Theo như bài tập cũ của thầy, chúng ta có 4 thuộc tính trong 1 quan hệ (A1, A2, A3 và A4). Thuộc tính A1 là khóa chính, dưạ trên cơ sở nào hay do thầy giả sử.
  2. Trong phần tính CA, thầy giả sử ma trận CA đã được bố trí 2 cột đầu tiên A2 và A3. Vậy nếu giả sử 2 cột đầu tiên là A2 và A4 thì có được không ? và kết quả CA có khác ?

Mong thầy và các anh chị giải thích giúp!

Mình xin chân thành cảm ơn.