Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).
Landau-Notation ("groß O") - Beispiele (Teil 1 von 2)
Das Wichtigste aus dem Video
Tipp auf eine Zeit – das Video springt genau dorthin.
Transkriptautomatisch erstellt · 186 Zeilen
- das ist unser fakultätsalgorithmus von eben und wir wollen den jetzt mal zunächst mal hatte ich ja gesagt wirklich im Detail
- analysieren um zu sehen was uns die landotation ersparen wird damit wir das im Detail analysieren können müssen wir uns natürlich erstmal
- überlegen wie viel Zeit die einzelnen Operationen brauchen also denke ich mir jetzt irgendwas aus was passiert in so einem Algorithmus
- also wir haben eine Addition eine
- Multiplikation addition kommt hier gar nicht wirklich vor aber ich meinte damit dieses n-1 also ich schreibbe hier mal in addition oder Subtraktion
- typischerweise dauert in Prozessoren sowas gleich lang weil das ja technisch sowieso die gleiche Sache ist die da
- stattfindet dann haben wir so ein Test sowas wie hier oben n ist größer 0 oder nicht da also ein Test schreib ich mal einfach oder Vergleich schreib ich
- vielleicht mal hin was man vielleicht gerne noch vergisst ist äh Sprünge weil man das wenn man so in
- höheren Programmiersprachen das hinschreibt gar nicht so in Termen von Sprüngen denkt also dass das Programm irgendwo mal hingehen muss und was wir
- auch noch gar nicht hingeschrieben haben ist Speicherzugriff also ich schreib mal hin speicherlesen Speicher schreiben
- äh das allein macht die Sache schon kompliziert weil man viele kleine Details beachten muss und sie haben wir eben in unserer kleinen Diskussion
- gesehen es hängt dann noch wieder davon ab was für ein Prozessor sie haben manche Dinge gehen bei dem einen Prozessor besonders gut beim anderen
- nicht so gut es gibt stackbasierte Prozessoren es gibt andere Prozessoren also das soll jetzt ja auch kein realistisches Beispiel sein wir ich
- schreibbe jetzt mal hier irgendwas hin irgendwelche fantasiewerte die in keiner Form Anspruch darauf erheben realistisch zu
- sein nur damit wir irgendwas zu rechnen haben also sagen wir mal m Addition Subtraktion soll vielleicht 4 Nanosekunden dauern eine Multiplikation
- ist deutlich teurer die soll 10 Nanosekunden dauern im Vergleich von zwei Dingen ist sowas ähnliches wie eine Addition oder Subtraktion da kann ich
- vielleicht 3 Nanosekunden hinschreiben ein Sprung würde ich mal sagen äh kann man im Zweifelsfall na ja nehmen wir doch lieber irgendwas sagen wir mal
- Nanosekunde da muss vielleicht irgendwas in so ein Program Counter reingeschroben werden damit er dann weiter springt und so also da müssen wir auch ein bisschen
- Zeit für rechnen speicherlesen heißt irgendeine Zahl aus dem Speicher in Register holen wenn sie so eine Registermaschine haben Speicher
- schreiben ist das gegente eine Zahl aus einem Register ins RAM schreiben dann nehmen wir vielleicht jeweils 2 Nanosekunden dafür und die Nanosekunden
- werde ich jetzt beim Rechnen weglassen ich schreibbe einfach nur die Zahlen hin also hier dies hier oben da da fängt schon an wieder schwierig zu werden die
- ein wird in die Speicherzelle R geschrieben das ist auf jeden Fall einmal eine Speicher schreiben Operation die Frage ist wo kommt die ein
- her est maschinensprachen bei denen die ein sozusagen in den Befehl reingeschrieben wird darum kann man sagen das ist qui geschenkt es git auch
- welche muss man die eins erst in Register schreiben und kann dann schreiben sie sehen das kann beliebig komliziert werden die ganze Geschichte
- ich schreib mal hin dieser erste Schritt kostet einfach 2 Nanosekunden so und der nächste Schritt der macht ja folgendes der führt einen Vergleich aus
- dafür hatten wir gesagt 3 Nanosekunden und dann springt er also dies heißt ja eigentlich guck ob die Zahl größer als ull ist wenn sie nicht
- größer als Null ist dann machst du einen Sprung nach da also wenn wir springen aber nur dann wir springen ja nur einmal wenn die Schleife beendet
- wird dann müssen wir eventuell noch eine Nanosekunde für den Sprung dazu rechnen also hier hier schreibe ich mal dahinter in Klammern + 1 da kommt noch eine
- Nanosekunde dafür dazu wenn die Schleife beendet ist und dieses hier das sieht erstmal so hmlos aus das sind aber eigentlich wenn man es genau betrachtet
- eine ganze Reihe von Operationen die Zahl R wird aus dem Speicher gelesen das ist einmal speicherlesen 2 die Zahl n wird auf dem Speicher gelesen das ist
- noch mal speicherlesen noch mal Z dann werden die beiden Zahlen multipliziert da hatten wir gesagt das kostet 10 und dann werden sie wieder in den Speicher
- geschrieben nämlich in die Speicherstelle R das dauert dann noch mal 2 Nanosekunden und auch hier könnten sie im Detail
- wieder sagen moment mal wenn das ein cleverer Compiler ist dann sieht er da sind nur wenige Variablen die kann ich während der ganzen Schleife im Register
- lassen also wird das Ganze vielleicht billiger werden und die werden erst am Ende wieder ins RAM geschrieben ich erzähle den ganzen Kram nur deswegen um
- ihn zu zeigen wie kompliziert das alles werden kann wir werden das aber alles gleich weglassen und das ganze viel einfacher machen aber lassen wir es mal
- so stehen wie es hier steht und hier haben sie dann wird aus dem Speicher gelesen zwei Operationen eine Subtraktion vier Operationen vier
- Nanosekunden und wiederschreiben zwei so das ist so im Wesentlichen das was wir hier haben können wir das noch mal
- zusammenfassen also hier haben wir zwei hier haben wir dre dieses dauert insgesamt 16 und dieses dauert
- 8 der Ausgabe ja dann müssen wir die Eingabe mit rechnen also wir rechnen jetzt erstmal nur den eigentlichen
- Algorithmus so und jetzt gucken wir uns das Entscheidende ist ja jetzt hatte ich ja vorhin schon angedeutet wie oft wird irgendwas wiederholt also was passiert
- in der Schleife wie oft wird diese Schleife durchlaufen das was hier zwischen den geschwungenen Klammern steht ist glaube
- ich klar oder nm ne also wenn meine Eingabe n ist wird die Schleife nm durchlaufen das heißt als Gesamtlaufzeit bekomme ich
- jetzt das folgende das was in der Schleife stattfindet 16 + 8 also 24 Nanosekunden wird n Mal
- wiederholt also ich habe das hier zusammen ist 24 also habe ich 24 mal n Plus und hier habe ich 2 und 3 und den
- Sprung noch also 6 Nanosekunden die sozusagen als Overhead noch dazu kommen das heißt die Laufzeit von einem Algorithmus W 24
- 6 wenn das jetzt alles richtig ist und ich habe also für diesen speziellen Prozessor das ausgerechnet dann hätte ich jetzt tatsächlich eine exakte Formel
- da stehen in der steht in Abhängigkeit von N wie viel Nanosekunden mein Programm genau braucht aber das stimmt dann nur für dieses Programm wenn ich
- genauso schreibe mit dem Compiler mit dieser Maschinensprache wenn ich diesen Algorithmus auf einen anderen Computer wechsl muss ich alles wieder neu
- ausrechnen darum würde man in der Lambda Notation sagen das haben wir jetzt schon gelernt das ist ja nichts weiter als großo von N das heißt
- wenn sie dann irgendwo ein Buch lesen dann würde man sagen der hat der Algorithmus hat ein Laufzeitverhalten von der Ordnung n oder dafür sagt man
- auch kurz dass ist ein lineares Laufzeitverhalten was wir uns jetzt vielleicht mal anschauen sollten wie hätte man diese ganze Rechnung einfacher
- machen können mit der landauotation ich sehe gerade dass ich ein Fehler gemacht habe am Ende wird das gleiche wieder rauskommen von N aber bei meiner kleinen
- Berechnung hier habe ich was falsch gemacht ja muss immer wieder genau das heißt dieser Test der
- hier stattfindet der muss natürlich der passiert ja jedes Mal wieder das heißt diese 3 ist in der Schleife mit drin also muss hier nicht 24 rauskommen
- sondern hier muss 27 rauskommen weil jedes Mal wenn durchläuft das gezählt wird ähm also
- kommt hier raus 27n und hier am Ende adere ich dann natürlich nicht sech sondern die zwe und
- die ein dann müsste hier eigentlich drei stehen aber das ist auch noch falsch h was ist denn jetzt noch
- falsch also was richtig ist es dieser Test findet in der Schleife immer statt denn das Ding was nur einmal stattfindet ist diese eine Zuweisung am Anfang er
- wird ein und der Sprung findet auch nur einmal statt aber irgendwas habe ich noch
- vergessen okay den habe ich jetzt auch vergessen ja aber [Musik] den den rechn wir jetzt mal nicht aber
- ich meinte noch was anderes bei bei den Dingen die hier schon stehen habe ich vergessen die in die Formel mit reinzunehmen
- das was hier in dem Schleifen body passiert diese Arithmetik hier die findet tatsächlich n mal statt der Test hier oben findet n + 1 mal statt nämlich
- wenn das letzte mal getestet wird dann macht er das ja nicht mehr das heißt Sie müssen hier noch drei dazu zähen also steht hier doch wieder
- sechs sie sehen das ist alles sehr viel gelincht was hier stattfindet die die gute Nachricht ist es ist trotzdem immer noch von N hat sich überhaupt nicht
- geändert ja also das ist immer noch ein linearer Algorithmus und wenn ich hier jetzt natürlich das ist auch klar wenn ich hier jetzt mir
- irgendwelche anderen Zahlen ausgedacht hätte addition dauert 5 Nanosekunden Multiplikation 12 wäre trotzdem von N rausgekommen ne spielt keine Rolle das
- ist das Schöne an der landotation so ich wollte ihn jetzt ja zeigen wie man das ganze in landownotation rechnet da würden Sie folgendermaßen vorgehen
- sie würden sagen hier findet eine Zuordnung statt eine Zuordnung hat konstante Laufzeit das heißt das hängt nicht davon ab was n ist darum ist
- dieser Schritt hat Laufzeit von O von 1 hier findet ein Test statt ein Test hat konstante Laufzeit groß o von 1 hier findet eine Multiplikation statt
- Speicher lesen Speicher schreiben konstante Laufzeit Multiplikation dauert immer gleich viel egal ob N2 oder 2000 ist
- u von 1 und hier das gleiche speicherlesen Speicher schreiben Subtraktion u von 1 dass die im Detail wie wir gesehen haben unterschiedlich
- lang dauern spielt keine Rolle wichtig ist die sind alle für sich betrachtet als Einzeloperationen konstant auch hier wieder Achtung sie
- müssen schon genau gucken auf was sie da tun wenn wir wenn sie sich entsinnen an den Anfang des Semesters wenn sie z.B mit sehr großen Zahlen rechnen diese
- primzahltests und so da ging's ja um riesengroße zahlen ja da ist es z.B so dass eine Multiplikation nicht immer gleich lange dauert wenn ich hier sage
- eine Multiplikation ist o von 1 das heißt sie dauert immer gleich lange dann meine ich damit implizit solange ich mit der Multiplikation rechne die mir meinen
- Prozessor zur Verfügung stellt das bedeutet aber das wissen Sie ja inzwischen dass das nicht die richtige echte Multiplikation ist wenn ich z.B
- zwei Zahlen miteinander multipliziere bei denen das Produkt so groß ist dass es nicht mehr in Speicher passt dann ist zwar die gute Nachricht konstante
- Laufzeit die schlechte Nachricht ist Ergebnis falsch äh wenn ich also z.B primzahlentest schreibe und will bei denen ermitteln wie lange die brauchen
- dann muss ich mir wesentlich detailliertere Gedanken darüber machen wie lange dauert es denn eigentlich zwei sehr große Zahlen miteinander zu
- multiplizieren gute Nachricht zeige ich Ihnen gleich noch einen Trick oder vielleicht nicht mehr heute s am Mittwoch wie man solche Dinge wie
- Multiplikation noch schneller machen kann und wir haben ja schon solche Sachen gesehen wie binäre exponentiation und sowas aber jetzt gehen wir hier
- erstmal davon aus dass es wirklich groß ofon 1 ist wobei sie bei der Fakultät nicht weit kommen werden sie können ja Malin Java ein paar Werte für die
- Fakultät durchprobieren und gucken ähm wann Java aufgibt und ih keine vernünftigen Ergebnisse mehr liefert ja
- das Entscheidende ist natürlich jetzt hier wieder die Schleife dieses ganze wird ja nicht nur einmal stattfinden sondern dieses ganze
- passiert nm da lasse ich jetzt auch wieder was unter den Tisch fallen hier müsste ich
- im Prinzip gleiche Überlegung anstellen wie eben das was im Schleifenkörper passiert passiert nm und dass da draußen der Test passiert eigentlich noch einmal
- häufiger aber wir werden gleich sehen spielt überhaupt keine Rolle was jetzt hier ich erstmal machen muss ist ich muss im Inneren des des schleifenkörpers
- sagen wie lang braucht denn der Schleifenkörper insgesamt das heißt ich mach so eine kleine Nebenrechnung O1 + O von 1 + O von 1 und sie da nach Lambda
- Notation ist das von 1 super also das heißt der Schleifenkörper innen braucht von 1 einfach
- ne so und das ganze mal n dann habe ich n mal das heißt ich habe also die Anzahl der Wiederholung ist groß von N also habe ich o von N mal Schleifenkörper o
- von 1 und für Multiplikation haben wir gesehen das wird einfach multipliziert n mal 1 also ist das groß von
- N also der wiederholteil des Programms hat ein Laufzeitverhalten von groß von N und jetzt kommt das hier noch dazu der ante Teil also insgesamt hat mein
- Programm die Laufzeit groß o von N für das was in der Schleife passiert plus groß o von 1 für das was im Prolog passiert rechenregel einfach das größere
- von beiden groß o von N und fertig ich musste mir keine Detail keine Überlegung ich musste keine Überlegung anstellen über die Details der einzelnen
- Operationen und so weiter ich musste eigentlich immer nur mit diesen zwei sehr simplen Rechenregeln arbeiten allerdings muss ich mir schon darüber im
- klar an sein was ich eigentlich messen will und was ich unter den Tisch kehre ich habe hier z.B mich dafür entschieden zu sagen dass die Arithmetik keine Rolle
- spielt dass die konstante Laufzeit hat solche Entscheidung kann mir keiner abnehmen da kann mir auch die landnotation nicht helfen aber wenn ich
- erstmal diese groben Abschätzung gemacht habe sehen Sie hoffentlich dass das Rechnen dann sehr einfach ist wir gucken uns hier ein ganz simples kleines Java
- Programm an das ist unser nächstes Beispiel hier unten der mainteil den brauchen wir eigentlich gar nicht zu sehen der setzt hier am Anfang so eine
- Zahl Q fest das ist ein/b und dann durchläuft eine Schleife für verschiedene nwerte also n ist erst 10 dann 100 dann 1000 dann 10.000 und so
- weiter bis n 100.000 ist und was eigentlich ausgerechnet wird ist dieses hier suqn und ich habe es ja schon hingeschrieben
- ausgerechnet wird eine geometrische Summe vielleicht entsinden sie sich noch Waage aus der aus dem ersten Semester das heißt wir rechnen aus Q hoch 0 + Q
- hooch 1 + Q hoch 2 + Q hoch 3 und so weiter bis Q hoch n im Rahmen der Rechengenauigkeit des Rechners damit wir ein bisschen was zu
- tun haben es gibt ja eigentlich gar keine Potenz in Java da müssen sie normalerweise die math Ex oder sowas math Power heißt das glaube ich laden
- dazu das habe ich jetzt mal selbst implementiert das heißt die Potenz wird hier wirklich ausgerechnet diese kleine
- statische Methode hier Po berechnet die Potenz x hoch K indem Sie folgendes macht das Resultat wird erst auf ein gesetzt und dann wird in der Schleife
- dieses Resultat soangee mit X multipliziert bis der Zähler i K erreicht hat also kommt da x hoch K raus ne das Ding rechnet x H K aus und die
- eigentliche Summe das ist ja das was hier unten ausgegeben wird die geometrische Summe die macht halt genau das was Sie
- erwarten würden der Wert Summe wird am Anfang auf Null ges und dann wird ausgerechnet immer Q hoch i dafür macht ist ja meine Kleine
- potenzmethode da und das wird zu der Summe immer dazu addiert der Zähler wird hochgezählt bis ich bei N angekommen bin ganz simpel und jetzt gucken wir uns mal
- an ja nee sie hätten das auch mit vor machen können weil wir nachher no so
- eine codeanalyse machen wollen dachte ich da weil jetzt schon genommen haben also vor wird eentlich auch nur ein while übersetzt von Compilern darum
- spielt eigentlich keine Rolle kompilier kompilier so und jetzt lassen wir das
- Laufen und jetzt sehen wir dass das langsamer wird zum Ende hin der ist noch nicht fertig
- W also letzte Schritt hat schon bisschen gedauert und da ist ja auch irgendwie klar der muss jetzt 100.000 so Manen ausrechnen also sagt man okay klar Zeh
- Mal so viel wie im Schritt vorher kann er schon ein bisschen länger brauchen gucken wir uns mal ein anderes Programm an was dasselbe
- macht dieses Ding behauptet also erstmal ist der Code wesentlich kürzer an außerdem behaupte ich das rechnet auch die geometrische Summe aus nur macht sie
- das anders äh und zwar habe ich hier eine große Schleife wo ich am Anfang die Summe stehen habe die auch erst null ist und dieser zu dieser Summe wird immer
- was dazu addiert und zwar der Wert add und dieser Wert add ist am Anfang ein das heißt im ersten Schritt wird ein addiert und dann wird add mit Q
- multipliziert das heißt im nächsten Schritt wenn es erst eins ist ist es danach Q das heißt im nächsten Schritt wird Q addiert dann wird wieder mit Q
- multipliziert das heißt danach ist Q aus Q q²r geworden dann wird also q²r addiert im nächsten Schritt wird Q hoch 3
- addiert dann wird Q hoch 4 addiert und das passiert also auch genau das was wir wollten was ich mir hier spare offensichtlich ist dass ich jedes Mal in
- jedem Schleifendurchlauf immer wieder diese Methode Pot Aufrufe sondern ich mache das in einem Durchlauf weil mir ja klar ist wenn ich nacheinander
- aufadidieren will Q hoch 1 Q 2 Q 3 dass der sumant immer einfach nur mit Q multipliziert wird offensichtlich ist das worauf wir
- hinaus wollen wir wollen verguck wir wollen gucken welcher von beiden schnell und ob man da jetzt auch unterschiedliche groß Werte rausbekommt
- die ein wirklich sagen warum der eine von beiden schneller als der andere ist gut das gleiche Spielchen noch mal wir kompilieren
- das lassen das Laufen gucken Sie genau hin fertig ist schon bisschen schneller mal bei dem so eine grobe Landau Abschätzung
- machen was das wohl an Zeit brauchen wird was wir hier haben tatsächlich ist es hier schon bisschen schwieriger aber das ist auch
- noch was was wir händeln können wir haben hier eine Zuweisung i = 1 und hier oben auch result gleich 1 das beides zusammen ist natürlich jetzt muss
- ich mal eine Farbe nehmen die hier nicht vorkommt konstante Laufzeit hier steht von 1 für das ganze Ding so und jetzt haben wir hier drin auch wieder was da
- findet eine Multiplikation statt da wird was aus dem Speicher gelesen da wird wieder was in Speicher geschrieben es findet eine Addition statt das ist alles
- konstante Laufzeit also das was hier drin stattfindet ist auch von 1 und diese dieser Vergleich hier der ist auch von 1 das ist spielt
- erstmal alles keine Rolle wie oft wird das Ganze wiederholt K mal ne also hier steht
- u von K mal und jetzt können Sie das gleiche machen wie das was wir eben schon mal gemacht haben das sieht so ähnlich aus wieer bei
- der Fakultät sie haben einen Teil der wiederholt wird ein Teil der konstant ist diese beiden nehmen sie miteinander mal dann haben sie o von K mal o von 1
- das ist von K insgesamt plus ein konstanter Teil der fährt weg weil sie bei dem summenbilden nur das Maximum nehmen so das insgesamt rauskommt von K
- also ich schreib das noch mal daneben wenn Sie jetzt hier die gesamtlau Zeit ausrechnen dann werden sie sowas haben wie die Schleife wird K Mal
- wiederholt der Schleifen der innere schleifenteil ist hat eine konstante Laufzeit und da kommt noch mal was mit konstanter Laufzeit dazu s dass da
- insgesamt genau wie oben u von K rauskommt das heißt dieses Unterprogramm was die Karte Potenz von X ausrechnet hat eine Laufzeit von Groß o von K jetzt
- das hier unten m dieses hier W von 1 sieht ja fast so aus wie da oben dieses hier i++ ist auch von 1 aber dieses hier
- das ist jetzt schwierig hier haben Sie einen Teil der von 1 ist nämlich die Addition und das Speichern aber sie haben ja hier den
- Aufruf von unserer Potenzfunktion ja und der ist ja der hängt ja ab von dem K hier oben das heißt hier i also hier müssen sie jetzt hinschreiben diese
- Laufzeit ist von i wir haben jetzt in der Schleife etwas was nicht jedes Mal gleich lange dauert sondern es hängt davon ab welchen
- Wert i hat und das ganze wird jetzt wieder wiederholt und zwar n mal hier da steht
- ja die Schleife wird so lange durchlaufen bis ich n erreicht habe also insgesamt o von N mal jetzt haben sie ein kleines Problem
- nämlich sie haben zwei verschiedene Variablen die auf einmal auftauchen das n ist das was sie eigentlich interessiert also inwi weit hängt der
- Input von also die Laufzeit von N ab aber jetzt stört dieses easy hier Sie also das Problem was wir hier haben ist wie kommen wir wir wir müssen jetzt
- sowas hinschreiben wie groß o von i mal groß o von N was irgendwie wir bisher gar nicht gemacht haben weil wir zwei verschiedene veränderliche Werte haben
- da gibt's zwei Möglichkeiten daranzugehen die eine Möglichkeit ist dass man eine ganz grobe Überschlags Rechnung macht und
- äh sagt wie groß kann denn dieses i hier höchstens werden das schlimmste was passieren kann ist dass i so groß wie n ist das heißt ich mache jetzt mal so
- eine so eine Worst Case Abschätzung und stell mir vor da würde immer groß von N stehen das ist die eine Variante wie ich da rangehen kann dann hätte ich hier die
- folgende Abschätzung ich habe ein konstanter Anteil groß von 1 plus Anzahl der schleifenwiedderholung mal das was hier drinnen
- stattfindet und hier drinnen habe ich gesagt also ich schreibbe hier mal so in hägchen höchstens hier drin findet statt ein
- konstanteranteteil Plus höchstens groß o von N das ist jetzt so vielleicht ist es ja besser aber schlimmstenfalls passiert das hier und wenn ich das jetzt
- ausrechne dann sehe ich natürlich o von 1 + von N ist einfach das Maximum von beiden also von N also hierf kann ich dann schreiben o von 1 + O von N mal o
- von N und da fällt wieder also die beiden zusammen ergeben n²r bei den beiden wenn ich plus rechne muss ich nur den größeren von beiden nehmen also
- einfach n²adr das heißt wenn meine Abschätzung hier eben richtig war dann müsste hier groß o von N quadr rauskommen allerdings ist das ja so ein
- bisschen unsicher noch weil ich ja hier einfach dieses o von i ersetzt habe durch von N vielleicht war das ja ein bisschen zu genau was ich da gemacht
- habe darum will ich ihn das noch mal anders begründen was hier passiert ähm
- wenn dieses Ding hier groß o von i diese Laufzeit die wir hier haben die bedeutet ja pi mal Daumen gerechnet dass diese Funktion hier
- als Laufzeit ein Vielfaches von i hat also der Aufruf Pod Qi der ist sowas wie z.B 20 x i und je größer i wird desto größer wird der und das mache ich für
- die Werte i von 0 bis 1 2 3 bis n das heißt die zweite Begründung dafür könnte man folgendermaßen machen
- Pod Qi hat eine Laufzeit von die hängt von i ab also irgendsowas wie eine Konstante c mal
- i diese Konstante weiß ich nicht aber das braucht immer Faktor i mal eine konstante wenn ich das jetzt zusammenzähle dann habe ich i = 0 1 2 3
- und so weiter bis n also wenn ich die ganzen Laufzeiten zusammenzähle dann habe ich wenn ich hier die Werte für i einsetze C* 0 + C* 1 + C* 2 + C* 3 + und
- so weiter + C* n das ist dann sozusagen die wirkliche Laufzeit die ich eigentlich ausrechne und da können Sie jetzt
- ausklammern und schreiben das ist C* 0 + 1 + 2 + 3 + + n und jetzt sagen Sie mir noch mal schnell was hier rauskommt wenn ich die Zahlen
- von 1 bis n zusammenzähle n mal n + 1/be das war die Zahlen einmal 1 bis 1 + n hinschreiben dann einmal rückwärts hinschreiben immer die untereinander
- lieg addieren und so weiter mal C natürlich nicht zu vergessen dieses hier wäre ein Ausdruck wo wir wirklich die einzelnen Schritte noch mal einzeln
- zusammengezählt haben also im ersten haben wir irgendeine konstante mal 0 im zweiten irgendeine konstante mal 1 und so weiter dann würde das rauskommen der
- Vorteil von dem was hier steht ist dieses komische i taucht nicht mehr auf ja der Nachteil ist die sieht ja auf den ersten Blick komplizierter aus aber wenn
- Sie dies hier mal ausrechnen dann steht hier ja in Wirklichkeit nichts anderes als C mal n Quadrat + n und das ganze noch durch 2 das kann ich vielleicht ein
- bisschen hübscher so schreiben C Hal mal n² + n und wenn Sie das jetzt in Groß o Notation übersetzen dann werden Sie sehen n² + n das ist ein Plus das heißt
- groß O ist das größere von beiden also n²rat und mal ein konstanter Faktor mal C halbe der ändert nichts also das ganze ist groß o von n²r
- das heißt es kommt im Endeffekt dasselbe raus wie das hier und was wir jetzt heute nicht mehr schaffen aber dann in der nächsten
- Stunde sehen werden ist wenn wir uns den alternativen Algorithmus anschauen werden wir sehen dass der nicht groß o von N Quadrat ist sondern groß o von N
- und das macht diesen riesengroßen Unterschied aus das bedeutet wenn sie jetzt als n mal diese Zahlen sehen die wir da gehabt
- haben nehmen wir nur mal 1000 wenn sie n= 1000 einsetz bei groß von N dann haben sie 1000 mal irgendein Faktor haben sie eine Million wenn sie 10.000
- einsetzen dann haben sie 10000 versus 100 Millionen wenn sie 100.000 einsetzen dann haben sie 100.000 versus und Sie sehen es wird immer mehr D sind sie
- schon bei 10 Milliarden darum wird die Laufzeit des schlechteren algorithmuses also von dem den wir hier sehen unglaublich viel schneller immer
- schlechter werden darum sind die wirklich in unterschiedlichen Ort bezüglich auf die Landau Notation und darum ist die so hilfreich um wirklich
- abzuschätzen was gut und was schlecht ist wenn der eine von beiden von N wäre und der andere auch dann könnte es durchaus sein dass der eine trotzdem
- immer dreimal so schnell wie der andere ist sie würden aber nicht solche wahnsinnigen Sprünge sehen dass sie bei dem einen richtig warten müssen können
- Sie auf die Uhr gucken es passiert nichts und bei dem anderen geht swwitch sondern bei dem einen wird's dann sehr schnell gehen und bei dem anderen so ein
- ganz bisschen langsamer aber es würde eigentlich keinen großen Unterschied ausmachen ne das ist das was uns die landnotation eigentlich sagt und nächste
- Stunde gucken wir uns den anderen Algorithmus auch noch mal genauer an
Zum Nachlesen
Landau-SymboleLandau-Symbole (auch O-Notation, englisch big O notation) werden in der Mathematik und in der Informatik verwendet, um das asymptotische Verhalten von …
Laufzeit (Informatik)Der Begriff Laufzeit (englisch runtime) beschreibt in der Informatik einerseits die Zeitdauer, die ein Programm, ausgeführt durch einen Rechner, …
ZeitkomplexitätUnter der Zeitkomplexität wird in der Informatik die Anzahl der ... Bubblesort zwar für große Datenmengen ein recht langsames Verfahren, eignet …
Effizienz (Informatik)Die Effizienz eines Algorithmus ist seine Sparsamkeit bezüglich Ressourcen, Rechenzeit und Speicherplatz, die jener zur Lösung eines festgelegten Problems …