| 1 | <HTML> | 
|---|
| 2 | <!-- | 
|---|
| 3 |   -- Copyright (c) Jeremy Siek 2000 | 
|---|
| 4 |   -- | 
|---|
| 5 |   -- Permission to use, copy, modify, distribute and sell this software | 
|---|
| 6 |   -- and its documentation for any purpose is hereby granted without fee, | 
|---|
| 7 |   -- provided that the above copyright notice appears in all copies and | 
|---|
| 8 |   -- that both that copyright notice and this permission notice appear | 
|---|
| 9 |   -- in supporting documentation.  Silicon Graphics makes no | 
|---|
| 10 |   -- representations about the suitability of this software for any | 
|---|
| 11 |   -- purpose.  It is provided "as is" without express or implied warranty. | 
|---|
| 12 |   --> | 
|---|
| 13 | <Head> | 
|---|
| 14 | <Title>Challenge</Title> | 
|---|
| 15 | <BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"  | 
|---|
| 16 |         ALINK="#ff0000">  | 
|---|
| 17 | <IMG SRC="../../../boost.png"  | 
|---|
| 18 |      ALT="C++ Boost" width="277" height="86">  | 
|---|
| 19 |  | 
|---|
| 20 | <BR Clear> | 
|---|
| 21 |  | 
|---|
| 22 |  | 
|---|
| 23 | <h2>Boost Graph Library Challenge and To-Do Items</h2> | 
|---|
| 24 |  | 
|---|
| 25 |  | 
|---|
| 26 | <ul> | 
|---|
| 27 |  | 
|---|
| 28 | <li>Dynamic graph algorithms such as described in <a | 
|---|
| 29 | href="http://citeseer.ist.psu.edu/eppstein99dynamic.html">Dynamic Graph | 
|---|
| 30 | Algorithms</a> and <a | 
|---|
| 31 | href="http://citeseer.ist.psu.edu/alberts98software.html">A Software | 
|---|
| 32 | Library of Dynamic Graph Algorithms</a>. | 
|---|
| 33 |  | 
|---|
| 34 | <li>Polish up code/docs for pending items and champion the formal | 
|---|
| 35 | review. The pending items are:</li> | 
|---|
| 36 |   <ul> | 
|---|
| 37 |    <li><tt>container_traits.hpp</tt> (this should also include | 
|---|
| 38 |      the work Matt Austern is doing on this topic)</li> | 
|---|
| 39 |  | 
|---|
| 40 |    <li>The queues and heaps: <tt>queue.hpp</tt>, | 
|---|
| 41 |      <tt>mutable_queue.hpp</tt>, <tt>fibonacci_heap.hpp</tt>. | 
|---|
| 42 |       Somehow merge implementation with Dietmer's heaps and queues.</li> | 
|---|
| 43 |  | 
|---|
| 44 |    <li><tt>disjoint_sets</tt> </li> | 
|---|
| 45 |   </ul> | 
|---|
| 46 |  | 
|---|
| 47 | <li>Construct a set of planar graph algorithms.</li> | 
|---|
| 48 |   <ul> | 
|---|
| 49 |    <li> Is the graph planar?</li> | 
|---|
| 50 |    <li> "Walk around the block" and similar open and closed neighborhood  | 
|---|
| 51 | traversals. Note that edge traversals need to resolve to particular ends  | 
|---|
| 52 | and sides (see below), not just to the edge as a whole.</li> | 
|---|
| 53 |    <li> Given a point, find the nearest vertex, edge, or bounded polygon.  | 
|---|
| 54 | Again, edges are viewed as having left and right sides.</li> | 
|---|
| 55 |    <li> Given a line segment, find intersecting vertices, edges, or bounded  | 
|---|
| 56 | polygons.</li> | 
|---|
| 57 |    <li> Given a polygon, find intersecting whatever...</li> | 
|---|
| 58 |    <li> Various minimum bounding rectangle and clipping problems.</li> | 
|---|
| 59 |    <li> Construct a planar embedding of a planar graph.</li> | 
|---|
| 60 |    <li> Find a balanced separator of a graph.</li> | 
|---|
| 61 |    <li> Modify adjacency_list so that the out-edges can be ordered | 
|---|
| 62 |     according to a user defined comparison object.</li> | 
|---|
| 63 |   </ul> | 
|---|
| 64 |  | 
|---|
| 65 | <li>Rewrite the Qhull algorithm using the Boost Graph Library (this is | 
|---|
| 66 | high difficulty challenge).  Or, for a more manageable challenge, | 
|---|
| 67 | write an interface for Qhull with the BGL.  <a | 
|---|
| 68 | href="http://www.geom.umn.edu/locate/qhull">Qhull</a> computes the | 
|---|
| 69 | convex hull, Delaunay triangulation, Voronoi diagram, and halfspace | 
|---|
| 70 | intersection about a point.  Qhull runs in 2-d, 3-d, 4-d, and higher | 
|---|
| 71 | dimensions.  Qhull is used for collision detection, animation, plate | 
|---|
| 72 | tectonics, 3-d modeling, robot motion planning, and other <a | 
|---|
| 73 | href="http://www.geom.umn.edu/~bradb/qhull-news.html#use">applications</a>. | 
|---|
| 74 | It is currently difficult to use from a C++ program. | 
|---|
| 75 |  | 
|---|
| 76 | </li> | 
|---|
| 77 |  | 
|---|
| 78 |  | 
|---|
| 79 | <li>Explore the use of Algorithm Objects as an alternative to | 
|---|
| 80 |   the current approach with visitors.</li> | 
|---|
| 81 |  | 
|---|
| 82 | <li>Analyze the algorithms that do not yet have visitors, and | 
|---|
| 83 |   come up with visitor interfaces for them.</li> | 
|---|
| 84 |  | 
|---|
| 85 | <li>Add a check in the adjacency_list class to make sure | 
|---|
| 86 |   all the vertex property template arguments have kind=vertex_property_tag | 
|---|
| 87 |   and all edge property template arguments have kind=edge_property_tag.</li> | 
|---|
| 88 |  | 
|---|
| 89 | <li>Clean up the output functions in graph_utility.hpp to | 
|---|
| 90 |   use streams, and document all the utility functions. Replace | 
|---|
| 91 |   the random number stuff with calls to the boost random number generator.</li> | 
|---|
| 92 |  | 
|---|
| 93 | <li>Modularize the tests in test/graph.cpp to apply to particular | 
|---|
| 94 |   concepts. Make sure there are run-time tests for every BGL concept.</li> | 
|---|
| 95 |  | 
|---|
| 96 | <li>Write tests for the BGL algorithms. There are a few, but | 
|---|
| 97 |    more are needed. The example provide a sanity check but do not | 
|---|
| 98 |    provide full coverage.</li> | 
|---|
| 99 |  | 
|---|
| 100 | <li>Write up the examples from Knuth's <i>Stanford GraphBase</i> using | 
|---|
| 101 |   the BGL. The file <a | 
|---|
| 102 |   href="../example/miles_span.cpp"><tt>examples/miles_span.cpp</tt></a> | 
|---|
| 103 |   is a start.</li> | 
|---|
| 104 |  | 
|---|
| 105 | <li>Further testing of the <tt>subgraph</tt> class and add more | 
|---|
| 106 |    features.</li> | 
|---|
| 107 |  | 
|---|
| 108 | <li>Implement a minimum-cost maximum-flow algorithm.</li> | 
|---|
| 109 |  | 
|---|
| 110 | <li>Make the <tt>type</tt> of all (internal) property maps convertible to the <tt>const_type</tt> of the property maps.<li> | 
|---|
| 111 | </ul> | 
|---|
| 112 |  | 
|---|
| 113 | <br> | 
|---|
| 114 | <HR> | 
|---|
| 115 | <TABLE> | 
|---|
| 116 | <TR valign=top> | 
|---|
| 117 | <TD nowrap>Copyright © 2000-2001</TD><TD> | 
|---|
| 118 | <A HREF="../../../people/jeremy_siek.htm">Jeremy Siek</A>, Indiana University (<A HREF="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</A>) | 
|---|
| 119 | </TD></TR></TABLE> | 
|---|
| 120 |  | 
|---|
| 121 | </BODY> | 
|---|
| 122 | </HTML>  | 
|---|