Os problemas da vida real podem ser abstraídos em um modelo de dados assim:
Escolha vários números de uma matriz e deixe que a soma desses números seja o valor especificado.
A maioria dos leitores deveria ter tido experiência de compra on -line. As compras on-line geralmente têm uma função de fazer pedidos. Se o leitor comprar um produto no valor de 70 yuan, mas deverá ter mais de 100 yuans para enviar frete grátis, o sistema recomendará automaticamente alguns produtos, o que adicionará até 100 yuan.
Como o sistema determina quais produtos recomendar? Este é realmente o modelo mencionado agora. Podemos colocar os preços dos produtos que vendem a quente em uma matriz e depois usar o algoritmo para descobrir quais somas de preço na matriz são 30 yuan.
Menos absurdos, o Xiaocai compartilhará com você uma versão JavaScript da implementação do algoritmo.
Código de algoritmo:
função getCombbysum (matriz, soma, tolerância, TargetCount) {var util = {/*Obtenha combinação de Arrayarr: Arraynum: Combinação de comprimento do item: uma matriz que contém matrizes de combinação*/getCombination: function (Arr, num) {var r = []; (função f (t, t, n) {se i = 0, L = A.Length; 0; i <Array.length; i ++) {r.push (i);} retornar r;}}, logic = {// Classifique a matriz e, em seguida, obtenha o que é necessário: function (array, sum) {// clone Arrayvar _array = Array.Concat (), R = [], i = 0; b;}); // Obtenha todo o número quando for menor ou igual ou igual para (i = 0; i <_array.length; i ++) {if (_array [i] <= sum) {r.push (_array] [i]);} else {break;}} retur r;}, // importante função: função: função: função: função: função: {Break;}}}, _, //, função: função: {} retcore r; 0, combarray = [], _ sum = 0, _cca = [], _ cache = []; if (count == _returnmark) {return;} // obtém contagem atual combinagemBarray = util.getCombination; 0; _cache = []; // calcule a soma a partir da combinação (k = 0; k <_cca.length; k ++) {_ sum+= array [_cca [k]]; _ cache.push (matriz [_cca [k]]; _tolerance) {r.push (_cache);}} logic.core (matriz, soma, arrayindex, count-1, r);}}, r = [], _ Array = [], _ TargetCount = 0, _tolerance = 0, _renkmark = 0; _targetCount; _tolerância = tolerância || _tolerance; _array = logic.init (matriz, soma); if (_targetCount) {_ returnmark = _targetCount-1;} logic.core (_array, sum, util.getArrayIndex (_array), (_ TargetCount || _array.length), r); retornar r;}Instruções de chamada:
Array: matriz de origem de dados. Obrigatório.
Soma: soma da soma. Obrigatório.
Tolerância: tolerância. Se este parâmetro não for especificado, a soma da soma deve ser igual ao parâmetro SUM, especificando este parâmetro fará com que o resultado flutue dentro da faixa de tolerância. Opcional.
TargetCount: Número de operandos. Se este parâmetro não for especificado, o resultado contém todos os casos possíveis. Especificar este parâmetro pode filtrar um número fixo de números e adicioná -los. Se especificado como 3, o resultado contém apenas três números. Opcional.
Valor de retorno: A estrutura de matriz retornada é uma matriz, os elementos na matriz interna são operando e os elementos da matriz externa são todos os resultados possíveis.