Mục tiêu của thực nghiệm này là đánh giá tốc độ của thuật toán tìm láng giềng gần nhất và thuật toán truy vấn phạm vi với sự hỗ trợ của Kd-trees.
3.1.1 Cấu trúc dữ liệu
Kd-trees là một cây nhị phân mỗi nút biểu diễn các điểm với trong không gian chiều.
Hình 3.1 - Sơ đồ các lớp trong thực hiện Kd-trees
Cài đặt cấu trúc dữ liệu Kd-trees gồm 4 lớp: , ,
, . Trong đó: lớp kế thừa các lớp ;
và .
3.1.2Tiến hành thực nghiệm
Thực nghiệm 1 là ứng dụng truy vấn phạm vi với đầu vào là tập hợp các điểm trong mặt phẳng và phạm vi truy vấn hình chữ nhật. Với mỗi truy vấn,
KdTree allnodes : vector<KdNode> root : kdtree_node* dimension: int distance : DistanceMeasure* KdTree(nodes : vector<KdNodes>) k_nearest_neighbors(point : CoordPoint, k : int, result : vector<KdNode>*) neighbor_search(point : CoordPoint, node :kdtree_node*, k : int)
ball_within_bounds(point : CoordPoint, dist : double, node : kdtree_node*) bounds_overlap_ball(point : CoordPoint,
dist : double, node : kdtree_node*) build_tree(depth : int, index_a : int, index_b : int) : kdtree_node*
KdNode point :CoordPoint data : void* KdTree_Node point : CoordPoint cutdim : int
hison, loson : kdtree_node* hibound, lobound: CoordPoint dataindex : int
DistanceMeasure
distance( : CoordPoint) : double
thuật toán cần đưa ra tất cả các điểm nằm trong phạm vi hình chữ nhật. Trong thực nghiệm này, người sử dụng tạo dữ liệu đầu vào là các điểm và kích thước hình chữ nhật thì ta nhận được đầu ra là các điểm phù hợp với truy vấn được hiển thị bởi màu đỏ và đưa ra kết quả tìm được là các điểm nằm trong phạm vi truy vấn.
Thực nghiệm 2 là ứng dụng tìm láng giềng gần nhất nhận đầu vào là tập hợp các điểm trong mặt phẳng và đưa ra các các điểm láng giềng gần nhất với các điểm được tạo ra ngẫu nhiên. Trong thực nghiệm này, dữ liệu đầu vào là tập hợp gồm các điểm trong mặt phẳng được tạo ra, mỗi phép tìm láng giềng sẽ tạo ra các điểm ngẫu nhiên phân bố đồng đều trong mặt phẳng. Các điểm tạo ra được hiển thị trong màu vàng và khoảng cách đến điểm láng giềng gần nhất sẽ được hiển thị trong đoạn thẳng màu đỏ.
Dữ liệu đầu vào là tập hợp gồm 20 điểm trong mặt phẳng
Dữ liệu đầu vào là tập hợp gồm 22 điểm trong mặt phẳng
3.1.3Đánh giá kết quả thực nghiệm
Qua thực nghiệm, ta thấy rằng thời gian thực hiện tìm kiếm phạm vi và tìm kiếm láng giềng trong Kd-Trees là nhanh. Trong tìm kiếm phạm vi với không gian lưu trữ là tuyến tính và tốc độ tuy vấn nhanh, tuy nhiên khi số điểm trả về là nhỏ thì thời gian truy vấn là tương đối cao.