#12362: Improvement of GNP generators for graphs and digraphs
----------------------------+-----------------------------------------------
   Reporter:  dcoudert      |          Owner:  jason, ncohen, rlm         
       Type:  enhancement   |         Status:  needs_review               
   Priority:  minor         |      Milestone:  sage-5.0                   
  Component:  graph theory  |       Keywords:  directed graphs, generators
Work_issues:                |       Upstream:  N/A                        
   Reviewer:                |         Author:                             
     Merged:                |   Dependencies:                             
----------------------------+-----------------------------------------------
Changes (by dcoudert):

  * status:  needs_work => needs_review


Comment:

 I have addressed all your remarks. The "detail" was because I have
 stupidly copy/paste your ``(i+1 if directed else 0)``. It should be ``(0
 if directed else i+1)`` ;)

 For graphs, I have decided to let the networkx method as default.
 {{{
 sage: %timeit networkx.gnp_random_graph(1000,0.01)
 5 loops, best of 3: 1.03 s per loop
 sage: %timeit graphs.RandomGNP(1000,0.01,method='sage')
 5 loops, best of 3: 233 ms per loop
 sage: %timeit graphs.RandomGNP(1000,0.01,method='networkx')
 5 loops, best of 3: 66.5 ms per loop
 sage: %timeit networkx.gnp_random_graph(100,0.05,method='sage')
 25 loops, best of 3: 10.9 ms per loop
 sage: %timeit graphs.RandomGNP(100,0.05,method='sage')
 25 loops, best of 3: 11.4 ms per loop
 sage: %timeit graphs.RandomGNP(100,0.05,method='networkx')
 125 loops, best of 3: 3.45 ms per loop
 }}}

 Concerning the average density, it is seems correct with larger sample.
 {{{
 sage: mean([digraphs.RandomDirectedGNP(100,.1, loops = True).density()+.0
 for i in range(500)])
 0.100094400000000
 sage: mean([digraphs.RandomDirectedGNP(100,.1, loops = False).density()+.0
 for i in range(500)])
 0.100155555555556
 sage: mean([digraphs.RandomDirectedGNP(100,.1, loops = False, fast =
 True).density()+.0 for i in range(500)])
 0.0989579797979798
 sage: mean([digraphs.RandomDirectedGNP(100,.1, loops = True, fast =
 True).density()+.0 for i in range(500)])
 0.0988469999999999
 sage: mean([graphs.RandomGNP(100,.1, fast = False,
 method='sage').density()+.0 for i in range(500)])
 0.100131313131313
 sage: mean([graphs.RandomGNP(100,.1, fast = False,
 method='networkx').density()+.0 for i in range(500)])
 0.100190707070707
 sage: mean([graphs.RandomGNP(100,.1, fast = True,
 method='networkx').density()+.0 for i in range(500)])
 0.100002424242424
 sage: mean([graphs.RandomGNP(100,.1, fast = True,
 method='sage').density()+.0 for i in range(500)])
 0.104045165676905
 }}}

 A possible improvement for RandomDirectedGNP is to return a complete
 digraph (with or without loops) when p=1. However, no such function exists
 and it is not relevant in this patch. I let it for another patch.

 D.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/12362#comment:10>
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