私は貪欲アルゴリズムを使ってクライアントに変更を返すために必要なコインの数を決定する非常に簡単なプログラムを作成していました。 アルゴリズムは本当に明白です。あなたが使用できる大きなコインを決定し、その値を変更から減算し、コインカウンタを更新する必要があります。いくつかの文と条件を持つ単一のループは、いくつかの単純なループよりも優れていますか?
私は2つの本当に似た実装を考えました。
注:changeIntは変更を100倍して整数に変換したものです。
1)シングル "複雑な" ループ
while(changeInt != 0) {
if(changeInt - 25 >= 0){
changeInt -= 25;
coins++;
}
else if(changeInt - 10 >= 0){
changeInt -= 10;
coins++;
}
else if(changeInt - 5 >= 0){
changeInt -= 5;
coins++;
}
else if(changeInt - 1 >= 0){
changeInt -= 1;
coins++;
}
}
2)複数の単純なループ今
while(changeInt - 25 >= 0)
{
changeInt -= 25;
coins++;
}
while(changeInt - 10 >= 0)
{
changeInt -= 10;
coins++;
}
while(changeInt - 5 >= 0)
{
changeInt -= 5;
coins++;
}
while(changeInt - 1 >= 0)
{
changeInt -= 1;
coins++;
}
、私はパフォーマンスはおそらくアルゴリズムいるので、どちらの場合も、同様のになります知っています同じですが、私はどちらのアプローチが良いのだろうと思っていました。
私が思いついた最初のアイデアは、最初のアイデアでした。そして、私は2番目の方法を考えました。それは直感的に私にとっては良いようです。
が、私は本当に私の正確なシナリオを気にしない、私は一般的なもので、より興味が(いくつかのより複雑なループ対いくつかの単純なループ)
1)パフォーマンスの面で優れているアプローチは?
2)少なくとも巨大な数値で作業する場合は、違いが目立っていますか?
3)1つのアプローチは、他のアプローチよりもかなり読みやすいですか? (私がここでそれを聞くことができるか分からない)
ありがとう!
@mauroSabella: 'changeInt> = X'ではなく' chageInt - X> = 0'とする理由で、一時変数を追加していますか?彼らは同等です、それは本当に文体的な質問ですか?なぜあなたはあなたがやったようにそれをすることを選んだのですか? – rjp
@trincotどういう意味ですか?私は同じ結果を得る。なぜあなたはアルゴリズムが同じではないと言っていますか?両方とも私が見ることができるものと全く同じことを同じ順序で行います。 – mauroSabella
あなたは正しいです。私は最初のコードブロックを誤って判断しました。 – trincot