Los problemas de la vida real se pueden abstraer en dicho modelo de datos:
Elija varios números de una matriz y deje que la suma de estos números sea el valor especificado.
La mayoría de los lectores deberían haber tenido experiencia de compra en línea. Las compras en línea generalmente tienen una función de hacer pedidos. Si el lector compra un producto por valor de 70 yuanes, pero debe ser más de 100 yuanes para enviar envío gratuito, el sistema recomendará automáticamente algunos productos, que sumarán 100 yuanes.
¿Cómo determina el sistema qué productos recomendar? Este es en realidad el modelo mencionado en este momento. Podemos poner los precios de los productos de venta en caliente en una matriz, y luego usar el algoritmo para averiguar qué sumas de precios en la matriz son 30 yuanes.
Menos tonterías, Xiaocai compartirá con usted una versión JavaScript de la implementación de algoritmo.
Código de algoritmo:
función getCombbysum (array, sum, tolerance, targetCount) {var util = {/*get combinación de arrayarr: targetNum: combinación de elementos longitud longReturn: una matriz que contiene matrices de combinación*/getCombination: function (arr, num) {var r = []; (function 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 = {// Ordena la matriz, luego obtenga lo que es necesario: function (array, sum) {// clone arrayvar _array = array.concat (), r = [], i = 0; // sorts a asc_array. b;}); // Obtenga todo el número cuando sea menor o igual Sumfor (i = 0; i <_array.length; i ++) {if (_array [i] <= sum) {r.push (_array [i]);} else {break;}} return r;}, // functioncore: function (array, sum, sum, sbreinDex, r) {Vurn r; 0, combarray = [], _ sum = 0, _cca = [], _ cache = []; if (count == _returnmark) {return;} // Obtener el recuento de corriente combinatedCombarray = Util.getCombination (arrayindex, count); for (i = 0; i <combarray.length; i ++) {_ cca = combarray [i]; _ = sum; i <combraRay.length; i ++) {_ cca = combarray 0; _cache = []; // Calcule la suma de la combinación de la combinación (k = 0; k <_cca.length; k ++) {_ sum+= array [_cca [k]]; _ cache.push (array [_cca [k]]);} if (math.abs (_sum) <= _tolerance) } Logic.core (Array, Sum, ArrayIndex, Count-1, R);}}, r = [], _ Array = [], _ TargetCount = 0, _tolerance = 0, _Returnmark = 0; // Compruebe Data_TargetCount || _TargetCount; _tolerance = tolerance || _tolerance; _Array = Logic.init (Array, Sum); if (_TargetCount) {_ returnmark = _TargetCount-1;} Logic.Core (_Array, Sum, Util.GetArrayIndex (_Array), (_ TargetCount || _Array.length), R); return r;}Instrucciones de llamadas:
Matriz: matriz de fuente de datos. Requerido.
Suma: Suma de suma. Requerido.
Tolerancia: tolerancia. Si no se especifica este parámetro, la suma de la suma debe ser igual al parámetro de suma, especificar este parámetro hará que el resultado flote dentro del rango de tolerancia. Opcional.
TargetCount: número de operandos. Si no se especifica este parámetro, el resultado contiene todos los casos posibles. Especificar este parámetro puede filtrar un número fijo de números y agregarlos. Si se especifica como 3, el resultado contiene solo tres números. Opcional.
Valor de retorno: la estructura de matriz devuelta es una matriz, los elementos en la matriz interna son operandos y los elementos en la matriz externa son todos los resultados posibles.