45 | | I started a 'boost.xml' library (right now in https://svn.boost.org/svn/boost/sandbox/xml/) a long time ago, which I have never found enough time and energy to bring to a formal boost submission. |
46 | | Having a proper XML library as part of boost would be very useful, in particular if "proper XML" goes beyond the basics such as parsing. (There already are lots of half-baked XML parsers, but few fully conform to the spec, or yield well performing in-memory representations that can be traversed via XML-specific tools such as XPath.) |
47 | | |
48 | | === Prerequisites === |
49 | | |
50 | | The student needs to have at least a basic understanding of the XML and related spec, as well as some exposure to existing XML APIs (such as DOM, SAX, XMLReader) to understand the problem domain. |
| 46 | The student needs to have a basic understanding of the XML and related specifications, as well as some exposure to existing XML APIs (such as DOM, SAX, XMLReader) to understand the problem domain. |
| 60 | * Topology Generators - One useful set of algorithms not included in the BGL is the ability to easily generate graphs of specific topologies (e.g., [http://mathworld.wolfram.com/PathGraph.html path], [http://mathworld.wolfram.com/CycleGraph.html cycle], [http://mathworld.wolfram.com/StarGraph.html star], etc.). In addition to creating graphs of these topologies, it would be useful to induce these topologies on an existing set of vertices, and query a set of vertices to determine if the topology is admitted by a set of vertices. |
| 61 | |
| 62 | * Graph Connectives - The Boost.Graph library is missing [http://mathworld.wolfram.com/Connective.html connectives]. Develop a set of generic algorithms for computing the [http://mathworld.wolfram.com/GraphUnion.html union], [http://mathworld.wolfram.com/GraphJoin.html join], [http://mathworld.wolfram.com/GraphIntersection.html intersection], and [http://mathworld.wolfram.com/GraphDifference.html difference] of graphs. Additional algorithms might be constructed for unary operations (e.g., line graph). |
| 63 | |
| 64 | == Heaps and Queues == |
| 65 | There are a number of data structures in `boost/pending` that implement different kinds of heaps and queues that are used in a number of different Boost.Graph (BGL) algorithms. These can be cleaned up, decoupled from the BGL and redeveloped into a useful library for advanced data structures. |
| 66 | |
| 67 | The library could include a binary (i.e. the std heap), fibonacci, binomial, and relaxed heaps. The binomial heap would be a new data structure. A second requirement is that heaps may be "mutable", meaning that a value already stored |
| 68 | in the heap can be modified and the heap efficiently updated to accommodate the new change. |
| 69 | |
| 70 | Priority queues are an adaptations on heap data structures. |
| 71 | |
| 72 | This project requires a working knowledge of C++, templates and data structures. |