Скажем, у меня есть набор массивов постоянной длины, содержащих только нули и единицы. Моя цель состоит в том, чтобы выяснить, будет ли после вращения любого из массивов элементарные суммы массивов не превышать 1.
Например, допустим, у меня есть следующие три массива: [1, 0, 0, 0], [1, 0, 1, 0]
и [1, 0, 0, 0]
. Я могу повернуть второй массив на один элемент, а третий - на два элемента, чтобы получить массивы [1, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0]
элементарная сумма которого равна [1, 1, 1, 1]
. Однако, если бы я не применял вращения, я бы получил сумму [3, 0, 1, 0]
, которая не соответствует моим требованиям, поскольку один из элементов (3) больше 1.
Теперь, мой вопрос: что такое быстрый способ определить, возможно ли это для произвольного числа массивов? Например, нет возможности повернуть [1, 0, 0, 0], [1, 0, 1, 0], [1, 0, 1, 0]
так, чтобы элементы суммы не превышали 1.
Текущая эвристика
Очевидно, что если суммарная сумма массивов, например, длина n
, превышает n
, то это тривиально невозможно.
Лучшая идея для подхода, о котором я могу думать до сих пор, - это взять два массива, найти способ объединить их вместе и инвертировать результат. Затем мы берем этот результат и следующий массив и повторяем этот процесс. Однако этот метод не гарантирует найти решение, если оно существует.
Мой вопрос в том, чтобы не попробовать все возможные вращения, что было бы хорошим алгоритмом для этой проблемы?