0

私はJavaでプログラムを書いており、その一部はタンパク質配列の切断を評価する必要があります。切断がどちらかの側の特定のグループで発生するかどうかを評価する必要があります。これにより、if、else/elseif ステートメントがいくつかの場所での煩わしい論理、ネスト、またはいくつかの「if」および/または「else」のいずれかになります。切断が発生するたびにいくつかの「if」と論理 (&&、||) を評価する必要がある代わりに、switch を使用しました (このループは、文字通り何百万回も、何千万回も何億回も繰り返されます)。

コードのチャンクは次のとおりです: -.getSeq() は、タンパク質の配列を表す文字列を取得します -startPos と endPos は、両端の切断のインデックスです -if ステートメントの行が複数の行に分割されているか、複雑になっている場合は申し訳ありませんが、それは私のケースのようなものと論理についてのポイント。

/**0: non-tryptic, 1: half-tryptic, 2: fully tryptic**************/
public boolean checkPep(int trypticity){
    boolean evaluator = false;
    int prev = 0;
    if (startPos != 0){
        prev = 1;
    }
    switch(trypticity){
/**do not check cleavage if peptide can be non-tryptic*/
    case 0:
        evaluator = true;
        break;
/***half-tryptic*/
/**check if either the start OR end cleavage is tryptic*/
    case 1:
        switch(protein.getSeq().charAt(startPos-prev)){
        case 'K':
            evaluator = true;
            break;
        case 'R':
            evaluator = true;
            break;
        default :
            switch(protein.getSeq().charAt(endPos)){
            case 'K':
                evaluator = true;
                break;
            case 'R':
                evaluator = true;
                break;
            default:
                evaluator = false;
                break;
            }
            break;
        }
        break;
/**fully tryptic*/
/**if first cleavage is tryptic, check end cleavage*/
/**evaluator = true IFF both cleavages are tryptic*******/
    case 2:
        if(((protein.getSeq().charAt(startPos-1)) == 'K') || ((protein.getSeq().charAt(startPos-1)) == 'R')){
            if(((protein.getSeq().charAt(endPos)) == 'K') || ((protein.getSeq().charAt(endPos)) == 'R')){
                evaluator = true;
            }else{
                evaluator = false;
            }
        }else{
            evaluator = false;
        }
        break;
    }
    return evaluator;
}
4

1 に答える 1

3

この種のことは、マイクロ最適化と呼ばれるものです。

switchチェーンの代わりにa を使用するifと有益な場合もありますが、そうでない場合もあります。それは文脈に大きく依存します。

確実にする唯一の方法は、潜在的な最適化の有無にかかわらずバージョンを比較して、コードを注意深くベンチマークすることです。また、重要でないコードの最適化に時間を浪費しないように、最初にプロファイルを作成することもお勧めします。

特定のマイクロ最適化の効果は、実際の実行ハードウェア、オペレーティング システム、および JVM のバージョン / フレーバーによって異なる場合があることに注意してください。(そしておそらく他のことも... 利用可能な物理メモリの量やヒープの大きさなど.) 第一原理からの利点を予測することは困難であり、プラットフォームの変更によって手作業による調整作業がすべて無効になる可能性は常にあります。 .

于 2012-06-28T00:38:30.763 に答える