Segment trees thường được so sánh với interval trees vì chúng có nhiều ứng dụng chung. Trong thực nghiệm này chúng tôi muốn đánh giá tốc độ của truy vấn stabbing trong trường hợp các đoạn thẳng đầu vào không nhất thiết phải có phương song song với trục tọa độ.
3.4.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ây cũng được sử dụng xác định tập hợp các hàm theo thứ tự truy cập dữ liệu. Các hàm này cũng được cung cấp bởi lớp .
Hình 3.4 - Sơ đồ các lớp trong thực hiện Segment trees
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);
Segment_Tree< Tree_traits>
Segment_Tree (Tree_base & sub_proto); Segment_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>
Cài đặt cấu trúc dữ liệu Segment 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:
typedef Tree_anchor<Data,Window> Tree_Anchor;
typedef Segment_Tree<Data, Window, Interval_traits> Segment_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.4.2 Tiến hành thực nghiệm
Dữ liệu đầu vào là tập hợp các đoạn thẳng phân biệt, khơng giao nhau, có phương tùy ýtrong mặt phẳng và đoạn thẳng truy vấn dọc và kết quả là đư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.4.3Đánh giá kết quả thực nghiệm
Qua thực nghiệm cho thấy tốc độ của Segment 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ồ máy tính.
Tuy vậy, việc thực nghiệm với các đoạn thẳng động gặp khó khăn bởi vì segment trees u cầu tập các đoạn thẳng đầu vào đôi một không cắt nhau. Việc xử lí truy vấn stabbing trong trường hợp các đoạn thẳng đầu vào có thể cắt nhau là một vấn đề khó và để xử lí nó có thể làm gia tăng thời gian thực hiện giải thuật.
Ngay cả việc sinh các đoạn thẳng chuyển động ngẫu nhiên sao cho chúng không cắt nhau cũng là vấn đề khó, vì vậy chúng tơi chỉ chạy thử với dữ liệu tĩnh.Bằng việc đưa vào một số lượng lớn truy vấn, có thể đo được thời gian trả lời các truy vấn. Về tốc độ segment trees tương đương với interval trees, tuy nhiên việc cài đặt phức tạp hơn khá nhiều.
3.5 Kết luận
Trong chương này, chúng tôi tiến hành thực nghiệm và đánh giá kết quả thực nghiệm của việc cài đặt các cấu trúc dữ liệu Kd-trees, Range trees, Segement trees và Interval trees để giải quyết các bài toán ứng dụng. Với mỗi cấu trúc dữ liệu có ưu nhược điểm riêng nhưng tùy vào bài tốn ứng dụng cụ thể mà ta có thể chọn cấu trúc dữ liệu phù hợp và làm giảm thời gian thực hiện giải thuật có thể.
KẾT LUẬN
Với cách tiếp cận của luận văn về kiểu dữ liệu trừu tượng ứng dụng trong hình học tính tốn chúng tơi đặt vấn đề nghiên cứu một số kiểu dữ liệu trừu tượng và cấu trúc dữ liệu trong hình học tính tốn. Những ứng dụng của chúng không chỉ giới hạn trong các đối tượng hình học, mà cịn cho phép thiết kế những thuật toán hiệu quả, có thể xử lí các loại dữ liệu khác nhau của nhiều bài toán khác nhau.Ngồi ra vai trị của cấu trúc dữ liệu cũng rất quan trọng trong lĩnh vực hình học tính tốn, như chúng ta đã biết những thuật tốn trong hình học tính tốn khơng thể hiệu quả nếu thiếu sự hỗ trợ của cấu trúc dữ liệu và những cấu trúc dữ liệu này không chỉ ứng dụng giải quyết các bài toán trong hình học tính tốn mà cịn trong nhiều bài tốn khác nữa.
Trong luận văn này, chúng tơi đã trình bày các vấn đề cơ bản của hình học tính tốn, các đối tượng của hình học và một số kỹ thuật thuật toán giải quyết các bài tốn như tìm cặp đoạn thẳng bất kỳ cắt nhau, tìm bao lồi, tìm cặp điểm gần nhất. Bên cạnh đó chúng tơi cũng nghiên cứu cơ sở lý thuyết về những cấu trúc dữ liệuđể giải quyết các bài tốn trong hình học tính tốn.
Tìm kiếm phạm vi trực giao với phạm vi truy vấn là hình chữ nhật song song với trục tọa độsử dụng cấu trúc dữ liệu như Range trees và Kd-trees. Cấu trúc dữ liệu hình học như Interval trees, Segment trees và Priority search trees trong đó Interval trees, Segment trees dựa trên tiếp cận stabbing và Priority search trees giải quyết các truy vấn không bị giới hạn bên trái, nghĩa là phạm vi truy vấn có dạng .
Biến thể của các cấu trúc dữ liệu hình học như Partitiontrees, Multi-level partition trees, Cutting trees với phạm vi truy vấn là nửa mặt phẳng hay hình tam giác.
Phần cuối cùng của luận văn, từ cơ sở lý thuyết đã trình bày ở trên, chúng tôi tiến hành cài đặt thực nghiệm các kiểu dữ liệu trừu tượng như Kd-trees, Range trees, Interval trees và Segment trees. Như ta biết, một cấu trúc dữ liệu không phải là vạn năng để giải quyết mọi bài toán mà mỗi cấu trúc dữ liệu đều có ưu và nhược điểm riêng nhưng tùy vào bài tốn cụ thể mà ta có thể chọn cấu trúc dữ liệu phù hợp cho bài tốn hình học cụ thể.
TÀI LIỆU THAM KHẢO
1. I. Ahmed and M. A. Islam, “Algorithms in Computational Geometry”,
Department of Computer Science and Engineering(BUET), Dhaka.
2. J. L. Bentley (1975), “Multidimensional binary search trees used for associative searching”, Commun. ACM, 18, pp. 509-517.
3. J. L. Bentley (1977), “Solutions to Klee’s rectangle problems”, Technical report, Carnegie-Mellon Univ., Pittsburgh, PA.
4. J. L. Bentley (1979), “Decomposable searching problems”, Inform. Process. Lett., 8, pp. 244-251.
5. M. de Berg, O. Cheong, M. van Kreveld, M. Overmars (2000),
Computational Geometry: algorithms and applications, Springer.
6. B. Chazelle (1986), “Filtering search: A new approach to query- answering”, SIAM J.Comput., 15, pp. 703-724.
7. B. Chazelle (1989), “Lower bounds on the complexity of polytope range searching”, J. Amer. Math. Soc., 2, pp. 637-666.
8. B. Chazelle (1993), “Cutting hyperplanes for divide-and-conquer”, Discrete
Comput. Geom., 9, pp. 145-158.
9. B. Chazelle, H. Edelsbrunner, L. Guibas, and M. Sharir (1994), “Algorithms for bichromatic line segment problems and polyhedral terrains”, Algorithmica, 11, pp. 116-132.
10. B. Chazelle, M. Sharir, and E. Welzl (1992), “Quasi-optimal upper bounds for simplex range searching and new zone theorems”, Algorithmica, 8, pp.
407-429.
11. B. Chazelle and E. Welzl (1989), “Quasi-optimal range searching in spaces of finite VC-dimension”, Discrete Comput. Geom., 4, pp. 467-489.
12. J. Chen (1996), Computational Geometry: Methods and applications,
Computer Science Department, Texas A&M University.
13. T. H. Cormen, C. E. Leiserson, R. L. Rivest and C. Stein (2001),
Introduction to Algorithms, Second Edition, MIT Press, Cambridge.
14. H. Edelsbrunner (1980), “Dynamic data structures for orthogonal intersection queries”, Report F59, Inst. Informationsverarb., Tech. Univ. Graz, Graz, Austria.
15. H. Edelsbrunner and H. A. Maurer (1981), “On the intersection of orthogonal objects”, Inform. Process. Lett., 13, pp. 177-181.
16. H. Edelsbrunner and E. Welzl (1986), “Halfplanar range search in linear space and query time”, Inform. Process. Lett., 23, pp. 289-293. 17. R. L. Graham (1972), “An efficient algorithm for determining the convex
hull of a finite planar set”, Inform. Process. Lett., 1, pp.132-133.
18. D. Haussler and E. Welzl (1987), “Epsilon-nets and simplex range queries”,
Discrete Comput. Geom., 2, pp. 127-151.
19. R. A. Jarvis (1973), “On the identification of the convex hull of a finite set of points in the plane”, Inform. Process. Lett., 2, pp. 18-21.
20. D. T. Lee and C. K. Wong (1980), “Quintary trees: A file structure for multidimensional database systems”, ACM Trans. Database Syst., 5, pp.
339-353.
21. G. S. Lueker (1978), “A data structure for orthogonal range queries”, In Proc. 19th Annu. IEEE Sympos. Found. Comput. Sci., pp. 28-34.
22. J. Matousek (1992), “Efficient partition trees”, Discrete Comput. Geom., 8, pp. 315-334.
23. J. Matousek (1992), “Reporting points in halfspaces”, Comput. Geom. Theory Appl., 2, pp. 169-186.
24. E. M. McCreight (1980), “Efficient algorithms for enumerating intersecting intervals and rectangles”, Report CSL-80-9, Xerox Palo Alto Res. Center, Palo Alto, CA.
25. E. M. McCreight (1985), “Priority search trees”, SIAM J. Comput., 14, pp.
257-276.
26. D. M. Mount (2002), Computational Geometry, Department of Computer
Science, University of Maryland.
27. F. P. Preparata and M. I. Shamos (1985), Computational Geometry: An Introduction, Springer-Verlag.
28. M. I. Shamos and D. Hoey (1976), “Geometric intersection problems”, In Proceedings of the 17th Annual Symposium on Foundations of Computer Science, pp. 208-215.
29. V. K. Vaishnavi and D. Wood (1982), “Rectilinear line segment intersection, layered segment trees and dynamization”, J. Algorithms, 3, pp. 160-176.
30. E. Welzl (1988), “Partition trees for triangle counting and other range searching problems”, In Proc. 4th Annu. ACM Sympos. Comput. Geom., pp.
23-33.
31. D. E. Willard (1978), Predicate-Oriented Database Search Algorithms,
Ph.D. thesis, Aiken Comput. Lab., Harvard Univ., Cambridge, MA.
32. D. E. Willard (1982), “Polygon retrieval”, SIAM J. Comput., 11, pp. 149-
165.
33. A. C. Yao and F. F. Yao (1985), “A general approach to D-dimensional geometric queries”, In Proc. 17th Annu. ACM Sympos, Theory Comput.,
pp. 163-168.