Supongamos que se me dan enteros de ancho fijo (es decir, caben en un registro de ancho w ), a 1 , a 2 , ... a n de modo que su suma a 1 + a 2 + ⋯ + a n = S también cabe en un registro de ancho .
Me parece que siempre se puede permutar los números para tal que cada suma prefijo S i = b 1 + b 2 + ⋯ + b i también encaja en un registro de la anchura w .
Básicamente, la motivación es calcular la suma en máquinas de registro de ancho fijo sin tener que preocuparse por desbordamientos de enteros en ninguna etapa intermedia.
¿Existe un algoritmo rápido (preferiblemente de tiempo lineal) para encontrar una permutación de este tipo (suponiendo que se proporcione como una matriz de entrada)? (o decir si tal permutación no existe).
-2^(n-1)
a 2^(n-1)-1
. Por supuesto, requiere un complemento a dos y un comportamiento de desbordamiento bien definido, pero en un lenguaje como C # debería funcionar.