今日はプログラミングの問題は、古典的なナップザック問題に類似している問題を、解決するための貪欲アルゴリズムである会社Tの質問に、作られました。直前の80%との印象が実際にそれを行う際に書かれた、見た、と私はそれを記録することは非常に快適に感じます。
私は同様のトピックを書き、覚えていないオリジナルタイトル。
ナップザック問題は、次のように組み合わせ最適化問題が記載されている:固定サイズを考えると、それは商品の重量がパッケージを超えないロードような最適解を見つけるために、搬送リュックW重量物品の重量のセット値が可能ですW及び最大合計値。
1、問題分析
データ:項目数n = 5、項目ウェイトの重量= [2,2,6,5,4]、商品値の値= [6,3,5,4,6]、バックパックW = 10の総容量。
2、思考の問題
*まず、各アイテムの価格を計算し、それが重量/各原価項目について得られた値は、昇順に従って配列、に寄託あります。> = 0の容量まで、アレイを横断した後、最大の値を増加させます。
次のように*コードは次のようになります。
聞かせて価格= [2,2,3,1,5,2]; //価格は 聞かせてNUMS = [2,3,1,5,4,3]; //数はに対応 しましょうお金= 6; //ありどのくらいの tanxin(価格、NUMS、お金。) 関数tanxin {(価格、NUMS、お金。) に//戻り値 のlet最大= 0; //どのくらい残って今 のlet endMoney =お金; のlet ARR = []; / /トラバーサル価格、価格、数量、及びメモリアレイの割合に price.forEach((ELE、IDX)=> { arr.push({ '価格' :.価格[IDX]、 'NUM':NUMS [IDX] 'ビリビリ' :.価格[IDX] / NUMS [IDX] }) }) //小から大へ、いくつかの並べ替えを行う arr.sort((A、B)=> { 戻りa.bili - b.bili }) / /アイテムのアレイを横切ります ARR .forEach((ELE、IDX)= > { //必要性が0よりも時に大きなを定義するために、または行くために追加されています IFを(endMoney - ele.price> = 0){ 減らすためにお金の//残り endMoney = endMoney - ele.price、 あなたが買うことができるアイテムの最大数を増やす// ele.num + =最大 } }) はconsole.log(MAX) }