#10534: Generation of subwords, subsets and set partitions
-----------------------------+----------------------------------------------
Reporter: vdelecroix | Owner: vdelecroix
Type: enhancement | Status: needs_work
Priority: major | Milestone: sage-4.7.1
Component: combinatorics | Keywords: generation, combinatorics, set,
subset, partition
Work_issues: | Upstream: N/A
Reviewer: | Author: vdelecroix
Merged: | Dependencies:
-----------------------------+----------------------------------------------
Changes (by vdelecroix):
* owner: => vdelecroix
Old description:
> This ticket stands for a faster method of exhaustive generation of
>
> * subwords
> * subsets
> * set partitions (ordered and non orderered)
>
> Moreover we correct bugs and typos (see details in the patch, doctest
> coverage is now 100%) and create some random generation capabilities.
>
> To fit with FiniteEnumeratedSet, cardinality returns now a Sage Integer
> (and no more a Python int).
>
> Timings (on Intel(R) Core(TM)2 Duo CPU T8100 @ 2.10GHz)
>
> Old version
>
> {{{
> sage: S = SetPartitions(8,[3,3,2])
> sage: timeit('for p in S: pass')
> 5 loops, best of 3: 401 ms per loop
>
> sage: S = SetPartitions(9,[3,3,2,1])
> sage: timeit('for p in S: pass')
> 5 loops, best of 3: 4 s per loop
> }}}
> New version
>
> {{{
> sage: S = SetPartitions(8,[3,3,2])
> sage: timeit('for p in S: pass')
> 5 loops, best of 3: 130 ms per loop
> sage: timeit('for p in S._fast_iterator(): pass')
> 25 loops, best of 3: 10.4 ms per loop
>
> sage: S = SetPartitions(9,[3,3,2,1])
> sage: timeit('for p in S: pass')
> 5 loops, best of 3: 1.43 s per loop
> sage: timeit('for p in S._fast_iterator(): pass')
> 5 loops, best of 3: 91.3 ms per loop
> }}}
New description:
This ticket stands for a faster method of exhaustive generation of
* subwords
* subsets
* set partitions (ordered and non orderered)
Moreover, the patch provides
* bugs and typos corrections (doctest coverage is now 100%)
* random generation capabilities
* modified cardinality method which always return a Sage Integer (and no
more Python int or Sage Rational)
Some timings (on Intel(R) Core(TM)2 Duo CPU T8100 @ 2.10GHz)
Old version
{{{
sage: S = SetPartitions(8,[3,3,2])
sage: timeit('for p in S: pass')
5 loops, best of 3: 401 ms per loop
sage: S = SetPartitions(9,[3,3,2,1])
sage: timeit('for p in S: pass')
5 loops, best of 3: 4 s per loop
}}}
New version
{{{
sage: S = SetPartitions(8,[3,3,2])
sage: timeit('for p in S: pass')
5 loops, best of 3: 130 ms per loop
sage: timeit('for p in S._fast_iterator(): pass')
25 loops, best of 3: 10.4 ms per loop
sage: S = SetPartitions(9,[3,3,2,1])
sage: timeit('for p in S: pass')
5 loops, best of 3: 1.43 s per loop
sage: timeit('for p in S._fast_iterator(): pass')
5 loops, best of 3: 91.3 ms per loop
}}}
--
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10534#comment:6>
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.