Trong cài đặt interval trees, ta chọn ứng dụng truy vấn stabbing để đánh giá tốc độ của interval trees khi làm việc với dữ liệu lớn. Với truy vấn stabbing, ta có tập hợp gồm các đoạn thẳng song song với trục tọa độ và mỗi truy vấn yêu cầu đưa ra tất cả các đoạn thẳng được cắt bởi đoạn thẳng truy vấn dọc.
3.3.1 Cấu trúc dữ liệu
Các lớp mẫu cây với ba đối số: , và . Kiểu định nghĩa kiểu dữ liệu đầu vào và kiểu định nghĩa cửa sổ truy vấn. Các hàm này cũng được cung cấp bởi lớp .
Hình 3.3 - Sơ đồ các lớp trong thực hiện Interval trees
Cài đặt cấu trúc dữ liệu Interval trees bao gồm 3 lớp: ;
; . Với các lớp ; kế
thừa lớp được định nghĩa bởi như sau:
Data
Window
Tree_traits
Tree_base <Data, Window>
Tree_base <Data, Window> *sublayer_tree; Tree_base(Tree_base & sublayer_prototype); Tree_base *clone();
template <class T>
virtual bool make_tree(T& begin, T& end); template <class T>
virtual T window_query(Window& w, T out);
Interval_Tree<Tree_traits>
Interval_Tree(Tree_base & sub_proto); Interval_Tree *clone();
template <class T>
bool make_tree(T& begin, T& end); template <class T> T window_query(Window& w, T out); Tree_anchor Tree_anchor (); Tree_anchor *clone(); template <class T>
bool make_tree(T& begin, T& end); template <class T>
typedef Tree_anchor<Data,Window> Tree_Anchor;
typedef Interval_Tree<Data, Window, Interval_traits> Interval_Tree;
Lớp và lớp nhận hai tham số mẫu: lớp
định nghĩa loại dữ liệu lưu trữ trong cây (các khoảng) và lớp
định nghĩa kiểu phạm vi truy vấn. nhận lời gọi được định nghĩa giao diện giữa và cây.
struct Data{
int min, max; // Dữ liệu khoảng };
struct Window{ int min, max;
double min_ point, max_point; };
class Interval_traits{ public:
typedef int Key;
Key get_left(Data& d){return d.min;} Key get_right(Data& d){return d.max;}
Key get_left_win(Window& w){return w.min;} Key get_right_win(Window& w){return w.max;}
bool comp(Key & key1, Key & key2){return (key1 < key2);} }
3.3.2 Tiến hành thực nghiệm
Thực nghiệm được tiến hành với đoạn thẳng ngẫu nhiên chuyển động trong mặt phẳng ( do người sử dụng tự chọn) các đoạn thẳng có phương song
song với trục tọa độ. Với đoạn thẳng truy vấn dọc, thực nghiệm sẽ đưa ra tất cả các đoạn thẳng được cắt bởi đoạn thẳng truy vấn này.
3.3.3Đánh giá kết quả thực nghiệm
Thực nghiệm cho thấy tốc độ của interval trees khi trả lời truy vấn stabbing là rất nhanh, thời gian này phụ thuộc rất ít vào số đoạn thẳng đầu vào , ngay cả khi rất lớn (cỡ ), thời gian trả lời một truy vấn stabbing cũng không đo được bằng bộ đếm nhịp đồng hồ của máy tính.