Great, results for `n=6`, `k=9` on my machine,

IteratorOfCartesianProduct Method  : 452ms
Initial Mentioned Method                 : 203ms
Burkhard's Method                          : 047ms
Python                                            : 066ms

Many thanks everyone,
Rob


________________________________________
From: Burkhard Höfling [burkh...@hoefling.name]
Sent: 17 January 2014 11:57
To: forum@mail.gap-system.org
Cc: Wolstenholme, Robert; Alexander Konovalov; Dmitrii Pasechnik
Subject: Re: [GAP Forum] Iteration Over Lists of Lists

Dear Robert,

>> Thanks, this is what I wanted.
>> However, I timed it this morning and found it to actually be slower than the 
>> method I previously mentioned (currently speed is of significant importance 
>> for what I'm doing). I've included the test script below. You can vary the 
>> values of `n` (number of lists) and `k` (size of lists). Note for `n=6` and 
>> `k=9` I am getting,

Iterators cause a lot of overhead per call. If you just modify your code a bit, 
you should get close to Python speed with GAP. On my machine, I get

teratorOfCartesianProduct Method: 915 ms
Your Mentioned Method                  : 493 ms
variant below:                                 : 125 ms

(didn’t try Python).

Cheers

Burkhard.



size_rc := List([1..n], x -> k);
base := List([1..n], x -> 1); #We store the iteration step state in base
a := 1;

start := Runtime();
stop := false;
repeat

        #Perform whatever list[i][base[i]] calculations here
        #a := a + 1;
        #Print("Base: ", base, "\n");

        #Execute the incrementor
        base[1] := base[1] + 1;
        j := 1;
        while base[j] > size_rc[j] and j < n do
                base[j] := 1;
                j := j + 1;
                base[j] := base[j] + 1;
        od;
until j = n and base[n] > size_rc[n];

total2 := Runtime() - start;


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

Reply via email to