Spatial data structures are structures that manipulate spatial data, that is, data that has geometric coordinates. Spatial data comes up in many areas of computer science, like Geographic Information Systems (GIS), robotics, computer graphics, virtual reality, as well as in other disciplines like finite element analysis, solid modeling, computer-aided design and manufacturing, biology, statistics, VLSI design, to mention just a few.
The class will explore fundamental data structures on spatial data, like B-trees, quadtrees, grid structures, kd-trees, the range tree, the priority-search tree, the BSP tree, R-trees, and persistent data structures. The class will emphasize the main ideas underlying these structures, their trade-offs (time-space, theory-practice), and how they can be used to address some of the basic problems on spatial data, like range queries, containment queries, nearest neighbor queries, segment intersection, point location, ray tracing and visibility. Depending on time and interests, the class will explore other topics like plane-sweep and applications, Delaunay triangulations, Voronoi diagrams and incremental construction, other space partition and hierarchical structures, clustering, space-fillig curves, and basic techniques for dynamization.
The class will try to float somewhere in the realm between algorithms, computational geometry, graphics, databases and software design. We'll discuss data structures from a theorist's and practitioner's points of view, emphasize the paradigms, emphasize the trade-offs, analyse performance in internal (data fits in memory) and external (data is on disk) memory, and discuss techniques for making these structures efficient in external memory.
The class will be project-centered and will involve significant programming effort to complete the three project assigned throughout the semester. The first part of the class will be focused on learning C (pointers, pointers, pointers) and OpenGL and will provide a brief introduction to graphics. It requires no pre-requisite, other than csci 210 (data structures) and a desire to learn.
Prerequisites: CSci 210 (data structures)
Instructor: Laura Toma, Office: 219 Searles Hall
Office hours: Officially, Tuesdays and Thursdays after class. Unofficially any time I am in the office (and in a good mood). Or, just send me an email to setup a (different) time.
Class Email: csci340 at bowdoin.edu
Class webpage: http://www.bowdoin.edu/~ltoma/teaching/cs340/spring08
Course material: There is no textbook for this class. However I recommend purchasing K&R (the C book) --- it is a reference book and it is good to have it in your library. Occasionaly we will be reading chapters from the following books:
Grading policy: Programming projects and class involvement and presentations.
Programming projects: The projects will be challenging and will solve real-world problems on real-world data. If you need an extension, just talk to me. I am well aware that programming time can vary deeply from person to person and from day to day. Rather than submitting bad or incomplete code, I prefer that you take extra time, do a good job and be happy with what you turn in. You can have at most two extensions the entire semester without affecting your grade.
As you probably all know by now, a big and sometimes frustrating part of programming is debugging your code. This is something that you have to go through. I will be there to help occasionally, but do not count on it and do not take it for granted.
Feedback: Throughout the semester you will have plenty of opportunities to give feedback on the topics covered in the class and what you would like covered/changed.