history.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <HTML>
  2. <!--
  3. Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 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>Boost Graph Library: History</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. <h1>History of the Boost Graph Library</h1>
  16. The Boost Graph Library began its life as the Generic Graph Component
  17. Library (GGCL), a software project at the <a
  18. href="https://web.archive.org/web/20010516042117/http://www.lsc.nd.edu/">Lab for Scientific Computing (LSC)</a> at
  19. the University of Notre Dame, under the direction of Professor <a
  20. href="https://homes.cs.washington.edu/~al75">Andrew Lumsdaine</a>. The Lab's
  21. research directions include numerical linear algebra, parallel
  22. computing, and software engineering (including generic programming).
  23. <p>
  24. Soon after the Standard Template Library was released, work began at
  25. the LSC to apply generic programming to scientific computing. The <a
  26. href="https://en.wikipedia.org/wiki/Matrix_Template_Library">Matrix Template Library</a>
  27. (Jeremy Siek's masters thesis) was one of the first projects. Many of
  28. the lessons learned during construction of the MTL were applied to the
  29. design and implementation of the GGCL.
  30. <p>
  31. Graph algorithms play an important role in sparse matrix computations,
  32. so the LSC had a need for a good graph library. However, none of the
  33. available graph libraries (LEDA, GTL, Stanford GraphBase) were
  34. written using the generic programming style of the STL, and hence did
  35. not fulfill the flexibility and high-performance requirements of the
  36. LSC. Others were also expressing interest in a generic C++ graph
  37. library. During a meeting with Bjarne Stroustrup we were introduced to
  38. several people at AT\&T who needed such a library. There had also been
  39. earlier work in the area of generic graph algorithms, including some
  40. codes written by Alexander Stepanov, and Dietmar K&uuml;hl's masters
  41. thesis.
  42. <p>
  43. With this in mind, and motivated by homework assignments in his
  44. algorithms class, Jeremy began prototyping an interface and some graph
  45. classes in the spring on 1998. Lie-Quan Lee then developed the first
  46. version of GGCL, which became his masters thesis project.
  47. <p>
  48. The following year, Jeremy went to work for SGI with Alexander
  49. Stepanov and Matt Austern. During this time Alex's disjoint-sets based
  50. connected components algorithm was added to GGCL, and Jeremy began
  51. working on the concept documentation for GGCL similar to Matt's STL
  52. documentation.
  53. <p>
  54. While working at SGI, Jeremy heard about Boost and was excited to find
  55. a group of people interested in creating high-quality C++
  56. libraries. At boost there were several people interested in generic
  57. graph algorithms, most notably Dietmar K&uuml;hl. Some discussions
  58. about generic interfaces for graph structures resulted in the a
  59. revision of GGCL which closely resembles the current Boost Graph
  60. Library interface.
  61. <p>
  62. On September 4, 2000 GGCL passed the Boost formal review and became
  63. the Boost Graph Library (BGL). The first release of BGL was
  64. September 27, 2000.
  65. <h2>Changes by version</h2>
  66. <a name="by-version">
  67. <ul>
  68. <a name="1.36.0"></a><li>Version 1.36.0<br><b>New algorithms and components</b>
  69. <ul>
  70. <li><a href="r_c_shortest_paths.html"><tt>r_c_shortest_paths</tt></a>, resource-constrained shortest paths, from Michael Drexl.</li>
  71. </ul>
  72. </li>
  73. <a name="1.35.0"></a><li>Version 1.35.0<br><b>New algorithms and components</b>
  74. <ul>
  75. <li><a href="boykov_kolmogorov_max_flow.html"><tt>boykov_kolmogorov_max_flow</tt></a> (formerly kolmogorov_max_flow), from Stephan Diederich as part of the <a href="http://code.google.com/soc/">2006 Google Summer of Code</a>.</li>
  76. <li><a href="read_dimacs.html">read_dimacs_max_flow</a> and <a href="write_dimacs.html">write_dimacs_max_flow</a> for max-flow problems, from Stephan Diederich.</li>
  77. <li><a href="read_graphml.html">read_graphml</a> and <a href="write_graphml.html">write_graphml</a> for <a href="http://graphml.graphdrawing.org/">GraphML</a> input/output, from Tiago de Paula Peixoto.</li>
  78. <li><a href="howard_cycle_ratio.html"><tt>minimum_cycle_ratio</tt> and <tt>maximum_cycle_ratio</tt></a>, from Dmitry Bufistov and Andrey Parfenov.</li>
  79. <li><a href="boyer_myrvold.html"><tt>boyer_myrvold_planarity_test</tt></a>, along with a suite of <a href="planar_graphs.html">algorithms for planar graphs</a>, from Aaron Windsor.</li>
  80. </ul><br><b>Enhancements</b><br>
  81. <ul>
  82. <li><a href="leda_conversion.html">LEDA Adaptor</a> improvements, from Jens M&uuml;ller.</li>
  83. </ul>
  84. </li><br>
  85. <a name="1.34.1"></a><li>Version 1.34.1</br><b>Bug Fixes</b><br>
  86. <ul>
  87. <li><a href="bellman_ford_shortest.html"><tt>bellman_ford_shortest_paths</tt></a>: fixed a bug where certain negative cycles were not correctly detected.</li>
  88. </ul>
  89. <a name="1.34.0"></a><li>Version 1.34.0<br><b>New algorithms and components</b>
  90. <ul>
  91. <li><a href="maximum_matching.html"><tt>edmonds_maximum_cardinality_matching</tt></a>, from Aaron Windsor.</li>
  92. <li><a href="lengauer_tarjan_dominator.htm"><tt>lengauer_tarjan_dominator_tree</tt></a>, from JongSoo Park.</li>
  93. <li><a href="compressed_sparse_row.html"><tt>compressed_sparse_row_graph</tt></a>, from Jeremiah Willcock and Douglas Gregor of Indiana University.</li>
  94. <li><a href="sorted_erdos_renyi_gen.html"><tt>sorted_erdos_renyi_iterator</tt></a>, from Jeremiah Willcock of Indiana University.</li>
  95. </ul><br><b>Enhancements</b><br>
  96. <ul>
  97. <li>Note: the name of the compiled library for GraphViz reading is now called <code>boost_graph</code> rather than <code>bgl-viz</code>.</li>
  98. <li><a href="biconnected_components.html"><tt>biconnected_components</tt></a> now has a visitor parameter and supports named parameters, from Janusz Piwowarski.</li>
  99. <li><a href="adjacency_matrix.html"><tt>adjacency_matrix</tt></a> now models the <a href="BidirectionalGraph.html">Bidirectional Graph</a> concept.</li>
  100. <li><a href="adjacency_list.html"><tt>adjacency_list</tt></a> is now <a href="../../serialization/doc/index.html">Serializable</a>, from Jeremy Siek of Rice University.</li>
  101. <li>Added <tt>edges_size_type</tt> and <tt>vertices_size_type</tt> to <tt>adjacency_list_traits</tt>, from Jeremy Siek of Rice University.</li>
  102. <li>Added <tt>operator< </tt>, etc. to the edge descriptor of <tt>adjacency_list</tt>,
  103. from Jeremy Siek of Rice University.</li>
  104. </ul>
  105. <br><b>Bug Fixes</b><br>
  106. <ul>
  107. <li>Fixed a bug that causes the relaxed heap to fail on x86 Linux.</li>
  108. <li>Bundled properties now work with adjacency list I/O.</li>
  109. <li><a href="floyd_warshall_shortest.html"><tt>floyd_warshall_all_pairs_shortest_paths</tt></a> now properly uses its <tt>compare</tt>, <tt>inf</tt>, and <tt>zero</tt> parameters.</li>
  110. <li><a href="johnson_all_pairs_shortest.html"><tt>johnson_all_pairs_shortest_paths</tt></a> now supports <tt>compare</tt>, <tt>combine</tt>, <tt>inf</tt>, and <tt>zero</tt>.</li>
  111. <li>Fixed a bug in smallest_last_vertex_ordering.hpp which could cause a vertex to be moved to the wrong bucket during an BucketSorter update.
  112. </ul>
  113. <br>
  114. </li>
  115. <li>Version 1.33.1<br><b>Bug Fixes</b>
  116. <ul>
  117. <li><a href="fruchterman_reingold.html"><TT>fruchterman_reingold_force_directed_layout</TT></A>: Fixed enumeration of grid-force pairs, which caused some odd graph formations along grid lines.</li>
  118. <li><a href="king_ordering.html"><tt>king_ordering</tt></a> and <a
  119. href="cuthill_mckee_ordering.html"><tt>cuthill_mckee_ordering</tt></a>: Fixed bug that caused failures with the multi-component version of these algorithms.</li>
  120. </ul></li>
  121. <li>Version 1.33.0<br><b>New algorithms and components</b>
  122. <ul>
  123. <li><a href="python.html">Experimental Python bindings</a>, from Doug Gregor and Indiana University.</li>
  124. <LI><A href="floyd_warshall_shortest.html"><TT>floyd_warshall_all_pairs_shortest_paths</TT></A>, from Lauren Foutz and Scott Hill.</LI>
  125. <LI><A href="astar_search.html"><TT>astar_search</TT></A>, from Kristopher Beevers and Jufeng Peng.</LI>
  126. <LI><A href="fruchterman_reingold.html"><TT>fruchterman_reingold_force_directed_layout</TT></A>, from Doug Gregor and Indiana University.</a></LI>
  127. <LI><A href="biconnected_components.html"><tt>biconnected_components</tt> and <tt>articulation_points</tt></a>, from Indiana University.</a></li>
  128. <li><a href="gursoy_atun_layout.html"><tt>gursoy_atun_layout</tt></a>, from Jeremiah Willcock and Doug Gregor of Indiana University.</li>
  129. <li><a href="king_ordering.html"><tt>king_ordering</tt></a>, from
  130. D. Kevin McGrath of Indiana University.</li>
  131. <li><a href="erdos_renyi_generator.html"><tt>erdos_renyi_iterator</tt></a></li>
  132. <li><a href="plod_generator.html"><tt>plod_iterator</tt></a></li>
  133. <li><a href="small_world_generator.html"><tt>small_world_iterator</tt></a></li>
  134. </ul><br><b>Enhancements</b><br>
  135. <ul>
  136. <li><a href="bellman_ford_shortest.html"><tt>bellman_ford_shortest_paths</tt></a> now permits one to specify the starting vertex, so that it will perform its own initialization.</li>
  137. <li><a href="undirected_dfs.html"><tt>undirected_dfs</tt></a> is now data-recursive, resulting in improved performance in some cases, from Synge Todo.</li>
  138. <li><a href="dijkstra_shortest_paths.html"><tt>dijkstra_shortest_paths</tt></a> now uses a relaxed heap&nbsp;[<A
  139. HREF="bibliography.html#driscoll88">61</A>] as its priority queue, improving its complexity to <em>O(V log V)</em> and improving real-world performance for larger graphs.</li>
  140. <li><a href="read_graphviz.html"><code>read_graphviz</code></a> now has a new, Spirit-based parser that works for all graph types and supports arbitrary properties on the graph, from Ron Garcia. The old, Bison-based GraphViz reader has been deprecated and will be removed in a future Boost release.</li>
  141. <li><a
  142. href="write-graphviz.html"><code>write_graphviz</code></a> now
  143. supports output of dynamic properties (as read in through the
  144. new <code>read_graphviz</code>).</li>
  145. <li><a
  146. href="cuthill_mckee_ordering.html"><tt>cuthill_mckee_ordering</tt></a>
  147. has been recast as an invocation of
  148. <tt>breadth_first_search</tt> and now supports graphs with
  149. multiple components.</li>
  150. <li><a href="subgraph.html"><tt>subgraph</tt></a> now supports
  151. <a href="bundles.html">bundled
  152. properties</a>. <code>get_property</code> now refers to the
  153. subgraph property, not the root graph's property.</li></li>
  154. <li><a href="filtered_graph.html"><tt>filtered_graph</tt></a> now
  155. supports <a href="bundles.html">bundled properties</a>.</li>
  156. <li><a href="reverse_graph.html"><tt>reverse_graph</tt></a> now
  157. supports <a href="bundles.html">bundled properties</a>,
  158. <tt>set_property</tt>, and <tt>get_property</tt>.</li>
  159. </ul><br><b>Bug fixes</b><br>
  160. <ul>
  161. <li><a href="bellman_ford_shortest.html"><tt>bellman_ford_shortest_paths</tt></a> now deals with unreachable vertices better.</li>
  162. <li><a href="adjacency_list.html"><tt>adjacency_list</tt></a>: parallel edge removal with <tt>OutEdgeListS = listS</tt> has been fixed. Copying and swapping has been fixed.</li>
  163. <li><a href="incremental_components.html">Incremental connected components</a>: fixed a bug in the <tt>incremental_components</tt> routine that may have caused incorrect results.</li>
  164. <li>The <tt>remove_out_edge_if</tt> function for an undirected <a href="adjacency_list.html"><tt>adjacency_list</tt></a> has been rewritten and should no longer dereference singular iterators.</li>
  165. <li><a href="write-graphviz.html"><tt>write_graphviz</tt></a> now accepts a <tt>vertex_id</tt> parameter that is used to name the nodes.</li>
  166. <li><a href="read_graphviz.html"><tt>read_graphviz</tt></a> now accepts empty attribute lists.</li>
  167. <li><a href="sequential_vertex_coloring.html"><tt>sequential_vertex_coloring</tt></a> has been updated, tested, and documented.</li>
  168. </ul>
  169. </li>
  170. </ul>
  171. <br>
  172. <HR>
  173. <TABLE>
  174. <TR valign=top>
  175. <TD nowrap>Copyright &copy; 2000-2001</TD><TD>
  176. <A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
  177. Indiana University (<A
  178. HREF="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</A>)<br>
  179. <A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee@cs.indiana.edu">llee@cs.indiana.edu</A>)<br>
  180. <A HREF="https://homes.cs.washington.edu/~al75">Andrew Lumsdaine</A>,
  181. Indiana University (<A
  182. HREF="mailto:lums@osl.iu.edu">lums@osl.iu.edu</A>)
  183. </TD></TR></TABLE>
  184. </BODY>
  185. </HTML>
  186. <!-- LocalWords: gif ALT GGCL LSC Lumsdaine Siek's MTL LEDA GTL GraphBase STL
  187. -->
  188. <!-- LocalWords: Bjarne Stroustrup hl's Quan SGI Stepanov Austern Alex's hl
  189. -->
  190. <!-- LocalWords: Dietmar BGL siek htm Univ
  191. -->