Действительно ли это - вариант проблемы суммы подмножества, легче решить?

Посмотрите на эту часть вашего кода:

$.ajax({
    url: "barcodereaded.php",
    method: "POST",
    data: barcode,
    success: function(res){
        console.log(res);
    }

});

Метод success говорит, что делать с результатом вашего кода ajax. И здесь вы специально говорите записывать ответ (res) на консоль.

Вместо этого вы можете использовать содержимое res, чтобы добавить его к вашему домену через предпочитаемое вами решение Javascript (vanilla, jQuery, ...).

С помощью jQuery вы можете (если результатом вашего php-кода является какой-то текст):

$('#my-return-container').text(res)
9
задан Bill the Lizard 15 August 2011 в 22:40
поделиться

6 ответов

(Версия решения), Ваша проблема все еще полна NP. Идея состоит в том, что, если мы могли бы решить Вашу проблему, затем (для каждого размера подмножества, скажите), мы могли спросить, сколько наборы суммируют меньше чем к V и сколько сумма к меньше, чем V-1 и различие тех двух чисел скажут нам, являются ли подмножествами, которые суммируют точно к V - таким образом мы могли решить проблему суммы подмножества. [Это не полное доказательство, потому что это - сокращение Turing, не многие одно сокращение.]

Однако существует простое решение для динамического программирования, которое работает вовремя O (nLV). [Причина, это не доказывает, что P=NP - то, что V могло быть экспоненциальным во входном размере: с n битами можно представить значения до 2n. Но предполагая, что Ваши V не экспоненциальны, это не проблема.]

Позвольте цифре [v] [k] [я] обозначаю количество подмножеств размера-k первого я элементы S, которые суммируют к против Вас, может вычислить их как (для каждого i):

    num[0][0][i] = 1
    for v = 1 to V:
        for k = 1 to L:
            num[v][k][i] = num[v][k][i-1] + num[v-S[i]][k-1][i-1]

где S [я] - ith элемент в Вашей последовательности. (Любой набор размера k, который суммирует к v или не использует S [я], таким образом, это считается в цифре [v] [k] [i-1], или это использует S [я], что означает, что остальная часть подмножества имеет k-1 элементы, использует только первые i-1 числа в последовательности и суммирует к v-S [я].) Наконец, цифра количества [v] [L] [|S |] для каждого v меньше чем V; это - Ваш ответ.

Кроме того, можно опустить третий нижний индекс, если Вы делаете это тщательно (выполните свой цикл вниз для каждого я, и т.д.); я только включал его для ясности.

19
ответ дан 4 December 2019 в 08:53
поделиться

Ну, с одной стороны, так как Вы указываете size=L затем, даже если Вы не можете думать ни о чем умном и просто использовать грубую силу, которую Вы будете иметь (N, выбирают L), отдельные суммы в худшем случае, таким образом, это немного лучше, чем n^^L (хорошо, L+1, поскольку Вы затем суммировали бы каждое подмножество).

0
ответ дан 4 December 2019 в 08:53
поделиться

Одна оптимизация, которая приходит на ум, является этим: Закажите свою последовательность (если это уже не так). Выберите первые L-1 объекты от запуска его и затем выберите последний объект такой, что это - самое большое значение (следующее самое большое значение в последовательности дало бы слишком большую сумму). Остальная часть отбрасывания последовательности, потому что те объекты никогда не могут быть частью допустимого подмножества так или иначе.

После этого я предполагаю, что это - полный поиск снова. Но с другой стороны также могло бы быть другое optimiziations возможное.

1
ответ дан 4 December 2019 в 08:53
поделиться

Я не готов представить доказательство, но это кажется, что могло бы поддаваться схеме динамического программирования: сведите в таблицу список подмножеств размера 2use их к компьютерным подмножествам размера 3, и т.д., так, чтобы hyou только исследовал небольшую коллекцию перспектив.

2
ответ дан 4 December 2019 в 08:53
поделиться

Это кажется, что n выбирает k категорию проблемы. Генерация k-подмножеств n охвачена в Руководстве по проектированию Алгоритма Skiena, и книга предлагает перечислить соответствующие подмножества в лексикографическом порядке (рекурсивно, например). Затем сделайте свою сумму и сравнение на каждом подмножестве.

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

0
ответ дан 4 December 2019 в 08:53
поделиться

Решение динамического программирования для задачи суммы подмножеств генерирует таблицу, которая содержит этот ответ (т. Е. Логическую таблицу V на N, где V - максимальное количество элементов, а N - максимальное количество элементов. элементы, которые могут быть в наборе, который удовлетворяет ограничениям; каждое логическое значение истинно, если сумма элементов <= N равна <= V). Итак, если N * V для вас не слишком велико, существует достаточно быстрый алгоритм. Решение суммы подмножества - это просто самый высокий элемент набора в этой таблице, для которого количество элементов <= N / 2.

1
ответ дан 4 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

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