[GiNaC-devel] Re: Asymptotic behaviour of mul::eval() and add::eval() [Was: PATCH...]

Richard B. Kreckel kreckel at ginac.de
Mon Aug 13 22:44:59 CEST 2007


Hi,

Sheplyakov Alexei wrote:
> On Sun, Aug 12, 2007 at 11:30:57PM +0200, Richard B. Kreckel wrote:
>> Not for add objects! And we really had evaluation of sums in mind when 
>> we said "no quadratic algorithms",
> 
> Unfortunately, add::eval() is not subquadratic either. For example,
> 
> 1 + \sum_{i=1}^N (i x_i + (i+1) x_i^i x_{i+1}^{i+1} + (i+2) x_i^i x_{i+2}^{i+2})
> 
> #!/bin/sh
> { echo "plot '-' using 1:2 with lines title 'add::eval() asymptotic behaviour'"
>   echo
> for N in `seq 100 100 3000`; do
> TIME=$({ echo -n "time(1"
>          for i in $(seq 1 $N); do
> 					 j=$(expr $i + 1)
> 					 k=$(expr $i + 2)
> 					 printf "+${i}*x${i}+${j}*x${i}^${i}*x${j}^${j}+${k}*x${i}^${i}*x${k}^${k}"
> 				 done
> 				 echo ");" ; } | ginsh | sed -e 's/s//g')
> echo "$N $TIME"
> done
> echo "e" ; } | gnuplot -persist '-'


Experimentally, this is O(N^2.2) on my machine.

And I suppose it is clear by now that this is due to the fact that the 
problem is really quadratic in input size -- as was the original problem 
where the top-level object was a mul instead of an add.

So, I dare say that O(N^2.x) is actually pretty good for a problem that 
has input size O(N^2), right?

Best wishes
    -richy.
-- 
Richard B. Kreckel
<http://www.ginac.de/~kreckel/>


More information about the GiNaC-devel mailing list