Was bedeutet das Wort „Skalierbarkeit“ in Bezug auf Big O?

Ich bin auf viele Quellen gestoßen, die Folgendes behaupten:

Benchmarks schätzen die Laufzeit, Big O schätzt die Skalierbarkeit.

Sie erklärten die Bedeutung von "Skalierbarkeit" wie folgt:

Skalierbarkeit sagt Ihnen, wie Ihre Algorithmuslaufzeit skaliert. Das heißt, wie die Rechenzeit wächst, wenn Sie die Eingabegröße erhöhen. Für Ö ( N ) Sie verdoppeln die Größe der Eingabe und verdoppeln die Rechenzeit. Für Ö ( N 2 ) Sie verdoppeln die Größe der Eingabe und vervierfachen die Rechenzeit und so weiter.

Das heißt, wenn Ihr Algorithmus dauert F ( N ) Schritte im schlimmsten Fall und F Ö ( N 2 ) , dann das Verhältnis F ( 2 N ) F ( N ) ist gleich 4 für ausreichend große Werte von N (Sie verdoppeln die Eingabegröße und vervierfachen die Rechenzeit).

Und es machte so viel Sinn. Aber kürzlich wurde mir ein Gegenbeispiel gezeigt, das beweist, dass die obige Aussage einfach falsch ist. Betrachten Sie die Funktion F ( N ) = N 2 ( cos ( N ) + 2 ) . Wir können das sehen F Ö ( N 2 ) . Außerdem für diejenigen unter Ihnen, die das bemerken möchten Ö ( N 2 ) Leute meinen normalerweise Θ ( N 2 ) das können wir leicht beobachten F Θ ( N 2 ) sowie:

Geben Sie hier die Bildbeschreibung ein

Aber F skaliert nicht wie N 2 in dem Sinne, dass wir das nicht behaupten können F ( 2 N ) F ( N ) ist gleich 4 (sogar ungefähr) für beliebige (auch große) Werte von n. Ich meine, wenn wir das wissen F Ö ( N 2 ) und wenn wir seine Eingabegröße verdoppeln, können wir die Rechenzeit nicht einfach vervierfachen, weil es falsch ist.

Ich habe eine Handlung erstellt F ( 2 N ) F ( N ) damit du es visualisierst:

Geben Sie hier die Bildbeschreibung ein

Es sieht nicht so aus, als ob dieses Verhältnis in Richtung 4 tendiert.

Also, meine Fragen sind:

  1. Warum erklären die Leute die Bedeutung von "Skalierbarkeit" so? Gibt es dafür einen Grund oder sind sie technisch falsch?

  2. Was bedeutet dieses Wort "Skalierbarkeit" dann? Was genau schätzt Big O dann (wenn nicht „Skalierbarkeit“)?

Im Allgemeinen suche ich nach einer rein mathematischen Erklärung dafür. Aber machen Sie es sich bitte nicht zu schwer: Ich lerne noch eine Einvariablenrechnung. Vielen Dank an alle im Voraus!

Es besteht ein Problem darin, dass die Limits technisch nicht existieren. Es ist klar, dass F Ist Θ ( N 2 ) durch die Begrenztheitsidee, aber die Grenzdefinition stellt fest, dass, während das Verhältnis der Funktionen definitiv endlich und ungleich Null ist, die Kosinusgrenze im Unendlichen (Oszillation) undefiniert ist. Ich bin mir hier nicht sicher, aber es könnte sogar Gründe geben, das zu sagen F ist nicht Ö ( N 2 ) überhaupt durch dieses Zeichen.
@FShrike, vielen Dank für den Kommentar. Aber F Ö ( N 2 ) nach der Definition von Big O.
Die Idee der Skalierbarkeit wird durch Oszillation verwechselt, aber es gibt keine unmittelbare Schlussfolgerung der Skalierbarkeit aus den Grenzwertdefinitionen (obwohl ich mich jetzt daran erinnere, dass die Grenzwertdefinitionen Limit Suprema und Infima verwenden, um die Idee zu umgehen, dass die regulären Grenzwerte nicht existieren, also nehme ich zurück etwas von dem, was ich im vorherigen Kommentar gesagt habe)
1. Beispiele wie dieses wo F Θ ( G ) Aber F / G ist oszillierend wie N sind in der Praxis nicht üblich. Bei diesem Verhalten fällt mir auf Anhieb nur die FFT ein, und selbst die hat eine feste Skalierung, wenn man nur mit Zweierpotenzen arbeitet. 2. Die Skalierbarkeit drückt immer noch die Wachstumsrate der Funktion grob aus, wie viel größer wird sie, wenn Sie die Eingabe um ein Bündel erhöhen. Big Theta gibt Ihnen immer noch diese grobe Beschreibung. Aber du hast recht, dass allein das Wissen, sagen wir, F Θ ( N 2 ) sagt dir das nicht F ( 2 N ) / F ( N ) wird dazu tendieren 4 .
Insbesondere im Zusammenhang mit der Komplexitätstheorie interessieren sich die Menschen normalerweise entweder für Worst Cases oder für typische Fälle. Der schlimmste Fall in Ihrer Situation würde bedeuten: "Vergleichen Sie zwei Probleme, wo N ist nahe einem Vielfachen von 2 π "; typische Fälle würden bedeuten "vergleiche zwei Probleme wo N ist in der Nähe eines ungeraden Vielfachen von π / 2 ".
@Ian, danke für den Kommentar! Im letzten Kommentar behauptest du das N 2 ( C Ö S ( N ) + 2 ) kann nicht der schlimmste Fall sein, weil 3 N 2 ist noch schlimmer?
Ich meine, wenn die tatsächliche Laufzeit ist N 2 ( cos ( N ) + 2 ) dann der Worst Case für N in einem Längenintervall 2 π wird wann sein N ist ein Vielfaches von 2 π und in diesem Fall haben Sie 3 N 2 .
@Ian, aber wie ich es verstehe, gibt es keine tatsächliche Laufzeit, wenn Sie nicht zuerst den Fall angeben (am schlechtesten, durchschnittlich, am besten). Von diesem Punkt, an dem Sie es als am schlechtesten eingestuft haben, leiten Sie die Funktion ab F ( N ) die eine Anzahl von Schritten darstellen, die für die Eingabe der Länge im schlimmsten Fall unternommen werden N . Aber wie können Sie noch weiter gehen und einzelne Punkte des Formulars angeben? 2 π k um das Worst-Case-Verhalten darzustellen, wenn wir die Funktion bereits haben F das das Worst-Case-Verhalten darstellt?
ich meine, dass N ist die tatsächliche Eingabegröße und F ( N ) die tatsächliche Laufzeit und F ( N ) schwankt, weil irgendwie Zahlen in der Nähe von ungeraden ganzzahligen Vielfachen liegen π sind viel einfacher zu handhaben als Zahlen in der Nähe von geraden ganzzahligen Vielfachen von π (eine ungewöhnliche Situation an sich). Also das Schlimmste N 's einer bestimmten "Größenordnung" sind diejenigen in der Nähe 2 π k , wenn Sie also das Wachstum im schlimmsten Fall untersuchen wollen, dann schauen Sie sich an N = R Ö u N D ( 2 π k ) , k = 1 , 2 , (dh 6 , 13 , 19 usw.)
@Ian, aber stimmst du dem zu, wenn wir die Funktion betrachten? F ( N ) das bedeutet schon jede Eingabe N muss das schlimmste sein? Weil F ( N ) ist per Definition nur die Worst-Case-Eingaben
Nein, ich rede von den lokal schlechtesten Werten N (was normalerweise nicht einmal in Betracht gezogen werden muss, aber in Ihrem Fall ist es eine Sache).

Antworten (2)

Dieses (sehr schöne) Beispiel ist recht ungewöhnlich - in der Praxis funktioniert es F ( N ) die tatsächlich kommen und sind Θ ( N 2 ) typischerweise befriedigen F ( N ) / N 2 tendiert zu einer positiven Grenze (anstatt nur davon abgegrenzt zu werden 0 Und ). Also die vereinfachte Version der Skalierbarkeit - lim N F ( 2 N ) / F ( N ) - existiert und ist 4 .

Aber selbst für Ihre Funktion gibt es immer noch einen vernünftigen Sinn für die Verdopplung N , steigt im Durchschnitt F ( N ) um einen Faktor von 4 . Was können wir mit „im Durchschnitt“ meinen? Nun, um einen Durchschnitt zu nehmen, müssen Sie mehr als einmal verdoppeln. Wenn Sie zweimal verdoppeln, gehen Sie aus F ( N ) Zu F ( 4 N ) dann ist der sinnvolle durchschnittliche Skalierungsfaktor der beiden Verdopplungen das geometrische Mittel (weil Sie versuchen, sich durch geometrisches Wachstum anzunähern), dh F ( 4 N ) / F ( N ) . Nun tendiert das auch nicht zu einer Grenze, aber F ( 2 k N ) / F ( N ) k , dh der (geometrische) mittlere Skalierungsfaktor aus k Verdopplungen, tendiert zu einer Grenze wie k , welches ist 4 .

Danke für die Antwort! Aber sieht es nicht so aus, als hätten wir gerade aus dem Nichts einen Weg erfunden, um die ursprüngliche Bedeutung des Wortes „Skala“ zu rechtfertigen?
Und warum ist das arithmetische Mittel in diesem Fall schlechter? Es erscheint mir ebenso vernünftig wie das geometrische Mittel.
@mathgeek Es liegt im Grunde daran, dass wir um einen Faktor skalieren X und dann um einen Faktor skalieren j , dann ist die Gesamtskalierung X j nicht X + j . Die Idee, einen Durchschnitt zu nehmen, ist „welche Liste von k identische Dinge würden dieser Liste am ehesten entsprechen k verschiedene Dinge?" Hier im Maßstab k unterschiedliche Faktoren sollten das gleiche Gesamtergebnis ergeben wie die Skalierung mit dem "durchschnittlichen" Faktor k Zeiten, und das funktioniert, wenn mit "Durchschnitt" das geometrische Mittel gemeint ist.
Eine bessere Erklärung hätte ich nicht erwarten können! Danke schön! Aber ich kann mir kaum vorstellen, dass Leute an all diese Berechnungen denken, wenn sie sagen, dass die Laufzeit „in der Größenordnung des Quadrats der Größe der Eingabe“ wächst. Würden Sie klären, was solche Leute denken (was sie eigentlich meinen), wenn sie es sagen, und ob es überhaupt legitim ist, dies zu sagen? F , gegeben F Ö ( N 2 ) ?
Es ist immer noch richtig, es kann nur auf der Ebene des Vergleichs zweier bestimmter Funktionswerte fehlschlagen, wenn F ist komisch. Und ich kann wirklich nicht genug betonen, wie untypisch Ihr Beispiel in der echten asymptotischen Analyse ist, insbesondere in der Komplexitätstheorie.
@Jean-ClaudeArbaut Ich verstehe nicht, warum es irreführend ist. Ich spreche speziell über das Beispiel von OP, das (wie OP ausdrücklich sagt) ein Beispiel für eine Funktion ist, die ist Θ ( N 2 ) aber scheint nicht wie erwartet zu skalieren. Wenn Sie nur wissen, ist eine Funktion Ö ( N 2 ) , dann müssen Sie im zweiten Absatz grundsätzlich ersetzen lim von lim sup Und 4 von 4 .

Die Landau-Symbole kümmern sich nicht um das genaue Verhalten von Funktionen. F Ö ( G ) bedeutet das für groß X wir haben F Waagen höchstens so schlecht wie G in dem Sinne, dass F ist durch ein Vielfaches von beschränkt G .

Wenn die Leute es so erklären, wie Sie es erwähnt haben, vereinfachen sie es zu sehr und gehen wahrscheinlich davon aus, dass die andere Seite sonst nicht verstehen würde, wovon man spricht.

Danke für die Antwort! Aber wenn Sie sich meine erste Handlung ansehen, werden Sie das bemerken F Waage schlimmer als N 2 im Intervall ( 10 ;   12 ) Zum Beispiel. Daher skaliert es MEISTENS nicht so schlecht wie G ".
@mathgeek Wir betrachten Grenzen als N in der Standarddefinition, nicht als N ( 10 , 12 )
Ich habe nur ein Beispiel gegeben, damit Sie es leicht von der Handlung aus beobachten können. Aber ich bin sicher, Sie können sehen, dass meine Aussage für jeden gilt N (Sie können es so groß machen, wie Sie wollen).
@mathgeek Das ist einer der Vorbehalte bei der Landau-Notation. Skalierung ist ein Begriff, den wir für das Argument verwenden, das groß wird, aber wir geben nicht an, wie groß das wäre. Beachten Sie, dass wenn F ist stetig und G ist kontinuierlich und nirgendwo 0 dann finden wir in jedem abgeschlossenen Intervall immer a C mit F C G in diesem Intervall (min/max der kontinuierlichen Funktionen auf kompakten Geräten). Und selbst dann heißt es in der Definition der Landau-Symbole immer: Für alle X > X 0 für einige willkürlich X 0 . Im Grunde kümmern wir uns also nicht um endliche Werte.
Sie können sich das so vorstellen: Wenn F Ö ( G ) dann die Asymptotik lim sup F ( X ) G ( X ) ist endlich. Wenn F Θ ( G ) dann auch 0 < lim inf F ( X ) G ( X ) .
Ja, Ihr letzter Kommentar ist die Definition, aber leider erklärt er nicht die Bedeutung des Wortes "Skala" und warum es angesichts meiner gestellten Frage sinnvoll ist.
Nun, Skalierung wird normalerweise nicht in der reinen Mathematik verwendet, sondern eher im Zusammenhang mit Algorithmen und dergleichen. Und Skalierung bedeutet hier nur: Wenn ich den Input erhöhe, wie ändert sich die benötigte Zeit. Zum Beispiel, wenn Sie eine Liste nach Größe sortieren würden N Die besten Algorithmen, die ohne große Annahmen funktionieren, haben eine Größenordnung von N Protokoll N Vergleiche. Wenn ich also meine Liste vergrößere, steigt der erforderliche Aufwand etwas mehr als linear, aber weniger als quadratisch. Natürlich gibt es mehrere Dinge, die Sie berücksichtigen können: Best Case? Schlimmsten Fall? Durchschnittlicher Fall?
Okay, als Sie darauf hinwiesen, dass "Skalierung normalerweise nicht in der reinen Mathematik verwendet wird, sondern eher im Zusammenhang mit Algorithmen", begann es Sinn zu machen. Sie haben ein Beispiel für einen einlaufenden Algorithmus gegeben Ö ( Protokoll N ) Zeit. Könnten Sie klarstellen, was Sie mit "quadratisch ansteigen" meinen? Bitte denken Sie an das Beispiel der falschen Erklärung von "erhöht sich quadratisch", das ich in meiner Frage gegeben habe.