Trong chương này tôi trình bày một thiết kế dữ liệu cho TPR-tree để thực hiện demo thuật toán TPR-tree.
3.1. Thiết kế dữ liệu
Ở đây ta sẽ thiết kế ra một chương trình tạo dữ liệu với các đối tượng dàn đều trong không gian hai chiều theo phạm vi [0, 10000] trên mỗi trục. Sau đó mỗi đối tượng được gán một VBR, do đó:
Trên mỗi một chiều, mức độ vận tốc bằng không (đối tượng là không thay đổi kích thước không gian khi nó chuyển đông).
Giá trị vận tốc trong khoảng [-50, 50].
Vận tốc thay đổi tối đa trong mỗi lần cập nhật là 5.
File dữ liệu được tạo ra là một file text chứa các bản ghi của đối tượng. Trong file dữ liệu các đối tượng được tạo ra một cách ngẫu nhiên tại mốc thời gian t0 (bao gồm chỉ mục của đối tượng, mbr, vận tốc, thời điểm của đối tượng). Sau đó tại một mốc thời gian t1, t2, t3,… một số ngẫu nhiên các đối tượng được tạo ra với vận tốc thay đổi.
Các bản ghi có thể được mô tả với kiểu cấu trúc, trong đó Oid là các chỉ mục cho đối tượng, mbr là một mảng với 4 phần tử mô tả vị trí và kích cỡ của đối tượng, vbr (velocity bounding rectangle) là một một mảng với 4 phần tử mô tả mô tả các cạnh của mbr và ref là một giá trị cho thời gian mà ở đó đối tượng được chèn hay được cập nhật.
struct MovingObject
{int Oid; // chỉ mục đối tượng
float mbr[4]; //vị trí và kích thước của đối tượng float vbr[4]; //Vận tốc của đối tượng trên mỗi hướng.
float ref; //thời gian tham khảo khi đối tượng được chèn hay cập nhật}; Bảng 3.1 mô tả ví dụ của 5 đối tượng chuyển động tại thời điểm 0. Cột đầu tiên là chỉ mục của đối tượng, bốn cột tiếp theo tương ứng với trục X và Y (vị trí và kích thước của đối tượng), 4 cột tiếp theo tương ứng với tốc độ của đối tượng và cột cuối cùng là thời điểm hiện tại.
Bảng 3.1. Dữ liệu của một số đối tƣợng chuyển động tại thời điểm hiện tại
Oid X1 X2 Y1 Y2 Vx1 Vx2 Vy1 Vy2 time
0 2108.2 2108.3 8522.5 8522.5 -21.5 -21.5 -13.9 -13.9 0 1 2806.7 2806.7 5814.8 5814.8 -49.8 -49.8 6.8 6.8 0 2 9968.1 9968.1 1870.4 1870.4 34.7 34.7 41.5 41.5 0 3 910.5 910.5 7318.2 7318.2 -3.0 -3.0 -39.8 -39.8 0 4 4271.0 4271.0 4824.4 4824.4 44.9 44.9 -26.4 -26.4 0
3.2. Thiết kế file chỉ mục.
Một file chỉ mục là tập của các khối (trang đĩa), cấu trúc của file bao gồm bao gồm 2 phần.
Phần đầu tiên là tiêu đề block chứa thông tin về cấu trúc của file trên đĩa như thể hiện trong bảng 3.2 và thông tin của TPR-tree trong bảng 3.3.
Phần thứ hai là tập của block dữ hiệu tương ứng với nút trong chỉ mục cây. Mỗi block dữ liệu bao gồm thông tin dữ liệu (block information) và tập của các phần tử dữ liệu (phần tử data). Bảng 3.4 minh họa thông tin của block tương ứng với mức của nút và số các phần tử hiện tại trong block. Bảng 3.5 minh họa một phần tử bởi hình chữ nhật, vận tốc và con trỏ tới một cây con.
Bảng 3.2. Thông tin cấu trúc của file trên đĩa
Data types Data Description
Int Blocklength; // độ dài block Int number; // tổng số blocks
Bảng 3.3. Thông tin của TPR-tree
Data types Data Description
Int Dimension; //số chiều không gian
Int Num_of_data; //số đối tượng chuyển động Int Num_of_dnodes; //số nút lá (leaf node)
Int Num_of_inodes; //số nút trung gian (internal nodes) Int Root; // block chưa nút root
Bool Root_is_data; // false nếu độ sâu ≥ 1
Float T //chiều thời gian (Horizon time) Float Time //thời gian hiện tại
Bảng 3.4. Thông tin Block
Data types Data Description
Char Level; //cấp của nút
Int Number_entries; // số phần tử trong nút
Bảng 3.5. Thông tin phần tử
Data types Data Description
Float Bounces // tọa độ góc trái và phải Float Velocity //vận tốc