Guten Morgen, ich studiere Algorithmen und die Möglichkeit, Komplexität zu berechnen, wenn rekursive Aufrufe, aber ich kann keinen Verweis darauf finden, wie eine Ebenenbegrenzung in rekursiven Aufrufe die Berechnung der Komplexität beeinflussen kann. Zum Beispiel dieses Code:Berechnen Sie die Komplexität in rekursiven Algorithmus mit tiefen Grenzwert
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;
}
}
ich denke, das O (2^n), da der rekursive Aufruf in der Schleife ist. Ich habe jedoch zwei Hauptfragen: 1. Was passiert, wenn die Loop-Werte überhaupt nicht auf den ursprünglichen Eingang bezogen ist? kann das auch "n" sein? 2. Die Level-Validierung dient zum sicheren Schneiden der rekursiven Aufrufe. Wie wirkt sich dies auf die Komplexitätsberechnung aus?
Ein Ansatz besteht darin, die Rekursion in eine Schleife zu zerlegen (sieht in diesem Fall ziemlich einfach aus). Dann können Sie die Komplexität des nicht-rekursiven Algorithmus auswerten, was oft einfacher ist. – PaulF
Was ist ** n ** in Bezug auf Ihre ursprünglichen Eingabeparameter? Ist MAX_LEVEL eine Konstante? Ist der Fan-out (Anzahl der Verwandten von einem bestimmten Knoten) begrenzt oder eine andere Variable oder etwas anderes? Diese beeinflussen die Komplexität erheblich. – Prune
n bezieht sich auf die Anzahl der Verwandten jeder Person. MAX_LEVEL ist eine Konstante, ich denke, das sollte die Komplexität verringern oder zumindest Komplexität in Bezug auf sie schreiben, ich bin mir nicht sicher, wie es noch geht. Die Anzahl der Verwandten für einen bestimmten Knoten ist nicht begrenzt, es kann ein beliebiger Wert wie im wirklichen Leben sein. –