<!DOCTYPEhtml PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type"
content="text/html; charset=ISO-8859-1">
<title>AboutHap</title>
</head>
<body style="color: rgb(0, 0, 153); background-color: rgb(204, 255, 255);"
alink="#000066"link="#000066" vlink="#000066">
<br>
<table style="text-align: left; margin-left: auto; margin-right: auto; color: rgb(0, 0, 102);"
border="0" cellpadding="20" cellspacing="10">
<tbody>
<tr align="center">
<thstyle="vertical-align: top;">
<tablestyle="width: 100%; text-align: left;" cellpadding="2"
cellspacing="2">
<tbody>
<tr>
<tdstyle="vertical-align: top;"><a
href="aboutAbelianCategories.html"><small style="color: rgb(0, 0, 102);">Previous</small></a><br>
</td>
<td style="text-align: center; vertical-align: top; color: rgb(0, 0, 102);"><big><span style="font-weight: bold;">About HAP: Computational Issues<br>
</span></big></td>
<tdstyle="text-align: right; vertical-align: top;"><br>
</td>
</tr>
</tbody>
</table>
<big><spanstyle="font-weight: bold;"></span></big><br>
</th>
</tr>
<tr>
<td style="vertical-align: top; background-color: rgb(255, 255, 255); text-align: left;">The
examples in the preceding pages were performed under Debian Linux on
an IBM Thinkpad laptop with a 1.4 GHz Celeron M processor and 256MB of
memory. An uncompiled version of the HAP library was used. Each example
took anything from a few seconds to over two hours to
run. <br>
<br>
It may well be that the performance of several key
functions is far from optimal, and that the library could benefit
from further work on these. We discuss this below.<br>
</td>
</tr>
<tr>
<td style="background-color: rgb(255, 255, 255); vertical-align: top;"><span style="font-family: helvetica,arial,sans-serif; font-weight: bold;">1.
ResolutionFiniteGroup(gens,n)<br>
</span><span style="font-family: helvetica,arial,sans-serif; font-weight: bold;"><span style="text-decoration: underline;"><br>
</span></span><spanstyle="font-family: serif;">a) This function
underlies most computations of ZG-resolutions for a finite group G. <br>
<br>
When n=2 the function just computes a group presentation for G, and the
method is essentially that of John Cannon's algorithm used in the GAP
function <spanstyle="font-family: helvetica,arial,sans-serif;">PresentationViaCosetTable(G). <span style="font-family: serif;"></span> <spanstyle="font-family: serif;">The
timings (in milliseconds)</span><span style="text-decoration: underline;"><spanstyle="font-weight: bold;"></span></span></span></span><span style="font-family: helvetica,arial,sans-serif; font-weight: bold;"><span style="text-decoration: underline;"><br style="font-family: helvetica,arial,sans-serif;">
</span></span><span style="font-family: helvetica,arial,sans-serif;"><span style="text-decoration: underline;"></span><br style="font-family: serif;">
<spanstyle="font-family: serif; color: rgb(0, 0, 0);">gap>
P:=ResolutionFiniteGroup([(1,2),(1,2,3,4,5,6)],2);;time;</span><br style="font-family: serif; color: rgb(0, 0, 0);">
<spanstyle="font-family: serif;"><span style="color: rgb(0, 0, 0);">7599</span><br style="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
P:=PresentationViaCosetTable(Group([(1,2),(1,2,3,4,5,6)]));;time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">21</span><br>
<br>
suggest that </span></span><span style="font-family: helvetica,arial,sans-serif;"><span style="font-family: serif;">the run time of</span> <span style="font-family: serif;">the resolution function is not optimal.
Some of the timing discrepancy arises because</span></span> the
resolution function first computes the multiplication for G. This pays
off when n>2. Nevertheless,
there is a large remaining discrepancy between the timings
which needs investigation. <br>
<br>
b) The performance of the resolution function for higher n is also very
sensitive to the choice of generators. For certain generating sets the
function produces a significantly "bigger" resolution which can require
excessive memory and run time. This is a feature of the algorithm
rather than the implementation, and might be worth further
investigation. <span style="font-family: helvetica,arial,sans-serif; font-weight: bold;"></span>
</td>
</tr>
<tr>
<td style="text-align: left; background-color: rgb(255, 255, 255); vertical-align: top;"><span style="font-weight: bold; font-family: helvetica,arial,sans-serif;">2.
ResolutionNormalSeries(N,n) </span><span style="font-family: helvetica,arial,sans-serif;"><br>
<br>
<spanstyle="font-family: serif;">a) This function finds a
resolution for G by repeatedly applying a perturbation technique to a
sequence of normal subgroups G=N<sub>1</sub>>N<sub>2</sub>>...>N<sub>k</sub>=1.
The resolution for G is got by combining resolutions for the quotients N<sub>i</sub>/N<sub>i+1</sub>.
The ZG-resolution will have a reasonably small number of free
generators in each dimension provided each Z(</span></span><span style="font-family: helvetica,arial,sans-serif;"><span style="font-family: serif;">N<sub>i</sub>/N<sub>i+1</sub>)-resolution
has not too many generators. Nevertheless, the boundary of a generator
in the ZG-resolution can sometimes be problematically large, as the
following example shows.<br>
<br>
<spanstyle="color: rgb(0, 0, 0);">gap> G:=SmallGroup(64,7);;
N1:=GeneratorsOfGroup(G);;</span><brstyle="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
N2:=GeneratorsOfGroup(NormalSubgroups(G)[6]);; N3:=Identity(G);;</span><br style="color: rgb(0, 0, 0);">
<br>
<spanstyle="color: rgb(0, 0, 0);">gap>
R:=ResolutionNormalSeries([N1,N2,N3],6);;time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">26250<br>
<br>
gap> List([1..R!.dimension(6)],
i->Length(R!.boundary(6,i)));<br>
[ 8, 1446, 1077, 4164, 4280, 4700, 1100, 435, 776, 524, 659, 30, 139,
4, 8, 8 ]<br>
<br>
<spanstyle="color: rgb(0, 0, 102);">If the resolution</span> <span style="color: rgb(0, 0, 102);">R is only required for mod 2 cohomology
calculations then the problem of large boundaries can sometimes be
overcome by setting a fourth parameter equal to 2 as follows.<br>
<br>
<spanstyle="color: rgb(0, 0, 0);">gap>
R:=ResolutionNormalSeries([N1,N2,N3],80,false,2);;time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">131960<br>
<br>
gap> TR:=TensorWithIntegersModP(R,2);;time;<br>
0<br>
<br>
gap> Homology(TR,79,2);time;<br>
80<br>
950<br>
</span></span></span><brstyle="color: rgb(0, 0, 0);">
</span></span><span style="font-family: helvetica,arial,sans-serif;"><span style="font-family: serif;">This shows that for the 7th group G of
order 64 we have H<sub>79</sub>(G,Z<sub>2</sub>) = (Z<sub>2</sub>)<sup>80</sup>.
<br>
<br>
For integral cohomology calculations it might be worth investigating if
higher dimensional Tietze simplifications could sometimes be used
to overcome the problem of resolution generators with large
boundaries. <br>
<br>
b) The computation<br>
<br>
<spanstyle="color: rgb(0, 0, 0);">gap>
L:=LowerCentralSeries(SylowSubgroup(MathieuGroup(24),2));</span><span style="color: rgb(0, 0, 0);"></span><brstyle="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
R:=ResolutionNormalSeries(L,7);;</span><br>
<br>
took just under two hours to produce seven terms of an integral
ZP-resolution for
the Sylow 2-subgroup P (order 1024) of M<sub>24</sub>. The resolution R
has just over 11000 generators in dimension 7. The function <span style="font-family: helvetica,arial,sans-serif;">Homology(TR,6) <span style="font-family: serif;">naively applies GAP's Smith
Normal Form algorithm to the chain complex TR = R(×)<sub>ZP</sub>Z</span></span>
and, in view of the number of generators in dimension 7, would probably
take for ever to complete. However, the matrices for the boundary maps
in TR are in upper triangular block form, and so GAP's SNF algorithm
could be applied in a divide-and-conquer fashion to calculate the 6th
homology of P. A function for this divide-and-conquer approach needs to
be written.<br>
</span></span> </td>
</tr>
<tr>
<td style="vertical-align: top; background-color: rgb(255, 255, 255);"><span style="font-family: helvetica,arial,sans-serif;"><span style="font-weight: bold;">3.
PrimePartDerivedFunctor(G,R,n)</span><brstyle="font-weight: bold;">
<br>
<spanstyle="font-family: serif;">The second integral homology
of, say, the Sylow 2-subgroup of S<sub>14</sub> can be calculated using
a standard GAP function<br>
<br>
<spanstyle="color: rgb(0, 0, 0);">gap>
G:=SylowSubgroup(SymmetricGroup(14),2);;<br>
<br>
</span> <spanstyle="color: rgb(0, 0, 0);">gap>
AbelianInvariantsMultiplier(G);time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">[ 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2 ]</span><brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">974539<br>
<br>
<spanstyle="color: rgb(0, 0, 102);">which takes about 16 minutes
to complete. The following HAP functions are significantly quicker at
this calculation.<br>
<br>
<spanstyle="color: rgb(0, 0, 0);">gap>
L:=PCentralSeries(SylowSubgroup(SymmetricGroup(14),2));;</span><span style="color: rgb(0, 0, 0);"></span><brstyle="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
R:=ResolutionNormalSeries(L,3);;time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">2241<br>
<br>
gap> TR:=TensorWithIntegers(R);; time;<br>
0<brstyle="color: rgb(0, 0, 0);">
</span> <brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap> Homology(TR,2);time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">[ 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2 ]</span><brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">614</span><br>
<br>
In versions of GAP prior to version 4.4.6 the standard function <span style="font-family: helvetica,arial,sans-serif;">AbelianInvariantsMultiplier()
<spanstyle="font-family: serif;">ran very much faster but
sometimes gave the wrong answer. Despite its unreliability, this older
function was certainly based on a sound algorithm and it is probably
more realistic to compare HAP's timings against the older function. For
example, the GAP version 4.4.4 commands</span></span><br>
<br>
<spanstyle="color: rgb(0, 0, 0);">gap>
AbelianInvariantsMultiplier(MathieuGroup(23));time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">[ 2 ]</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">5650</span><br>
<br>
take under 6 seconds to calculate the second integral homology of the
Mathieu group M<sub>23</sub>. (The calculation is not correct
since in fact H<sub>2</sub>(M<sub>23</sub>,Z) = 0.)<br>
<br>
The Sylow p-subgroups of </span></span></span></span><span style="font-family: helvetica,arial,sans-serif;"><span style="font-family: serif;"><spanstyle="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 102);">M<sub>23</sub> are non-cyclic for p=2,3
only. So HAP's function PrimePartOfIntegralHomology() can be used to
calculate </span></span></span></span><span style="font-family: helvetica,arial,sans-serif;"><span style="font-family: serif;"><spanstyle="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 102);">H<sub>2</sub>(M<sub>23</sub>,Z)=0 as
follows. Note however that this approach is a good bit slower than GAP
version 4.4.4's standard function.
<br>
<spanstyle="color: rgb(0, 0, 0);">gap> G:=MathieuGroup(23);;
P2:=SylowSubgroup(G,2);; P3:=SylowSubgroup(G,3);;</span><span style="color: rgb(0, 0, 0);"></span><brstyle="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
gensP2:=GeneratorsOfGroup(P2);; gensP3:=GeneratorsOfGroup(P3);;</span><br style="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
R:=ResolutionFiniteGroup(gensP2,3);;time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">690</span><br style="color: rgb(0, 0, 0);">
</span></span></span></span><br>
<spanstyle="color: rgb(0, 0, 0);">gap>
S:=ResolutionFiniteGroup(gensP3,3);;time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">0<br>
<br>
gap> T:=TensorWithIntegers;;<br>
</span> <br>
<spanstyle="color: rgb(0, 0, 0);">gap>
PrimePartDerivedFunctor(G,R,T,2);time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">[ ]</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">7764</span><br style="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
PrimePartDerivedFunctor(G,S,T,2);time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">[ ]</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">419</span><br style="color: rgb(0, 0, 0);">
<br>
<spanstyle="color: rgb(0, 0, 102);">The discrepancy
between the timings for the two approaches is probably because t<span style="font-family: helvetica,arial,sans-serif;"><span style="font-family: serif;"></span></span></span><span style="color: rgb(0, 0, 102);">he
function <spanstyle="font-family: helvetica,arial,sans-serif;">PrimePartOfIntegralHomology()
</span></span><spanstyle="color: rgb(0, 0, 102);"><span style="font-family: helvetica,arial,sans-serif;"><span style="font-family: serif;">computes a resolution for a large number
of
double coset representative of P in G. It should be possible to
restrict the computations to a subset of these representatives. <br>
<br>
Sometimes HAP's functions are a bit faster than even the older style="font-family: helvetica,arial,sans-serif;">
AbelianInvariantsMultiplier()</span> function. Compare for example the
GAP version 4.4.4 commands<br>
<br>
<spanstyle="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">gap>
P:=SylowSubgroup(SymmetricGroup(20),2);;</span><br style="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
AbelianInvariantsMultiplier(P); time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">[ 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]</span><brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">672120</span><br>
<br>
<spanstyle="color: rgb(0, 0, 102);">versus<span style="color: rgb(0, 0, 0);"></span></span></span></span><span style="color: rgb(0, 0, 0);"></span><spanstyle="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);"></span><spanstyle="color: rgb(0, 0, 0);"></span><br style="color: rgb(0, 0, 0);">
<brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap>
R:=ResolutionNormalSeries(BigStepLCS(P,8),3);; time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">6882<br>
<br>
gap> TR:=TensorWithIntegers(R);;time;<br>
0<brstyle="color: rgb(0, 0, 0);">
</span> <brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">gap> Homology(TR,2);time;</span><br style="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">[ 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]</span><brstyle="color: rgb(0, 0, 0);">
<spanstyle="color: rgb(0, 0, 0);">2381<br>
<br>
<spanstyle="color: rgb(0, 0, 102);">(In GAP version 4.4.6 the
function <spanstyle="font-family: helvetica,arial,sans-serif;">AbelianInvariantsMultiplier(G)
<spanstyle="font-family: serif;">ran for about 10 minutes</span>
<spanstyle="font-family: serif;">on G=M</span><sub style="font-family: serif;">23</sub><spanstyle="font-family: serif;">
before exceeding the permitted memory. It failed to complete in
over an hour for G the Sylow 2-subgroup of S<sub>20</sub>.)</span></span></span><br>
</span> </span> </td>
</tr>
<tr>
<tdstyle="vertical-align: top;">
<table style="margin-left: auto; margin-right: auto; width: 100%; text-align: left;"
border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<tdstyle="vertical-align: top;"><a style="color: rgb(0, 0, 102);" href="aboutAbelianCategories.html">Previous
Page</a><br>
</td>
<tdstyle="text-align: center; vertical-align: top;"><a
href="aboutContents.html"><spanstyle="color: rgb(0, 0, 102);">Contents</span></a><br>
</td>
<tdstyle="text-align: right; vertical-align: top;"><a
href="aboutExtensions.html"><spanstyle="color: rgb(0, 0, 102);"></span><br>
</a> </td>
</tr>
</tbody>
</table>
<a href="aboutTopology.html"><br>
</a> </td>
</tr>
</tbody>
</table>
<br>
<br>
</body>
</html>
Messung V0.5
¤ Dauer der Verarbeitung: 0.2 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.