#16603: permanental_minor_vector, matching polynomial
-------------------------------------+-------------------------------------
Reporter: pernici | Owner:
Type: enhancement | Status: needs_info
Priority: major | Milestone: sage-6.4
Component: linear algebra | Resolution:
Keywords: | Merged in:
Authors: Mario Pernici | Reviewers:
Report Upstream: N/A | Work issues:
Branch: | Commit:
u/pernici/ticket/16603 | 19350a4574f4caa2e0b5ad08f66e51930b647a42
Dependencies: | Stopgaps:
-------------------------------------+-------------------------------------
Description changed by pernici:
Old description:
> Added function `permanental_minor_vector`, which computes the polynomial
> of the sums of the permanental minors in an efficient way, see
> [http://arxiv.org/abs/1406.5337 arXiv:1406.5337].
>
> As a benchmark, consider [http://www.jaapspies.nl/mathfiles/dancing.sage
> dancing.sage]. On my computer `dance(10)` took 3 hours using sage-6.2 and
> 0.08 seconds with this patch!
>
> In the case of banded matrices, the speedup is greater, since for fixed
> bandwidth the new algorithm is polynomial; here is a permanent which
> cannot be computed with sage-6.2
>
> {{{
> sage: from sage.matrix.matrix_misc import permanental_minor_vector
> sage: n, w = 100, 5
> sage: m = matrix([[i*j + 1 if abs(i-j) <= w else 0
> ....: for i in range(n)] for j in range(n)])
> sage: time p = permanental_minor_vector(m, 1)
> CPU times: user 1.11 s, sys: 20 ms, total: 1.13 s
> Wall time: 1.07 s
> }}}
>
> This can be used to compute the matching polynomial of bipartite graphs
> much faster than matching_polynomial for certain graphs. For example,
> using the attached file to compute the reduced adjacency matrix of a 2d
> grid (n1, n2):
> {{{
> sage: from grid import sq_mat
> sage: from sage.matrix.matrix_misc import permanental_minor_vector
> sage: m = matrix(sq_mat(6, 6))
> sage: time a = permanental_minor_vector(m)
> Wall time: 16.3 ms
>
> sage: g = BipartiteGraph(m)
> sage: time p = g.matching_polynomial()
> Wall time: 52 s
> }}}
> For n1,n2=10,10 permanental_minor_vector(m) takes 0.7s
> For n1,n2=50,6 it takes 0.8s
New description:
Added function `permanental_minor_polynomial`, which computes the
polynomial of the sums of the permanental minors in an efficient way, see
[http://arxiv.org/abs/1406.5337 arXiv:1406.5337].
As a benchmark, consider [http://www.jaapspies.nl/mathfiles/dancing.sage
dancing.sage]. On my computer `dance(10)` took 3 hours using sage-6.2; it
takes 0.08 seconds with this patch, using the
"ButeraPernici" algorithm, 13 seconds using the Godsil algorithm.
In the case of banded matrices, the speedup is greater, since for fixed
bandwidth the new algorithm is polynomial; here is a permanent which
cannot be computed with sage-6.2
{{{
sage: from sage.matrix.matrix_misc import permanental_minor_polynomial
sage: n, w = 100, 5
sage: m = matrix([[i*j + 1 if abs(i-j) <= w else 0
....: for i in range(n)] for j in range(n)])
sage: time p = permanental_minor_polynomial(m, permanent_only=True)
Wall time: 773 ms
}}}
This can be used to compute the matching polynomial of bipartite graphs
much faster than matching_polynomial for certain graphs. For example,
using the attached file to compute the reduced adjacency matrix of a 2d
grid (n1, n2):
{{{
sage: from grid import sq_mat
sage: from sage.matrix.matrix_misc import permanental_minor_polynomial
sage: m = matrix(sq_mat(6, 6))
sage: time a = permanental_minor_polynomial(m)
Wall time: 10.6 ms
sage: g = BipartiteGraph(m)
sage: time p = g.matching_polynomial()
Wall time: 46.9 s
}}}
For n1,n2=10,10 permanental_minor_vector(m) takes 0.3s
For n1,n2=50,6 it takes 0.5s
--
--
Ticket URL: <http://trac.sagemath.org/ticket/16603#comment:25>
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 unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.