2011-02-09 7 views
2

Я уже наткнулся на эту проблему, это проблема балансировки. Программа принимает массив из целых чисел размера n. Затем программа определяет, можно ли разделить этот массив целых чисел на 2 равные части, причем суммы целых чисел в каждой половине равны.Проблема балансировки гальки

ex. 1 2 3 8 10 4

, в котором, программа возвращает истину, то есть он может быть разделен на две половины с 14 в каждом

Я знаю, это касается комбинаций/перестановок, и я на самом деле не очень хорошо им. Мне только удалось вспомнить метод грубой силы. Можно ли это решить с помощью любых других методов? возможно, более эффективные алгоритмы?

Поэтапное решение будет очень полезно. Большое спасибо

+1

Возможно, вы захотите посмотреть: http://en.wikipedia.org/wiki/Partition_problem – DhruvPathak

+0

Структура данных дерева пальцев приходит мне в голову. Вероятно, есть какой-то способ использовать его для получения инкрементного решения. – ony

ответ

1

Это Partition Problem, который легко можно видеть, что эквивалентно Subset Sum Problem и Knapsack Problem. Это NP-Complete, и считается, что вы не можете сделать значительно лучше, чем исчерпывающий список всех комбинаций.

Вы можете легко проверить все возможные способы: для каждого элемента это либо в левой половине, либо в правой половине.

+0

Большое спасибо за ответы! Вы, ребята, рок – maru

+1

из первой ссылки: «Псевдо-полиномиальное решение для динамического программирования времени для задачи суммирования подмножеств относится и к проблеме раздела, и дает точный ответ за полиномиальное время, когда размер заданных целых чисел ограничен. однако цифры во входном сигнале могут быть экспоненциальными по размеру ввода, и этот подход может оказаться невозможным ». –

0

Посмотрите на мой ответ для this проблема. Ваша проблема очень важна. Вы должны найти, какие суммы вы можете достичь с помощью чисел. Если сумма: total_sum/2 может быть достигнуто, то вы нашли решение :)

2

Просто придав ему некоторые действительно короткую мысль:

  • задача эквивалентна нахождению любого подмножества гальки, которая весит ровно половину всего галечный вес
  • Если тяжелые гальки весят больше, чем половина общего веса гальки, нет никакого решения