Cài đặt Segment trees

Một phần của tài liệu Một số kiểu dữ liệu trừu tượng ứng dụng trong hình học tính toán (Trang 76 - 82)

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 yê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 toá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 toá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 toá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.Ngoà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 toán, như chúng ta đã biết những thuật toán trong hình học tính toá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 toán mà còn trong nhiều bài toá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 toá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 toá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 toán trong hình học tính toá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 toán cụ thể mà ta có thể chọn cấu trúc dữ liệu phù hợp cho bài toá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.

Một phần của tài liệu Một số kiểu dữ liệu trừu tượng ứng dụng trong hình học tính toán (Trang 76 - 82)

Tải bản đầy đủ (PDF)

(82 trang)