Tufitko
@Tufitko
Учусь на 2 курсе, более сказать нечего

Как разбить массив на два подмассива?

Нужно разбить массив на две части так, что бы сумма элементов была равна. Количество элементов в подмассивах может отличаться. Например: есть массив А={1, 1, 1, 1, 4}. Он должен разбиться на два B={1, 1, 1, 1} и C={4}. Можно, даже лучше будет, без кода, только алгоритм.
  • Вопрос задан
  • 5048 просмотров
Решения вопроса 3
Vestail
@Vestail
Software Engineer
Partition problem.
В гугле много информации относительного этого.
Ответ написан
Spetros
@Spetros
IT-шник
Перебор и суммирование позиций можно реализовать циклом или рекурсией. Берете первый элемент, сравниваете его с суммой элементов после него, если не совпало - прибавляете к нему второй элемент и сравниваете эту сумму с суммой элементов после второго и т.д. пока суммы не сравняются.
Ответ написан
Комментировать
@Dvvarreyn
Если в данном случае возможно mozgless-решение, то к целочисленной линейной задаче удовлетворения ограничениям можно свести.
Если порядок не важен (то есть не на левую и правую части, а на какие угодно части), то по сути, для заданного
С \in R^n
нужно найти
x \in {0, 1}^n
такой, что
sum_i с_i(2x_i-1) = 0
И дальше подсунуть в какой-нибудь солвер, например, GLPK, COIN-OR CBC или SCIP.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@mamkaololosha
Самое в лоб за O(N):
1) идем одним итератором справа, другим слева, пока они не столкнутся.
2) если правая часть меньше, то продолжаем движение влево, пока не будут равные суммы или не достигнем начала массива
3) если левая часть меньше, то продолжаем движение вправо, пока не будут равные суммы или достигнем конца массива
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы