Dear Erick,

>> There are really two answers to your question. 
>> The first is the actual question — how to change the stored values of 
>> dictionaries. Here my choice (as the person who implemented much of the code 
>> for dictionaries) would be to not to attempt to change the values at all, 
>> but use as values the entries in a (changeable) value list. While this 
>> requires one indirection it is safe and requires no modification of data 
>> structures that might not have been set up for this, or might change in 
>> future releases (in fact is almost guaranteed to do so as there are still 
>> some issues in the code).
>> 
>> 
> I tried doing this, but once I stored the list in the dictionary I found I 
> could no longer change the list.
> 
> gap> l := [3];
> [ 3 ]
> gap> d := NewDictionary(false, true, [1,2,3]);
> <object>
> gap> IsMutable(l);
> true
> gap> AddDictionary(d, 2, l);
> gap> IsMutable(l);
> false
> gap>
> 
> Am I confused?

No. The current code for dictionaries potentially makes (without warning or 
other niceties) the values of a dictionary immutable. Thus my suggestion for 
storing the index positions in another list:

gap> d := NewDictionary(false, true, [1,2,3]);
<object>
gap> values:=[];
[  ]
gap> cnt:=0;           
0
gap> cnt:=cnt+1;values[cnt]:=[];AddDictionary(d,2,cnt);
1
[  ]
gap> cnt:=cnt+1;values[cnt]:=[];AddDictionary(d,5,cnt);
2
[  ]
gap> values[LookupDictionary(d,5)];
[  ]
gap> AddSet(values[LookupDictionary(d,5)],'A');
gap> AddSet(values[LookupDictionary(d,5)],'Z');
gap> values[LookupDictionary(d,5)];
"AZ"


>> At the moment GAP has no specific hash key code for double cosets, so the 
>> best dictionaries can do is to compare using the `<‘ order. For double 
>> cosets, this comparison is done by determining the (minimal) representatives 
>> for all the contained right cosets, and comparing the smallest of the 
>> minimal coset representatives. While this ordering is equivalent to the 
>> ordering as sets of elements, if means that in fact you store 
>> representatives for all right cosets. Given that this is the case, I would 
>> try the following approach (assuming the subgroups are A and B):
>> 
> 
> Here again I think I must be confused:
> 
> gap> g:=SymmetricGroup(4);;
> gap> u:=Subgroup(g,[(1,2,3),(1,2)]);;
> gap> v:=Subgroup(g,[(3,4)]);;
> gap> cos:=DoubleCosets(g, u, v);
> [ DoubleCoset(Group( [ (1,2,3), (1,2) ] ),(),Group( [ (3,4) ] )),
>   DoubleCoset(Group( [ (1,2,3), (1,2) ] ),(1,4),Group( [ (3,4) ] )),
>   DoubleCoset(Group( [ (1,2,3), (1,2) ] ),(1,4,2),Group( [ (3,4) ] )) ]
> gap> cos[1] < cos[2];

Ah -- then there actually isn't yet such a comparison of double cosets (as 
described) , which means the dictionary code can rely only on comparing for 
equality (and linear search). Then using only right cosets is definitively 
faster.

> 
> Regarding publications, etc, we will be submitting a paper in early April to 
> the FOCS CS conference, and will put it on the arXiv.

Thank you!

   Alexander

> I’d love to help out in any way I can.
> 
> Erick
> 
> 
> 
> 
> Calculate t:=RightTransversal(G,A)
> This is an object that behaves like a list, but often needs less storage.
> 
> Create a second list DCNumber that for each right coset of A stores the 
> number (in some arbitrary indexing) of the double coset AxB that contains A.
> 
> If you find an element r, let
> 
> p:=PositionCanonical(t,r); # number of the right coset for the element
> if IsBound(DCNumber[p]) then
>   result:=DCNumber[p];
> else
>   newnum:=New index number for double coset;
>   result:=newnum;
>   DCNumber[p]:=newnum;
>   o:=Orbit(B,t[p],function(rep,g) return 
> CanonicalRightCosetElement(A,rep*g);end);
>   for i in o do
>      DCNumber[PositionCanonical(t,i)]:=newnum; # mark all right cosets within 
> the same double coset.
>   od;
> fi;
> 
> and then process result — the number of the double coset — as if it came as 
> dictionary value. This is less slick code than dictinaries, but I’d suspect 
> this will work notably faster.
> 
> Best,
> 
>     Alexander Hulpke
> 
>>  Frederick "Erick" Matsen, Assistant Member
>> Fred Hutchinson Cancer Research Center
> 
> Is there a chance you have a citable article or presentation that connects 
> permutation group calculations with (the ultimate ``usefulness’’ argument for 
> higher administration) attempts on dealing with cancer? This could come very 
> helpful when questions of ``broader impace’’ etc. come up. Thanks!
> 
> 
> -- Alexander Hulpke. Department of Mathematics, Colorado State University, 
> Weber Building, 1874 Campus Delivery, Fort Collins, CO 80523-1874, USA
> email: hul...@math.colostate.edu, Phone: ++1-970-4914288
> http://www.math.colostate.edu/~hulpke
> 
> 
> 
> -- 
> Frederick "Erick" Matsen, Assistant Member
> Fred Hutchinson Cancer Research Center
> http://matsen.fredhutch.org/


_______________________________________________
Forum mailing list
Forum@mail.gap-system.org
http://mail.gap-system.org/mailman/listinfo/forum

Reply via email to