Wir haben eine Funktion, die ein Array als Eingabe verwendet. Es zerlegt ein Array in Teile mit gleichen Größen, wobei die Größe des Subarrays ist. Es unterbricht jedes der Subarrays so lange, bis nur noch zwei Elemente darin sind. Was ist die Tiefe dieser Rekursion?
Beispiel des Prozesses:
Zuerst haben wir Elemente und teilen sie in Teile mit gleichen Größen auf. Jeder dieser Teile enthält Elemente. In der nächsten Rekursionsstufe werden wir jedes der Subarrays wieder in Teile mit gleichen Größen aufteilen . Diese enthalten nun Elemente in jedem von ihnen. Und wir brechen das Array auf diese Weise weiter auf, bis wir ein Subarray mit nur zwei Elementen erreichen.
Antworten:
Sei und bezeichne mit die Anzahl der Anwendungen von , die erforderlich sind , um unter eine beliebige Konstante zu bringen. Einerseits und damit Um eine Obergrenze zu erhalten, beachten Sie, dass wir , solange , , und daher sind höchstens Iterationen erforderlich, um auf zu reduzieren . Das gleiche Argument gilt für die Reduzierung von auff(n)=n/logn g(n) f n f(t)(n)≥n/logtn g(n)≥loglognn=lognloglogn. f(t)(n)≥n−−√ logf(t)(n)≥(logn)/2 log(logn)/2n=O(logn/loglogn) n n−−√ n−−√ n−−√4 und so weiter und daher
(Hier ist dasselbe wie .) Beachten Sie, dass
. Für große haben wir (sagen wir), und so
Daher wird die Summe durch eine konvergente geometrische Reihe multipliziert, und wir schließen daraus, dass
Insgesamt bekommen wir das
g(n)≪lognloglogn+logn−−√loglogn−−√+logn−−√4loglogn−−√4+⋯. ⋅≪⋅ ⋅=O(⋅) logn−−√=12logn n loglogn−−√≥23loglogn logn−−√loglogn−−√≤23lognloglogn. g(n)=O(lognloglogn). g(n)=Θ(lognloglogn).
Mit mehr Arbeit können wir wahrscheinlich eine verfeinerte Schätzung wie
g(n)∼lognloglogn.
quelle
Scheint, dass Sie sich auf iterierten Logarithmus beziehen, der auch als -Funktion bezeichnet wird. Diese Funktion gibt an, wie oft Sie den Logarithmus einer Zahl verwenden können, bis eine Zahl kleiner oder gleich 1 entsteht.log∗
Die -Funktion wächst sehr langsam. Es ist die Umkehrung der Tetration.log∗
Mehr davon finden Sie hier .
quelle
Sei n die Größe des Arrays. Sei k = log2 (n). Im ersten Schritt dividieren Sie durch k. Solange die Arraygröße größer als istn1/2 dividieren Sie durch mehr als k / 2. Ich würde sagen, das ist O (log n / log log n).
(Das Aufteilen in k Teile erfordert immer log n / log k Aufteilungen. Sie haben nach dem Sonderfall k = log n gefragt, daher log n / log log n. Dann müssen Sie entscheiden, ob das Schrumpfen k einen Unterschied macht oder nicht.)
quelle
Alle folgenden Logarithmen bedeuten Logarithmus mit Basis 2,log2(⋅) .
Nennen wir die in der Frage angegebene Funktionslog . ("Slog" kommt von s Plitting mit Log . Es kann auch " s Maller als Log " bedeuten .) In genauen Worten,
slog auf N wird durch die folgenden Bedingungen definiert.
Wir können den folgenden Satz über das asymptotische Verhalten von beweisenslog(n) .
limn→∞ slog(n)lognloglogn=1.
Hier ist die Grundidee des Beweises.
Logische Folge.slog(n)=Θ(lognloglogn) .
Die gleiche Schlussfolgerung gilt, wenn wir definierenslog(x) zum x>1 mit slog(x)=1 zum 1<x≤2 und slog(n)=1+slog(nlogn) .
Übung. Schreiben Sie den vollständigen Beweis vonslog(n)∼lognloglogn .
quelle