Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Thank you Vincent, that's what I am looking for. I did the test to compare the speed, I did it first for small groups repeat 5000 times, then for large groups.

test on small groups repeat 5000 times.
Runing time for ClosureGroup(H,J) is 0:00:25.837925
Runing time for ClosureGroup(H,w) is 0:00:21.571264
Runing time for PermutationGroup(H.gens()+J.gens()) is 0:00:00.943834
Runing time for PermutationGroup(H.gens()+list(w)) is 0:00:00.810795

test on large groups only 1 time.
Runing time for ClosureGroup(H,J) is 0:01:09.245275
Runing time for ClosureGroup(H,w) is 0:01:10.550019
Runing time for PermutationGroup(H.gens()+J.gens()) is 0:00:00.001400
Runing time for PermutationGroup(H.gens()+list(w)) is 0:00:00.000649

Notes: 25.837925 means 25 seconds, 0:01:09.245275 means 1 minutes and 9 seconds. H and J are groups, w is a generator of a group, somehow PermutationGroup(H.gens()+J.gens()) is way faster than ClosureGroup, maybe ClosureGroup is doing some extra validation or computing?

Here is the python/sage code:

from sage.all import *
from datetime import datetime

case = 'small'
#case = 'large'

if case == 'small':
    H = PermutationGroup([(2,3),(4,5)])
    J = PermutationGroup([(1,2),(3,4,5)])
    W = PermutationGroup([(1,4)])
    w = W.gen(0)
    iteration = 5000
    print 'test on small groups repeat {0} times.'.format(iteration)
elif case == 'large':
    H = CyclicPermutationGroup(200)
    J = AlternatingGroup(200)
    W = AlternatingGroup(200)
    #J = DihedralGroup(10000)
    #W = DihedralGroup(10000)
    w = W.gen(1)
    iteration = 1
    print 'test on large groups only {0} time.'.format(iteration)

start = datetime.now()
for i in range(iteration):
    P1_gap = gap.ClosureGroup(H,J)  # close two group
    P1 = PermutationGroup(gap_group=P1_gap)    
print 'Runing time for ClosureGroup(H,J) is {0}'.format(str(datetime.now() - start))

start = datetime.now()
for i in range(iteration):
    P2_gap = gap.ClosureGroup(H,w)  # close one group with one generator
    P2 = PermutationGroup(gap_group=P2_gap)
print 'Runing time for ClosureGroup(H,w) is {0}'.format(str(datetime.now() - start))

start = datetime.now()
for i in range(iteration):
    P3 = PermutationGroup(H.gens()+J.gens())  
print 'Runing time for PermutationGroup(H.gens()+J.gens()) is {0}'.format(str(datetime.now() - start))

start = datetime.now()
for i in range(iteration):
    P4 = PermutationGroup(H.gens()+list(w))  
print 'Runing time for PermutationGroup(H.gens()+list(w)) is {0}'.format(str(datetime.now() - start))

Thank you Vincent, that's what I am looking for. I did the test to compare the speed, I did it first for small groups repeat 5000 times, then for large groups.

test on small groups repeat 5000 times.
Runing time for ClosureGroup(H,J) is 0:00:25.837925
Runing time for ClosureGroup(H,w) is 0:00:21.571264
Runing time for PermutationGroup(H.gens()+J.gens()) is 0:00:00.943834
Runing time for PermutationGroup(H.gens()+list(w)) is 0:00:00.810795

test on large groups only 1 time.
Runing time for ClosureGroup(H,J) is 0:01:09.245275
Runing time for ClosureGroup(H,w) is 0:01:10.550019
Runing time for PermutationGroup(H.gens()+J.gens()) is 0:00:00.001400
Runing time for PermutationGroup(H.gens()+list(w)) is 0:00:00.000649

Notes: 25.837925 means 25 seconds, 0:01:09.245275 means 1 minutes and 9 seconds. H and J are groups, w is a generator of a group, somehow PermutationGroup(H.gens()+J.gens()) is way faster than ClosureGroup, maybe ClosureGroup is doing some extra validation or computing?computation?

Here is the python/sage code:

from sage.all import *
from datetime import datetime

case = 'small'
#case = 'large'

if case == 'small':
    H = PermutationGroup([(2,3),(4,5)])
    J = PermutationGroup([(1,2),(3,4,5)])
    W = PermutationGroup([(1,4)])
    w = W.gen(0)
    iteration = 5000
    print 'test on small groups repeat {0} times.'.format(iteration)
elif case == 'large':
    H = CyclicPermutationGroup(200)
    J = AlternatingGroup(200)
    W = AlternatingGroup(200)
    #J = DihedralGroup(10000)
    #W = DihedralGroup(10000)
    w = W.gen(1)
    iteration = 1
    print 'test on large groups only {0} time.'.format(iteration)

start = datetime.now()
for i in range(iteration):
    P1_gap = gap.ClosureGroup(H,J)  # close two group
    P1 = PermutationGroup(gap_group=P1_gap)    
print 'Runing time for ClosureGroup(H,J) is {0}'.format(str(datetime.now() - start))

start = datetime.now()
for i in range(iteration):
    P2_gap = gap.ClosureGroup(H,w)  # close one group with one generator
    P2 = PermutationGroup(gap_group=P2_gap)
print 'Runing time for ClosureGroup(H,w) is {0}'.format(str(datetime.now() - start))

start = datetime.now()
for i in range(iteration):
    P3 = PermutationGroup(H.gens()+J.gens())  
print 'Runing time for PermutationGroup(H.gens()+J.gens()) is {0}'.format(str(datetime.now() - start))

start = datetime.now()
for i in range(iteration):
    P4 = PermutationGroup(H.gens()+list(w))  
print 'Runing time for PermutationGroup(H.gens()+list(w)) is {0}'.format(str(datetime.now() - start))