Una cadena de suma-resta , una generalización de las cadenas de suma para incluir la resta, es una secuencia a 0 , a 1 , a 2 , a 3 , ... que satisface
Una cadena de suma-resta para n , de longitud L , es una cadena de suma-resta tal que . Es decir, se puede calcular n mediante L sumas y/o restas. (Tenga en cuenta que n no necesita ser positivo. En este caso, también se puede incluir un −1 = 0 en la secuencia, de modo que se pueda obtener n = −1 mediante una cadena de longitud 1).
Por definición, cada cadena de adición es también una cadena de adición-sustracción, pero no al revés. Por lo tanto, la longitud de la cadena de adición-sustracción más corta para n está limitada por encima de la longitud de la cadena de adición más corta para n . Sin embargo, en general, la determinación de una cadena de adición-sustracción mínima (como el problema de determinar una cadena de adición mínima) es un problema difícil para el que actualmente no se conocen algoritmos eficientes. El problema relacionado de encontrar una secuencia de adición óptima es NP-completo (Downey et al., 1981), pero no se sabe con certeza si encontrar cadenas de adición o de adición-sustracción óptimas es NP-difícil .
Por ejemplo, una cadena de suma-resta es: , , , . Sin embargo, esta no es una cadena de suma-resta mínima para n = 3, porque podríamos haber elegido . El n más pequeño para el cual una cadena de suma-resta es más corta que la cadena de adición mínima es n = 31, que se puede calcular en solo 6 sumas (en lugar de 7 para la cadena de adición mínima):
Al igual que una cadena de adición, una cadena de adición-resta se puede utilizar para la exponenciación de cadena de adición : dada la cadena de adición-resta de longitud L para n , la potencia se puede calcular multiplicando o dividiendo por x L veces, donde las restas corresponden a las divisiones. Esto es potencialmente eficiente en problemas donde la división es una operación barata, más notablemente para la exponenciación en curvas elípticas donde la división corresponde a un mero cambio de signo (como propusieron Morain y Olivos, 1990).
Algunos multiplicadores de hardware multiplican por n utilizando una cadena de adición descrita por n en binario:
n = 31 = 0 0 0 1 1 1 1 1 (binario).
Otros multiplicadores de hardware multiplican por n utilizando una cadena de suma-resta descrita por n en la codificación de Booth :
n = 31 = 0 0 1 0 0 0 0 −1 (codificación de Booth).