解決するために貪欲アルゴリズム

今日はプログラミングの問題は、古典的なナップザック問題に類似している問題を、解決するための貪欲アルゴリズムである会社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)
}

  

おすすめ

転載: www.cnblogs.com/linxf/p/12589624.html