Suponha que eu receba números inteiros de largura fixa (ou seja, eles se encaixam em um registro de largura w ), a 1 , a 2 , … a n de modo que sua soma a 1 + a 2 + ⋯ + a n = S também se encaixe em um registro de largura w .
Parece-me que sempre podemos permutar os números para modo que cada soma de prefixo S i = b 1 + b 2 + ⋯ + b i também se ajuste a um registro de largura w .
Basicamente, a motivação é calcular a soma em máquinas de registro de largura fixa sem ter que se preocupar com estouros de número inteiro em qualquer estágio intermediário.
Existe um rápido (tempo de preferência linear) algoritmo para encontrar uma tal permutao (assumindo a são dadas como uma matriz de entrada)? (ou diga se essa permutação não existe).
-2^(n-1)
para 2^(n-1)-1
. É claro que requer o complemento de dois e um comportamento de estouro bem definido, mas em uma linguagem como C # deve funcionar.