Wie Sie wissen, wenn Big O ist Logarithmisch?
Meine Frage aus dem post "Plain-Englisch Erklärungen von Big O". Ich weiß nicht, die genaue Bedeutung von logarithmische Komplexität. Ich weiß, dass ich eine regression zwischen der Zeit und der Anzahl der Operationen, und berechnen Sie die X-Quadrat-Wert, und bestimmen so die Komplexität. Ich möchte jedoch wissen, eine Methode zu bestimmen, ist es schnell auf Papier.
Wie bestimmen Sie die logarithmische Komplexität? Gibt es da ein paar gute benchmarks?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, ob dies ist, was du meinst, aber... logarithmische Komplexität entsteht in der Regel, wenn Sie arbeiten mit einem spread-out-Daten die Struktur einer balanced binary tree, enthält 1 Knoten an der Wurzel, 2 Kinder, 4 Enkel, 8 Urenkel, etc. Im Grunde auf jeder Ebene die Anzahl der Knoten multipliziert wird um einen Faktor (2), sondern nur noch einer von denen ist, die beteiligten in der iteration. Oder als anderes Beispiel, eine Schleife, in der der index verdoppelt sich bei jedem Schritt:
Dinge wie, dass sind die Unterschriften von logarithmischer Komplexität.
Nicht streng, aber Sie haben einen Algorithmus, der im wesentlichen die Aufteilung der Arbeit, die getan werden musste, um die Hälfte, die bei jeder iteration, dann haben Sie eine logarithmische Komplexität. Das klassische Beispiel ist die binäre Suche.
Master-theorem in der Regel funktioniert.
Wenn Sie nur wollen, um zu wissen, über logarithmisch-Big-Oh, sei auf der Hut, wenn Ihre Daten geschnitten in der Hälfte jeder Schritt der Wiederholung.
Dies ist, weil, wenn Sie die Verarbeitung von Daten, das ist 1/2 so groß wie der Schritt, bevor es, es ist eine unendliche Reihe.
c
konstant ist.Hier ist ein weiterer Weg, es zu sagen.
Vermute, dass Ihr Algorithmus ist linear in der Anzahl der Ziffern in der Größe des Problems. Ja, haben Sie vielleicht einen neuen Algorithmus um Faktor eine große Nummer, die Sie anzeigen können, werden linear in der Anzahl der Ziffern. Eine 20-stellige Zahl damit doppelt so lange dauert auf den Faktor als eine 10-stellige Zahl mit Hilfe Ihres Algorithmus. Dies hätte melden Komplexität. (Und es wäre der Mühe Wert, etwas für die Erfinder.)
Zweiteilung hat das gleiche Verhalten. Es dauert etwa 10 Zweiteilung Schritten geschnitten, um die Intervall-Länge mit einem Faktor von 1024 = 2^10, aber nur 20 Schritte schneiden Sie das Intervall um einen Faktor 2^20.
Log Komplexität bedeutet nicht immer, dass ein Algorithmus schnell auf alle Probleme. Der lineare Faktor vor dem O(log(n)) groß sein kann. So Ihr Algorithmus kann schrecklich sein auf kleine Probleme, die nicht immer nützlich, solange das problem der Größe ist spürbar groß, dass die anderen algorithmen sterben eine exponentielle (oder Polynom) Tod.