Addition chain
In mathematics, an addition chain for computing a positive integer Template:Mvar can be given by a sequence of natural numbers starting with 1 and ending with Template:Mvar, such that each number in the sequence is the sum of two previous numbers. The length of an addition chain is the number of sums needed to express all its numbers, which is one less than the cardinality of the sequence of numbers.<ref>D. E. Knuth, The Art of Computer Programming, Vol 2, "Seminumerical Algorithms", Section 4.6.3, 3rd edition, 1997</ref>
ExamplesEdit
As an example: (1,2,3,6,12,24,30,31) is an addition chain for 31 of length 7, since
- 2 = 1 + 1
- 3 = 2 + 1
- 6 = 3 + 3
- 12 = 6 + 6
- 24 = 12 + 12
- 30 = 24 + 6
- 31 = 30 + 1
Addition chains can be used for addition-chain exponentiation. This method allows exponentiation with integer exponents to be performed using a number of multiplications equal to the length of an addition chain for the exponent. For instance, the addition chain for 31 leads to a method for computing the 31st power of any number Template:Mvar using only seven multiplications, instead of the 30 multiplications that one would get from repeated multiplication, and eight multiplications with exponentiation by squaring:
- Template:Mvar2 = Template:Mvar × Template:Mvar
- Template:Mvar3 = Template:Mvar2 × Template:Mvar
- Template:Mvar6 = Template:Mvar3 × Template:Mvar3
- Template:Mvar12 = Template:Mvar6 × Template:Mvar6
- Template:Mvar24 = Template:Mvar12 × Template:Mvar12
- Template:Mvar30 = Template:Mvar24 × Template:Mvar6
- Template:Mvar31 = Template:Mvar30 × Template:Mvar
Methods for computing addition chainsEdit
Calculating an addition chain of minimal length is not easy; a generalized version of the problem, in which one must find a chain that simultaneously forms each of a sequence of values, is NP-complete.<ref>Template:Citation. A number of other papers state that finding a shortest addition chain for a single number is NP-complete, citing this paper, but it does not claim or prove such a result.</ref> There is no known algorithm which can calculate a minimal addition chain for a given number with any guarantees of reasonable timing or small memory usage. However, several techniques are known to calculate relatively short chains that are not always optimal.<ref name=otto>Template:Citation.</ref>
One very well known technique to calculate relatively short addition chains is the binary method, similar to exponentiation by squaring. In this method, an addition chain for the number <math>n</math> is obtained recursively, from an addition chain for <math>n'=\lfloor n/2\rfloor</math>. If <math>n</math> is even, it can be obtained in a single additional sum, as <math>n=n'+n'</math>. If <math>n</math> is odd, this method uses two sums to obtain it, by computing <math>n-1=n'+n'</math> and then adding one.<ref name=otto/>
The factor method for finding addition chains is based on the prime factorization of the number <math>n</math> to be represented. If <math>n</math> has a number <math>p</math> as one of its prime factors, then an addition chain for <math>n</math> can be obtained by starting with a chain for <math>n/p</math>, and then concatenating onto it a chain for <math>p</math>, modified by multiplying each of its numbers by <math>n/p</math>. The ideas of the factor method and binary method can be combined into Brauer's m-ary method by choosing any number <math>m</math> (regardless of whether it divides <math>n</math>), recursively constructing a chain for <math>\lfloor n/m\rfloor</math>, concatenating a chain for <math>m</math> (modified in the same way as above) to obtain <math>m\lfloor n/m\rfloor</math>, and then adding the remainder. Additional refinements of these ideas lead to a family of methods called sliding window methods.<ref name=otto/>
Chain lengthEdit
Let <math>l(n)</math> denote the smallest <math>s</math> so that there exists an addition chain of length <math>s</math> which computes <math>n</math>. It is known that <math display=block>\log_2 n+ \log_2 \nu(n)-2.13\leq l(n) \leq \log_2 n+ \nu(n)-1,</math> <math display=block>l(n) \leq \log_2 n + \bigl(1+o(1)\bigr)\frac{\log_2 n}{\log_2 \log_2 n},</math> where <math>\nu(n)</math> is the Hamming weight (the number of ones) of the binary expansion of <math>n</math>.<ref>Template:Citation</ref>
One can obtain an addition chain for <math>2n</math> from an addition chain for <math>n</math> by including one additional sum <math>2n=n+n</math>, from which follows the inequality <math>l(2n)\le l(n)+1</math> on the lengths of the chains for <math>n</math> and <math>2n</math>. However, this is not always an equality, as in some cases <math>2n</math> may have a shorter chain than the one obtained in this way. For instance, <math>l(382)=l(191)=11</math>, observed by Knuth.<ref name=G169/> It is even possible for <math>2n</math> to have a shorter chain than <math>n</math>, so that <math>l(2n)< l(n)</math>; the smallest <math>n</math> for which this happens is <math>n=375494703</math>,<ref name=Clift/> which is followed by <math>602641031</math>, <math>619418303</math>, and so on (sequence A230528 in the OEIS).
Brauer chainEdit
A Brauer chain or star addition chain is an addition chain in which each of the sums used to calculate its numbers uses the immediately previous number. A Brauer number is a number for which a Brauer chain is optimal.<ref name=G169/>
Brauer proved that
where Template:Tmath is the length of the shortest star chain.<ref>Template:Cite journal</ref> For many values of <math>n</math>, and in particular for <math>n<12509</math>, they are equal:<ref>Achim Flammenkamp, Shortest Addition Chains</ref> Template:Math. But Hansen showed that there are some values of n for which Template:Math, such as Template:Math which has Template:Math. The smallest such n is 12509.
Scholz conjectureEdit
{{#invoke:Labelled list hatnote|labelledList|Main article|Main articles|Main page|Main pages}} The Scholz conjecture (sometimes called the Scholz–Brauer or Brauer–Scholz conjecture), named after Arnold Scholz and Alfred T. Brauer), is a conjecture from 1937 stating that
- <math> l(2^n-1) \le n - 1 + l(n). </math>
This inequality is known to hold for all Hansen numbers, a generalization of Brauer numbers; Neill Clift checked by computer that all <math> n \le 5784688 </math> are Hansen (while 5784689 is not).<ref name=Clift>Template:Cite journal</ref> Clift further verified that in fact <math> l(2^n-1) = n - 1 + l(n)</math> for all <math>n \le 64</math>.<ref name=G169>Template:Cite book Section C6, p.169.</ref>
See alsoEdit
ReferencesEdit
External linksEdit
- Template:OEIS el. Note that the initial "1" is not counted (so element #1 in the sequence is 0).
- F. Bergeron, J. Berstel. S. Brlek "Efficient computation of addition chains"