#10885: Floyd-Warshall algorithm in Cython
-----------------------------+----------------------------------------------
   Reporter:  ncohen         |       Owner:  jason, ncohen, rlm
       Type:  enhancement    |      Status:  new               
   Priority:  major          |   Milestone:  sage-4.7          
  Component:  graph theory   |    Keywords:                    
     Author:  Nathann Cohen  |    Upstream:  N/A               
   Reviewer:                 |      Merged:                    
Work_issues:                 |  
-----------------------------+----------------------------------------------
 This patch implements a Cython version of the Floyd-Warshall algorithm
 currently available in Sage. Both stay implemented, as the Cython version
 only deals with unweighted graphs, and prefers to add integer values than
 Python objects anyway.

 The performance improvement is obvious for the ``all_pairs_shortest_path``
 method which used by default the Python implementation
 {{{
 sage: g = graphs.PetersenGraph()
 sage: %timeit g.shortest_path_all_pairs()
 625 loops, best of 3: 555 µs per loop
 sage: %timeit g.shortest_path_all_pairs(by_weight=True)
 125 loops, best of 3: 6.44 ms per loop
 sage: g = graphs.Grid2dGraph(5,5)
 sage: %timeit g.shortest_path_all_pairs()
 125 loops, best of 3: 3.77 ms per loop
 sage: %timeit g.shortest_path_all_pairs(by_weight=True)
 5 loops, best of 3: 133 ms per loop
 sage: g = graphs.Grid2dGraph(15,15)
 sage: %timeit g.shortest_path_all_pairs()
 5 loops, best of 3: 753 ms per loop
 sage: %timeit g.shortest_path_all_pairs(by_weight=True)
 (still running)
 }}}
 The new implementation is now the default.

 Meanwhile, the method ``distance_all_pairs`` which already used Cython
 code is not always improved
 {{{
 sage: g = graphs.PetersenGraph()
 sage: %timeit g.distance_all_pairs()
 625 loops, best of 3: 660 µs per loop
 sage: %timeit g.distance_all_pairs(algorithm="Floyd-Warshall")
 625 loops, best of 3: 263 µs per loop

 sage: g = graphs.Grid2dGraph(20,20)
 sage: %timeit g.distance_all_pairs()
 5 loops, best of 3: 951 ms per loop
 sage: %timeit g.distance_all_pairs(algorithm="Floyd-Warshall")
 5 loops, best of 3: 3.08 s per loop
 }}}

 Hence the default behaviour of this method does not change, the two
 algorithms being made available.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10885>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to