Masalah kehidupan nyata dapat diabstraksi menjadi model data seperti itu:
Pilih beberapa nomor dari array dan biarkan jumlah angka ini menjadi nilai yang ditentukan.
Sebagian besar pembaca seharusnya memiliki pengalaman berbelanja online. Belanja online umumnya memiliki fungsi pembuatan pesanan. Jika pembaca membeli produk senilai 70 yuan, tetapi harus lebih dari 100 yuan untuk mengirimkan pengiriman gratis, sistem secara otomatis akan merekomendasikan beberapa produk, yang akan menambah hingga 100 yuan.
Bagaimana sistem menentukan produk mana yang akan direkomendasikan? Ini sebenarnya model yang disebutkan sekarang. Kita dapat memasukkan harga produk penjualan panas ke dalam array, dan kemudian menggunakan algoritma untuk mencari tahu jumlah harga dalam array yang 30 yuan.
Kurang omong kosong, Xiaocai akan berbagi dengan Anda versi JavaScript dari implementasi algoritma.
Kode Algoritma:
Fungsi getCombBysum (array, jumlah, toleransi, targetCount) {var util = {/*Dapatkan kombinasi dari arrayarr: target arraynum: kombinasi item panjang: satu array yang berisi kombinasi array*/getCombination: function (arr, num) {var r = []; function f (t, a, n) {num (num) {var r = []; function f (t, a, n) {num (num) {var r = []; function f (t, a, n) {num) {n var = []; function f (t, a, n) {num) {n var = []; function f (t, a, n) {ifush (num) {var r = []; function f (t, a, n) {num (n) {var r = [] (function f (t, a, n) i = 0, l = A.length; 0; i <array.length; i ++) {r.push (i);} return r;}}, logic = {// urutkan array, lalu dapatkan apa yang kita butuhkan: function (array, sum) {// {a -retray {a narray = array.concat (), r = [], i = 0; b;}); // Dapatkan semua angka ketika kurang atau sama dengan jumlah untuk (i = 0; i <_array.length; i ++) {if (_Array [i] <= sum) {r.push (_array [i]);} else {break;} return r;}, // function core: array {array, {array, {array {array, {array, {array, {array, {naRay, 0,combArray = [],_sum = 0,_cca = [],_cache = [];if(count == _returnMark){return;}//get current count combinationcombArray = util.getCombination(arrayIndex,count);for(i = 0;i<combArray.length;i++){_cca = combArray[i];_sum = 0; _cache = []; // Hitung jumlah dari kombinasi untuk (k = 0; k <_cca.length; k ++) {_ sum+= array [_CCA [k]]; _ cache.push (_cAch [_CCA [k]]);} if (math.abs (_sumum) [_CCA [k]]);} if (Math.Abs (_sum-sums) [k]]); } logic.core (array, sum, arrayIndex, count-1, r);}}, r = [], _ array = [], _ targetCount = 0, _tolerance = 0, _Returnmark = 0; // Periksa data_targetCount = targetCount || _TargetCount; _Tolerance = Toleransi || _Tolerance; _Array = logic.init (array, sum); if (_targetCount) {_ returnmark = _targetCount-1;} logic.core (_array, sum, util.getArrayIndex (_Array), (_ TargetCount || _array.length), r); return r;}Instruksi Panggilan:
Array: Array Sumber Data. Diperlukan.
Jumlah: jumlah jumlah. Diperlukan.
Toleransi: Toleransi. Jika parameter ini tidak ditentukan, jumlah jumlah harus sama dengan parameter SUM, menentukan parameter ini akan menyebabkan hasil mengapung dalam rentang toleransi. Opsional.
TargetCount: Jumlah operan. Jika parameter ini tidak ditentukan, hasilnya berisi semua kasus yang mungkin. Menentukan parameter ini dapat memfilter jumlah nomor tetap dan menambahkannya. Jika ditentukan sebagai 3, hasilnya hanya berisi tiga angka. Opsional.
Nilai pengembalian: Struktur array yang dikembalikan adalah array, elemen -elemen dalam array dalam adalah operan, dan elemen -elemen dalam array luar adalah semua hasil yang mungkin.