Đánh giá độ phức tạp của thuật toán Nested Loop

Một phần của tài liệu Nghiên cứu các phần tử ngoại lai luận văn thạc sĩ máy tính (Trang 27)

Trong bước đầu 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ỗi 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 thứ 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 thứ 4 mất thời gian là O(x). Như vậy, tổng thời gian thực hiện thuật toán của các bước 2, bước 3 và 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 vậy, ta có độ phức tạp của toàn bộ thuật toán Nested Loop là: O((n-1)2*x2*k)=O(N2*k).

Sau đây, chúng tôi 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 này 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à làm tăng tính hiệu quả việc sử dụng quá trình xử lý giữa các ô để thay thế việc tính toán khoảng cách giữa các cặp điểm, do đó, sẽ tránh được độ phức tạp tuyến tính với N2.

Một phần của tài liệu Nghiên cứu các phần tử ngoại lai luận văn thạc sĩ máy tính (Trang 27)