現実の問題は、そのようなデータモデルに抽象化される可能性があります。
配列からいくつかの数値を選択し、これらの数値の合計を指定された値とします。
ほとんどの読者は、オンラインショッピングの経験があるはずです。一般に、オンラインショッピングには注文作成機能があります。読者が70元相当の製品を購入しているが、送料を無料で出荷するために100元を超える必要がある場合、システムは自動的にいくつかの製品を推奨します。これは最大100元になります。
システムはどの製品を推奨する製品を決定しますか?これは実際に今言及されているモデルです。ホットセラー製品の価格をアレイに入れてから、アルゴリズムを使用して、配列の価格合計が30元であることを確認できます。
Xiaocaiは、ナンセンスではなく、JavaScriptバージョンのアルゴリズム実装を共有します。
アルゴリズムコード:
関数getCombbysum(配列、合計、許容範囲、ターゲットカウント){var util = {/*arrayarrから組み合わせを取得:ターゲットアレイナム:組み合わせアイテム長さのredreturn:コンビネーションアレイを含む1つの配列*/getcombination:function(arr、num){var r = [];(function f(t、a、n){var(n = = 0); i = 0、l = a.lengs; i <= ln; 0; i <array.length; i ++){r.push(i);} return R b;}); //すべての数値を取得します。 0、comparray = []、_ sum = 0、_cca = []、_ cache = []; if(count == _returnmark){return;} //現在のカウントコンビネーションcommbarray = util.getCombination(arrayindex、count); 0; _cache = []; //コンビネーションフォー(k = 0; k <_cca.length; k ++){_ sum+= array [_cca [k]]; _ cache.push(array [k]];} if(math.abs(_ um-sum)<= _cache)<= _cache) } logic.core(array、sum、sum、arrayindex、count-1、r);}}、r = []、_ array = []、_ targetcount = 0、_tolerance = 0、_ returnmark = 0; // data_targetcount =ターゲットカウント||チェック_targetcount; _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;}指示に電話:
配列:データソース配列。必須。
合計:合計。必須。
耐性:寛容。このパラメーターが指定されていない場合、合計の合計は合計パラメーターに等しくなければなりません。このパラメーターを指定すると、結果が許容範囲内に浮かびます。オプション。
TargetCount:オペランドの数。このパラメーターが指定されていない場合、結果にはすべての可能なケースが含まれています。このパラメーターを指定すると、固定数の数値を除外して追加できます。 3として指定されている場合、結果には3つの数値のみが含まれます。オプション。
戻り値:返された配列構造は配列であり、内側の配列の要素はオペランドであり、外側の配列の要素はすべて可能な結果です。