0

私は大学で情報学の宿題を解決するために、私はいつも同じ問題を解決するさまざまな方法を見つけます。 片道は最速(実行時間)ですが、最長かつ複雑です。 もう1つは実現が容易で、実行時間が短く、理解しやすいなどです。読みやすさとシンプルさの向上対プログラミングの高速化と高速化、選択肢

最小の例として、C++でN要素の行を出力するプログラムを作成する必要があるということです。各要素には、中央の要素とは異なる隣接要素があります。

Ex.  
6 Elements: *_*_*_ 
7 Elements: *_*_*_* 

第1の解決策は最も簡単である:

#include <iostream> 
using namespace std; 

int main(void){ 
    int a; 
    cin >> a; 
    for (int i=1; i<=a; i++) 
    { 
     if (i%2 != 0) 
     { 
      cout << "*"; 
     } 
     else 
     { 
      cout << " "; 
     } 
    } 
    return 0; 
} 

2つ目は、(以下条件式チェック)を実行するために少し実装が難しくなく、高速である:

#include <iostream> 
using namespace std; 

int main(void){ 
    int a; 
    cin >> a; 
    if (a%2 == 1) 
    { 
     for (int i=1; i<=a; i=i+2) 
     { 
      cout << "*"; 
      cout << " "; 
     } 
    } 
    else 
    { 
     for (int i=1; i<a; i=i+2) 
     { 
      cout << "*"; 
      cout << " "; 
     } 
     cout << " "; 
    } 
    return 0; 
} 

私の質問は何に焦点を当てるべきですか?この2つの問題解決方法には常に相違があるため、実装/展開が容易で、可読性やアルゴリズムが優れていて、実行が速く、強力なロジックです。

+1

私はより良いスピードのために1つだけのcoutで解決策2に行きます:) for(int i = 1; i <=; i = i + 2){cout << "* *"; } 'BTW私は、例2のtypoがあると信じています:両方のループが同じ順序で星とスペースを発行します。 –

+0

)、スペースは例としてスペースの代わりに " - "と言いましょう – DomainFlag

+1

2番目のバージョンに2つのループがある理由は見当たりません。 – perreal

答えて

4

あなたはである必要があります。わかりやすく読みやすい、簡単にデバッグできるコードを書くようにしてください。

(コードのアーキテクチャを変更したり、コード内にアセンブリを実装して)パフォーマンスを大幅に向上させるために大幅に最適化できるコードの部分が出現した場合は、それのパフォーマンスの代替。あなたがより良いパフォーマンスの選択肢を選んだとしても、それを理解するために、あなたはいつもあなたをバックアップできるもう1つの能力を持っています。

また、毎回ではなく、そうすることで大きな利益を得ることができる場合は、より良いパフォーマンスの選択肢に挑戦してください。

は、これらの改善は、のみパフォーマンスのボトルネックまたは電力効率が重要であるシステムである場合にはを実装するために優れていることに留意してください。

+1

パフォーマンスの問題が発生したときには、それを_Ifにしてください。 – greybeard

+0

あなたが提案した内容に基づいて編集しました。ありがとうございました :) –