2

数学的計算に大きく依存するアプリケーションを作成するためのベスト プラクティスをどこで読めるか教えてもらえますか? たとえば、100 個の偶数を生成する C# アプリケーションを作成するように依頼されたとします。私は次のように書きます:

public void GenerateEven() {
    for (int i=0;i<100;i++) {
        Console.WriteLine(i * 2);
    }
}

ただし、これはベスト プラクティスではありません。偶数を生成する最良の方法は、たとえば次のようになります。

public void GenerateEven() {
    int i=0;
    while (i <200) {
        if (i % 2 == 0) {
        Console.Writeline(i);
        }
    }
}
4

4 に答える 4

3

表現力を求めている場合は、関数型プログラミングのページをご覧ください。

public static IEnumerable<int> EvenNumbers(int start = 0)
{
    while (true)
    {
        yield return start;
        start += 2;
    }
}

次に、シーケンスを取得します。

var firstHundredEvenNumbers = EvenNumers().Take(100);

それは本当にあなたの目標に依存します。あなたが作曲を探しているなら、上記は素晴らしいです。生の速度を探している場合は、すべてのロジックを1つのボールにマッシュアップして、それを調整する必要がありますが、操作が難しくなります。

于 2012-12-25T15:08:34.863 に答える
2

2 番目の方法が最善の方法であると考える理由は何ですか? その問題をするように頼まれたら、私はこれをするので、100回しかループしません。

for (int i = 0; i < 200; i += 2)
    Console.WriteLine(i);

より一般的な質問については、ループを形成する方法や数学の問題にアプローチする方法に関するベストプラクティスを提供するドキュメントや本はありません。ここで、問題を分析し、最適な解決策を見つけようとする際に、コンピュータ サイエンスの教育が役に立ちます。

あなたのサンプル問題では、提案されたソリューション (私が提案したものを含む) のそれぞれが N の大きな Oになるため、これらのソリューション間の計算上の違いは無視できます。成長は N に関して線形です。私のソリューションが提供する唯一の利点は、基準を満たさない項目をスキップするのではなく、出力を生成するために必要な項目のみをループすることです。

于 2012-12-25T14:39:14.177 に答える
0

実際、Donald Knuthの The Art of Computer Programmingを探しているかもしれません。

それは呼び出されthe bible of all fundamental algorithms、多くの種類のプログラミング アルゴリズムとその分析を含んでいます。ただし、言語固有の瞬間はカバーしていません。

于 2012-12-25T15:03:10.547 に答える
-1

数値を生成したい場合は、Enumerable.Range を次のように使用できます。

編集:(ロテム)

var a = Enumerable.Range(1,100/ 2+ 1).Select((X) => X * 2).ToList();
于 2012-12-25T14:38:07.067 に答える