貪欲法

貪欲法
貪欲法とは
(greedy algorithm)
•その場の最善を選択していくことを
繰り返すアルゴリズム
問題
•1円玉から500玉までそれぞれC1からC6
枚ずつあるとする。
•できるだけ少ない枚数で支払うにはどう
したらいいか?
入力値の例
C1=3、
C5=2,
C10=1,
C50=3,
C100=0,
C500=2
A=620の時何枚で払える?
回答
• だた数字が大きい硬貨から払えばいいだけ
• ソースコードは張りません自分でやってね
Int A = 620;
Int[] V ={1,5,10,50,100,500}
Int[] C ={C1,C5,C10,C50,C100,C500}
for(int i = V.length;i<0;i--){
//コインを使う枚数を求めよ
}
うまくいかない時もある
• この貪欲法ではうまく解けないものもある。
• 例:ナップサック問題
• ググってね
問題
AOJ No.0031 : Weightから引用
祖母が天秤を持っていた。分銅が10個あっ
て、1g、2g、4g、8g、 16g, 32g, 64g, 128g,
256g, 512gまである。例として200gのものを
置いたら128g、64g、8gで釣り合いをとった。
与えられる重みを貪欲法で溶きましょう。
Sample Imput
Sample Output
•5
•7
•127
1 4
1 2 4
1 2 4 8 16 32 64
載せる重さ
載せる分銅スペース区切りで
AOJ No.1052 : Old Bridges から引用
• むかしむかしあるところに、一人の泥棒がおりました。彼が向かった先に
は、財宝の眠る n 個の島と、何もない1つの島がありました。彼が唯一上
陸できたのは何もない島でした。彼は島中を歩き回ったところ、この島か
ら他の n 個の島に向かって1本ずつ、古いつり橋がかかっているのを見付
けたのでした。
• 彼は島々を一つずつ巡り、財宝を全て回収することにしました。彼は既に
回収した全ての財宝を持ったまま島々を回ります。全ての財宝を一度に
運ぶことができますが、つり橋は、一定量以上の財宝を持った状態で渡る
と崩れる。
• 島を巡る順番を適切に選ぶことで、彼が全ての財宝を回収して、上陸した
島に戻ってこられるかどうかを判定するプログラムを書いてください。
Sample Imput
3
2
3
1
3
2
3
1
0
3
6
2
3
5
2
//n
//財宝と橋の耐久
Sample Output
•Yes
•No
クラスカル法
•最小全域木を求める最適化問題の
アルゴリズム
•貪欲法の一種
•自分で調べてね。g