Subject: Re: [xsl] Re: Keeping a running total? From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx> Date: Thu, 13 Jul 2006 13:48:07 -0700 |
> What about having a bigger than 2 (variable) number of quotas? How > would your solution change to tackle this? > I suppose a general solution would have a list of quotas (and a corresponding list of quota names), e.g. : <quotas> <quota id="Widget" left="{$Widget_quota}" /> <quota id="Gadget" left="{$Gadget_quota}" /> ... </quotas>
Updating this list on every template call leads to O(Qn)*O(Fn) time complexity, where Fn is the number of factories and Qn the number of quotas.
In the past I've 'cheated' by using the stack as a list, e.g. as follows:
<xsl:template match="xml"> <xsl:apply-templates select="factory"> <xsl:with-param name="left0" select="$Widget_quota" /> <xsl:with-param name="left1" select="$Gadget_quota" /> ... <xsl:with-param name="name0">Widget</xsl:with-param> <xsl:with-param name="name1">Gadget</xsl:with-param> ... </xsl:apply-templates> </xsl:template>
then in the factory template, each factory would consume $left0 until it was depleted and then shift by assigning $left1 to $left0, $left2 to $left1 and so on through parameters. e.g. <xsl:with-param name="left0" select="$left1" /> <!-- shift to next quota --> <xsl:with-param name="left1" select="$left2" /> <xsl:with-param name="left2" select="$left3" /> <xsl:with-param name="left3" select="$left4" />
Quota-recursion would end when $left0 was empty then capacity would accumulate in $excess until factories were depleted.
Having to perform such shifts on template calls again leads to quadratic-like time complexity.
Better time complexity can be achieved if the running totals for *both* factories and quotas are calculated with an O(N) (linear) algorithm.
The implementation I provided could have better than quadratic time complexity if it used a more efficient way to find overlapping intervals -- a binary search with an f:binSearch() - like function would be O(Log2(Qn)). In this case the time complexity would be:
For simplicity, in the implementation I provided the identification of overlapping intervals traverses all quotas intervals for every factory.
-- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Re: Keeping a running tot, Andrew Franz | Thread | Re: [xsl] Re: Keeping a running tot, Andrew Franz |
[xsl] Re: RSS 2.0 to RSS 1.0 XSLT , Seth Casana | Date | Re: [xsl] Stuck on how to properly , Rusty Morton |
Month |