Wenn wir die Standardlehrbücher oder Tradition folgen, lehren die meisten von uns die folgenden Definition von Big-Oh - Notation in den ersten Vorlesungen eines Algorithmen Klasse: Vielleicht geben wir sogar die ganze Liste mit all ihren Quantifizierern an:
- .
Da diese Definitionen jedoch nicht so einfach zu bearbeiten sind, um auch einfache Dinge wie 5 n log 4 n + √ zu beweisen,meisten von uns schnell bewegenden "Trick der Grenze" vorstellen:
- , wenn lim n → ∞ f ( n ) / g ( n ) vorhandenund ist 0 ,
- , wenn lim n → ∞ f ( n ) / g ( n ) existiert und nicht + ∞ ,
- wenn lim n → ∞ f ( n ) / g ( n ) existiert und weder 0 noch + ∞ ist ,
- wenn lim n → ∞ f ( n ) / g ( n ) existiert und nicht 0 ist ,
- wenn lim n → ∞ f ( n ) / g ( n ) existiert und + ∞ ist .
Meine Frage ist:
Wäre es ein großer Verlust sein , die einen Bachelor - Algorithmen - Klasse für das Unterrichten der Grenzbedingungen wie nehmen die Definitionen von , O , Θ , Ω und ω ? Das ist es, was wir ohnehin alle verwenden, und es scheint mir ziemlich klar, dass das Überspringen der Quantifiziererdefinitionen das Leben aller einfacher macht.
Es würde mich interessieren, ob Sie auf einen überzeugenden natürlichen Fall gestoßen sind, in dem die Standard- -Definitionen tatsächlich erforderlich sind, und wenn nicht, ob Sie ein überzeugendes Argument haben, um die Standard- c , n 0 -Definitionen ohnehin im Voraus beizubehalten.
quelle
Antworten:
Ich bevorzuge es, die ursprüngliche Definition mit Quantifizierern zu unterrichten.
IMO, Menschen haben im Allgemeinen Probleme beim Verstehen von Formeln und Definitionen mit mehr als zwei Quantifizierungswechseln direkt. Die Einführung neuer Quantifizierer kann klarstellen, was die Definition bedeutet. Hier bedeuten die letzten beiden Quantifizierer nur "für alle ausreichend großen n", und die Einführung dieser Art der Quantifizierung kann helfen.
Die Bilder, die ich zur Erläuterung dieser Konzepte male, stimmen besser mit den Quantifiziererversionen überein.
Ich denke, die Grenzwertvereinfachung ist nützlich für Ingenieurstudenten, die nur an der Berechnung der Wachstumsrate interessiert sind, aber für Informatikstudenten nicht so nützlich sind. Tatsächlich kann die Verwendung dieser Vereinfachung mehr schaden als nützen.
Diese Idee ähnelt dem Vorschlag, dass wir die Regeln für die Berechnung von Derivaten (von Polynomen, Exponentiation, ..., Kettenregel, ...) anstelle der Epsilon-Delta-Definition verwenden, was meiner Meinung nach keine gute Idee ist.
quelle
Edit: Hauptrevision in Revision 3.
Da ich noch nie eine Klasse unterrichtet habe, glaube ich nicht, dass ich überzeugend behaupten kann, was wir unterrichten sollen. Trotzdem, hier sind meine Gedanken dazu.
Es gibt natürliche Beispiele, bei denen der beschriebene „Limit-Trick“ nicht angewendet werden kann. Angenommen, Sie implementieren einen „Vektor variabler Länge“ (wie Vektor <T> in C ++), indem Sie ein Array fester Länge mit doppelter Größe verwenden (dh jedes Mal, wenn Sie die Größe des Arrays überschreiten möchten, tun Sie dies Ordnen Sie das doppelt so große Array neu zu und kopieren Sie alle Elemente. Die Größe S ( n ) des Arrays, wenn wir n Elemente im Vektor speichern, ist die kleinste Potenz von 2 größer oder gleich n . Wir wollen sagen, dass S ( n ) = O ( n ) ist, aber die Verwendung des als Definition geschriebenen „Limit-Tricks“ würde uns dies nicht erlauben, weil S ( n)) / n schwingt dicht im Bereich [1,2). Gleiches gilt für Ω () und Θ ().
Wenn wir diese Notationen verwenden, um die Komplexität eines Algorithmus zu beschreiben, denke ich, dass Ihre Definition von Ω () manchmal unbequem ist (obwohl ich denke, dass diese Definition üblich ist). Es ist bequemer, f ( n ) = Ω ( g ( n )) genau dann zu definieren, wenn limsup f ( n ) / g ( n )> 0 ist. Dies liegt daran, dass einige Probleme für unendlich viele Werte von n (trivial sind. wie das perfekte Bearbeitungsproblem in einem Graphen mit einer ungeraden Anzahl n von Eckpunkten). Gleiches gilt für Θ () und ω ().
Daher finde ich persönlich, dass die folgenden Definitionen am bequemsten sind, um die Komplexität eines Algorithmus zu beschreiben: für Funktionen f , g : ℕ → ℝ > 0 ,
oder äquivalent,
Aber ich weiß nicht, ob dies eine gängige Praxis ist oder nicht. Ich weiß auch nicht, ob es für den Unterricht geeignet ist. Das Problem ist, dass wir manchmal Ω () stattdessen durch liminf definieren möchten (wie Sie es in der ersten Definition getan haben). Wenn wir zum Beispiel sagen: "Die Fehlerwahrscheinlichkeit dieses randomisierten Algorithmus ist 2 - Ω ( n ) ", meinen wir nicht, dass die Fehlerwahrscheinlichkeit nur für unendlich viele n exponentiell klein ist !
quelle
Die Verwendung von Limits ist etwas verwirrend, da (1) dies eine kompliziertere Vorstellung ist (2) f = O (g) nicht gut erfasst wird (wie wir in der obigen Diskussion sehen können). Normalerweise spreche ich über Funktionen von den Natural-Zahlen (streng positiv) bis zu den Natural-Zahlen (die für die Laufzeit ausreichen), überspringe die kleinen Dinge, und dann ist die Definition kurz und für Studenten des ersten Studienjahres geeignet:
Dfn: f = O (g) wenn für ein C für alle n gilt f (n) <= C * g (n)
quelle
Das Limit-Zeug ist ziemlich nützlich für die Berechnung von Komplexitätsklassen, also mit Stift und Papier.
In jedem Fall halte ich es für sehr nützlich, wenn die Schüler lernen, dass es eine Fülle von (hoffentlich) gleichwertigen Definitionen gibt. Sie sollten in der Lage sein, dies zu erkennen und Unterschiede bei nicht gleichwertigen Definitionen zu erkennen.
quelle
Nachdem ich diese Konzepte erst vor ein paar Jahren studiert hatte, waren sie für meine Klasse nicht die schwierigsten (im Gegensatz zu Konzepten wie Induktion oder Gegenpositiven). Limits und Limsups sind meiner Meinung nach nur für diejenigen "intuitiver", die mit Kalkül vertraut sind. Studierende mit einer solchen mathematischen Grundausbildung verfügen jedoch ohnehin über einen satztheoretischen Hintergrund, sodass sie diskrete Qualifikationsmerkmale verarbeiten können.
Und was noch wichtiger ist: Denken Sie daran, dass Ihre Schüler (hoffentlich) eines Tages auch andere Lehrbücher und vielleicht sogar Forschungsarbeiten lesen werden. Daher ist es für sie besser, mit der Standardnotation auf dem Gebiet vertraut zu sein, auch wenn sie ursprünglich nicht ideal konzipiert war. Es schadet nicht, ihnen alternative Definitionen zu geben, sobald sie die Standarddefinitionen übernommen haben.
quelle
Schauen Sie sich Don Knuths gut geschriebenen Brief "Calculus via O notation" an , um eine interessante Darstellung des Problems zu erhalten . Er befürwortet die umgekehrte Ansicht, dass die Analysis über die Notationen 'A', 'O' und 'o' unterrichtet werden sollte.
quelle
Tsuyoshi Itos Definitionen sehen nicht ganz richtig aus. Für Little Omega und Big Omega sollte in den Definitionen liminf und nicht limsup verwendet werden. Die Definition von Big-Theta benötigt sowohl eine Untergrenze für Liminf als auch eine Obergrenze für Limsup.
Eine Definition von f (n) = O (g (n)) ist, dass es eine andere Funktion f '(n)> = f (n) gibt, so dass lim f' (n) / g (n) <unendlich ist.
Warum dürfen Neulinge Antworten posten, aber keine Kommentare abgeben?
quelle
Zuerst versuche ich , bei den Schülern etwas Intuition zu entwickeln , bevor ich Gleichungen zeige.
Ein weiterer Aspekt ist, dass dies stark vom konkreten Studienprogramm abhängt. IMHO ist abhängig von den vorherigen Themen eine der Definitionen besser geeignet - IMHO empfiehlt es sich jedoch, beide zu zeigen und beide Arten von Lösungen zu akzeptieren.
quelle