0 Daumen
267 Aufrufe

Benchmark.png

Text erkannt:

Compile Time

Kann mir irgendwer sagen, wie die zugehörige Funktionsgleichung ungefähr heißt? Muss nur eine Näherung sein, würd mich einfach interessieren. Hier ist die gesamte Datenreihe, falls das hilft:

x   ->    y
1    ->    456,6
2    ->    504,9436
3    ->    459,9784
4    ->    440,515
5    ->    470,3452
6    ->    477,3568
7    ->    488,0809
8    ->    528,0104
9    ->    476,3907
10    ->    482,6831
20    ->    547,4054
30    ->    590,2125
40    ->    649,584
50    ->    713,4182
60    ->    765,5864
70    ->    832,9353
80    ->    760,8061
90    ->    872,442
100    ->    869,4662
200    ->    1140,5036
300    ->    1171,9081
400    ->    1266,3527
500    ->    1429,2574
600    ->    1615,657
700    ->    1774,623
800    ->    1936,0823
900    ->    2111,7576
1000    ->    2247,4307
2000    ->    3818,0917
3000    ->    5306,5322
4000    ->    6618,7331
5000    ->    8226,0368
6000    ->    9841,4871
7000    ->    11515,1523
8000    ->    13456,7668
9000    ->    15257,3587
10000    ->    17752,4012

Avatar von

Blub-Funktion?


\(y=\operatorname{blub}(t)\)

Macht Sinn, aber wie wäre in dem Fall die Definition von blub()?

Ich hab mal deinen Datensatz an ChatGPT übergeben und um eine logarithmische Regression gebeten:

Antwort: \(\operatorname{blub}(t) = 781.09 e^{0.000383 x}\)

Hab es aber noch nicht mit einem anderen Tool gegengechecked.


(Also exponentieller Ansatz - aber mit logarithmierten Funktionswerte)

Hab's gegengechecked. Scheint nicht gut zu passen.

Wie ich gerade sehe, hast du ein logarithmisches Koordinatensystem gewählt.

Wenn ich lineare Achsen wähle, sieht das alles sehr linear aus.

4 Antworten

+1 Daumen
 
Beste Antwort

Aloha :)

Willkommen in der Mathelounge... \o/

Hier handelt es sich um Compiler-Zeiten für eine Programmiersprache.

Grundsätzlich können Kontext-sensitive Sprachen stets in \(O(n^3)\) compiliert werden. Das heißt, für \(n\) Befehle wächst die Compiler-Zeit höchstens wie ein Polynom 3-ten Grades.

Fast alle Programmiersprachen sind aber nur bedingt Kontext-sensitiv. Man kann sie in zwei Phasen compilieren. In der ersten Phase (Analyse) werden Kontext-sensitive Informationen gesammelt und zwischengespeichert. In der zweiten Phase (Code-Generierung) liegen dann alle Informationen vor und können aus dem Zwischenspeicher ergänzt werden.

Zum Beispiel kann es vorkommen, dass eine Funktion mit ihrem Namen vorne im Programmcode aufgerufen wird, aber erst weiter hinten definiert wird. Der Compiler weiß dann vorne noch nicht, welche Datentypen die Funktion konkret erwartet und welche sie zurückgibt. Diese Informationen werden in der ersten Phase gesammelt und stehen dann in der zweiten Phase bereit.

Daher werden quasi alle Programmiersprachen in linearer Zeit übersetzt.

Deine Datenpunkte sollten also sehr gut auf einer Geraden liegen.

Tatsächlich liefert Excel: $$f(n)=550,1883+1.6254\cdot n$$mit \(R^2=0,9973\), d.h. die Punkte liegen fast perfekt auf der Geraden.

Die "Krümmung" deiner Kurve kommt daher, dass du auf den Achsen logarithmische und keine linearen Skalen gewählt hast.

Avatar von 152 k 🚀

Schöne Antwort. +1

0 Daumen

Linear sieht gut aus:

linearmodel.png

Avatar von 11 k
0 Daumen

ich würde das so machen:


blob.png

Avatar von 45 k
0 Daumen

Hallo,

Du möchtest eine Funktion für die Compilzeit in Abhängigkeit der Anzahl der Codezeilen.

Dann gibst Du uns hier ca. 20 Wertepaare für Programme unter 100 Zeilen. Also ganz im Ernst - ein Programm unter 1000 Codezeilen ist noch kein Programm und Du möchtest doch wissen wie es im Bereich von 10k, 50k und 100k großen Programmen weitergeht - oder? Durch die Anhäufung der vielen Wertepaare im unteren Bereich 'zwingst' Du jede Regression durch eben diese Punkte.

Was ist denn zu erwarten? Sicher ein linearer Anteil. Umso mehr Zeilen vom Compiler eingelesen und verarbeitet werden, desto länger braucht er. In einem Programm sind aber Programmbefehle von anderen Programmstellen abhängig. Und wenn diese Abhängigkeit in etwa anteilig gleich bleibt, dann steigt der Aufwand quadratisch,

Also würde ich eine qudratische Funktion annehmen.

Das Ergebnis sieht so aus:


der rote Graph ist eine quadratische Regression durch alle Punkte, dessen Funktion lautet:$$f(x)=627 + 1,4062 x + 0,00002656x^2$$Und der grüne Graph ist eine Regression durch die Punkte ab 1000 Zeilen$$f(x)=1241 + 1,14721x + 0,0000481439x^2$$Im zweiten Fall ist der Faktor vor dem quadratischen Term fast doppelt so groß. Such' Dir was aus ;-)

Gruß Werner

Avatar von 48 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community