Введение
Метод возведения в степень положительными целыми числами, требующий минимального количества умножений. В математике и информатике оптимальное возведение в степень с использованием цепочки сложений — это метод возведения в степень с положительной целой степенью, требующий минимального количества умножений. Используя форму кратчайшей цепочки сложений, с умножением вместо сложения, вычисляется желаемая степень (вместо произведения) основания. (Это соответствует .) Каждое возведение в степень в цепочке можно вычислить, умножив два предыдущих результата возведения в степень. В более общем смысле, возведение в степень с использованием цепочки сложений может также относиться к возведению в степень с использованием неоптимальных цепочек сложений, построенных различными алгоритмами (поскольку найти кратчайшую цепочку сложений очень сложно). Алгоритм с кратчайшей цепочкой сложений не требует большего количества умножений, чем двоичное возведение в степень, и обычно требует меньше. Первый пример, когда он оказывается лучше, — это для a15, где двоичный метод требует шести умножений, а кратчайшая цепочка сложений — только пяти: (двоичный метод, 6 умножений) (кратчайшая цепочка сложений, 5 умножений). (также кратчайшая цепочка сложений, 5 умножений). Даже при наличии кратчайшей цепочки, возведение в степень с использованием цепочки сложений требует больше памяти, чем двоичный метод, поскольку ему потенциально необходимо хранить многие предыдущие степени из цепочки. Поэтому на практике возведение в степень с использованием кратчайшей цепочки сложений в основном используется для небольших фиксированных степеней, для которых кратчайшая цепочка может быть предварительно вычислена и не слишком велика. Существуют также несколько методов для приближения кратчайшей цепочки сложений, которые часто требуют меньше умножений, чем двоичное возведение в степень; само двоичное возведение в степень является субоптимальным алгоритмом цепочки сложений. Выбор оптимального алгоритма зависит от контекста (например, от относительной стоимости умножения и количества повторных использований заданной степени). Проблему нахождения кратчайшей цепочки сложений нельзя решить с помощью динамического программирования, поскольку она не удовлетворяет предположению об оптимальной подструктуре. То есть, недостаточно разложить степень на меньшие степени, каждая из которых вычисляется минимально, поскольку цепочки сложений для меньших степеней могут быть связаны (для совместного использования вычислений). Например, в кратчайшей цепочке сложений для a15, подзадача для a6 должна быть вычислена как (a3)², поскольку a3 повторно используется (в отличие от, скажем, a6 = a2 * (a2)², что также требует трех умножений).
In mathematics and computer science, optimal addition chain exponentiation is a method of exponentiation by a positive integer power that requires a minimal number of multiplications. Using the form of the shortest addition chain, with multiplication instead of addition, computes the desired exponent (instead of multiple) of the base. (This corresponds to .) Each exponentiation in the chain can be evaluated by multiplying two of the earlier exponentiation results. More generally, addition chain exponentiation may also refer to exponentiation by non minimal addition chains constructed by a variety of algorithms (since a shortest addition chain is very difficult to find). The shortest addition chain algorithm requires no more multiplications than binary exponentiation and usually less. The first example of where it does better is for a15, where the binary method needs six multiplications but the shortest addition chain requires only five:
(binary, 6 multiplications)
(shortest addition chain, 5 multiplications). (also shortest addition chain, 5 multiplications). +Table demonstrating how to do exponentiation using addition chainsNumber ofmultiplications Actualexponentiation Specific implementation ofaddition chains to do exponentiation0 a1 a1 a2 a × a2 a3 a × a × a2 a4 (a × a→b) × b3 a5 (a × a→b) × b × a3 a6 (a × a→b) × b × b4 a7 (a × a→b) × b × b × a3 a8 ((a × a→b) × b→d) × d4 a9 (a × a × a→c) × c × c4 a10 ((a × a→b) × b→d) × d × b5 a11 ((a × a→b) × b→d) × d × b × a4 a12 ((a × a→b) × b→d) × d × d5 a13 ((a × a→b) × b→d) × d × d × a5 a14 ((a × a→b) × b→d) × d × d × b5 a15 ((a × a→b) × b × a→e) × e × e4 a16 (((a × a→b) × b→d) × d→h) × h
On the other hand, the determination of a shortest addition chain is hard: no efficient optimal methods are currently known for arbitrary exponents, and the related problem of finding a shortest addition chain for a given set of exponents has been proven NP complete. Even given a shortest chain, addition chain exponentiation requires more memory than the binary method, because it must potentially store many previous exponents from the chain. So in practice, shortest addition chain exponentiation is primarily used for small fixed exponents for which a shortest chain can be pre computed and is not too large. There are also several methods to approximate a shortest addition chain, and which often require fewer multiplications than binary exponentiation; binary exponentiation itself is a suboptimal addition chain algorithm. The optimal algorithm choice depends on the context (such as the relative cost of the multiplication and the number of times a given exponent is re used). The problem of finding the shortest addition chain cannot be solved by dynamic programming, because it does not satisfy the assumption of optimal substructure. That is, it is not sufficient to decompose the power into smaller powers, each of which is computed minimally, since the addition chains for the smaller powers may be related (to share computations). For example, in the shortest addition chain for a15 above, the subproblem for a6 must be computed as (a3)2 since a3 is re used (as opposed to, say, a6 = a2(a2)2, which also requires three multiplies).
Добавление-вычитаниепоказатель цепи
Если разрешено и умножение, и деление, то цепочка сложения и вычитания может быть использована для получения еще меньшего общего числа умножений и делений (где вычитание соответствует делению). Однако, поскольку деление выполняется медленнее умножения, эта техника, как правило, не является привлекательной. Для возведения в отрицательную целую степень, напротив, поскольку одно деление требуется в любом случае, цепочка сложения и вычитания часто бывает полезна. Например, для a⁻³¹, вычисление 1/a³¹ с помощью кратчайшей цепочки сложения для a³¹ требует 7 умножений и одного деления, в то время как кратчайшая цепочка сложения и вычитания требует 5 умножений и одного деления: (цепочка сложения и вычитания, 5 умножений + 1 деление). Для возведения в степень на эллиптических кривых обратная точка (x, y) доступна без дополнительных затрат, поскольку она просто (x, −y), и поэтому цепочки сложения и вычитания оптимальны в этом контексте даже для положительных целых степеней.
(addition subtraction chain, 5 mults + 1 div). For exponentiation on elliptic curves, the inverse of a point (x, y) is available at no cost, since it is simply (x, −y), and therefore addition subtraction chains are optimal in this context even for positive integer exponents.