Les problèmes réels peuvent être abstraits dans un tel modèle de données:
Choisissez plusieurs nombres dans un tableau et laissez la somme de ces nombres être la valeur spécifiée.
La plupart des lecteurs auraient dû avoir une expérience d'achat en ligne. Les achats en ligne ont généralement une fonction de commande. Si le lecteur achète un produit d'une valeur de 70 yuans, mais doit avoir plus de 100 yuans pour expédier la livraison gratuite, le système recommandera automatiquement certains produits, ce qui s'ajoutera à 100 yuans.
Comment le système détermine-t-il les produits à recommander? C'est en fait le modèle mentionné à l'heure. Nous pouvons mettre les prix des produits à chaud dans un tableau, puis utiliser l'algorithme pour savoir quelles sommets de prix dans le tableau sont de 30 yuans.
Moins non-sens, Xiaocai partagera avec vous une version JavaScript de l'implémentation d'algorithme.
Code d'algorithme:
fonction getCombbySum (tableau, somme, tolérance, cibleCount) {var util = {/ * get combinaison à partir de l'arrayarr: cible arraynum: combinaison de la longueur de la longueur: un tableau qui contient des tableaux de combinaison * / getcombination: fonction (arr, num) {var r = []; (fonction f (t, a, n) {if (n == 0) {return r.push (t); i = 0, l = a.length; i <= ln; i ++) {f (t.concat (a [i]), a.slice (i + 1), n-1);}}) ([], arr, num); 0; i <array.length; i ++) {r.push (i);} return r;}}, logic = {// trier le tableau, puis obtenir ce que nous avons besoin: function (array, sum) {// clone arrayvar _Array = array.concat (), r = [], i = 0; // tri par ASC_Array. b;}); // obtenir tout le nombre quand il est inférieur ou égal à sumFor (i = 0; i <_array.length; i ++) {if (_array [i] <= sum) {r.push (_array [i]);} else {break;}} return r;}, // FonctionCore important: Fonction (array, sum, arrayIndex, count, r) {VAR I 0, combatray = [], _ sum = 0, _cca = [], _ cache = []; if (count == _returnmark) {return;} // obtenir le nombre de courant combinaison combinaisoncombarray = util.getcombination (arrayIndex, count); for (i = 0; i <combarre 0; _cache = []; // calculer la somme de combinaison pour (k = 0; k <_cca.length; k ++) {_ sum + = array [_cca [k]]; _ cache.push (array [_cca [k]]);} if (math.abs (_sum-sum) <= _Tolin) {r.push (_c); } logic.core (array, sum, arrayIndex, count-1, r);}}, r = [], _ array = [], _ TargetCount = 0, _toleance = 0, _returnmark = 0; // vérifier les données_targetCount = TargetCount || _TargetCount; _toleance = Tolérance || _tolérance; _Array = logic.init (array, sum); if (_targetCount) {_ returnmark = _targetCount-1;} logic.core (_array, sum, util.getArrayIndex (_Array), (_ TargetCount || _Array.length), r); return r;}Instructions d'appel:
Tableau: tableau de source de données. Requis.
somme: somme de la somme. Requis.
Tolérance: tolérance. Si ce paramètre n'est pas spécifié, la somme de la somme doit être égale au paramètre de somme, en spécifiant ce paramètre fera flotter le résultat dans la plage de tolérance. Facultatif.
TargetCount: Nombre d'opérandes. Si ce paramètre n'est pas spécifié, le résultat contient tous les cas possibles. La spécification de ce paramètre peut filtrer un nombre fixe de nombres et les ajouter. S'il est spécifié comme 3, le résultat ne contient que trois nombres. Facultatif.
Valeur de retour: la structure du tableau renvoyé est un tableau, les éléments du réseau intérieur sont des opérandes et les éléments du tableau externe sont tous des résultats possibles.