challenge.html 4.4 KB

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