Jump to content

Псевдополиномиальное разделение чисел по времени

В информатике псевдополиномиальное разделение чисел по времени представляет собой алгоритм псевдополиномиального времени для решения проблемы разделения .

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

Предположим, что входными данными для алгоритма является мультимножество мощности :

S знак равно { Икс 1 , ..., Икс N }

Пусть K — сумма всех элементов S. в То есть: K = x 1 + ... + x N . Мы построим алгоритм, который определит, существует ли подмножество S , сумма которого равна . Если есть подмножество, то:

если K четное, остальная часть S также равна
если K нечетно, то остальная часть S в сумме равна . Это максимально хорошее решение.

например1 S = {1, 2, 3, 5}, K = sum(S) = 11, K/2 = 5, Найдите подмножество из S , ближайшее к K/2 -> {2, 3} = 5, 11 - 5 * 2 = 1

например2 S = {1, 3, 7}, K = sum(S) = 11, K/2 = 5, Найдите подмножество из S , ближайшее к K/2 -> {1, 3} = 4, 11 - 4 * 2 = 3

Рекуррентное отношение

[ редактировать ]

Мы хотим определить, существует ли подмножество S , сумма которого равна . Позволять:

p ( i , j ) будет True, если подмножество { x 1 , ..., x j } суммируется с i , и False в противном случае.

Тогда р ( , N ) истинно тогда и только тогда, когда существует подмножество S , сумма которого равна . Целью нашего алгоритма будет вычисление p ( , Н ). В помощь этому у нас есть следующее рекуррентное соотношение :

p ( i , j ) истинно, если либо p ( i , j − 1) истинно, либо если p ( i x j , j − 1) истинно
p ( i , j ) является ложным в противном случае

Обоснование этого следующее: существует некоторое подмножество S , сумма которого равна i, используя числа

х 1 , ..., х j

тогда и только тогда, когда верно одно из следующих утверждений:

Существует подмножество { x 1 , ..., x j −1 }, сумма которого равна i ;
существует подмножество { x 1 , ..., x j −1 }, сумма которого равна i x j , поскольку x j + сумма этого подмножества = i .

Псевдополиномиальный алгоритм

[ редактировать ]

Алгоритм заключается в построении таблицы размеров к содержащий значения повторения. Помните, что это сумма всех элементы в . Как только вся таблица будет заполнена, мы возвращаемся . Ниже представлено изображение таблицы . Существует синяя стрелка от одного блока к другому, если значение целевого блока может зависеть от значения исходного блока. Эта зависимость является свойством рекуррентного отношения.

Зависимости записи таблицы ( i , j )
function can_be_partitioned_equally(S) is
    input: A list of integers S.
    output: True if S can be partitioned into two subsets that have equal sum.

    n ← |S|
    K ← sum(S)
    P ← empty boolean table of size ( + 1) by (n + 1)

    initialize top row (P(0,x)) of P to True
    initialize leftmost column (P(x, 0)) of P, except for P(0, 0) to False

    for i from 1 to 
        for j from 1 to n
            x = S[j-1]
            if (i-x) >= 0 then
                P(i, j) ← P(i, j-1) or P(i-x, j-1)
            else
                P(i, j) ← P(i, j-1)

   return P(, n)

Ниже приведена таблица P для использованного выше примера S = {3, 1, 1, 2, 2, 1}:

Результат примера выполнения алгоритма на таблице P

Этот алгоритм работает за время O ( K/2 N ) , где N — количество элементов во входном наборе, а K — сумма элементов во входном наборе.

Алгоритм можно распространить на k задачу многоразбиения -way, но тогда требуется O ( n ( k − 1) m к - 1 ) памяти, где m — наибольшее число во входных данных, что делает его непрактичным даже для k = 3, если только входные данные не являются очень маленькими числами. [ 1 ]

Этот алгоритм можно обобщить для решения проблемы суммы подмножеств .

  1. ^ Корф, Ричард Э. (2009). Многостороннее разделение номеров (PDF) . ИДЖКАИ .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7bbda6da1fa836bbadf94e469d8f4b2c__1605803940
URL1:https://arc.ask3.ru/arc/aa/7b/2c/7bbda6da1fa836bbadf94e469d8f4b2c.html
Заголовок, (Title) документа по адресу, URL1:
Pseudopolynomial time number partitioning - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)