You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The function SelectSmallGroups is the underlying engine driving AllSmallGroups and IdsOfAllSmallGroups. This can for example be used to get all groups of a certain order which are not solvable.
For many orders, there are efficient implementations. But for many others (e.g. order 1920, many of the large cube free orders), there are not. These then fallback to a generic routine, which ends up creating all groups of a given order. This is very inefficient.
For example, there are 241004 groups of order 1920, but only 588 of these are non-solvable -- namely exactly the last 588. (In fact, for most of the "non-legacy" orders, the authors of the small groups library took care to first list the nilpotent groups, then the other solvable ones, and finally the non-solvable ones). Based on this knowledge, AllSmallGroups(1920, IsSolvableGroup, false); could terminate in a few milliseconds, but instead it takes ages (I didn't bother to let the computation finish, so I don't know how long exactly).
It would be highly desirable to improve this. For order 1920 (which is a special case in the small groups library anyway), that would be fairly easy. It's somewhat more work for the cubefree groups, I guess.
The text was updated successfully, but these errors were encountered:
Indeed - this knowledge on order 1920 is easily retrievable in a human-readable form:
gap> SmallGroupsInformation(1920);
There are 241004 groups of order 1920.
They are sorted using Hall subgroups.
1 - 2328 are the nilpotent groups.
2329 - 236344 have a normal Hall (3,5)-subgroup.
236345 - 240416 are solvable without normal Hall (3,5)-subgroup.
240417 - 241004 are not solvable.
This size belongs to layer 6 of the SmallGroups library.
IdSmallGroup is available for this size.
but this knowledge is not propagated to SelectSmallGroups.
One could likely find more examples for improvements calling SmallGroupsInformation and checking when it says nothing on the precomputed attributes. As an example when it says, SmallGroupsInformation(64) returns
...
For the selection functions the values of the following attributes
are precomputed and stored:
IsAbelian, PClassPGroup, RankPGroup, FrattinifactorSize and
FrattinifactorId.
...
The function
SelectSmallGroups
is the underlying engine drivingAllSmallGroups
andIdsOfAllSmallGroups
. This can for example be used to get all groups of a certain order which are not solvable.For many orders, there are efficient implementations. But for many others (e.g. order 1920, many of the large cube free orders), there are not. These then fallback to a generic routine, which ends up creating all groups of a given order. This is very inefficient.
For example, there are 241004 groups of order 1920, but only 588 of these are non-solvable -- namely exactly the last 588. (In fact, for most of the "non-legacy" orders, the authors of the small groups library took care to first list the nilpotent groups, then the other solvable ones, and finally the non-solvable ones). Based on this knowledge,
AllSmallGroups(1920, IsSolvableGroup, false);
could terminate in a few milliseconds, but instead it takes ages (I didn't bother to let the computation finish, so I don't know how long exactly).It would be highly desirable to improve this. For order 1920 (which is a special case in the small groups library anyway), that would be fairly easy. It's somewhat more work for the cubefree groups, I guess.
The text was updated successfully, but these errors were encountered: