Начните с массива целых чисел, чтобы сумма значений представляла собой некоторое положительное целое число S
. Следующая процедура всегда заканчивается одинаковым количеством шагов с одинаковыми результатами. Почему это?
Начните с массива x = [x_0, x_1, ..., x_N-1]
, чтобы все x_i
были целыми числами. Пока есть отрицательная запись, сделайте следующее:
Выберите любой индекс i
такой, что x_i < 0
.
Добавьте x_i
(отрицательное число) к x_(i-1 % N)
.
Добавьте x_i
(отрицательное число) к x_(i+1 % N)
.
Заменить x_i
на -x_i
(положительное число).
Этот процесс поддерживает свойство, которое x_0 + x_1 + ... + x_N-1 = S
. Для любого заданного начального массива x
, независимо от того, какой индекс выбран на каком-либо шаге, количество раз, которое вы проходите через эти шаги, совпадает с результирующим вектором. Даже не очевидно (по крайней мере для меня), что этот процесс завершается за конечное время, не говоря уже о том, что обладает этим хорошим инвариантным свойством.
* +1037 * Пример:
Взять x = [4 , -1, -2]
и щелкнуть x_1
, чтобы начать, результат
[4, -1, -2]
[3, 1, -3]
[0, -2, 3]
[-2, 2, 1]
[2, 0, -1]
[1, -1, 1]
[0, 1, 0]
С другой стороны, щелчок x_2
для запуска дает
[4, -1, -2]
[2, -3, 2]
[-1, 3, -1]
[1, 2, -2]
[-1, 0, 2]
[1, -1, 1]
[0, 1, 0]
и последний способ дать это решение с массивами, перевернутыми с третьего на нижний, если вы выберете x_2
вместо x_0
, чтобы перевернуть третий массив. Во всех случаях 6 шагов ведут к [0,1,0]
.
У меня есть аргумент, почему это так, но мне кажется, что это слишком сложно (это имеет отношение к группам Кокстера ). У кого-нибудь есть более прямой способ задуматься о том, почему это происходит? Было бы замечательно найти даже причину, по которой это следует прекратить.
Бонус указывает любому, кто найдет способ определить количество шагов для данного массива (без прохождения процесса).