Посмотрите на эту часть вашего кода:
$.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)
(Версия решения), Ваша проблема все еще полна 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; это - Ваш ответ.
Кроме того, можно опустить третий нижний индекс, если Вы делаете это тщательно (выполните свой цикл вниз для каждого я, и т.д.); я только включал его для ясности.
Ну, с одной стороны, так как Вы указываете size=L затем, даже если Вы не можете думать ни о чем умном и просто использовать грубую силу, которую Вы будете иметь (N, выбирают L), отдельные суммы в худшем случае, таким образом, это немного лучше, чем n^^L (хорошо, L+1, поскольку Вы затем суммировали бы каждое подмножество).
Одна оптимизация, которая приходит на ум, является этим: Закажите свою последовательность (если это уже не так). Выберите первые L-1 объекты от запуска его и затем выберите последний объект такой, что это - самое большое значение (следующее самое большое значение в последовательности дало бы слишком большую сумму). Остальная часть отбрасывания последовательности, потому что те объекты никогда не могут быть частью допустимого подмножества так или иначе.
После этого я предполагаю, что это - полный поиск снова. Но с другой стороны также могло бы быть другое optimiziations возможное.
Я не готов представить доказательство, но это кажется, что могло бы поддаваться схеме динамического программирования: сведите в таблицу список подмножеств размера 2use их к компьютерным подмножествам размера 3, и т.д., так, чтобы hyou только исследовал небольшую коллекцию перспектив.
Это кажется, что n выбирает k категорию проблемы. Генерация k-подмножеств n охвачена в Руководстве по проектированию Алгоритма Skiena, и книга предлагает перечислить соответствующие подмножества в лексикографическом порядке (рекурсивно, например). Затем сделайте свою сумму и сравнение на каждом подмножестве.
Если у Вас есть отсортированный набор, Вы могли бы, по-видимому, сократить невозможные решения от пространства решения.
Решение динамического программирования для задачи суммы подмножеств генерирует таблицу, которая содержит этот ответ (т. Е. Логическую таблицу V на N, где V - максимальное количество элементов, а N - максимальное количество элементов. элементы, которые могут быть в наборе, который удовлетворяет ограничениям; каждое логическое значение истинно, если сумма элементов <= N равна <= V). Итак, если N * V для вас не слишком велико, существует достаточно быстрый алгоритм. Решение суммы подмножества - это просто самый высокий элемент набора в этой таблице, для которого количество элементов <= N / 2.