Ich habe ein Problem, mit dem ich Hilfe brauche. Im geben:Wie berechnet man die Anzahl der Knoten in einem Baum gegebenen Algorithmus?
int sum(int[] array, int first, int last)
{
if (first == last)
return array[first];
int mid = (first + last)/2;
return sum(array, first, mid) + sum(array, mid + 1, last);
}
Frage: Bestimmen Sie eine Formel, die die Anzahl der Knoten im Rekursionsbaum zählt.
So habe ich die Rekursionsgleichung: T (n) = 2T (n/2) + dn
und beispielsweise für eine Anordnung der Länge 8, die Anzahl der Knoten in dem Rekursionsbaum würde 15 sein , die anzeigen würde, dass die Anzahl der Knoten in einem Baum 2n-1 wäre, wobei n die Größe des Arrays ist.
Ich habe mich gefragt, ob mein Denken korrekt ist und kann die 2n-1 Formel auf jeden Fall angewendet werden? Gibt es eine allgemeine Möglichkeit, die Anzahl der Knoten in einem Rekursionsbaum bei einem rekursiven Algorithmus zu berechnen?
Vielen Dank für Ihre Hilfe!
Was ist ** dn ** und welcher Code repräsentiert diese Kosten? – trincot
@trincot ** dn ** repräsentiert wahrscheinlich die Kosten für die Additionsoperation und einige andere konstante Zeitoperationen in der Funktion. Weil der Ausdruck ** 2T (n/2) ** für die Rekursionsaufrufe und alle Operationen, die übrig bleiben (Vergleich, Berechnung von ** Mitte ** und Addition und Rückkehr), alle eine konstante Zeit benötigt. T (n) = 2T (n/2) + c – Shubham
Ich finde es nur verdächtig, dass ** n ** in ** dn ** erscheint. Ich wollte nur sicherstellen, dass es nicht vom Wert von ** n ** abhängig ist. – trincot