Припустимо , що я даюсь фіксованої ширини цілих чисел (тобто вони поміщаються в регістр ширини ш ), 1 , 2 , ... п такі , що їх сума 1 + 2 + ⋯ + п = S також міститься в регістр ширини w .
Мені здається, що ми завжди можемо переставити числа до таким чином, що кожна префіксальна сума S i = b 1 + b 2 + ⋯ + b i також вписується в регістр ширини w .
В основному, мотивація полягає у обчисленні суми на машинах реєстрації фіксованої ширини, не турбуючись про цілі переповнення на будь-якому проміжному етапі.
Чи є швидкий алгоритм (бажано лінійний час) , щоб знайти таку перестановку (передбачається , дано в якості вхідного масиву)? (або скажіть, якщо така перестановка не існує).
-2^(n-1)
до 2^(n-1)-1
. Звичайно, це вимагає доповнення двох і чітко визначеної поведінки переповнення, але такою мовою, як C #, вона повинна працювати.