실제 문제는 이러한 데이터 모델로 추상화 될 수 있습니다.
배열에서 여러 숫자를 선택 하고이 숫자의 합이 지정된 값이되도록하십시오.
대부분의 독자들은 온라인 쇼핑 경험이 있어야합니다. 온라인 쇼핑에는 일반적으로 주문 제작 기능이 있습니다. 독자가 70 위안의 제품을 구매하지만 무료 배송을 위해 100 위안 이상이어야하는 경우 시스템은 자동으로 일부 제품을 권장하며 최대 100 위안이 추가됩니다.
시스템은 권장 할 제품을 어떻게 결정합니까? 이것은 실제로 지금 방금 언급 된 모델입니다. 우리는 핫 판매 제품의 가격을 배열에 넣은 다음 알고리즘을 사용하여 어레이의 가격 금액이 30 위안인지 확인할 수 있습니다.
덜 말도 안되는 Xiaocai는 알고리즘 구현의 JavaScript 버전을 공유 할 것입니다.
알고리즘 코드 :
함수 getComBysum (배열, 합계, 공차, targetCount) {var util = {/*arrayarr : target arraynum : get arraynum : 조합 배열을 포함하는 하나의 배열*/getcombination : function (arr, num) {var r = []; (함수 f (t, a, n) {r.push (n == 0); I = 0, A.length; i <= ln; 0; i <array.length; i ++) {r.push (i);} return r;}}, logic = {// 배열을 정렬 한 다음 우리가 필요로하는 것을 얻습니다 : function (array, sum) {// clone arrayvar _array = array.concat (), r = [], i = 0; b;}); // // sumfor (i = 0; i <_array.length; i ++) {if (_array [i] <= sum) {r.push (_array [i]);} else {break;}} return r;}, // array, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, ray, var {if (_array [i] <= sum); 0, combarray = [], _ sum = 0, _cca = [], _ cache = []; if (count == _returnmark) {return;} // 현재 count combindcombarray = util.getcombination (arrayindex, comp); = []; // Combour (k = 0; k <_cca.length; k ++) {_ sum+= array [_cca [k]]; _ cache.push (array [_cca [k]])에서 합계를 계산합니다. } logic.core (배열, 합 _TARGETCOUNT; _TOLERANCE = 공차 || _tolerance; _array = logic.init (배열, 합); if (_targetCount) {_ returnMark = _targetCount-1;} logic.core (_array, sum, util.getArrayIndex (_array), (_ targetCount || _array.length), return r;}통화 지침 :
배열 : 데이터 소스 배열. 필수의.
합 : 합계. 필수의.
공차 : 공차. 이 매개 변수가 지정되지 않은 경우 합의 합은 SOM 매개 변수와 같아야 하므로이 매개 변수를 지정하면 결과가 공차 범위 내에서 플래시하게됩니다. 선택 과목.
TargetCount : 피연산자 수. 이 매개 변수가 지정되지 않은 경우 결과에는 가능한 모든 경우가 포함됩니다. 이 매개 변수를 지정하면 고정 된 수의 숫자를 필터링하고 추가 할 수 있습니다. 3으로 지정된 경우 결과에는 3 개의 숫자 만 포함됩니다. 선택 과목.
반환 값 : 반환 된 배열 구조는 배열이고, 내부 배열의 요소는 피연산자이며, 외부 어레이의 요소는 모두 가능한 결과입니다.