Erklären Sie bitte die Aussage, dass die Funktion an + b zu O (n ^ 2) und Θ (n) gehört.


12

Angenommen, ich habe eine lineare Funktion f(n)= an+b. Was ist der beste Beweis dafür, dass diese Funktion zu O (n 2 ) und gehört Θ(n)?

Ich brauche hier keine mathematische Strenge. Ich brauche eine Antwort des Programmierers. Eine logische Art zu erklären.

Dies ist genau der Grund, warum ich die Frage nicht in der mathematischen F & A, sondern in der Programmierer-F & A gestellt habe.


2
@EmmadKareem In der Literatur wird die Big O-Notation häufig gelegentlich verwendet, um enge Grenzen darzustellen, die im Grunde genommen Θ (n) sind. Big O ist eigentlich die Obergrenze.
Geek

1
@EmmadKareem "obere Grenze von O (n) ist nicht n * n." ,, es gibt keine obere Grenze von O (n). O (n) selbst definiert die Obergrenze. Es kann tatsächlich eine Menge von Funktionen enthalten, die die Bedingung erfüllen: f (x) ∈ O (g (x)), da c> 0 (z. B. c = 1) und x0 (z. B. x0 = 5) vorhanden sind, so dass f (x) ) <cg (x) wann immer x> x0.
Geek

2
@EmmadKareem Tatsächlich O (n) \ Teilmenge O (n ^ 2) \ Teilmenge O (n ^ 3) und so weiter, also f \ in O (n ^ 2) nach Transitivität von \ Teilmenge. Beachten Sie, dass \ subset nicht \ subseteq ist.
scarfridge

6
"Ich brauche eine Antwort des Programmierers. Eine logische Art zu erklären." - Nun, wie definieren Sie "logisch"? Mathe ist logisch. Alles andere als konsequentes Denken ist hier falsch . Sie können versuchen, das Thema zu erklären, aber ohne die (ansonsten nicht schwierige) Mathematik dahinter zu verstehen, werden Sie es nicht wirklich verstehen - Sie haben nur ein nebliges Gefühl dafür, was es bedeutet.
Tamás Szelei

2
@Geek: Ich denke du meinst Mathematik ? cs.SE wäre auch eine gute Adresse.
Raphael

Antworten:


20

Die Big Oh-Notation (O, Theta, Omega) handelt von Wachstumsraten von Funktionen.

Wenn Sie einen Algorithmus implementieren, weist dieser eine bestimmte Eigenschaft auf, wie sich die Laufzeit ändert, wenn Sie den Datensatz vergrößern. Jetzt können Sie den Algorithmus optimieren, damit er um den Faktor 100 schneller läuft. Sicher, das ist großartig, aber im Grunde ist es immer noch derselbe Algorithmus. In einigen Jahren sind Computer möglicherweise doppelt so schnell wie heute.

Die Landau-Notation entzieht diese konstanten Faktoren. Es ist egal, ob ein Algorithmus fimmer doppelt so schnell ist wie ein anderer g: Vielleichtg kann möglicherweise so optimiert werden, dass er viermal schneller ausgeführt wird, oder Sie können stattdessen schnellere Hardware kaufen. Wenn Sie es aus dieser Perspektive betrachten, könnten Sie sagen, dass sie "gleich" sind. (Das heißt nicht, dass Sie konstante Faktoren in der Praxis (immer) ignorieren können.)

Big oh gibt eine Obergrenze an, ähnlich der <= Relation.

Sie werden zustimmen, dass 1 < 2das wahr ist. Bedeutet das, dass 1das nicht weniger sein kann als jede andere Zahl? Sicherlich nicht. Es gibt unendlich viele Zahlen, die größer sind als1 .

Mit Wachstumsraten ist es ähnlich. O(n)bezeichnet die Menge aller Funktionen, die linear (oder langsamer) wachsen.O(n^2)bezeichnet dagegen alle Funktionen, die mit quadratischer Komplexität (oder langsamer) wachsen. Sie werden mir sicher zustimmen, dass eine lineare Funktion langsamer wächst als eine quadratische Funktion.

Aus diesem Grund kann eine Funktion mehr als einer "Big-Oh" -Klasse angehören.

Hier ein Vergleich verschiedener Funktionen mit Einschränkungen: (aus Knuths Konkreter Mathematik)

Wachstumsratenvergleiche

Von links nach rechts wachsen die Funktionen schneller.

Außerdem Bildbeschreibung hier eingebenwächst die Bedeutung von n ^ 2 schneller als n ^ 1, weil 2> 1.

Definitionen

Definition Omega

"f wächst schneller oder genauso schnell wie g"

Definition groß Oh

"f wächst langsamer oder genauso schnell wie g"

Definition Theta

Die Kombination der beiden oben. Es heißt, die Funktion fwächst "genauso schnell" wieg . Es ist eine Äquivalenzbeziehung.

Deutung

Angenommen, Sie haben zwei Algorithmen fund g.

Omega

Angenommen f nicht in Theta von g, f in Omega von ges gibt unabhängig von Ihrem Budget keine konstante Menge an Rechenleistung, die Sie Ihrem System hinzufügen können und die fimmer so schnell wie möglich ausgeführt wird g.

Groß oh

Angenommen f nicht in Theta von g, f in Big Oh von gwenn Sie über genügend Daten verfügen, ist fdie Ausführung immer schneller als g, unabhängig davon, wie viel Rechenleistung Sie Ihrem System hinzufügen.

Beweis

Wenn Sie wirklich versuchen, dies zu beweisen, müssen Sie anhand der Definitionen der Landau-Notation nachweisen, dass Ihre Funktion die erforderlichen Bedingungen erfüllt.

Sie müssen also Werte für c, finden d, n_0damit die Bedingung erfüllt ist.

Hier ist, wie Sie das für die untere Schranke machen können mit c:

Beweis

Es ist wichtig zu wissen, dass ich es willkürlich cals kleiner definiere , als a-1es vollkommen in Ordnung ist. Die Definition von Theta (g) besagt, dass "da ist ein c". Es kann ein beliebiger Wert sein, solange er größer als 0 ist. (Wenn aes sich um eine positive reelle Zahl handelt, müssen Sie den Proof jedoch geringfügig ändern, da er a - 1möglicherweise negativ ist.)

(Ich gehe davon aus a, dass es sich um eine positive Funktion handelt, andernfalls ist die Funktion für große Werte von immer negativ n, was für eine Funktion, die die Laufzeit angibt, keinen Sinn macht.)

Sie können versuchen, es für die obere Schranke zu tun, es ist ziemlich ähnlich. Wenn Sie nicht wissen, wie, kann ich Ihnen einen Beweis liefern.

Tipp: Beginnen Sie mit d > a + 1

Beachtung

Es ist wichtig, dass Sie nicht den falschen Weg beweisen. Wenn Sie annehmen, dass (an + b) in O (n) steht und von dort aus fortfahren, haben Sie nicht bewiesen, was Sie wollten. Sie müssen sicherstellen , dass alle Ihre Schritte gehen sowohl Art und Weise, dh statt =>Sie haben <=>.


2
Das ist es. Schade, dass Leute wegen der Mathematik ausflippen, es ist eigentlich sehr einfach.
Tamás Szelei

Die Frage lautet: "Ich brauche hier keine mathematische Strenge. Ich brauche eine Antwort des Programmierers ..." Die in dieser Antwort verwendete Notation scheint nicht gut zu der Frage zu passen
Mücke

1
@gnat Hmm, ich dachte, die Frage sagte "beweisen" an einem Punkt. Jedenfalls habe ich Interpretationen für die mathematischen Definitionen hinzugefügt.
Phant0m

@ phant0m tolle Antwort. genau das, wonach ich gesucht habe. Die Mathematik in der Antwort machte es solider, obwohl "Mathematik" in der ursprünglichen Frage nicht speziell gefragt wurde. Danke vielmals.
Geek

@Geek, ich bin froh, dass es dir gefällt. Wenn Sie weitere Fragen haben, können Sie diese gerne stellen und ich kann meine Antwort präzisieren / erweitern.
Phant0m

5

Wenn Sie mit Polynomen arbeiten, interessiert Sie nur der Grad des Polynoms. Das ist, denn an + bSie kümmern sich nur um n. Wenn es an^3 + bn^2 + cn + dso wäre, würde es dich nur interessieren n^3.

Also wird ein Polynom mit Grad d immer in sein Θ(n^d). Einfach.

Jetzt müssen wir über den Unterschied zwischen Θ und O sprechen. Im Wesentlichen ist es der gleiche Unterschied wie zwischen ==und <=. So Θ(n)bedeutet , dass es ist immer auf einem konstanten Faktor von n. O(n)bedeutet, dass es immer entweder innerhalb eines konstanten Faktors von noder kleiner als ist n.

Dies bedeutet, dass jede Funktion in Θ(s)für jede Funktion sauch in ist O(s). Wenn sich eine Funktion in befindet Θ(s)und simmer kleiner als eine andere Funktion ist t, befindet sich diese Funktion in, O(t)jedoch nicht in Θ(t).

Der Vollständigkeit halber gibt es auch Ω(n). Wenn Θrepräsentiert ==und Orepräsentiert <=, Ωrepräsentiert >=. So an + bist in Ω(1), Θ(n)und O(n^2).

Wie ich bereits sagte, ist es wirklich einfach herauszufinden, in welcher Klasse sich Polynome befinden - sehen Sie sich nur den Grad an. Es gibt noch einige andere Funktionen, mit denen Sie problemlos arbeiten können.

Beliebige Funktionen in Form von a^bnfür beliebig aund bsind in Θ(a^n). Für jeden Wert c >= asind sie in O(c^n). Jedes Polynom ist in O(2^n). Im Wesentlichen besagt dies nur, dass Exponentialfunktionen immer Polynome schlagen und dass die Basis der Exponentialfunktion von Bedeutung ist.

Logarithmen sind das Gegenteil. Zum einen log_b nist in Θ(log n)für jeden b. Dies bedeutet, dass die Basis für Logarithmen keine Rolle spielt. Dies ist sinnvoll, da das Umschalten zwischen verschiedenen Basen in Logarithmen nur mit einer Konstanten multipliziert wird. Logarithmische Funktionen sind auch in O(n)- das heißt, eine logarithmische Funktion ist kleiner als jedes Polynom (mindestens vom Grad 1).

Bei einer Summe dieser Funktionen "gewinnt" die größte. Ist n + log nalso drin, Θ(n)weil der nBegriff den Begriff dominiert log n. Die Multiplikation ist komplizierter. Für CS ist das Einzige, was Sie wissen müssen, dass nlog nzwischen nund liegt n^2.


1
ziemlich gut. Per meine Erinnerung obige Erklärung ist so nah an den klassischen Algorithmus Design Manual wie es geht
gnat

1
@Tikhlon schön aufschreiben.So +1. Aber der, den ich akzeptierte, war noch besser.
Geek

-2

Ohne viel Mathematik zu verwenden, nehmen Sie die Funktion f (n) = an + b und lassen alle Konstanten fallen, so dass es so aussieht: f (n) = n, dann nehmen Sie das "n" mit dem höchsten Grad als Ihre Antwort QED Θ (n)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.