おはようございます、私は再帰呼び出しを行う際にアルゴリズムと複雑さを計算する方法を研究していますが、再帰呼び出しのレベル制限が複雑さの計算にどのように影響するかについてのリファレンスは見つかりません。たとえば、次のコードは深い制限で再帰アルゴリズムの複雑さを計算する
countFamilyMembers(int level,....,int count){
if(noOperationCondition) { // for example no need to process this item because business rules like member already counted
return count;
} else if(level >= MAX_LEVEL) { // Level validation, we want just to look up to certain level
return ++count //last level to see then no more recurrence.
} else {
for (...each memberRelatives...) { //can be a database lookup for relatives to explore
count = countFamilyMembers(++level,...,++count);
}
return count;
}
}
私はこれがO(2^n)ループ内の再帰呼び出しだと思います。しかし、私は2つの主な質問があります: 1.ループの値が元の入力とまったく関係していないとどうなりますか?それも "n"と考えることができますか? 2.レベルの検証は、再帰呼び出しを制限して切断することです。これが複雑な計算にどのように影響しますか?
1つのアプローチは、再帰をループに展開することです(この場合はかなり簡単に見えます)。次に、非再帰アルゴリズムの複雑さを評価することができます。これはしばしば簡単です。 – PaulF
元の入力パラメータに関して、** n **とは何ですか? MAX_LEVELは定数ですか?ファンアウト(特定のノードからの親戚の数)が境界か、別の変数か、それとも何か他のものか?これらは深刻な複雑さに影響します。 – Prune
nは、各人の親戚の数に関連しています。 MAX_LEVELは定数ですが、これは複雑さを大幅に減らすか、複雑さを少なくとも書く必要があると私は考えています。 特定のノードの親戚の数は制限されていません。実生活のような任意の値にすることができます。 –