2.2.1 Thuật toán Nested – Loop.
o Tƣ tƣởng của thuật toán.
Để tìm kiếm tất cả các phần tử ngoại lai dựa trên khoảng các DB(p, D) trên tập dữ liệu lớn, nằm ở bộ nhớ ngoài, thuật toán NL chia tập dữ liệu thành các khối sử dụng các vòng lặp lồng nhau để tìm kiếm. Cụ thể, giả sử có một bộ nhớ trung gian cỡ b% tập dữ liệu. Tƣ tƣởng thuật toán chia bộ nhớ thành hai phần gọi là mảng A và mảng B. Mỗi mảng cỡ b/2% cỡ của tập dữ liệu. Chia tập dữ liệu thành n=[2*100/b] khối để mỗi khối có thể đƣợc chứa trong mỗi mảng của bộ nhớ.
Đầu tiên, đọc một khối vào mảng A, với mỗi đối tƣợng O trong mảng A, thuật toán lƣu lại số lƣợng các đối tƣợng thuộc S(o). Việc tính toán sẽ kết thúc cho một đối tƣợng cụ thể ngay khi số lƣợng các đối tƣợng S(o) vƣợt quá M và thông báo O không phải là phần tử ngoại lai. Tiếp theo, đọc lần lƣợt các khối còn lại vào trong mảng B. Với mỗi đối tƣợng O thuộc mảng A chƣa đƣợc thông báo là không ngoại lai và các
27
đối tƣợng q thuộc khối nằm trong mảng B. Chúng ta sẽ tiến hành tính toán khoảng cách d(o,q) để xem xét q có là lân cận thuộc S(o) hay không. Khi số lƣợng của S(o) lớn hơn M thì thông báo P không ngoại lai. Ngƣợc lại sau khi thực hiện tính toán với tất cả khối còn lại mà số lƣợng S(o) ≤ M thì thông báo O là ngoại lai.
Bằng cách đổi vai trò hai mảng: mảng A và mảng B, thuật toán sẽ lần lƣợt tính toán và đánh giá đƣợc tất cả các điểm thuộc khối còn lại.
Xét thuật toán NL với bộ nhớ trung gian là 50% cơ sở dữ liệu. Gọi A,B,C,D lần lƣợt là 4 khối logic ¼ chứa tập dữ liệu. Chúng ta đƣa các khối vào các mảng theo thứ tự dƣới đây và so sánh:
1. A với A, sau đó với các khối B,C,D. Tổng số là 4 khối đƣợc đọc.
2. D với D, sau đó với các khối A( không yêu cầu đọc), B,C. Tổng số là 2 khối đƣợc đọc.
3. C với C, sau đó các khối D,A,B. Tổng số là 2(A,B) khối đƣợc đọc.
4. B với B, sau đó với các khối C,A,D. Tổng số là 2 khối đƣợc đọc.
Do đó, có 10 khối lớn đƣợc đọc, tức là tập dữ liệu đƣợc đọc 10/4 = 2.5 lần.
o Mô tả thuật toán NL:
1. Đƣa một khối các điểm dữ liệu từ T vào trong mảng A (có cỡ là b/2 % cỡ của tập dữ liệu).
2. For (mỗi điểm ti trong mảng A ) do : {counti= 0;
28
For (mỗi điểm tj trong mảng A ) do: If (d(ti,tj) ≤ D ){ counti++;
If (counti>M ) { ti=không ngoại lai; break; } }
}
3. While (Những khối còn chƣa đƣợc so sánh với mảng A ) do {
a.Lƣu một khối vào mảng B ( Nhƣng sẽ giữa lại một khối mà nó chƣa bao giờ đƣợc lƣu vào mảng A để tính toán cho lần sau).
b. for( mỗi điểm ti chƣa đƣợc đánh dấu trong mảng A ) do { for( mỗi điểm tj trong mảng B ) do
If(d(ti,tj)≤D) { Counti ++;
If (counti> M ) { ti= không ngoại lai;break;} }
}
}
4. For( mỗi điểm ti chƣa đƣợc đánh dấu trong mảng A ) do ti= Ngoại lai;
5. Thuật toán sẽ kết thúc nếu khối đang lƣu trong mảng B đã đƣợc lƣu vào mảng A ở một thời điểm nào đó trong quá trình tính toán trƣớc đây ; ngƣợc lại, đổi vai trò hai mảng A và B và quay lại bƣớc 2.
29
o Đánh giá độ phức tạp của thuật toán
Trong bƣớc 1 của thuật toán chỉ có một khối đƣợc đọc vào bộ nhớ trong nên thời gian của bƣớc này là thời gian hằng. Tuy nhiên, điều này còn tùy thuộc vào tốc độ xử lý của CPU và tốc độ vào ra (I/O). Do một mảng chứa b/2% cỡ của cơ sở dữ liệu T nên một khối có x=(b/2)*(N/100) đối tƣợng. Hàm tính khoảng cách d(x,y) có độ phức tạp tuyến tính với số chiều của dữ liệu K nên ở trong bƣớc 2 mất thời gian tính toán là O(x2*K). Trong bƣớc 3.b mất thời gian là O(x2*k).Do đó độ phức tạp trong bƣớc 3 là
O((n-1)*x2*k) với n là tổng số các khối dữ liệu. Ở bƣớc 4, mất thời gian O(x). Cho nên tổng thời gian thực hiện thuật toán của các bƣớc 2, bƣớc 3, bƣớc 4 là O((n-1)*x2
*k).
Trong bƣớc 5, hai mảng A và B đƣợc trao đổi vai trò cho nhau và quay lại bƣớc 2. Bƣớc này có số vòng lặp là (n-1) lần tƣơng ứng với n-1 khối nằm trong mảng đóng vai trò là mảng A.
Do đó, độ phức tạp của toàn bộ thuật toán NL là O((n-1)*x2
*k)= O(N2*k).
Trong phần dƣới đây, chúng ta sẽ trình bầy 2 phiên bản của thuật toán đánh giá theo ô( Cell Based Algorithms ). Thuật toán có độ phức tạp tuyến tính với N, nhƣng lại lũy thừa đối với k. Do đó, thuật toán này chỉ áp dụng đối với các giá trị k bé.Mục đích quan trọng làm tăng tính hiệu quả việc sử dụng quá trình xử lý ô để thay thế việc tính toán khoảng cách giữa các cặp điểm . Do đó tránh đƣợc độ phức tạp tuyến tính với N2
30
2.2.2 Thuật toán tìm kiếm các phần tử ngoại lai không tầm thƣờng (FindNonTrivialOuts)
Chúng ta hãy xem xét một thuật toán mới về tính toán: (i) chỉ các phần tử ngoại lai mạnh nhất, (ii) tất cả các phần tử ngoại lai không tầm thƣờng ( tức là ., các phần tử ngoại lai mạnh nhất và yếu), phụ thuộc vào ngƣời dùng yêu cầu. Ở cuối mỗi mức của tiến trình, thuật toán cung cấp một tóm tắt các phần tử ngoại lai hiện tại đã tìm thấy và ngƣời dùng đã có cơ hội chuyển từ loại tính toán (i) sang (ii). Nếu chỉ có u’ phần tử ngoại lai đã đƣợc tìm thấy cho đến mức j và nếu có yêu cầu chuyển từ loại tính (i) sang (ii) thì thuật toán FindNonTrivialOuts đầu tiên cố gắng u-u’ phần tử ngoại lai yếu trong các không không mạnh nhất ở mức 2 tới j. Nếu ít hơn u-u’ phần tử ngoại lai yếu đƣợc tìm thấy, thì không gian –j+1, không gian –j+2,….,mỗi mức tại một thời điểm sẽ đƣợc kiểm tra đối với phần tử ngoại lai không tầm thƣờng, cho đến khi ít nhất u phần tử ngoại lai trong tổng số đƣợc tìm thấy hoặc tất cả các không gian đã đi qua.
Với yêu cầu cần tìm kiếm u phần tử ngoại lai của tập dữ liệu, chúng ta cần có khả năng tìm tất cả những phần tử ngoại lai trong một không gian đơn. Đối với tập dữ liệu lƣu trên đĩa, điều này đƣợc thực hiện bằng thuật toán FindNonTrialOuts đƣợc trình bầy ở phần sau đây. Thuật toán đó không suy nghĩ kỹ lƣỡng về giá trị u nhƣng thuật toán dễ dàng đƣợc sửa đổi để trả về ngay khi u phần tử ngoại lai đƣợc tìm thấy. Vì vậy, thuật toán đã đƣợc sửa đổi sẽ chấp nhận danh sách đầu vào (có thể rỗng) O các phần tử ngoại lai. ( Nhiệm vụ đối với ngƣời gọi là theo dõi không gian đó O phần tử ngoại lai đã đƣợc tìm thấy ). Vì thế thuật toán duyệt lại chấp nhận 3 biến đầu vào là:
A,u và O. A là danh sách các thuộc tính, xác định không gian đƣợc tìm kiếm, u là số các phần tử ngoại lai mới mong muốn, O là danh sách các phần
31
tử ngoại lai đã biết và các không gian mà ở đó, chúng đã đƣợc tìm thấy có thể từ các lời gọi khác của thuật toán.
Thuật toán trả lại 2 biến đầu ra (i) u’ số phần tử ngoại lai mới đƣợc tìm thấy trong lời gọi này, (ii) O’ là tập các phần tử ngoại lai mới.
Bây giờ tôi trình bầy thuật toán FindNontrivialOuts. Tham số đầu vào đƣợc ký hiệu là type có thể đặt là MẠNH NHẤT – SRONGEST( chỉ tìm các phần tử ngoại lai mạnh nhất hoặc yếu). hoặc KHÔNG_TẦM THƢỜNG – NON_TRIVIAL (để tìm phần tử ngoại lai mạnh nhất hoặc yếu). Các phần tử ngoại lai đó sẽ đƣợc hiển thị ngay khi chúng đƣợc trả về sau mỗi lần gọi tới FINDALLOutsD và một báo cáo về các phần tử ngoại lai tìm đƣợc đã cho ở cuối mỗi mức sử lý. Ngƣời dùng đƣợc lựa chọn chuyển chế độ từ STRONGEST sang NON_TRIVIAL ở cuối mỗi mức xử lý.
FindNonTrivialOuts(u,type)
1. Gán nhãn cho từng Ai là UNPROCESSED
2. Count 0 số phần tử ngoại lai kiểu type tìm thấy
3. Os danh sách các phần tử ngoại lai và không gian của
chúng
4. For j 1 to k do:
a. For each không gian Ai ở mức j do:
1. If( Ai được gán nhãn UNPROCESSED) or (Ai được
gán nhãn NON-STRONGEST & type-NON-TRIVIAL)
A. O tất cả các phần tử ngoại lai trong Os mà không
gian liên đới của nó là tập con của Ai.
B. FindAllOutsD( Ai ,u- Count, O,u’,O’)
32
1. If type = STRONGEST, gắn nhãn Ai –
COMMON
D. Else
1. Thông báo các phần tử ngoại lai được liệt kê
trong O’
2. Count Count + u’
3. If Count ≥ u, return
4. For each o’ O’do:
a. o.type o’
b. o.space Ai
c. Os Os u o
5. If Ai được gán nhãn UNPROCESSED
a. Gắn nhãn cho Ai là STRONGEST
b. Gắn nhãn cho tất cả các siêu không
gian của Ai là NON-STRONGEST
b. Thông báo rằng Count phần tử ngoại lai kiểu type đã được tìm thấy tới mức cuối j
c. if type = STRONGEST
1. if tất cả các không gian ở mức này được gắn NON-STRONGEST, thì cảnh báo người dùng rằng không có thêm phần tử ngoại lai nào mạnh nhất.
2. Hiển thị thông báo người dùng xem liệu type có nên trở thành NON- TRIVIAL hay không
3. Nếu người dùng chuyển thành type = NON- TRIVIAL
33
1. For each không gian NON- STRONGEST Ai ở mức x do:
a. O tất cả phần tử ngoại lai trong Os có không gian liên đới
của nó là một tập con của Ai
b. FindAllOutsD(Ai. u – Count, O, u’ , O’)
c. if u’ > 0 ( tồn tại) các phần tử ngoại lai yếu
1. Thông báo tất cả các phần tử ngoại lai trong O’.
2. Count Count + u’
3. ifCount ≥ u, return 4. For each o’ O’ do:
A. o.type o’
B. o.space Ai
C. Os Os u o
5. Thông báo rằng u phần tử ngoại lai của kiểu type không tồn tại
End FinNonTrivialOuts.
2.2.3 Thuật toán đánh giá theo ô.
Để minh họa cho ý tƣởng và các đánh giá khác nhau của thuật toán đánh giá theo ô. Đầu tiên, một phiên bản đơn giản của thuật toán sẽ đƣợc xem xét. Phiên bản này giả sử rằng cả cấu trúc ô nhiều chiều và toàn bộ cơ sở dữ liệu đều có thể lƣu trong bộ nhớ chính. Để dễ dàng cho việc trình bầy, thuật toán đƣợc mô tả để thực hiện với các tập dữ liệu trong không gian hai chiều,
34
và sau đó xử lý trong k chiều. Trong phần sau sẽ trình bầy phiên bản đầy đủ của thuật toán đánh giá theo ô tìm kiếm các phần tử ngoại lai trên các tập dữ liệu lớn nằm trong bộ nhớ ngoài.
Các khái niệm và tính chất liên quan.
Với chiến lƣợc tìm kiếm tất cả các phần tử ngoại lai dựa trên khoảng cách dựa vào ô, mỗi một đối tƣợng trong tập dữ liệu đƣợc ánh xạ hoặc lƣợng tử hóa tới các ô có cạnh l= D/(2 )
Gọi Cx,y là ô giao giữa dòng x và cột y. L1(Cx,y) đƣợc định nghĩa là tầng các lân cận thứ nhất của ô Cx,y bao gồm các ô Cu,v thỏa mãn điều kiện :
L1(Cx,y)={Cu,v }. 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2 2 1 * q 1 S 2 2 p 2 2 r 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Hình 2.1
35
Hình 2.1: Các ô của cấu trúc ô trong không gian hai chiều, xem xét ô trung tâm ô C[4,4] được ký hiệu bởi dấu *. Các ô thuộc L1 được đánh dấu là số 1. Các ô thuộc L2 được đánh dấu số 2.
Thƣờng thì L1 của ô bao gồm có 8 ô. Chỉ loại trừ những ô ở gần biên của cấu trúc ô.
Tính chất 1:Bất kỳ một cặp đối tƣợng trong cùng một ô thì khoảng cách
giữa chúng lớn nhất D/2.
Tính chất 2: Nếu Cu, v là một ô thuộc L1(Cx,y) thì mỗi P Cu,v và
với mọi q Cx,y ta luôn có khoảng cách giữa chúng là lớn nhất là D.
Tính chất 1 đúng bởi vì khoảng cách giữa hai điểm bất kỳ trong cùng một ô luôn nhỏ hơn độ dài đƣờng chéo của ô có cạnh bằng l=D/(2* ) mà độ dài đƣờng chéo của một hình vuông là *1= (D/2 ))= D/2.
Tính chất 2 cũng đúng vì khoảng cách giữa cặp đối tƣợng bất kỳ trong hai ô không thể lớn hơn hai lần độ dài đƣờng chéo của ô. Các điểm q và r trong hình 2.1 minh họa điều này.
Gọi L2(Cx,y) là tầng các lân cận thứ hai của ô Cx,y bao gồm các Cu,v thỏa mãn điều kiện:
L2(Cx,y)= {Cu,v
Chú ý rằng khoảng cách giữa một số điểm nằm trong L2 và các điểm nằm trong L2 và các điểm nằm trong Cx,y là bé hơn khoảng cách D( ví dụ so sánh khoảng cách các điểm q và s trong hình 2.1)
36 Thông thƣờng L2 của một ô có 72
-32= 40 ô, chỉ loại trừ những ô trên hoặc gần biên của cấu trúc ô. Trong không gian hai chiều L1 có độ dày bằng 1 và L2 có độ dày bằng 2. L2 đƣợc định nghĩa theo cách này để thỏa mãn các tính chất sau đây:
Tính chất 3: Nếu Cu,v Cx,y cũng không thuộc L1 và L2 của ô Cx,y
thì đối tƣợng
P và mọi đối tƣợng q€Cu,v khoảng cách giữa chúng lớn hơn D. Do tổng độ dầy của L1 và L2 là 3 ô nên khoảng cách d(p,q) phải lớn hơn 3l=3*D/(2 )>D. Ví dụ nhƣ các điểm P và q trên hình 2.1.
Tính chất 4:
a. Nếu có quá M đối tƣợng trong Cx,y thì không có ngoại lai trong ô Cx,y
b. Nếu có quá M đối tƣợng trong Cx,yU L1(Cx,y) thì không có ngoại lai trong ô Cx,y.
c. Nếu số lƣợng của các đối tƣợng thuộc Cx,yU L1(Cx,y) U L2(Cx,y) không lớn hơn M thì mọi đối tƣợng trong ô Cx,y là ngoại lai.
Tính chất 4a và 4b là hệ quả trực tiếp từ tính chất 1 và tính chất 2. Và tính chất 4c đƣợc suy ra từ tính chất 3.
Thuật toán FindAllOutsM cho các tập dữ liệu trong bộ nhớ chính.
+ Tƣ tƣởng thuật toán
Các đối tƣợng dữ liệu trong tập dữ liệu đƣợc ánh xạ tới ô phù hợp. Trong quá trình ánh xạ số lƣợng phần tử trong mỗi ô sẽ đƣợc lƣu lại. Với
37
những ô có số lƣợng phần tử lớn hơn M thì sẽ đƣợc tô mầu “đỏ “. Điều này chứng tỏ rằng tất cả các phần tử trong các ô đó là không ngoại lai. Với những ô Cu, v thuộc các tần lân cận thứ nhất của các ô “ đỏ “ mà Cu, v chƣa đƣợc tô mầu đỏ sẽ đƣợc tô mầu “ hồng “. Theo tính chất 4.b tất cả các đối tƣợng nằm trong ô mầu “ hồng “ không phải là ngoai lai. Hơn nữa, cũng theo tính chất 4.b những ô Cx,y thỏa mãn điều kiện : số lƣợng các phần tử thuộc Cx,yU L1(Cx,y) lớn hơn M sẽ đƣợc tô mầu “hồng”. Với các ô chƣa đƣợc tô mầu thỏa mãn điều kiện: số lƣợng các phần tử trong Cx,yUL1(Cx,y) UL2(Cx,y) nhỏ hơn hoặc bằng M thì mọi đối tƣợng trong ô Cx,y đƣợc thông báo là ngoại lai.
Những ô không thỏa mãn các trƣờng hợp trên. Tức là, số lƣợng các đối tƣợng dữ liệu trong Cx,yUL1(Cx,y) UL2(Cx,y) lớn hơn M nhƣng Cx,yUL1(Cx,y) nhỏ hơn M thì thuật toán sẽ lƣu lại số lƣợng (sl) các phần tử trong C(x,y) UL1(Cx,y). Với mỗi đối tƣợng P trong ô Cx,y, thuật toán tiến hành tính toán khoảng cách d(p,q) với q là các đối tƣợng nằm trong ô thuộc L2(Cx,y). Với những điểm q thỏa mãn điều kiện d(p,q) ≤ D ( tức là q € S(p) giá trị sl vẫn nhỏ hơn M thì thông báo P ngoại lai.
Một ví dụ về cách chọn cấu trúc đƣợc trình bầy ở hình 2.2.a. Các ô đỏ là các ô có số lớn hơn 4 điểm. Những ô đó không chứa phần tử ngoại lai. Hơn nữa, tất cả các ô liền kề tức là những ô thuộc vào L1 cũng sẽ không chứa phần tử ngoại lai và đƣợc tô màu hồng. Hình 2.2.b có thêm 3 ô mầu hồng đƣợc xác định bằng mũi tên chỉ tới. Trong hình 2.2.c, chúng ta có một phần tử ngoại lai khả nghi bởi vì không có điểm nào trong các ô thuộc L1. Hình 2.2.d cho biết phần tử ngoại lai tiềm ẩn đó thực chất là phần tử ngoại lai bởi vì chỉ có 3 điểm nằm trong các ô thuộc vào L2. Trong đó L2 là vùng giới hạn bởi L1 và các