Реальные проблемы могут быть абстрагированы в такую модель данных:
Выберите несколько чисел из массива и пусть сумма этих чисел будет указанным значением.
Большинство читателей должны были иметь опыт покупок в Интернете. Интернет-магазины обычно выполняют функцию заказа. Если читатель покупает продукт стоимостью 70 юаней, но должен быть более 100 юаней для доставки бесплатной доставки, система автоматически рекомендует некоторые продукты, что составляет до 100 юаней.
Как система определяет, какие продукты рекомендовать? Это на самом деле модель, упомянутая только сейчас. Мы можем поместить цены на горячие продукты в массив, а затем использовать алгоритм, чтобы выяснить, какие суммы цен в массиве составляют 30 юаней.
Менее чепухи, Xiaocai поделится с вами версией реализации алгоритма JavaScript.
Алгоритм код:
Функция getCombbysum (массив, сумма, толерантность, targetCount) {var util = {/*get сочетание из Arrayarr: target arraynum: comminement justurn: один массив, который содержит комбинированные массивы*/getcombination: function (arr, num) {var r = []; (функция f (t, a, n) {if (n == 0) {return r. i = 0, l = A.Length; 0; i <array.length; i ++) {r.push (i);} return r;}}, logic = {// Сортировать массив, затем получить то, что нам нужно. b;}); // Получить все число, когда оно меньше или равного sumfor (i = 0; i <_array.length; i ++) {if (_array [i] <= sum) {r.push (_array [i]);} els 0, combarray = [], _ sum = 0, _cca = [], _ cache = []; if (count == _returnmark) {return;} // Получить текущий countcombarray = util.getcombination (arrayindex, count); для (i = 0; i <combarray.length; = []; // Рассчитайте сумму по комбинации (k = 0; k <_cca.length; k ++) {_ sum+= array [_cca [k]]; _ cache.push (array [_cca [k]]);} if (math.abs (_sum-sum) <= _tolerance) {r.push (_c. } logic.core (Array, Sum, ArrayIndex, Count-1, R);}}, R = [], _ Array = [], _ TargetCount = 0, _ToLerance = 0, _returnmark = 0; // Проверка data_targetCount = targetCount || _targetCount; _toLerance = толерантность || _tolerance; _array = logic.init (массив, сумма); if (_targetCount) {_ returnmark = _targetCount-1;} logic.core (_array, sum, util.getarrayindex (_array), (_ targetCount || _array.length), r); return r;}Инструкции по телефону:
Массив: массив источников данных. Необходимый.
Сумма: сумма суммы. Необходимый.
Толерантность: терпимость. Если этот параметр не указан, сумма суммы должна быть равна параметру SUM, указание этого параметра приведет к тому, что результат плавает в диапазоне допуска. Необязательный.
TargetCount: количество операндов. Если этот параметр не указан, результат содержит все возможные случаи. Указание этого параметра может отфильтровать фиксированное количество чисел и добавить их. Если указано как 3, результат содержит только три числа. Необязательный.
Возвращаемое значение: возвращаемая структура массива является массивом, элементы во внутреннем массиве являются операндами, а элементы во внешнем массиве - все возможные результаты.