Transkripte
1. Einführung: Hallo, alle. Und willkommen zu dieser Fähigkeit teilen Informatik 101 Klasse. Dies ist ein Einführungsvideo. Mein Name ist Kurt Andersen. Ich werde der Lehrer für Ihre Klasse sein, der über Informatik-Basics geht. Eine Art guter Überblick über alle Themen, die die Informatik trifft, und einige der
Hauptbereiche , wie in Notation und Timing und solche Dinge. In diesem Kurs lernen
wir diese sieben Dinge, und ich werde sie in einer Sekunde durchgehen. Aber ich möchte Ihnen eine Vorstellung davon geben, warum wir diese Dinge lernen wollen. Informatik ist die Art und Weise, wie wir Programmierung und Algorithmen betrachten, damit wir sie effizienter
machen können . Und dieser Begriff, skalierbar skalierbar
genannt,
bedeutet, dass unsere Algorithmen effizient laufen, wenn wir 10 Datenstücke
einlegenoder wenn wir , wenn wir 10 Datenstücke
einlegen beispielsweise eine Million Daten einfügen. Wir möchten, dass unsere Programme effizient oder im Wesentlichen mit so vielen Daten wie
möglich ausgeführt werden. Denken zum Beispiel, wenn wir das nächste Facebook bauen,
stellen Sie sich vor, ob sie es nur für 10 Personen entworfen haben. Das wäre ein Problem, denn wenn sie bis zu 1.000.000 Menschen kamen. Plötzlich gibt es ein großes Problem. Es gibt Timing, Probleme. Menschen können Dinge nicht laden, weil unsere Server und Algorithmen alle ineffizient sind. Und wenn es zu ineffizient ist, können
wir tatsächlich einen Algorithmus erstellen, der genau dasselbe auf zwei verschiedene Arten tut. Eine der Möglichkeiten, wie es 10 Jahre dauern könnte, bis es fertig ist. Und umgekehrt könnte es 10 Sekunden dauern. Wir wollen also nicht die Algorithmen erstellen, die 10 Jahre dauern. Wir wollen die Algorithmen erstellen, die 10 Sekunden dauern. Wir werden über solche Dinge im Laufe des Kurses gehen, ein
paar Probleme lösen und das Timing bekommen, damit ich den Unterschied zwischen
den Zeiten in diesem,
dem Kurs mit diesen verschiedenen Algorithmen zeigen kann den Zeiten in diesem, . Und am Ende des Kurses werden
wir ein Projekt durchlaufen. Also lasst uns das durchgehen und ich werde über das Projekt reden. Das erste, was wir tun, ist eine kleine mathematische Auffrischung. Ich weiß, es könnte eine Weile dauern, seit du in einem Mathematikunterricht warst, also werden wir nur ein paar Grundlagen abdecken. Einige der Dinge, die Ihnen während des Kurses helfen. Das ist keineswegs mathematischer Intensivkurs. Wir lernen neue Bereiche,
aber es wird helfen, wenn Sie ein solides Fundament haben. Also gehen wir zu einer schnellen Mathe-Auffrischung, nur damit ihr euch daran erinnern könnt. Und wenn Sie ein wenig
wackeligen Hintergrund auf etwas haben ,können
Sie es ein wenig nachschlagen und etwas mehr darüber lernen, bevor Sie anfangen. , Dann haben wir in der Notation, das ist eine Art der Kernprinzipien hinter der Informatik. Es ist unser Tool in der Toolbox, mit dem wir zwei Algorithmen betrachten und feststellen können, welcher schneller
ist. Wenn ich also Al Gore ansehe, dass ich sage, dass es im Log-in gegen einen anderen Algorithmus ist
, der als Computer im Quadrat ist
, wissen
wir, was das bedeuten. Wir können die Dinge jetzt anders kennzeichnen und die Geschwindigkeiten anderer
Informatiker kommunizieren . Das ist, was die In-Notation über Datenspeicherung und eine Erhöhung arbeitet. Dies ist eine Möglichkeit, Daten zu speichern,
äh, äh, verfügbar in jeder modernen Programmiersprache wie Java-JavaScript, Dinge wie IOS-Entwicklung, die normalerweise Objective C oder Swift oder Andrew Development ist, die ist Job. Sind Schottland alle eine Erhöhung verknüpfte Listen, Stapel und Warteschlangen, sie existieren in allen diesen. Dann gehen wir über Knoten und verknüpfte Listen. Diese beiden dort fast eine Art Gegensätze von einander. So machen sie verschiedene Dinge, und sie ermöglichen es Ihnen, verschiedene Probleme auf unterschiedliche Weise zu lösen. Stacks und Warteschlangen, die an ein que fast wie denken, wenn Sie in der Schlange warten, gibt es Dinge in der Warteschlange. Also diese Person geht, und dann geht diese Person, und dann geht diese Person, und wenn Leute reinkommen, fangen
sie alle an, damit wir das tatsächlich in einem Algorithmus erstellen können, der uns in vielen verschiedenen Situationen. Sie werden über die Startalben gehen. Das ist eine Art Grundlage unserer Informatik-Inhalte. Hier fangen die Menschen immer an. Es gibt viele verschiedene,
und es erlaubt Ihnen, einen Fortschritt zu sehen. Wurden für einige wirklich schlechte Art von Hologramm-Algorithmen gehen, die viel zu lange dauern, und wir werden unseren Weg zu einigen wirklich,
wirklich guten Sortieralgorithmen arbeiten , die effizient, aber ein wenig komplex sind. Sie sollten über Bäume und den binären Suchbaum oder die BST gehen. Diese zeigen zwei wichtige Themen in der Informatik. Und schließlich machen
wir das Projekt. War das das Ende des Kurses? Und das Produktprojekt ist im Wesentlichen, dass wir all das nehmen und es
in ein Problem bringen . Es gibt ein Problem. Am Ende des Kurses haben
wir 10 Millionen Daten. Ich versuche, diese Daten zu sortieren,
und ich möchte, dass du das Problem durchmachst und mir dann sagst, wie lange es dauern wird, zu laufen. Sie werden es mir am Ende sagen können, und wie können Sie es dann effizienter machen? Es wird ein paar schnelle, einfache Änderungen
geben, einige Datenstrukturen. Sie können solche Dinge ändern, die es effizienter machen, und Sie werden sehen, dass die Zeit wirklich anders läuft,
je nachdem, wie Sie diese Änderungen implementieren. Das sind also unsere Kurse, das werden wir lernen. Es wird eine tolle Reise. Es gibt viel zu lernen, und Sie werden langsam mehr über die Computerwelt verstehen, wenn wir durch sie gehen. Vielen Dank an alle, und lasst uns mit diesem Kurs beginnen
2. 1-1 Time Einführung: Also werden wir diesen Kurs beginnen, wo ah viele CS Kurse beginnen, und das ist in Zeit und Komplexität. Der Grund, warum wir die Komplexität der Zeit beginnen, ist, weil es uns einen Standard gibt,
etwas, mit dem wir unsere Programme vergleichen können und etwas, über das wir mit anderen
Informatikern sprechen können . Es ist ein Weg, den sie können, vor allem Professoren und diejenigen, die uns lehren, können uns kommunizieren. Warum ein bestimmter Programmalgorithmus, unsere Art, etwas zu tun, ineffizient im Vergleich zu einem anderen Weg ist. Es ist also die Standardmethode, verschiedene Auswärtszimmer zu vergleichen. Das ist es, worauf es alles läuft. Und was ich mit einer normalen Art und Weise meine, ist die Tatsache, dass ein Informatiker aus
den Niederlanden, aus Amerika und Indien alle auf die gleiche Weise kommunizieren könnte weil wir bestimmte Notationen wie große O-Notation verwenden. So zum Beispiel würde
es
zum Beispieletwa so aussehen. Das ist eine große O-Notation, und so versteht jeder Informatiker, was das bedeutet, und später werden wir das auch diskutieren und normalerweise lernen. Sie verwenden bestimmte kleine Aspekte, wie in quadratischen oder anderen skalierbaren Faktoren. Also verwenden wir nicht so, wie Sie wissen, dass es in 25 Einheiten Zeit läuft, weil wir nicht wissen, was 25 Einheiten bedeuten. Beansprucht es 25 Taktzyklen, die 25 Sekunden dauern? Würde es in 25 Zyklen auf meinem Computer laufen versen Sie Ihren Computer? Es ist sehr schwer zu vergleichen, wenn man dafür geht. Also, was wir tun Diese wollten den Standard dafür betrachten,
eine Möglichkeit, dass wir mit Algorithmen vergleichen können, die völlig unabhängig vom Computer sind, dass es auf dem Gebiet ausgeführt wird, dieser Welt, wie schnell die Internetverbindung ist nur in der Lage, zwei von ihnen zu betrachten und in der Lage zu sein, sie zu vergleichen und ermöglicht es uns, herauszufinden, wie wir uns selbst verbessern können. Wenn wir also eine bestimmte, die Sie kennen,
eine bestimmte Notation betrachten können , dann können wir herausfinden, wie man besser ist als diese Notation und welche Dinge schlimmer sind als diese Notation, und das gibt uns eine Menge Wackelraum. Es gibt uns die Fähigkeit, uns selbst ein gestecktes Ziel zu verbessern und in verschiedenen
Bereichen wie jeder andere Aspekt zu erforschen . Jede andere Wissenschaft, wir werden uns über die Grundlagen dieser Wissenschaft und wie wir sie analysieren und
versuchen, herauszufinden, wie wir sie besser machen können .
3. 1-2 1-2 Logarithmische Funktionen: Informatik basiert auf einer Grundlage der Mathematik. Es ist im Grunde nur angewandte Mathematik, die Sie in einen Prozessor werfen und dann macht es alles für Sie. Und du weißt, du kannst das weiter ausbauen, um deine Programme zu erstellen. Aber im Wesentlichen ist
es Mathematik, und deshalb möchte ich nur ein paar Mathematikbegriffe durchlaufen, die während des Kurses
verwendet werden . Jetzt
mach dir keine Sorgen. Dies ist kein schwerer Mathematiktheoriekurs oder so etwas. Es wird nicht einmal wirklich irgendwelche Berechnungen geben. Jedoch. Wir werden auf einige mathematische Terminologie,
eine mathematische Nomenklatur verweisen , die ich sicherstellen wollte, dass wir alle auf derselben Seite sind, bevor wir in diese Art
von Nomenklatur einsteigen . Und das sind nur einige Dinge,
die wir vielleicht in der Highschool gelernt haben. Oder wir haben ein oder zwei Mal gelernt, und wir verwenden einfach nicht wirklich in der realen Welt. Aber wenn man sich in die Informatik
einsetzt, werden sie nur ein bisschen mehr verbreitet. Und wie ich schon sagte, du musst nicht wissen, wie man alles von Hand macht, sondern sie nur verstehen. Das ist, was ich auf den Punkt bringen möchte, ist, dass Sie in der Lage sind, diese
verschiedenen Dinge zu verstehen und wo Sie es sehen können, wie wir sagen, wir haben eine Laufzeit eines Algorithmus. Wir können verstehen, was dieser mathematische Begriff in Beziehung zur Laufzeit bedeutet. Und das ist es, was ich reingehen werde. Dieser Vortrag geht nur über ein Auffrischungsmaterial, so dass, wenn wir ihn später im Kurs wieder treffen ,
Sie das
auf einer Basisebene verstehen werden, und Sie können Ihr Wissen etwas einfacher erweitern. Das erste, worüber wir reden wollen, ist etwas, das in der Informatik verwendet wird, aber nicht viel an anderen Orten. Und das ist die Idee des Logs. Also genau hier wird es referenziert, oder die Nomenklatur für ist so. Es ist logbasiert, so
etwas wie sagen wir, es basiert auf der Variablen hier oder eine Zahl entspricht einer anderen Zahl. Also, zum Beispiel, lassen Sie uns acht genau dort setzen, und so ist dies eine Protokollfunktion. Was genau ist eine Protokollfunktion? Nun, was es kurz ist, ist etwas, das als logrhythmische Funktion bekannt ist und eine logrhythmische Funktion ist die umgekehrte Begegnung mit dem Gegenteil, die Umkehrung einer Exponentialfunktion. Ein Protokoll ist also die Umkehrung eines Exponentials. Was ist eine Exponentialfunktion? Nehmen wir an, wir haben es im Laufe der Zeit verfolgt. Wir haben das Wachstum dieser beiden Funktionen im Laufe der Zeit verfolgt. Eine Exponentialfunktion geht so etwas wie diese, wo man direkt in die Luft geht, weil nach jeder Iteration die Veränderung wächst. Also, zum Beispiel, vielleicht von 0 zu 1, geändert um eins von 1 zu 2. Vielleicht hat es sich um zwei von 2 auf 3 geändert. Vielleicht hat es sich um vier, dann acht, dann 16, dann 32 64 geändert. Und es geht immer höher und höher, bis, wenn Sie eine Änderung Ihre beweglichen Milliarden oder Billionen von Zahlen auf die nächste machen. Das ist also eine exponentielle Funktion. Diese sind ziemlich schlecht in der Informatik. Wenn Sie über Laufzeiten sprechen, weil das bedeutet, dass je mehr Sachen Sie in sie stecken, es geht einfach bis in die Unendlichkeit, wie lange wird jetzt dauern Eine Protokollfunktion ist das Gegenteil davon. Es ist das Gegenteil von diesem, und was wäre das Gegenteil davon? Nun, das ist einfach. Das ist, wenn du das nimmst und das genaue Gegenteil kennst, also gehen wir stattdessen so. Also, was das
ist, wird es zunächst eine große Veränderung haben. Aber im Laufe
der Zeit wird der Wechsel zwischen den Zahlen im Laufe der Zeit immer weniger werden. Also, wo dieser fast in eine gerade vertikale Linie hinaufgeht, geht
dieser fast in eine gerade horizontale Linie. Das ist gut, weil das bedeutet, dass je mehr Dinge, die wir in unser Programm setzen, es fast so ist, als würde sich die Laufzeit überhaupt nicht ändern. Es wird immer weniger und weniger, bis wir diese horizontale Linie mögen. Und deshalb sind Protokollfunktionen wichtig, weil sie das Gegenteil von exponentiell sind. Und es gibt einige Algorithmen, die in dieser Art von Zeit ausgeführt werden, also ist das die theoretische Seite davon. Werfen wir einen Blick auf ein paar Beispiele, also schauen wir uns zuerst an. Die Gleichung für dieses Protokoll von X ist gleich unserem log basiert X warum ist gleich Let's Go b und das wiederum geht in die Exponentialfunktion. Das ist also ein Protokoll mit meiner Funktion. Dies ist die Exponentialfunktion und die Exponentialfunktion ist x von B gleich. Warum? Okay, also lasst uns hier ein paar Zahlen bluten, damit wir aus dieser Art abstrakter, seltsamer Variablen herauskommen und das tatsächlich ein bisschen besser verstehen. Also, wenn wir zwei zum B nehmen und es gleich acht ist, was bedeutet das? Nun, das
bedeutet, dass, wenn wir zwei zum Etwas nehmen und wenn zum Beispiel sagen, wir
zum Beispiel sagen,
was wir hier sagen,
zum Beispieldie eine gleich 22 zu den beiden gleich vier ist ,
zum Beispiel . Und das ist, weil es einfach zu mal ist, um Sie nehmen 22 mal zwei zu drei gleich acht. Und das ist nur zwei Mal. Zwei mal zwei, die Sie nehmen, um von sich selbst dreimal multipliziert es gleich acht, und so weiter und so weiter. Also sagen wir, ist, dass es eine Zahl gibt, die so existiert, dass es gleich acht ist. Nun, hier
drüben finden wir das nur heraus. Es sind zwei zu drei gleich acht. Wenn wir also drei für B eingesteckt haben, müssen
wir zu den drei gleich acht. Diese Seite ist gleich acht. Das Zyklen eines. Das ist ein guter Ausdruck. Also hier oben, B ist drei. Nun, wie hilft uns das? Was sagt uns das? Nun, wenn wir dies in eine Protokollfunktion verwandeln, können
wir tatsächlich ein wenig Informationen daraus bekommen. Wenn wir also Logbuch bekommen, lassen Sie uns unseren X-Wert einschließen, unser X genau hier. Es ist also eine lange Basis. Und dann lassen Sie uns jetzt
unsere
B-oder eigentlichen R-Y-Schreiber so lange einstecken B- , basierend auf zwei von acht. Was ist das gleich? Nun, wir wissen, dass es gleich drei ist. Was wir also mit logrhythmischen Funktion tun können, ist, dass wir diese Zahl einfacher finden können. Wir haben eingeengt, dass es einfacher ist. Und das ist wichtig, denn mit einer logrhythmischen Funktion können
wir hier Zahlen einstecken und wir können Zahlen auf der rechten Seite bekommen, wo
wir mit einer Exponentialfunktion Zahlen und links einstecken, und wir bekommen Zahlen Hier drüben. Das hilft uns also, denn jetzt können wir uns die Beziehung ansehen warum eine Protokollfunktion wichtig ist. Nehmen wir an, wir haben das oder lassen Sie uns zuerst über die Basis sprechen. Also, , warum? Was ist lange Basis mit langen basierten 10. Die Basis ist genau das, was wir die Nummer zwei nehmen. Also, zum Beispiel, wenn wir dazu neigen, die zu neigen und neigen zu den drei oder wir würden 10 dann 100 dann 1000 und das ist wegen dieser hier neigen zu den jüdischen ist 10 mal 10. So ist 110 der drei ist nur 10 mal 10 mal 10. Es ist 10 mal drei von sich selbst, also sind es nur 1000. Also in dieser Situation würde es basierend 10 protokolliert werden, weil die Zahl hier eine 10 ist und das ist, dass es keine Bedeutung gibt, die Sie tun können. Log basiert 27 Log Place 98 Log basiert 1000 Es spielt keine Rolle. Informatik. Wir bleiben
auch bei Log basiert, auch bei Log basiert, und wir werden das ein wenig später erklären. Aber es kommt nur darauf an, wie Computer wirklich nur eine Null und eine Eins haben, mit der man arbeiten kann. Also zitieren sie zwei getrennte Zustände hier, und das ist, warum wir Log-Basis verwenden lassen, um den Kopf zu gehen. Das ist vollkommen in Ordnung. Verstehen Sie einfach, dass wir die auch verwenden. Nehmen wir an, wir hatten lange basierte Angenommen, wir haben einen Algorithmus, der in der Protokollzeit läuft. Nehmen wir an, wir haben
auch lange Basis, auch lange Basis, und das ist die Menge an Informationen, die in. Also sagen wir, es ist lang basiert. Zwei von uns haben 64. Also vielleicht haben wir ein Facebook-Konto und wir betreiben einen Algorithmus auf Facebook, der
durch unsere Freunde geht . Also haben wir wie viele Freunde in dieser Situation? Wir haben 64 Freunde und wie lange wird es dauern? Nun, unsere Gleichung läuft im Protokoll, also vervollständigen wir die 60 ausländischen, und es wird hier einen gewissen Wert nehmen. Und in dieser Situation können
wir einfach gehen. Was wird? Was ist bis zum Ende, das 64 entspricht, was herauskommt, um ungefähr zwei bis zum sechsten, was Sie hier unten sehen können. Es geht 8 16 Also, wenn wir zum vierten gehen, wird
es 16 bis 5 32 bis 6 64 sein, richtig? So wie so. Also, was ist 2 bis 6? Also, jetzt haben wir zu den sechs. Und jetzt haben wir hier sechs. Also, in dieser rechten Seite, was wir haben, ist die Laufzeit. Sagen wir, das sind Sekunden. Also jetzt haben wir einen Algorithmus hier. Wir haben Log-Basis. Zwei von 64 Datenstücken entspricht einer Laufzeit von sechs Sekunden. Nun, lassen Sie uns das irgendwie gehen. Ah, ein bisschen mehr auf die extreme Seite. Warum ist lang so ein guter Algorithmus? Warum ist es in der Informatik so wichtig? Nun, wenn wir einen Algorithmus bekommen könnten, der so ist, können
wir anfangen, einige wirklich,
wirklich nette Dinge zu sehen . Also lasst uns voran gehen und ein wenig Platz hier aufräumen und schauen wir uns das noch ein
bisschen mehr an. Was wäre, wenn wir schon lange von zwei hatten? Ich weiß es nicht. Eins. Verdoppeln wir das. Also 1 28 Nun, das wird gleich sieben Sekunden sein. Also haben wir die Menge an Informationen verdoppelt, die hereinkommen, und wir sind nur eine Sekunde gestiegen. Wir haben uns nur ein bisschen verändert. Lass uns noch höher gehen. Nehmen wir an, wir wollen, anstatt das zu verdoppeln oder ja, lassen Sie uns einfach weiter verdoppeln. Gehen wir zu 56 hier und jetzt haben wir acht Sekunden, damit Sie sehen können, dass der Wechsel zwischen diesen immer größer wird, aber die Sekunden gehen nur linear nach oben. Lee geht jedes Mal um eine Sekunde hoch. Lassen Sie uns das extrapolieren. Nehmen wir an, wir nahmen zwei zum Ich weiß nicht, sagen
wir 32. Und warum ist das wichtig? Nun, bis zum 32. Was ist auf die 32. Gleiche? Es war eine sehr, sehr große Zahl, und diese Zahl ist zufällig 8.000,589.000 oder 589 Millionen, 934.000 592. Was ist daran signifikant? Dies ist die erste Zahl in dieser Sequenz, die größer ist als die Bevölkerung des Planeten . Und wenn wir es hier mit Facebook zu tun haben, bedeutet das, dass unser Algorithmus bei Max 33 Sekunden läuft. Es wird nicht weit gehen, da du nicht mehr Freunde haben kannst, als es Menschen auf dem Planeten gibt. Also hatten wir das irgendwie. Wir haben diesen erstaunlichen Algorithmus genau hier, wo es egal ist, wie viele Daten es sind. Es wird immer 33 Sekunden oder weniger laufen, ob diese Luft-Millisekunden oder diese Luft Mikrosekunden oder andere Arten von Zeiteinheiten. Dies ist eine wirklich große Wachstumsrate. Das bedeutet, dass die nächste Version davon wäre, wenn wir dies nochmals verdoppeln würden, also wären das 16 Milliarden. Wir haben also einen Wechsel von einer Sekunde von acht Milliarden auf 16 Milliarden und dann
noch eine Sekunde, um auf 32 Milliarden zu steigen. Deshalb sind Protokolle wichtig, weil diese Beziehung, über die wir
hier gesprochen haben , wie sie im Laufe der Zeit nicht sehr wachsen. Und wenn Sie weiter in die Unendlichkeit gehen, werden
sie fast zu einer horizontalen Linie, in der Sie so viele Daten einfügen können, wie Sie es wünschen, und Ihr Algorithmus wird immer noch im Grunde die gleiche Geschwindigkeit laufen. Das ist also die logrhythmische Funktion. Es ist eine sehr, sehr einfache Funktion, wenn Sie es verstehen. Aber es ist immer noch ziemlich seltsam im Loch, die ganze Diskussion über Mathematik und es ist etwas, das wir nicht wirklich oft sehen. Das ist also das erste, was ich irgendwie verdecken wollte, bevor wir hineinspringen. Das nächste, was ich abdecken möchte, ist eine andere, die viele Leute gesehen haben, aber sie verstehen nicht wirklich auf einer Basisebene, und das ist etwas, das als faktorielle
4. 1-3 1-3 Factorial Funktionen: Also, was genau ist eine faktorielle? Nun, ein wenig sah so etwas wie so etwas einfach aus. Faux drei und dann ein Erklärungspunkt oder vielleicht 27 ein Erläuterungspunkt. Ähm, was genau ist? Bedeutet eine faktorielle Bedeutung, was eine faktorielle ist? Ist nur, wenn Sie es aufteilen, ist
es egal, was die Zahl an der linken Stelle multipliziert mit allen fortlaufenden Zahlen ist. Also in diesem Fall wird
die Tatsache drei faktorielle gleich sechs sein. Es wird sechs gleich sein, das ist ein mal 22 mal drei. Also ein Mal zwei gleich 22 mal drei gleich sechs ist. Also drei faktorielle gleich sechs. Sie werden feststellen, dass etwas sehr Wichtiges daran ist, dass diese Wachstumsrate verrückt ist. Also, wenn wir eine faktorielle gehen, wird
das nur ein zwei faktorielle legale einmal essen 22 Also ist es, weißt
du, ziemlich ähnlich wie die restlichen Wachstumsraten. Drei. Fabrik viel gleich sechs vier faktorielle. Also nehmen wir diese sechs und wir multiplizieren sie mit vier, was 24 sein wird. Also statt nur einmal zwei mal drei, wir haben ein Mal zweimal dreimal vier,
also können Sie sehen, dass das jetzt 24 ist, fünf faktorisch. Wir nehmen diese Zahl, die ist diese Zahl hier drüben multipliziert mit fünf. Also können wir einfach ein paar kurze Mathe machen. Warum können Sie sehen, dass wir bereits den Punkt bekommen, wo wir tun müssen
, wie , äh, ,
um im Grunde Handmathematik,
umdiese Dinge zum Laufen zu bringen. Und wir sind nur bei der Nummer fünf waren, wie mit Protokollen. Wir könnten einfach weitergehen und hoch und hoch, es war nicht zu schwer. Sechs. Nun, lassen Sie uns das um sechs vorbeiziehen. Ab und zu haben wir 120, also werden es 600 sein. Das gibt mir gleich 720, richtig? - Ja. 720 und Sie können sehen, oder 820. Akt Nr. 7 20 Sie können sehen, dass diese Zahl um eine beträchtliche Menge wächst. Jede einzelne Änderung wird immer mehr dort, wo wir einen Wechsel von einem hier hatten. Jetzt haben wir einen Wechsel von vier. Und dann eine Änderung von, ähm, hier
unten hatten wir eine Änderung von Sagen
wir mal, sehen wir 18 hier. Wir hatten hier eine Umstellung von 96. Wir hatten einen Wechsel von 600, Sie konnten sehen, dass das nur außer Kontrolle geraten wird. So faktoriell gibt es etwas, das wir nicht jemals dort begegnen wollen immer
durch entweder wie und in dargestellt , was nur eine beliebige Zahl bedeutet. Können Sie dort eingesteckt werden, dass einfach, wie, Art von Wenn wir generisch gehen wollen, wir eine Variable in den Erklärungspunkt setzen können, oder wir können eine Zahl eingeben, um eine tatsächliche Antwort zu erhalten. jedoch das, Dies istjedoch das,was eine faktorielle ist. Es ist nur eine Multiplikation jeder einzelnen Zahl, die es vorgeht, also wie ich schon sagte, eine Faktorial von einer sieben ist nur oder eins sind sieben. Factorial ist nur einmal zweimal dreimal viermal fünfmal sechs mal sieben. Nichts zu kompliziert daran. Aber wie gesagt, viele Leute sehen das nicht, besonders sie können es ein- oder zweimal im Mathematikunterricht gesehen werden, aber nicht wieder. Manchmal werden wir über faktorielle sprechen ist, dass sie sehr schlechte Algorithmen sind. Wenn Ihr Programm bei Factorial landet, können
sie nehmen, wie ich sagte, Sie könnten in ein Programm, das vielleicht vier faktoriell ist, und es wird wirklich schnell laufen. Und dann, wenn man ein Programm einstellt,
das 20 Fabriken ist. Nur, weißt
du, 16 weitere Daten, die es vielleicht nie vervollständigt. Weißt du, die Zeit, die es dauern könnte, um die Sonne zu vollenden, könnte schneller ausbrennen. Das ist also eine Art von der Wichtigkeit eines Faktors.
5. 1-4 1-4 Algebraische Expressen: Und schließlich wollte
ich nur ein paar grundlegende Algebra oder ein paar Dinge, die man im Kurs sehen könnte. So, zum Beispiel, könnten
wir so etwas sehen,
das ist N Login. Also, was bedeutet das? Nun, das ist nur eine Art generische Funktion. Es zeigt Ihnen nur, was eine Wachstumsrate oder was eine Funktion in dieser Situation verwendet hat. Nehmen wir also an, A ist gleich der Menge der Daten, der Menge der Daten. Wenn wir also eine Funktion hatten, die so ist, sagen wir nur, dass wir sagen, dass unser in 700 ist. Wir wissen nicht, ob es sein wird,
weil Programme dynamisch sind. Sie laufen in verschiedenen Räumen. Manchmal kann eine Person 20 Facebook-Freunde haben. Manchmal haben sie vielleicht 1000. Wir wissen nicht, wie viele Facebook-Freunde am Ende haben werden. Deshalb schreiben wir so etwas. Es ist fast wie ein Platzhalter. Es sagt uns, was wir benutzen werden, wenn wir diese Nummer bekommen. Aber bevor wir nicht wirklich wissen, was es ist. Dies ist ein Grundprinzip der Algebra, und was wir tun können, wenn wir eine Formel wie diese haben, wenn wir den Algorithmus, das Computeralbum oder
die Verwendung verstehen , ist, dass, wenn wir ein konkretes Beispiel bekommen, das ist wie die abstrakte. Das ist etwas, was wir noch nicht wissen. Wir können dieses konkrete Beispiel hier hineinstecken, und wir können tatsächlich eine Nummer bekommen. Also in dieser Situation würde es 700 mal Log von 700 sein. Und lassen Sie uns sagen, dass diese Luftwaffenstützpunkt zu gehen, mit etwas, das wir tatsächlich in unseren Köpfen
berechnen können . Nehmen wir an, es ist gleich,
um , Lassen Sie uns gehen mit 16 wird ein 16 gehen. Das bedeutet also, es wird 16 Mal lang sein, basierend auf zwei von 16. Und wir haben in der letzten gelernt, das ist nur es kommt, um von was zu protokollieren? Oder zur Basis direkt hier zu dem, was gleich ist, dass 16. Nun, zwei mal vier wird gleich 16 sein. Es ist zwei Mal zweimal zweimal 22 Mal, zwei mal zwei gleich acht. Also, das ist 48 16. Also jetzt wissen wir, dass vier die Antwort darauf ist, also haben wir 16 Mal, für die herauskommen wird. Teoh, viermal. Also wird es 40 sein wird, wird es 64 sein, richtig? So wie so. Und das ist es, was wir ein paar davon haben werden. Ich meine, sie können, wissen
Sie, sie werden komplizierter, als sie im Quadrat des Logs zum dritten oder
vorbei sein könnten , um sich über drei oder so etwas anzumelden. Aber verstehen Sie einfach, dass, wenn Sie eine Funktion wie diese haben, alles bedeutet, dass wir diese beide die gleiche Zahl haben, dass sie beide
das variable Ende sind . Also werden beide genau die gleiche Nummer sein und wo, wenn wir eine konkrete
Nummer bekommen , werden
wir diese Nummer einstecken. Ich denke, das ist gut.
6. 1-5 N-Notation: Also haben wir ein gutes Verständnis davon, wohin wir in dieser Einheit gehen. Fangen wir an, diesen Prozess zu erstellen. Beginnen Sie, dies ein wenig mehr zu verstehen und gehen Sie über etwas, das in Notation in
Notation genannt wird, ist nur eine Möglichkeit, zu betrachten, wie unser Programm läuft als Funktion von in dargestellt. Das ist also wichtig, genau hier. Es wird als Funktion von in einer Funktion von Ende dargestellt. Und was das bedeutet, ist, dass wir eine beliebige Nummer angerufen haben. Also, zum Beispiel, wir haben hier drin und was genau ist drin? Normalerweise wird davon beurteilt, wie viele Daten von einem Programm verarbeitet werden. Also im Grunde, was ein Programm ist, ist, dass Sie eine Reihe von Eingaben hier haben, also rufen wir diese Eingaben auf. Du bist ein Haufen Punkte. Sie kommen in unser Programm wie eine Blackbox, wenn Sie so wollen. Und dann haben sie hier eine Reihe von Ausgängen. Und das ist im Grunde, wie Programme funktionieren. Sie haben eine Reihe von Eingaben, sie werden auf eine Art und Weise verarbeitet, und dann werden sie gespeichert oder aus. Legen Sie es auf eine andere Art und Weise. Was also darin ist, wie viele Eingaben wir bekommen, wie oft wir es und auf
jedem Prozess ausführen müssen. So ist es im Grunde, wie zum Beispiel in dieser Situation Maney-Eingaben in wie viele Arten von Berechnungen wir brauchen könnten in sein. Und dann, wie viele Ausgänge herauskommen, könnte auch in sein. Es ist also etwas, das willkürlich genug ist, dass es bei jedem Prozess der
Programmausführung verwendet werden könnte , aber es erlaubt uns immer noch zu verstehen, wie die Programme reagierten. Gehen wir also einfach einen Schritt zurück und schauen wir uns das etwas expliziter
an . Nehmen wir an, dass in dieser Situation in gleich 100 so jetzt haben wir tatsächlich eine Zahl hier. Und wenn wir das Mental angeschlossen haben, kennen
Sie alle diese verschiedenen Versionen hier drüben, sagen
wir, dass dies nicht im Algorithmus ist und es mit einem in quadrierten Algorithmus vergleicht. Sie können sehen, dass, egal was diese Zahl ist, diese Zahl wird immer viel,
viel größer sein , und in dieser Situation ist es viel größer, und es ist tatsächlich 1000 gegen 100. Und der Grund dafür, dass wir normalerweise nicht explizit Zahlen anschließen, ist, dass die
Datenmenge , die verarbeitet wird, normalerweise nie als eine bestimmte Zahl garantiert wird. zum Beispiel an, Schauen wir unszum Beispiel an,unser Programm gibt die Anzahl der Facebook-Freunde ein, die Sie haben. Unser Programm gibt also die Anzahl der Facebook-Freunde ein, die wir haben. Es geht darum, diese Daten in unsere Box zu legen. Aber wie viele Facebook-Freunde hast du? Weil ich dir sagen kann, dass ich meine Nummer bin, wird anders sein als deine Nummer. Ihre Nummer wird anders sein als wahrscheinlich viele Leute, die diese Klasse nehmen. Wenn wir also einen Algorithmus für speziell 250 Freunde erstellen, wird
es für die Mehrheit der Fälle nicht funktionieren. Was wir also tun, ist, dass wir Algorithmen bauen, die eine beliebige Menge an Daten aufnehmen können. Und in dieser Situation nennen wir genau
das, was wir eigentlich nennen. Und so kann es in der Menge der Daten genommen werden. Und wenn es dann verarbeitet und ausgibt, wird
es in der Menge der Daten ausgegeben. Und so mit diesen konnte
diese Art von Klassifikation al Berlins vergleichen, ohne jemals zu verstehen, wie viele Zahlen hineinlegen werden. Und das ist nur, weil wir uns hier Größenordnungen ansehen. Wir betrachten nicht den Unterschied zwischen 10 und du weißt schon, neun Zeiteinheiten oder was auch immer. jedoch heraus, Es kommtjedoch heraus,dass wir in Vers im Quadrat betrachten. Also, zum Beispiel, in dieser Situation, lassen Sie uns sagen, dass, wenn wir in Menge von Facebook-Freunden, dass es in
Quadratmetern Zeit dauern wird . Und jetzt verstehen wir, dass vielleicht, wenn ich 10 Freunde hätte,
das gut funktionieren würde und nur, du weißt ,
es kommt zu hätte,
das gut funktionieren würde und nur,
du weißtschon,
es kommt zu
100? hätte,
das gut funktionieren würde und nur,
du weißtschon,
es kommt zu
100? Aber was passiert, wenn ich 1.000.000 Freunde hätte, wie würde diese Nummer
dann herauskommen? Es wäre eine absolut massive Zahl, und der Berechnungsunterschied wäre riesig im Vergleich zu, wenn es nur ein in out wäre. Und so lassen Sie uns eine Art von einem Blick auf das ein wenig tiefer, und Sie können sehen, dass es eine Reihe von verschiedenen Möglichkeiten gibt, die wir
hier darstellen können,
und dies ist ein Diagramm seiner Skalierung im hier darstellen können, Laufe der Zeit. Und was wir versuchen herauszufinden, ist, wie geht es im Maßstab in die Unendlichkeit? Der Grund, warum wir auf wichtige Frage sind, ist, weil, wie es skaliert bis unendlich ist die Möglichkeit, was unser Programm geben könnte. Also schauen wir uns nicht an Wie skaliert es auf 100 oder 1000, die wir betrachten? Wenn wir eine 1.000.000 Datenmenge oder eine 1.000.000.000-Datenmenge in diese Datei einfügen, wie wird es reagieren? Und diese Graphen erzählen die Geschichte. Also hier unten haben wir etwas namens konstante Zeit, das ist diese Klammer oder diese Ah, Spalte hier drüben. Und so bedeutet konstante Zeit, dass, wenn wir 1110 1 einlegen, egal was passiert, es immer genau zur gleichen Zeit läuft,
es kein Ende mit sich bringt . Denn egal was passiert, es wird genau zur gleichen Zeit kommen, dann die oben, die eigentlich Log-Basis von in ist. Erinnerst du dich, als wir über das Binärsystem gesprochen haben? Wir verwenden keine logbasierten 10 wie die meisten Mathematik, weil wir es nicht mit dem
Zehnzahlensystem zu tun haben . Was wir hier zu tun haben, ist das Zwei-Zahlen-System. Also haben wir lange Basis verwendet, um und dann hier drüben haben wir die Quadratwurzel von in in log-Ereignis in quadrierten zwei D und in faktorial und Sie können sehen, dass es einen
großen, großen Unterschied zwischen diesen beiden hier und diesen beiden hier gibt. Und Sie können sehen, dass der Winkel immer größer und größer wird, da dieser
bis ins Unendliche hinaufgeht . Und wenn Sie das wirklich herausbringen, beide bis ins Unendliche, würde
das so aussehen, als wäre es fast direkt in der Luft. Nun, dieses Haus würde so aussehen, als wäre es, weißt
du, immer noch im 45-Grad-Winkel. Und das ist es, worauf wir uns konzentrieren wollen. Hier ist, wenn wir sie vergleichen, wie viel anders werden sie im Laufe der Zeit bekommen? Zum Beispiel könnte
dies wie eine sehr kleine Änderung aussehen, aber wenn wir diese Zahlen bis ins Unendliche setzen, werden
Sie beginnen zu sehen, dass der Unterschied beginnt zu kommen. Schauen wir uns also ein paar Beispiele an. Hier drüben haben wir die Zahl ist Null, um, 10 101.000 in gleich 10 1 Also in dieser Situation, was wir hier haben, ist, dass wir die Nummer der linken und dann einen Algorithmus haben, der
Endzeit läuft und ich werfe sie, die läuft in quadratischer Zeit in einem Algorithmus, der in der Login-Zeit läuft und dann hier ist die konstante Zeit. Wenn wir also ein Stück Daten eingeben, werden
Sie feststellen, dass wir im Grunde haben, dass sie alle genau gleich sind und Null nicht immer keinen Sinn ergibt. Also Log ist ein bisschen knifflig. In diesem Sinne wird
es manchmal eine Null oder undefiniert löschen. Aber es bedeutet nur, dass es in einer Zeit läuft, also sind alle genau die gleichen. Jetzt fangen wir an, hinter eins zu skalieren. Siehst du, sie beginnen alle genau am selben Ort. Wir fangen an, hinter eins in unsere 10 zu skalieren. Also, sehen
Sie, sie fangen alle hier an und jetzt ziehen wir zu 10, die genau hier ist. Sie werden beginnen zu sehen, dass die Unterschiede kommen in, geht zu nur 10 im Quadrat, kommt an die Spitze dieses Diagramms bei 100. Also gibt es hier schon einen großen Unterschied. Und dann Ende Log of End wird bis zu etwa 33. Sie können sehen, dass es genau dort ist, jetzt, wenn wir eine weitere Decca Einheit nach rechts nach oben bewegen, sagen
wir, unsere Nummer ist 100 gut in. Es geht bis zu 100 in Quadrat geht bis zu 10.000 das ist, wenn Sie 100 von diesen und stapeln sie übereinander. So groß wird die Zahl. Da oben ist es. Das ist also einer von ihnen und du musst noch 100 davon setzen. Also würde das durch meine Decke gehen und dann oben in den Himmel gehen, wie wahrscheinlich zwei oder drei Geschichten, nur im Vergleich zu den 100 hier drüben, was
genau hier ist was . Du könntest sogar in 1000 groß sein. Und was wir haben, ist anstelle der 1000 hier, was uns so gibt, wenn wir das im Laufe der Zeit skalieren, wäre
es wahrscheinlich irgendwo so groß hier oben. Das ist eine Million, was ist, wenn Sie 1000 davon nehmen und sie übereinander stapeln und weiter
in den Himmel gehen . Das ist also wie ein 25-stöckiges Gebäude. Also im Vergleich zu mögen vielleicht wie hier drüben, im Vergleich zu einer 25-stöckigen Rate über, wie hier, vielleicht ein bisschen weiter in diese Richtung, im Vergleich zu einem 25-stöckigen Gebäude. Das ist der Unterschied. Und diese Zahl geht hoch und hoch und hoch, besonders wenn Sie eine wirklich große Zahl bekommen, wie eine 1.000.000, denn dann wird dieser eine 1.000.000 sein, dann wird dieser irgendwo sein , wie ein paar von einem Billionen oder vielleicht 100 Billionen irgendwo in dieser Gegend. Und dann, was Sie hier haben, ist, dass Sie eine Art andere Nummer haben, und Sie bemerken, dass diese beiden aussehen, als wären sie sehr, sehr ähnlich. Aber wenn du anfängst, in wirklich große Zahlen aufzustehen, beginnt
der Unterschied dort wirklich herauskommen. Sie werden hier also sehen, dass 10.000 gegen 664 und dann eine Million gegenüber 9909 165. Es gibt einen sehr, sehr großen Unterschied. Und das ist alles, was wir mit N zu tun versuchen ist, was wir tun, ist, dass wir Gleichungen suchen, die versuchen zu wissen, wie und geht in die Unendlichkeit . Welche Gleichung ist besser? Und wenn wir eine Gleichung haben, die in quadratischen Versen ist, eine Gleichung, die in ist, verstehen
wir, dass diese wesentlich besser,
effizienter als diese sein wird , und so wollte ich einfach hinübergehen, wenn Sie verstand nicht, welches Protokoll wirklich schnell war. Welches Protokoll ist Und das ist zum Beispiel, wir haben einen exponentiellen Graphen. Das hier ist wie im Quadrat. Also fängt es von Null an. Und dann im Laufe der Zeit steigt
die Rate der Veränderung mawr und mawr und mehr, bis es fast eine gerade Linie ist. Das hier ist also im Quadrat. Was ein Gesetzdiagramm ist, ist, dass es genau das Gegenteil davon ist. Also kommt es wirklich schnell, und dann geht es vorbei und es wird fast eine gerade Linie im Laufe der Zeit. Und, weißt
du, wir haben unsere Äxte hier. Dasselbe für hier drüben. Wir haben einige Achsen, aber im Grunde liegt der Grund dafür darin, dass log die Umkehrung eines Exponentials ist. Also im Laufe der Zeit, wo dies die Rate der Veränderung. Also diese Steigung davon a k, wie viel es von hier nach hier geht, um zu hören,
dass dies größer und größer wird und größer bis, bis es fast direkt in die Luft geht während dieser hier drüben immer kleiner und kleiner wird Zeit. Das heißt, wenn wir das auf 1.000.000 setzen, ,
wenn jedes Mal,
wennes eins steigt, könnte diese Zahl um 1.000.000 oder eine
Billionen wachsen . Nun, in diesem Fall, wenn wir wirklich,
wirklich große Zahl bekommen , werden
wir vielleicht von 8.1 zu 8.0 05 Wissen Sie, so
etwas wie das, wo die Änderung extrem winzig sein ,
und so funktioniert log es. Betrachten Sie es nur als Umkehrung einer Exponentialfunktion und Sie werden feststellen, dass es tatsächlich eine nette kleine Art von Sache gibt, die aus kommt. Verständnis ist, wenn wir hier zurück zum Diagramm gehen, können
Sie feststellen, dass wir ein Protokoll des Endes und in konstanter Zeit haben, und weil dieser im Laufe der Zeit fast zu einer geraden Linie wird, wo wir uns nur bewegen, wissen
Sie, vielleicht 10,1 Dezimalzahl. Jeder über Login und Konstante Timer tatsächlich behandelt eine in der gleichen, weil wie ich dort sagte, ihre Rate der Änderung verlangsamt sich, wo diese Winkel nicht wirklich alles sehr ändern. Wo im Gegenteil passiert mit in Quadrat, wie wir immer weiter und weiter und weiter, der Winkel beginnt sich zu einem Punkt zu ändern, wo es fast eine 90-Grad-Änderung ist, weil es gerade in der Luft geht. Also wollte ich nur erklären, dass, wenn Sie nicht verstehen, was ein Protokoll bedeutet, es das Gegenteil eines Exponentials ist. Und wenn wir in die Unendlichkeit gehen, müssen
wir an einen anderen eine andere Idee denken. Und das ist die Tatsache, dass, wenn Sie es bemerken und dass wir nicht darüber gesprochen haben, was ist der Unterschied zwischen zwei in Versen in? Und das ist, weil die Konstante die Zahl vorne spielt keine Rolle. Warum spielt es keine Rolle? Werfen wir einen Blick hier rauf. Also, was wir haben, ist, dass wir in Quadrat haben und wir müssen in Quadrat. Und wenn Sie immer größer und größer werden, beginnt
der Unterschied zwischen diesen beiden zu schwingen, wo die Zahl die Änderung darin nicht so signifikant ist wie früher. Und diese ganze Art von Teoh-Fraktionen und, du weißt schon, eine Art von Zahlen wie diese. Aber was wir versuchen, genau hier zu betrachten, ist, dass wir mit Dingen verglichen, die nicht versucht haben zu vergleichen, ist ein Ende Quadrat negativ und in Quadrat. Besser, weil wir wissen, dass beide von ihnen von Natur aus wahrscheinlich ziemlich schlecht sind. Wir versuchen zu vergleichen, ist das in Quadrat besser gegen ein Ende. In dieser Situation werden Sie feststellen, dass, egal welche Nummer wir hier vor uns herausgeben, es wird immer noch wesentlich größer sein als diese Zahl hier. Und so spielt es keine Rolle, welche Konstante wir vor uns haben Wenn es ins Unendliche geht, spielt
die Konstante keine Rolle, und wir schauen nur auf die Variable
selbst, auch wenn ich weiß, dass das ein wenig verwirrend ist. Selbst wenn wir eine 1.000.000 Vers im Quadrat haben, im Quadrat, wird
es immer noch das schlimmste Szenario sein. Und wie ich schon sagte, das ist zunächst ein bisschen verwirrend, nur um den Kopf wirklich zu wickeln. Aber es kommt alles auf die Unendlichkeit an, und die Unendlichkeit ist eine Zahl, die man nie erreichen kann, weil sie groß ist, wenn wir
in die Unendlichkeit gehen. Sobald wir in der Nähe der Unendlichkeit aufstehen, wird
die Konstante nichts bedeuten, denn diese Zahl wird immer noch mehr als 1.000.000
mal in sie übertreffen wird immer noch eine Billionen mal in irgendeinem Punkt übertreffen. Also musst du hier wirklich theoretisch denken, aber alles läuft auf diese einfache Regel hinaus. Wenn du es weißt, wenn du dich nicht mit der Theorie befassen kannst, denke
einfach an diese zivile Herrschaft. Wenn eine Nummer vorne ist, ignorieren Sie sie. Es spielt in unseren Vergleichen keine Rolle. Also, jetzt lasst uns ein Beispiel hier machen. Lass uns etwas Spaß haben. Und lassen Sie uns ein Beispiel erstellen, in dem wir das tatsächlich in einer realen Welt sehen
können . Also, wenn jeder Zyklus eines Programms 0,1 Sekunden dauert Also in dieser Situation, was wir uns ansehen, ist unser jeder Zyklus eines Programms so sind in ist, dass Sie wissen, wenn wir diese Box in dieser Situation sind die Zyklen und Seite oder irgendeine Art von Sache in dieser Kiste, das ist unser in. Jeder Zyklus eines Programms dauert also 0,1 Sekunden. Wie viel schneller läuft das Programm, das im Log in ausgeführt wird, als ein Programm, das im Quadrat läuft? Wenn 1000 Datenstücke durch kommen und so ist dies wirklich, wo es kommt, wo Sie
wirklich den Unterschied sehen können . Also lasst uns das einfach durchlaufen. Wir haben 1000 Daten, die durch kommen. Dies ist N Login, was gleich wir ersetzen unsere Enden mit dem, was sind in gegeben Rate hier. Es sind also 1000 Datenstücke, die 1000 Sockenzyklen benötigen. Also in dieser Situation ist
unser in gleich 1000. Also, jetzt können wir die Mathematik dahinter machen. Wir sagen, dass es 1000 mal Log von 1000 dauern wird und das wird uns 3000 mal
30000.1 geben , was uns wiederum 30 Sekunden gibt. Nun, vergleichen
wir das mit in Squared, das 1000 zur Sekunde sein wird, gleich einer Million mal 0,1 Sekunden, weil jeder Taktzyklus 0,1 2. Also das ist, was wir am Ende dort multiplizieren. Und was wir bekommen, sind zwei Stunden und 46 Minuten. Also, weil dieses Programm es im Quadrat statt in ausführt, melden Sie sich an. Und gehen wir zurück zu unserem Diagramm hier und werfen einen Blick. Denk daran, diese beiden sahen ziemlich nahe beieinander aus, aber sie sind es nicht. Also gehen wir zurück zu unserem Diagramm unser Beispiel hier, weil es in Quadrat lief. Es wird zwei Stunden und 46 Minuten dauern, oder zwei Stunden, 45 Minuten länger als dieser hier. Und lassen Sie uns das auf eine noch größere Zahl bringen. Nehmen wir an, es hat im Logbuch von in also 25.000 US dort in gleich 25.000 genau hier. Also in gleich 25.000. Jetzt wirst du wirklich anfangen, den Unterschied zu sehen. Also in dieser Situation in Logan entspricht 25.000 mal Log von 25.000, was
irgendwo um 109.948 mal 0.1 Adler wird also gleich um 18 Minuten und 32 Sekunden. Aber werfen wir einen Blick auf das Ende der quadrierten. Also diese Liste, weißt
du, sie sieht lang aus und sieht länger als 30 Sekunden weg. Wir stellen auch fest, dass es viel weniger als 24.000 weniger Daten 300,7 Quadratmetern ist. Wenn wir zu Ende Quadrat gehen, ist
es 25.000 Quadrat, die Eagles 625 Millionen mal 0,1 die Adler sechs Millionen, 250.000 Sekunden, das sind 72 Tage. So können Sie sehen, dass diese Zahl beginnt wirklich hier zu starten. Und wir sind nur bei 25.000 Daten. Es gibt wie viele Leute auf Facebook gerade jetzt, und ihre Daten dort sind Algorithmen wahrscheinlich mit wie vielen Menschen auf
Facebook laufen müssen. Stellen Sie sich also vor, wenn Sie versuchen, die eine war, dass ich denke, vielleicht eine Milliarde Leute da gerade jetzt durch dieses Programm würde es dauern, dass dies in die Milliarden von
Jahren gehen würde, die es nie beenden würde. Und so kann man hier irgendwie den Unterschied der Enden sehen. Und so im Grunde, all dies versucht nur, auf ein paar wichtige Fakten zu kochen. Das Ende ist nur vier Vergleiche. Also, das ist unsere erste Tatsache ist, ist nur zwei Programme zu vergleichen. Es ist, die Laufzeit von zwei Programmen zu überprüfen. Es ist nicht für den praktischen Gebrauch,
was bedeutet, dass wir nicht im Algorithmus auf einem,wissen
Sie,
einem Programm laufen wissen
Sie, und sehen,
ob es Dinge innerhalb von 20 Sekunden oder irgendetwas wie das. Wir können das nicht im Inneren tun. Und der Grund dafür ist in ist nur ein Standard ist eine Möglichkeit, dass wir ein Programm betrachten können unabhängig davon, ob der Computer schnell oder langsam ist, wo die Internetverbindung schneller ist, langsam Wir können es mit einem anderen Programm vergleichen, wie in squared oder in Log in, und wir könnten anfangen zu verstehen, welche Algorithmen die besten sind und welche nicht richtig
skalieren würden . Wir müssen auch verstehen, dass es nicht schlecht ist, größere Zahlen zu haben. Manchmal ist es unvermeidlich. Also denken Sie nicht nur, dass Sie wissen, die Idee einer Informatik ist nie wieder im Quadrat zu finden. Es sollte nicht für praktische Zwecke verwendet werden, die wir versuchen,
theoretisch verschiedene Probleme zu lösen. Und so zum Beispiel können
zum Beispiel
alle Vergleichsschwerter nicht besser als beim Einloggen. Also gehen wir zurück zu diesem Diagramm, genau hier. Sie werden sehen, dass alle Vergleichsarten in diese Zeile fallen, also sind sie irgendwo auf dieser Seite. Sie sind nicht im Rest dieser einfacher, Schnellere Diagramm- und Vergleichssorten sind, wie Sie
möchten, eine Reihe von Zahlen
sortieren, so dass selbst wie im täglichen Gebrauch, Art von Algorithmen immer noch in Login fallen. Auch
Vielfache fallen weg, während sie vergleichen, so verstehen Sie zurück in dieser Lektion, dass Multiples keine Rolle spielen und dann exponentiell ist kann wirklich,
wirklich gefährlich im Laufe der Zeit sein. Und unser Gehirn hat nicht wirklich die Fähigkeit, die Unterschiede zu verstehen. Und es zeigt Ihnen nur irgendwie in diesem, wo wir nicht denken würden, dass dies 72
Tage Vers 18 Minuten sein würden . Nur weil wir von dieser Grafik zu diesem Diagramm übergegangen sind, aber exponentielle Überstunden sind wirklich, wirklich, wirklich stark.
7. 1-6 große O-Notation: So haben wir jetzt ein gutes Verständnis von in und wie genau es funktioniert, und es verbindet sich mit unserer Analyse von Algorithmen. Wir können damit anfangen, etwas hinzuzufügen. Also wissen wir, dass in ist eine Art zu klassifizieren, wie schnell in äußeren sie läuft, angesichts einer bestimmten Anzahl in Wie lange wird es in Bezug auf diese Zahl dauern? Also wird es gerade rechtzeitig dauern? Also, wenn es so war, 1000 wird gleich 1000 sein oder wird es etwas wie in quadratischen Zeiten nehmen, wo wenn es 1000 ist, es gleich ist? Um, eine Million, und das ist eine wirklich wichtige Art von Klassifikationen. jedoch Programme sindjedochnicht so einfach. Sie rennen nicht immer zu einer exakten Zeit. Viele Male haben sie zuhauf. Also, zum Beispiel, würden Sie
vielleicht nicht laden. Es wird laufen und im Quadrat, aber es führt ein Ende aus,
und darin, Sie wissen, dass es exportiert in Login und so müssen wir in der Lage sein, dies zu betrachten, und wir müssen auf das Programm schauen und eine Klassifizierung auf dem Programm geben als Ganzes. So, zum Beispiel, dieses Programm, würden
wir immer auf den schlimmsten Fall schauen wird immer Fuß. Im schlimmsten Fall nehmen Sie in Quadrat, aber bei bestimmten Schritten wird schneller laufen. Und deshalb haben
wir tatsächlich dieses System hier, das
die Grenzen unserer Schreibweise klassifiziert haben
wir tatsächlich dieses System hier,
das
die Grenzen unserer Schreibweise klassifiziert. Also lasst uns das einfach mal runtergehen und uns das ansehen. Diese hier oben heißen Omicron. Sie sind in der Mitte verblasst und dann Omega, und das ist Kleinbuchstaben von Mega hier unten und so können Sie sehen, dass es sich um ein griechisches Alphabet handelt. Aber wir sind oft in Matthews Griechisch, weil Alphabet verwirrend wird. So verwenden wir griechische Zehe, irgendwie symbolisch repräsentieren Dinge, und in diesem Fall repräsentiert
jedes dieser griechischen Symbole symbolisch zuhauf. Also, was Sie hier haben, ist, lasst uns
zum Beispiel zeichnen , eine Bindung direkt in der Mitte hier und hier oben ist schneller, also werden wir sagen, hier oben wird schneller sein und unten wird langsamer sein. Unsere erste Notation ist also wenig. Oh, und Sie können sehen, dass wir einfach nicht gerne Omicron sagen, wie große Omicron-Notation, die nur viel
braucht. Also sagen wir einfach wenig Oh, Big oh, und so wenig Oh, genau hier. Es bedeutet nur, dass es schneller ist, was bedeutet, dass das Programm immer schneller ist als diese gebunden. Also, zum Beispiel, wenn unser Baron hier im Quadrat wäre, wenn wir wenig,
oh,
von hier im Quadrat hätten oh, , würden
wir sehen, dass es bedeutet, dass es nie anfassen und quadrieren wird. Es wird eigentlich immer schneller sein als im Quadrat, also wird es immer direkt über dieser Linie sein, aber schneller als im Quadrat. Und was wir tun können, ist, dass wir das tatsächlich nutzen können, um die Sprungkraft herauszufinden. Also der nächste, den wir haben, ist, dass wir große Oh haben, und Big O bedeutet, dass es schneller sein wird, Ihr Gleiches zu. Das bedeutet, dass es diese Linie berühren oder schneller sein wird, also wird es im schlimmsten Fall sein, und das ist etwas, das hier sehr wichtig ist. Das bedeutet, im schlimmsten Fall, dass
es im Quadrat sein wird. Die nächste, die wir haben, sind Daten, was bedeutet, dass sie keiner dieser beiden berühren wird. Es wird nicht zu niedrig gehen. Es wird nicht hoch gehen. Was los wird, ist genau auf dieser Linie. Egal, was es im Quadrat sein wird, es wird irgendwo entlang dieser Linie sein. Und dann ist der nächste unten, den wir haben, langsamer oder gleich, so haben wir. Dieser ist Omega, und dieser ist langsamer gleich, so dass er diese Linie berührt und es ist immer langsamer. Also, wissen
Sie, wir sind wie in den dritten in den vierten hier unten, hier
oben haben wir vielleicht gerne drinnen. Es ist also immer langsamer als das, oder gleich n quadriert. Also bestenfalls, also dieser hier ist bestenfalls, es wird darauf laufen, wenn Sie das setzen. Also, zum Beispiel, wenn wir rechts von n Quadrat, wie so schneiden Sie ein wenig rechts dort, aber von in Squared wie so, dann verstehen wir, dass dieses Programm immer laufen wird, oder am besten wird es laufen ist in Quadrat, was bedeutet, dass es schlimmer als das laufen kann, und dann unter, dass wir langsamer als das bedeutet, es wird immer schlechter als in
Quadraten laufen . Wenig nie berühren und quadriert, aber es wird schlimmer laufen als in Quadrat Und warum ist das wichtig? Warum wollen wir uns auf diese von all diesen konzentrieren? Und das liegt daran, dass Big O das Worst-Case-Szenario diktiert und wir uns mit dem
Worst-Case-Szenario befassen , denn angesichts der Wahrscheinlichkeit und der Statistiken könnte
das Programm das Worst-Case-Szenario an einem Punkt berühren und wir wollen wissen, ohne Zweifel, was ist das schlimmste Szenario? Deshalb benutzen wir das große Oh, es ist am schlimmsten zu sehen. Was wird es sein? Und du siehst, dass ich die Karte wieder aufklären werde. Wenn wir diese Idee haben, wenn wir die Fähigkeit haben zu sagen, Was wird unser Programm sein? Wir können tatsächlich anfangen, dieses Ende zu füllen. Also, wenn wir zum Beispiel, ähm, vielleicht große o von in haben. Wir verstehen, dass
es im schlimmsten Fall drin sein wird, damit es in sein könnte. Aber es könnte auch alles Größeres sein als in. So können wir alle unsere Zeitdiagramme und Skizzen und so etwas vorbereiten, indem wir davon ausgehen, dass es nie auf dieser Seite der Linie gehen wird. Es wird immer auf dieser Seite gehen, und das ist wirklich mächtig, denn jetzt können wir anfangen, Programme zu vergleichen, schlimmste Fälle, und wir können anfangen zu sehen, dass sein kann, wenn ein Programm skaliert die zum Beispiel, Wenn wir ein in Login Programm gegen ein In-Programm, konnten
wir sehen, dass, wenn dieses skaliert wird, es schlimmer sein wird als dieses. Also lasst uns irgendwie einfach, äh, lasst uns das ein bisschen zusammenbrechen und wir können irgendwie sehen, warum einige davon bedeutungslos sind . Also haben wir ein Programm, das das kleine Oh in Quadrat läuft, was bedeutet, dass es schneller ist als im Quadrat. Das bedeutet also, dass es überall sein könnte, von im Quadrat bis im Grunde, wie wir nur schneller als es. Es wird also nicht im Quadrat sein, aber es könnte alles schneller sein als im Quadrat. Und das hier ist es irgendwie wie groß Oh, aber die Sache ist, wir nicht das Ding, das wir bekommen, also ist es ein bisschen Ach von drin. Wir können das nicht anfassen, also macht es es nur ein bisschen verwirrend. Es gibt uns eine Bindung, aber es macht es nicht leicht. für uns zu sehen. Wir können uns das nicht sofort ansehen und gehen, Oh, das wird rechtzeitig laufen. Wir können es sehen. Wir müssen uns das ansehen und so sein, Oh, es wird schneller laufen als Ende. Aber wir wissen nicht wirklich, wo, und es gibt uns nicht wirklich viel Wackelraum. Und dann haben wir unsere große O-Notation und das ist, was wir gerade übergegangen sind,
ist, dass wir uns
das ansehen können und wir werden soaussehen ,
ist, dass wir uns
das ansehen können und wir werden so , im schlimmsten Fall, es wird in Fada lange laufen, wäre großartig, wenn wir immer Daten verwenden könnten. Was ist das? Dies ist entweder gleich oder manchmal wird als Durchschnitt verwendet, aber die meiste Zeit bedeutet es gleich Ende, Also wäre dies großartig. Aber das Problem ist, dass
Programme nicht immer genau entlang der Linie laufen. Manchmal laufen sie vielleicht, weißt
du, vielleicht läuft es an einem Teil ein Ende. Aber an einem Punkt läuft es rein, loggen Sie sich ein und es geht irgendwo dazwischen. Diese Daten sind einfach zu spezifisch für uns, immer noch wirklich mögen. Und dann sind diese ziemlich bedeutungslos, weil sie uns nicht viele Informationen geben . Denken Sie darüber nach, dieser hier, das ist Omega So Omega im Quadrat. Das bedeutet, dass es langsamer oder gleich dem Omega-Quadrat sein wird, was so ist, als würden Sie sagen, unser Programm wird es entweder im Quadrat laufen oder es wird langsamer sein. Wie sollen wir damit planen? Weil langsamer in die Unendlichkeit gehen könnte. Es könnte so langsam wie möglich sein, und wir würden uns nie darauf vorbereiten können, weil wir nie zuhauf gewesen wären. Es wäre wie, Okay, also wird es einfach laufen, wie schnell es in Quadrat dauern könnte. Es könnte faktoriell dauern. Es könnte das Ende der Unendlichkeit nehmen. Es hilft uns nicht, das Programm zu analysieren, weil es eine unendliche Seite gibt. Und genau die gleiche Idee mit dem , kleinen Omega hier drüben ist auch,dass es auf der schlechten Seite ins Unendliche geht, was uns nicht hilft. Also diese helfen uns, weil die schlechte Seite ist, lassen Sie mich etwas von dem hier löschen und ein
bisschen mehr Platz machen . Also diese helfen uns, weil die schlechte Seite. Also lassen Sie uns sagen, dass hier drüben bis zur Unendlichkeit ist. Es gibt uns eine Bindung, so dass alles, was es im schlimmsten Fall hier sein wird. Aber es könnte besser sein und es ist uns egal, wenn es zurückkommt und es so konstant läuft, das ist in Ordnung. Das ist vollkommen in Ordnung. Das bedeutet unsere Programme auf einem tollen Hemd, aber wir können das planen. Es bedeutet nur,
dass unsere Programme , schneller
ausgeführt werden,als wir erwartet haben. Also, was wir dann tun könnten, ist nur für das schlimmste Szenario zu planen. jedoch Wenn Siejedochauf der anderen Seite dieser Linie gehen, können
Sie nicht für die Unendlichkeit planen. Deshalb ist Big Oh so wichtig, dass es die nützlichste aus all diesen Notationen . Es gibt uns ein Worst-Case-Szenario, und so ist es ein Beispiel dafür, wie wir dies auf ein bestimmtes Problem anwenden können. Normalerweise ist das, was Sie immer tun, dass Sie das schlimmste Szenario verwenden, was
bedeutet, dass an welchem Punkt im Programm nicht der ineffizienteste ist. Also hier, zum Beispiel, lassen Sie uns sagen, dass wir große o in Quadrat hatten. Wir hatten ein großes, äh in Log in großen O von in, und dann großes O von konstanter Zeit, und so sind diese hier unten großartig. Aber die Sache
ist, dass, egal was passiert, wir werden immer von diesem Kerl hier Engpässe bekommen. Und das liegt daran, dass unsere Ladezeitrate hier oben in Quadrat ist, was bedeutet, dass dieses Programm es im Quadrat plus in Log in plus O zwei ausführen wird, das erste, was es irgendwie konstant macht. Hier gehen wir plus eins. Und du denkst vielleicht, warum mache ich das? Und das liegt daran, dass Sie tatsächlich jeden Teil der Schritte zusammen hinzufügen können. Also, weil du diesen Teil machst, dann machst du diesen Teil. Dann machen Sie diesen Teil, dann tun Sie diesen Teil, so dass Sie tatsächlich alle zusammen hinzufügen können. Denken Sie daran, was wir im Voraus tun, wenn wir darüber reden, wie wir versuchen, ein Programm zu
betrachten , wie es geht in die Unendlichkeit. Also, wenn wir uns diese Zahl ansehen, welche von ihnen wird die anderen übertreffen, wenn wir in die Unendlichkeit gehen? Nun, zum Beispiel, lassen Sie es uns auf 1.000.000 setzen. Wie bedeutsam ist eine Million, was in der rechten ist, wird eine Vers eine Million sein, die Vers sein wird. Vielleicht irgendwo etwa drei Millionen Vers ein Viertellion oder vielleicht eine Billion 60 sitzt eins und 12 Nullen. Dieser wird wesentlich größer sein. Diese werden ein kleiner und kleiner Teil der Zahl sein, da sie bis zur Unendlichkeit
hinauf bis zu dem Punkt geht , wo diese als Bedeutung nahe Null gehen. Also wirst du anfangen,
eine Google-Nummer zu haben ,
die 100 Nullen plus vielleicht acht Millionen hier drüben ist,so
etwas wie das. , die 100 Nullen plus vielleicht acht Millionen hier drüben ist , Und das bedeutet, dass dieser Teil hier drüben an dieser Stelle völlig unbedeutend ist. Also, was wir tun, ist, dass wir die niedrigeren beseitigen, und die Laufzeit dieses Programms ist in Quadrat. Und so lassen Sie uns einfach eine Art Zement, dass mit einem anderen Beispiel hier, sagen wir, dass wir Big O. Also hatten wir ein großes O von in quadrierten großen O von In Squared Big O von Petroleos hier Vigo von In Squared wieder. Und mal sehen, jetzt haben wir große O von Ende des dritten. Und jetzt, was wir hier haben, ist, dass wir n Quadrat plus in Quadrat plus in Quadrat plus in die dritte, und so können wir tatsächlich kombinieren diese bis zu drei und Quadrat plus in die dritte. Und jetzt erinnere dich daran, worüber wir in der letzten Vorlesung über die In-Notation gesprochen haben. Die spielen keine Rolle. Die Konstante hier spielt keine Rolle. Denn wenn wir in die Unendlichkeit gehen, wird
dies immer weniger bedeutsam. Bis wir eine ausreichend hohe Zahl erreicht haben, wird
sie im Grunde Null, so dass wir diese überqueren können. Und so haben wir jetzt im Quadrat Plus in die dritte. Und dann, natürlich, wird
dieses eine weit höher als das andere Eine wunde Programm landet nur in der dritten. Und jetzt, da diese alle groß sind, oh, Notationen, die wir im schlimmsten Fall kennen, wird
unser Programm es in Dritte laufen, was wir jetzt sind. Wir haben diese Bindung in der dritten und die Unendlichkeit der Laufzeit geht auf diese Weise ab, und jetzt können wir das im schlimmsten Fall planen, das wir in den Dritten haben werden. Und wir können alles bis zur konstanten Zeit planen, denn jetzt ist alles, was wir haben, einfach hier gebunden. Wir verstehen, dass , wissen
Sie, wenn wir 1.000.000 Daten eintragen, das vielleicht nicht funktioniert. Vielleicht können wir versuchen, das zu bringen, aber es gibt uns irgendwo, wo wir anfangen können. Es gibt uns irgendwo, um es mit anderen zu vergleichen. Das ist also eine große O-Notation. Sehr wichtig. Und im Laufe der Zeit wirst du anfangen. Grundsätzlich wird
dies zur zweiten Natur werden. Nur in der Lage sein, sich das anzusehen. Du wirst diese anderen nicht wirklich sehen. Zu oft. Du wirst das hier sehen. Manchmal. Wenn es sagt, dass ein bestimmter Punkt eines Programms gleich dieser Laufzeit ist, dann sehen Sie diesen. Aber abgesehen von dieser These werden
Sie wahrscheinlich nie sehen, und Sie werden wahrscheinlich nie den kleinen Omar Khan sehen. Diese Notationen hier haben sie einfach auswendig gelernt,
verstehen, was sie bedeuten, und Sie sollten gut gehen. Sie werden anfangen, eine Menge mehr von Art von Informatik-Dokumenten zu verstehen.
8. 1-7 Big-O: Ist es nicht. Wir haben eine Menge Theorie gelernt. Gehen wir weiter und machen einen Rückschlag und gehen Sie über eine echte Code-Analyse. Ich werde keinen komplexen Code verwenden, den Sie hier kennen müssen. Es ist alles Pseudocode, und ich werde es erklären. Jeder Schritt des Weges ist, wenn Sie noch nie Code berührt haben, denn das ist irgendwie, wie ich erklären
möchte. Diese ganze Art
ist
natürlich, natürlich, dass wir uns die Theorie hinter allem ansehen. Nicht der Code, aber Anwendung auf etwas Riel-Welt kann helfen, wissen
Sie, irgendwie herauszufinden, einige der Konzepte, und das ist der Grund, warum wir es tun. Schauen wir uns einfach unseren ersten Code an. Ich gehe weiter und gehe hier durch. Also, was wir haben, ist, dass es sagt, dass ich es in Pseudo geschrieben habe. Diese Art liest einfach direkt von der Zunge,
etwas, was man sehen und verstehen kann, was los ist. So heißt es für jede Daten in der Datenliste, so dass wir eine Datenliste hier in einem zweiten Druck erstellen. Daten auf dem Bildschirm OK ist genug. Nehmen wir an, wir geben hier ein Stück Daten eine Liste ein, die vielleicht drei bis 10 ist und dann einfach Büffel gehen
würde. Das sind also drei ganze Zahlen und eine Zeichenfolge. So wäre es technisch eingestuft. Aber das werden wir uns nicht mal ansehen. Dies sind vier Datenstücke. Und was wir sagen, ist, dass für jede Daten, also für jede einzelne Daten in unserer Liste, wir, ähm, die Daten auf den Bildschirm
drucken. Also, in unserer Situation hier, was ist in? Nun, in dieser Situation genau hier in gleich, die 1234, weil wir vier Daten haben. Also in dieser Situation in gleich vier Also lassen Sie uns jetzt sehen, was die Laufzeit davon wäre. Also haben wir für jedes Stück Daten und dann haben wir auf den Bildschirm gedruckt. Also Okay, lass uns die Liste runtergehen. Hier. Gehen wir dorthin. Erstes Stück Daten. Unsere ersten Daten sind also drei. Wir holen drei von unserer Dokumentenrate hier, also ist das Zahl Null. Ein Array, oder, wenn Sie darüber nachdenken möchten, ist 1234 Computer gehen normalerweise mit 0123 es genau so, wie sie arbeiten. Also holen wir uns unser erstes Stück Daten hier und dann werden wir auf den
Bildschirm drucken . Also greifen wir unsere drei, die wir auf den Bildschirm gedruckt haben. Das ist also eine Laufzeit. So sind Laufzeit gerade jetzt ist eins. Und dann holen wir uns das zu, weil wir die Liste runter gehen. Also haben
wir für jedes Stück Daten dieses angefasst. Also, jetzt gehen wir zu diesem. Also jetzt greifen wir zwei und wir drucken auf den Bildschirm. Jetzt sieht unser Bildschirm so aus. Und so ist das eine zusätzliche Laufzeit genau dort. Das ist eine Laufzeit. Und dann drucken wir jetzt unser nächstes Stück Daten, das ist 10. Also jetzt haben wir 32 10. Das ist eine zusätzliche Laufzeit genau dort. Und dann drucken wir jetzt Büffel, das wäre 3 bis 10 Büffel. Und das ist eine zusätzliche Laufzeit, denn alles, was wir tun, ist, dass wir uns
die Daten schnappen und sie drucken. Es gibt hier keinen speziellen Denkprozess, der nur schnappen,
drucken, greifen , drucken, packen, drucken, packen, drucken. Und wenn wir das alles addieren, werden
wir sehen, dass es zu eins plus eins plus eins plus eins kommt, was vier entspricht und so ist die Laufzeit in dieser Situation vier und Sie werden sehen, dass unsere Laufzeit gleich der Menge des Endes hier ist. Und wenn wir theoretisch für eine Sekunde darüber nachdenken können, wenn wir 1.000.000 Daten hier
drin hätten, gäbe es kein, an keinem Punkt das Programm, in dem wir jemals mehr als 1.000.000 Daten berühren müssten . Egal, was wir hier tun, ist die Laufzeit wird sein, was auch immer unser Ende ist, was bedeutet, was wir hier haben, ist eine Laufzeit von in dieser speziellen Situation, wir könnten Fada tatsächlich wie in verwenden, weil es tatsächlich gleich zu Ende ist. Es gibt hier keine Art von Wackelraum,
aber wir werden voran gehen und sagen, dass es schlimmer wird,
da es die Notation ist, die wir gerne verwenden. Wackelraum, aber wir werden voran gehen und sagen, dass es schlimmer wird, Dies ist also ein Beispiel für eine, in der dies eine for-Schleife genannt wird. So sind vier Schleifen
in der Regel, zum Beispiel, Ofen Ende in einer Situation. Gehen wir zu einem etwas komplexeren Problem hier. Also lassen Sie mich diese auch aufschlüsseln Was wir hier haben, ist, dass es für jede Daten in
einer Datenliste sagt . Das bedeutet also, anstatt es Dad zu nennen und da draußen, wird
jedes Stück Daten in einer Liste überprüft werden, ob die Daten in der Liste sind. Also gehen wir dann für jede Daten W in den Datenlisten. Wenn n gleich w Druck ist. Wahr. Also lasst uns weitermachen und das hier auch ein bisschen zerbrechen. Lassen Sie uns mit unserem gleichen Beispiel von vorher gehen, das war drei Komma, zwei Komma, 10 Komma Büffel wie so. Und in dieser Situation ist
unser in immer noch gleich vier. Und jetzt werden wir uns das erste Problem ansehen,
also schauen wir uns jetzt an. Nehmen wir an, wir greifen jeden dieser Daten zu, also greifen wir die drei und das ist jetzt drin. Und dann jetzt, für jedes Stück von Daten in dieser Datenliste und Sie können sehen, diese Namen sind genau die gleichen. Das bedeutet also, dass dies die Datenliste ist. Wir suchen nach beiden, also haben wir unsere drei Möglichkeiten, unsere drei zu packen. Und jetzt versuchen wir zu überprüfen, ob diese drei hier drüben irgendetwas hier oben äquivalent sind, und der einzige Weg, wie wir das tun können, ist, unzitierte Brute-Force zu zitieren. Also werden wir diese drei nehmen. Wir werden es mit der 1. 1 überprüfen. Wir werden es mit der 2. 1 überprüfen. Wir überprüfen es mit der 3. 1. Wir werden es mit der 4. 1 überprüfen, also wird das 1234 Operationen sein . Also zuerst, lasst uns das hier unten
wirklich weit brechen lasst uns das hier unten
wirklich weit brechen. Wir haben unsere drei. Wir haben unsere drei geschnappt, und jetzt überprüfen wir es. Ist es gleich? Lassen Sie mich das etwas kleiner machen, wird ein bisschen größer als ein Graph sein. Also sagen wir, drei gleich dem ersten Teil unserer Daten, was wieder die drei sein wird? Weil wir ihm nicht gesagt haben, dass er mit einer Nummer anfangen soll, die es nicht ist, oder irgendwelchen so ausgefallenen Dingen . Wir überprüfen diese Liste nur ein zweites Mal. Also haben wir unsere drei und wir überprüfen. Ist nicht gleich der 1. 1 Also ist es gleich drei. Ja, das tut
es. Dies wird also eine wahre Nachricht ausdrucken, und dies dauerte eine Operation. Jetzt tut es das. Sind drei gleich nicht. Also drucken wir nichts aus. Das ist eine Operation. Sind unsere drei gleich 10? Tut es nicht. Das ist also eine Operation. Sind unsere drei gleich Büffel? Tut es nicht. Das ist also eine Operation, und jetzt sind wir mit den Dreiern fertig. Also sind wir weitergezogen. Wir haben uns um die Dreier gekümmert, also lassen Sie uns hier unten eine 2. Sehen wir uns das an. Was? Es wird derjenige sein, den wir genau mit dem gleichen überprüfen. Aber ich möchte das für euch alle ein bisschen visueller machen. Also sind wir mit drei fertig. Lasst uns jetzt zu den Zweien übergehen. Das tut auch zu gleich. Drei. Tut es nicht. Das ist eine Operation tut, um es gleich zu tun. Das ist eine Operation, die gleich 10 ist. Tut es nicht. Das ist, was Operation tut, um Büffel gleich zu machen. Tut es nicht. Das ist eine Operation, und dann gehen wir die Liste runter. Ein mehr tut 10 gleich drei Ist nicht das eine Operation tut 10 gleich tut nicht das ist, was Operation tut. 10. Gleich 10. Das tut es. Das ist, wenn Operation 10 gleich Buffalo ist. Tut es nicht. Das ist eine Operation, die Buffalo macht. Ich werde es nur so abkürzen, dass ich hier bin, also möchte ich weiter schreiben. Büffel. Ist Buffalo gleich drei? Tut es nicht. Das ist also eine Operation. Buffalo gleich es nicht. Das ist also eine Operation. Ist Buffalo gleich? 10? Tut es nicht. Das ist also eine Operation. Ist Buffalo gleich Buffalo? Das tut es. Das ist also eine Operation. Und jetzt, wenn wir all diese hier hinzufügen, was wir sehen werden, ist, dass dies 123456789 10 11 12 13 14 15 16 sein wird. Also in dieser Situation, unsere in war vier, aber sind Laufzeit war ungefähr 16. Und was kommt das heraus? Nun, das kommt heraus, um im Quadrat zu sein. Also sagen wir, wenn wir vier nehmen und wir es quadrieren, wäre
es 16 gleich. Und wir können theoretisch auch darüber nachdenken. Wenn wir dies auf fünf ausdehnen, hätte
jede einzelne hier nicht nur eine zusätzliche Fünf, sondern wir müssen sie multiplizieren, denn jetzt müssen wir auch noch eine weitere überprüfen. Also jede einzelne Instanz, wird fünf haben und eine ganze andere fünf haben, die es so quadriert, dass in dieser Situation Laufzeitumgebung im Quadrat ist. Und der Grund dafür ist, obwohl wir 24 Schleifen haben,
gibt es, was als Verschachtelung bekannt ist. Wir haben 14 Schleife innerhalb einer weiteren vier Schleife verschachtelt. Also dieser Teil hier draußen, lassen Sie uns das zeichnen und lesen Sie diesen Teil hier draußen ist in, während dieser Teil im Inneren ist auch. Also, was wir tun, ist, dass wir das Ende auf der Außenseite nehmen, wir multiplizieren es mit dem Ende, auf der Innenseite, und wir kommen in Quadrat. Und so wird das unsere letzte Laufzeit für diese Situation sein. Also, wie ich sagte, dieser Kurs ist nicht stark auf das Schreiben von Code oder nach außen bezeichnet, und es ist immer noch die Theorie definiert. Aber ich dachte, das könnte Ihnen helfen, worüber wir die
ganze Zeit gesprochen haben . Wie Code tatsächlich analysiert werden könnte, damit wir diese verschiedenen Stücke verstehen können. Und Sie können sehen, dass, egal was passiert, wir haben gerade etwas sehr Wichtiges gelernt. Vier Schleifen werden immer in sein, aber verschachtelte for-Schleifen werden immer sein, wie viele Verschachtelungen es gibt. Also, wenn dieser hier 1/3 1 verschachtelt würde, wäre dies eine in quadratische Formel, und Sie beginnen, in wirklich große Zahlen aufzustehen, um all dieses Zeug zu überprüfen. Also hoffe ich, dass dieses praktische Beispiel Ihnen geholfen hat, dieses Konzept ein wenig
besser zu verstehen .
9. 2-1 Daten gespeichert werden: Beginnen wir also mit einem der nächsten Hauptthemen der Informatik, und das ist die Fähigkeit, Datenstrukturen zu verstehen und zu manipulieren. Datenstrukturen sind die Art, Daten im Grunde zu erfassen, organisieren und Zugriff zu greifen, sie auf bestimmte Weise zu
speichern, die zu unserem Ziel passen. Einige sind also in gewisser Hinsicht schneller als andere. So, zum Beispiel, einige von ihnen werden wir mehr Platz nehmen, während wirklich, wirklich schnellen Zugriff. Einige von ihnen nehmen überhaupt nicht viel Platz in Anspruch, aber es kann eine Weile dauern, um Zugang zu erhalten. Einige von ihnen haben schnellere Einsätze. Einige von ihnen haben ein schnelleres Entfernen von ALS. Es kommt darauf an, was genau Sie in Ihrem Programm oder Theorie erreichen wollen oder was auch immer Art von Abschnitt der Informatik, in die Sie gehen. Also das erste, was wir, bevor wir in diese Datenstrukturen bekommen,
ist, dass wir verstehen müssen, wie genau Daten gespeichert sind, genau Daten gespeichert sind,
denn das wird uns helfen, diese Datenstrukturen zu verstehen und warum man länger als der andere und warum man mehr Platz als der andere einnimmt. Das erste, was wir tun müssen, ist, dass wir es zuerst tun müssen. Wie ich schon sagte, verstehen Sie Daten. Also, was Daten sind, ist Es ist wie, zum Beispiel, es ist etwas eine Art von Nullen und Einsen, die etwas bedeutet. Zum Beispiel Zum Beispiel könnte
eine Drei ein Stück Daten oder ein ganzer Text sein, oder vielleicht könnte ein ganzes Dokument ein Stück Daten sein. Und was passiert in einem Computer ist, dass diese Arten von Daten gespeichert werden,
zum Beispiel, wie eine Festplatte, die in Abschnitt in verschiedene kleine Teile und die Teile des Abschnitts in den noch mehr Teilen Und dann in einem von denen, haben
Sie wie Cluster, die kommen, um so aussehen hier. Also, zum Beispiel, vielleicht stellt dies diese ganze Sache hier dar und was jeder von ihnen repräsentiert, ist ein Stück Daten. Und so wird jeder von ihnen tatsächlich eine Adresse im Speicher haben, wie eine Adresse, wo sich Ihr Zuhause befindet. Wenn Sie ein Paket senden möchten, verwendet
der Computer genau das Gleiche. Zum Beispiel, vielleicht dieses hier. Es verwendet normalerweise Hexi Dezimal, so dass ich verwenden werde Vielleicht ist dieser 00 und so wäre
dieser dann 01 Und dieses Null-Symbol mit wenig X daneben bedeutet normalerweise Hexi Decimal. Das ist es, was ich dafür benutze. Also würde es hier unten ständig weitergehen. Dies wäre 020304 etcetera. Und warum das wichtig ist, ist, weil wir, sobald wir die Adresse haben, tatsächlich die Sache, die in dieser Adresse ist, greifen können. Also, zum Beispiel, wenn wir ein Stück Daten nehmen, sagen wir, wir hatten eine Zeichenfolge oder ein Stück Daten, die drei und vier waren, wie so Und sagen wir, dass drei gespeichert wurden. Null x 00 und vier wurde in Null x 01 gespeichert. Also jetzt, wenn wir diese Daten greifen wollen,
was wir tun können, ist, dass wir eine Tabelle mit diesen Arten von Daten und deren Assoziationen erstellen können. So zum Beispiel kann
zum Beispiel
unsere Tabelle drei sagen. Es ist hier aufbewahrt. Dies wird hier gespeichert, außer es wäre normalerweise die Umkehrung. Wir würden sagen, was bei 00 ist, und es wäre eine Art von Daten. Was ist das? 01? Und es wäre eine Art von Daten. Und jetzt, wenn wir diese Daten tatsächlich abrufen wollen, können
wir entweder die Adresse nachschlagen oder umgekehrt. Wenn wir sehen wollen, was dran ist, können
wir es herausfinden. Also lassen Sie uns sagen, dass wir abrufen wollten. Drei. Wir wollen die drei in unserem Datensatz abrufen. Also drei befindet sich genau hier und vier befinden sich genau hier. Und so wollen wir drei abrufen. Also im Grunde, was unser Programm hinter den Kulissen tut. Viele Male,
es sei denn, Ihr Programm auf einem sehr niedrigen Niveau, was sehr nahe Zeh wie Maschine bedeutet, die Maschine vollständig und vollständig in sich selbst zu
manipulieren, normalerweise Assemblersprachen und solche Sachen. Dann müssen wir
nur sagen,
dass var X gleich drei ist und mit der Maschine sagt:
Okay,
wir assoziieren jetzt X mit der Adresse Null x 00 Also jedes Mal, wenn der Benutzer X verwendet oder ruft X und mit der Maschine sagt:
Okay, Okay, wir assoziieren jetzt X mit der Adresse Null x 00 Also jedes Mal, wenn der Benutzer X verwendet oder ruft X , werden
wir greifen, was jemals bei Null x 00 ist Jetzt kommt der Benutzer hier rein und er
erstellt dann, wissen
Sie, wissen
Sie,eine neue Variable. Warum ist gleich vier, Und jetzt, warum ist Associate ID mit Null x Null Wein. Das ist, was das Programm tut, ist sagen wir, wir hatten das Programm los. Was ist X plus? Warum? Was ist das gleich? Nun, was es tut, ist, dass es OK geht, also X um 00 ist. Lasst uns was jemals packen? Um 00 Uhr und wir gehen, scannt
es auf die Festplatte. Es geht den ganzen Weg und es findet 00 und es geht, Hey, da ist eine Drei hier. Also werden die drei dann aufgerufen, den ganzen Weg zurück in den Prozessor
gebracht, und dann wird es in Ram gespeichert, was ein näher an den tatsächlichen Computer ist. Aber das ist irgendwie, das wird wirklich,
wirklich nit wählerisch und wie Computer funktionieren. Aber alles, was es tut, ist, dass es packt und sagt: Dies ist eine Drei. Und dann sagen wir jetzt, dass wir wollen, warum und so tut es genau das gleiche . Es geht auf seine Liste. Er findet den Sektor, den Cluster, was auch immer untergeht und sagt:
Oh, Oh, es ist Adresse oder eine, die sie zurückgibt. Oh, was ist Adresse oder was ein Vier geht den ganzen Weg zurück und kehrt zurück, und natürlich macht
es das in fast sofortiger Zeit, und dann könnte es die Berechnungen machen, die es angerufen hat. Es sind zwei Datenstücke hier. Und so jetzt macht es die Berechnung von sieben. Und so basiert das auf der Art und Weise, wie Daten in einem Computer gespeichert werden. Es ist nur eine Siri im Grunde eine Art dieser Adressen, und es gibt verschiedene Möglichkeiten, wie Sie diese Art von Daten speichern können. Beispiel ZumBeispielist
dies eher eine direkte Möglichkeit, es dort zu speichern, wo wir die Adresse spezifisch anrufen können. Welchen Weg gesagt Wir wollen zuweisen, Lassen Sie uns ein paar Dinge hier löschen. Eigentlich, was wir tun können, ist, dass ich diese Folie hier dupliziere und wir gehen nach unten. Also werdet ihr diese Oberseite haben, dupliziert und dann irgendwie löschen und hier ein zweites Beispiel machen. Das war also eine sehr direkte Art zu sagen, was ich war. Wenn wir gesagt haben, dass wir
diese Daten haben, wird diese Struktur, die zwischen hier und hier sein wird und ihre Adresse als Ganzes
wird Null X 00 jetzt sein, wenn wir Null x 00 nennen, sagen wir, Nun, lassen Sie uns einige Daten hier rein. Wenn wir Null x 00 nennen, gäbe es hier keine spezifischen Daten. Wir nennen diese ganze Entität, damit uns das überhaupt nicht hilft. Also, was wir tun könnten, ist, wo wir anfangen, irgendwie hineinzukommen. Der nächste Teil ist, dass wir tatsächlich bei kleinen Mini-Namen zu jedem dieser kleinen Segmente. Das ist also nur 12345 und wir können diese wirklich grundlegenden Klassifizierungen verwenden, weil wir unsere Hauptadresse hier
haben. Und jetzt, da wir unsere Hauptadresse haben, werden wir zur Hauptadresse gehen, und dann benutzen wir einen seiner kleinen Mini-Namen, um die Daten zu finden, wir suchen. Und das nennt man ein Array. Und die nächste Vorlesung. Wir werden wirklich anfangen, dies auf die nächste Ebene zu bringen, aber das wird ein Array genannt. Also, was wir tun können, ist, dass wir schaffen, unsere X gleich
speichern und dann so etwas erstellen können. Und dann ist es jetzt speichert das ganze Stück Daten in diesem Stück Speicher und dass jetzt, wenn wir sagen Return X von was auch immer es ist kleiner Mini-Name ist. Sagen wir mal X von eins. Jetzt wird es kommen. Es wird auf die Null x 00 gehen und dann geht es zu dem Mini-Namen von eins, der ein Zwei ist. Es wird also zu zurückkehren und so ist das eine andere Art zu betrachten. Anstatt direkten Zugriff zu haben, könnten
Sie es in Stücke wie diesen segmentieren lassen. Und was es sich herausstellt, ist, dass dies normalerweise die häufigste ist. Denn wenn wir eine direkte Adresse für jedes einzelne Stück im Speicher hätten, würden
wir viel Platz verschwenden und einige wirklich,
wirklich große Tische sein , weil Sie denken müssen, dass der Speicher es nicht kann Ah, Computer kann nicht Speicher im laufenden Betrieb, wie Sie es nicht einfach in imaginärem Land speichern können. Wenn es jede einzelne dieser Beziehungen speichern möchte, muss
es einen ganzen anderen Abschnitt des Speichers haben, der speziell zum Speichern von
Speicher bestimmt ist. Wenn Sie also versuchen, jedes einzelne Stück Daten wie diese zu speichern, beginnt
Ihr Speicherplatz wirklich groß zu werden, und das sind alles Konzept. Wir werden anfangen, zusammenzubrechen, wenn wir weiter gehen. Aber ich wollte das nur in einer Top-Down-Ebene zeigen, damit Sie anfangen können zu
verstehen, wie das Gedächtnis funktioniert. Und wenn wir dann in diese Datenstrukturen wie eine Erhöhung kommen, wie Bäume wie verknüpfte Listen, könnten
Sie anfangen zu verstehen, wie es unter der Art der Haube funktionieren könnte. Wir können ein bisschen mehr von,wissen
Sie,
nur dieses Verständnis bekommen wissen
Sie, , und wenn Sie es verstehen, können
Sie es besser nutzen. Du kannst es irgendwie besser manipulieren.
10. 2-2 feste Array Einführung: Also lassen Sie uns über unsere erste große Datenstruktur gehen, und das wird das Array und in dieser Situation das feste Array sein. Also, was ist ein Array? Nun, in einem Razzia, per Definition ist ein geordneter Siris der Vereinbarung. Und alles, was bedeutet, ist, dass es eine Gruppierung ähnlicher Elemente zusammen ist. Und in dieser Situation bedeutet
die gleichen Elemente nur, dass es ein Stück Daten so in einem Strahl in der Informatik-Welt ist nur eine ähnliche Sammlung von Daten oder eine wirklich nur eine Sammlung von Daten, die alle
nebeneinander sind. Und was ich damit meine, ist, dass wir später verschiedene Datenstrukturen durchlaufen werden, wo Sie hier eine Information auf einer Festplatte
haben könnten und dann ein weiteres Stück hier und dann ein weiteres Stück hier und da drüben haben, nur verknüpft zusammen mit etwas namens Pointers. Also,sagen
wir mal, sagen
wir mal, wenn wir das unten stehende Ding hier unten repräsentieren wollten, hätten
wir so etwas. Aber es könnte ein paar verschiedene Stücke dazwischen geben,
und ein paar verschiedene Stücke dazwischen. ein paar verschiedene Stücke dazwischen geben, Und das ist nicht das, was in einem Rennen so etwas wie eine verknüpfte Liste genannt wird. Also in einem Strahl ist, wenn sie alle zusammen sind und Sie bestimmte Vorteile davon bekommen, erhalten
Sie bestimmte Nachteile davon. Aber ein Array sieht so aus, wenn Sie es repräsentieren. Visuell haben
Sie dieses Segment des Speichers, und wenn Sie ein Array erstellen, Sie in der Regel immer zugewiesen, wie lange Sie wollen. Du fragst den Computer. Ich will einen Abschnitt von sechs Daten und der Computer wird durch seine
Festplatte suchen , und dann wird er einen Platz von sechs finden, und es wird Ihnen den Steckplatz geben. Also, zum Beispiel, auf unserer Festplatte, wenn wir nach einem Platz von drei fragen, würde
es durchschauen, da
schauen und wie:
Oh, Oh, genau hier haben wir einen Abschnitt von drei. Also würde es Ihnen diese drei Datenstücke geben, und das wäre es im Code. Es wird typischerweise durch eine Deklaration von Klammern wie folgt dargestellt. Also würden Sie sagen, etwas wie X entspricht diesen Klammern, und das bedeutet ein leeres Array. Und dann, wenn Sie Informationen darin einfügen möchten, könnte
es so etwas wie X gleich 123 sein und das wird nur ein Array erstellen, das so etwas aussieht , wo Sie das erste Los haben, der zweite Schlitz von zu und der dritte Schlitz von drei wie so. So würde es also im Code dargestellt werden. Nun, wie zählt ein Array? Was ist das? Weißt du was? Wofür wird es verwendet? Einer der wichtigsten Teile ist, dass das Array bei Null beginnt. Es nennt sich Null-Indizierung. Das heißt, wann immer wir das erste Element greifen wollen, wenn wir dieses Element oder in dieser Situation greifen wollen, würde
dieses Element jemals eine dieser Entwicklungen greifen wollen. Wir müssen bei Null anfangen. Es muss diese Null sein, genau hier. Dies liegt daran, ah, viele Computer-Formeln arbeiten mit Null. Es gibt tatsächlich ganze Online-Diskussionen darüber, warum wir immer noch Null-Basis verwenden. Früher gab es eine
ganze Reihe von verschiedenen Gründen dafür und den Grund, der angefangen hat, abzufallen. Aber was auch immer es jetzt ist, wir verwenden immer noch Null-Basis. Also im Array beginnt immer mit Null. Und das bedeutet, dass das Ende etwas in minus eins genannt wird, was in minus einem Mittelwert endet in dieser Situation ist nur die Länge des Arrays. Das bedeutet also, dass der letzte in minus eins sein wird. Es wird nur sechs sein. Also, wie Sie sehen können, halten Sie sieben Stück Informationen. 1234567
Wenn wir jedoch die letzte Information greifen wollen, greifen
wir nicht sieben. Wir schnappen uns sechs, ein wenig verwirrend auf den ersten Blick. Und viele Male, sogar erfahrene Informatiker, sie verstehen es die ganze Zeit falsch. Sie werden setzen, Sie werden setzen, wissen
Sie, wenn sie versuchen, das letzte Element zu greifen, werden
sie X von sieben setzen. Und das wird etwas zurückgeben, das einen Sege-Fehler genannt wird
, der nur der Computer sagt, Hey, Sie greifen außerhalb der Grenzen auf Speicher zu. Du greifst auf Speicher zu. Ich habe Ihnen keine Kontrolle über und schwächere Sprache oder Sprachen gegeben, die keine
Sicherheitsvorkehrungen haben . Nun, tatsächlich, geben
Sie einfach zurück, was Müll da ist, also heißt das eigentlich Ah, Pufferüberlauf-Angriff ist, wenn Sie diese rechte Seite angreifen, können
Sie sich dadurch in Dinge hacken. Aber das ist was wie die wirklich grundlegenden Sprachen wie C, ob es in vielen Arten von Sicherheitsvorkehrungen ist. Aber wenn wir versuchen, es in etwas wie zu tun, Java wird uns sagen, dass der zweite Fehler Zugriff auf Speicher war, der nicht auf der Festplatte
gewährt wurde , etwas anderes ist da, das wir nicht berühren sollten. Und so
wird, wie ich schon sagte, wie ich schon sagte,von einer Luft abgesagt. Setzen Sie den wichtigen Teil, den Sie brauchen, um aus dieser Vorlesung herauszukommen. Diese Einführung, um eine Erhöhung zu beheben ist, dass man in Array ist nur eine Sammlung von Daten an der gleichen Stelle auf der Festplatte wird über den Vorteil gehen, dass wir bei der nächsten Wahl
über die Laufzeiten gesprochen . Aber das ist es, was es ist. Es ist eine Sammlung dieser Daten zusammen. Das nächste, was wir wissen, ist, was der feste Teil davon über verschiedene
Arrays sprechen würde . Der feste Teil davon bedeutet nur, dass es sich nie ändern wird. Also in dieser Situation, wenn wir ein Array der Größe vier erstellt haben, wird
es immer Größe bleiben, denn es gibt keinen Code, um einen Schritt größer zu machen und kleiner zu machen. Sobald wir es aufgefüllt haben, ist
es voll. Wir müssen entweder etwas überschreiben oder etwas löschen oder etwas anderes verschieben um mehr Informationen genossen zu setzen. Aber wie auch immer, das ist die Einführung in feste Arrays, wirklich,
wirklich, brauchen Datenstrukturen, und lassen Sie uns in ein wenig mehr von der unbeschwerten Art springen, wie Sie diese Dinge tatsächlich verwenden und was ihre Vorteile sind.
11. 2-3 feste 2-3: Werfen wir ein wenig einen tieferen Blick in die festen Arrays und schauen wir uns ihre
Laufzeit an , wirklich mit den Dingen, die wir in der letzten Einheit gelernt haben, wissen
Sie, die Zeitanalyse Mumbo Jumbo, die wir nehmen werden, dass wir tatsächlich implementieren und die Geschwindigkeiten verschiedener Arten von Funktionen innerhalb des Arrays betrachten. Und dann werden wir in der Lage sein, diese Art von Geschwindigkeiten zu nehmen und werden in der Lage sein, verschiedene
Datenstrukturen zu betrachten , werden in der Lage, sie miteinander zu vergleichen. Das werden wir also tun. Wir werden einige der Vorteile sehen. Wir werden einige der Nachteile sehen, und wir werden einfach tief in das eintauchen, was festes Array ist und warum Sie es
benutzen könnten . Das erste, was wir übergehen werden, ist die Einfügung zufällig. Es gibt also etwas, mit dem wir irgendwie zusammenkommen müssen. Worüber wir reden, wenn wir über eine Einfügung, eine Löschung oder sogar suchen, was wir mit einer Einfügung meinen, ist, wenn
wir eine Reihe von Daten haben ,
die wir in der relativ gleichen Reihenfolge behalten möchten eine Löschung oder sogar suchen, was wir mit einer Einfügung meinen, ist, wenn
wir eine Reihe von Daten haben,
die wir in der relativ gleichen Reihenfolge behalten möchten. Alle Daten sind in allen unseren Beispielen wichtig. Also, wenn wir eine Eins zwei oder drei haben, tun
wir es nicht. Wenn wir einfügen sagen, meinen
wir nicht, dass Toe etwas überschreibt, das als Ersetzen bezeichnet wird. Also reden wir nicht davon, du weißt schon, nur das in eine Zwei umzuwandeln. Also sind es 2 zu 3 oder ändern Sie diese 1 zu 2 oder, wissen
Sie, was auch immer
tun. Es geht nicht darum, dass eine Einfügung zwischen hier eingefügt wird oder an eine Stelle um
sie herum eingefügt wird. So, zum Beispiel, in Einfügung wäre Dies ist ein Leerzeichen und wir wollen eine drei hier einfügen. Oder Einfügen könnte sein, dass nach einem, wir wollen eine drei einfügen. Also, wie sollen wir das machen? Das Endprodukt? Was wir wollen ist, dass wir etwas wollen, das als 132 herauskommt und das ist das in der Suche, und das ist, was wir mit einer zufälligen Einfügung meinen. Was ist die Zeit dieser zufälligen Einfügung? Was braucht es, wenn wir hier zufällig etwas einfügen wollen? Und lasst uns voran gehen und ah löschen, ein paar der hinteren Elemente. Also haben wir hier etwas zu arbeiten und so gehen wir hin. Was ist dann die Zeit, die es brauchen wird, um etwas in ein festes Array einzufügen? Nun, die Zeit endet O bis zum Ende o bis zum Ende. Also genau, warum ist es bis zum Ende? Nun, schauen wir uns das an. Dieses Beispiel hier zeigt es irgendwie. Wann immer wir zufällig einfügen, müssen
wir davon ausgehen, dass wir nicht wissen, wo es eingefügt wird. Es könnte hier eingefügt werden. Es könnte hier eingefügt werden. Es könnte am Ende oder am Anfang eingefügt werden. Aber was wir wissen, ist, dass
wir einige Daten verschieben müssen, wenn es nicht ganz am Ende ist. Also müssen wir diese Daten nehmen, und wir wollen sie alle nach unten verschieben, um diese anderen Daten zu passen. Also, zum Beispiel, lassen Sie uns sagen, dass in diesem Beispiel, hier
oben haben wir ein Lassen Sie uns dies nach außen erweitern, und sagen wir, dass wir eine andere Zahl einfügen wollen, die wir hier wollen. Wir wollen eine Vier einfügen. Was werden wir tun müssen, wie viel Arbeit oder wir werden tun müssen, um die vier da reinzubringen, um das zu tun, wir müssen die drei nehmen. Oder eigentlich werden
wir hier normalerweise das Ende angefangen. Also nehmen wir die beiden. Wir werden es überziehen, wir nehmen die drei, wir werden es überziehen, und dann nehmen wir die vier und wir werden sie einlegen. Das wird also dauern, wie viele Operationen maximal werden, es wird das gesamte Array nehmen. Wir müssen jedes einzelne Element über und dann plus die Hinzufügung des neuen
Elements bewegen . Wie viele Elemente davon? Nun, das ist unser Vertrauen, dass wir eine haben. Denken Sie daran, dass in die Länge unserer Größe aller Datenstücke ist, die wir
einfügen möchten . Also, wie viele Operationen würden tun? Nun, alle aktuellen Daten werden eine Operation ein Zug erfordern, um drei zu bewegen, zu
bewegen. Das wird also drin sein. Im besten Fall. Es wird nur eine normale Einfügekonstante sein, also wird es nur eine sein. Aber hier wird es irgendwie schwierig. Wir müssen uns den Durchschnitt ansehen. Was ist die durchschnittliche Zeit, die es dauern wird, um
hier in ein Diagramm oder in ein Array einzufügen , und das ist, wo wir unsere schrieb das Ende genau hier. Ist das die durchschnittliche Zeit, die es dauern wird? Es ist so etwas wie „
Oh, Oh, in über zwei und du kannst darüber nachdenken. Wenn wir den Durchschnitt über eine normale Verteilung, wissen
Sie, wir haben sie an verschiedenen zufälligen Stellen aufgestellt. Statistisch und wahrscheinlich, es wird sie auf die,
äh,
mindestens die gleiche Menge für jede der Zellen einfügen äh, . Nehmen wir an, wir fügen es ein. Ich weiß nicht, 12 Mal wahrscheinlich weise, wir sollten hier hier, nach hier, nach Hier, nach unten die Liste von verschiedenen Orten einzufügen. Und das bedeutet, dass
es hier oben jedes Mal mal mal dauern wird. Und dann wird es hier minus eins in minus zwei in minus drei und minus vier und
minus fünf in minus sechs nehmen . Es wird also konstante Zeit in Anspruch nehmen, und so dass Durchschnittswerte für alle von ihnen zusammen, zu denen wir dann unsere
in über zwei geben werden. Und denken Sie daran, wir reden über Laufzeiten. Wir müssen alles durchkreuzen, was wir bekommen. Das ist nur eine 1/2 vorne. Also überqueren wir es einfach. Und dann bedeutet das, dass unsere durchschnittliche Zeit am Ende genau so ist. So ist eine zufällige Einfügung rechtzeitig. Also, was in was ist das Einsetzen nach vorne? Aber wir reden darüber,
und das ist eigentlich der langsame Teil unserer Einfügungen. Die Einfügung nach vorne wird auch o zum N sein. Lass mich das hier drüben loswerden. Also in bestimmten der Front wird O bis zum Ende sein. Erinnerst du dich, als wir gerade über das Beispiel gesprochen haben? Wir sagten, dass, wenn wir in die Front stecken, das unser schlimmster Fall sein wird. Wir nehmen alles und schieben es nach dem anderen hin. Das wird also das O bis zum Ende sein. , Was passiert,wenn wir nach hinten stecken? Also werden wir an dieser Stelle direkt hier einfügen? Nun, das ist eine sehr einfache Einfügung. Wir können hier nur eine Drei aufstellen. Wenn wir Sie wollten, und wir haben es eingefügt. Es ist eine konstante Zeit. Alles, was es braucht, ist eine einzige Operation, die Nummer zu nehmen ist. Legen Sie es rein. Es spielt keine Rolle, wie viele Stücke wir haben. Das könnte sein, wissen
Sie, das könnte Null sein und dann 10 2030 40 50. Und bei diesen Zahlen dazwischen es keine Rolle. Wir werden nur sagen,
du weißt, dass X von 50 gleich drei ist und jetzt gleich drei ist. Es ist immer konstante Zeit. Deshalb ist bei einem Array-Einfügung in die Rückseite auch konstante Zeit. Nun, dann, Delish in einem Löschen bedeutet, dass wir das Element löschen werden. Aber wir müssen uns daran erinnern, die
Integrität aufrecht zu erhalten. Heben wir alle Nullen hier unten, um zurück zu kommen. Das heißt, wir müssen die Integrität aufrechterhalten. Und was bedeutet das? Das heißt, wenn wir eine Sieben wegnehmen, wenn wir die Sieben von Anfang an entfernen, müssen wir tatsächlich dafür sorgen, dass der Rest von diesen
rückwärts fällt . Also lasst uns weitermachen und uns ein kleines Beispiel hier oben machen. Nehmen wir an, wir haben eine Reihe von Zahlen, so haben wir ein 1234-Array bekommen, das Größe für ist, aber die Indizierung erinnern beginnt bei Null. Nehmen wir an, wir wollten einen aus unserem Datensatz entfernen. Nun, was auch immer wir das aus dem Datensatz entfernen, wir können hier nicht einfach einen leeren Raum hinterlassen, der nicht die Kontinuität unserer Daten aufrechterhält . Wenn wir versucht haben, das erste Element zu greifen, wir einfach davon aus,
dass ,
dass wir
vielleicht einen Algorithmus haben und immer versucht, das erste Element so zu greifen. Es wird auslüften. Da ist nichts. Was wir also tun müssen, wenn wir von vorne löschen, ist, dass wir genau
dasselbe tun müssen . Wir müssen zurückkehren, zurückkehren, zurückkehren. Und wie Sie sehen können, worüber wir vorher gesprochen haben, wird
alles, was von uns verlangen wird, eine Reihe von Malen zurückzukehren, O bis zum
Ende sein . Delish im Zufallsprinzip ist auch bis zum Ende gehen. Also, wenn wir hier nur jede Art von Löschung zufällig nehmen, wäre
es schuldig. Das Ende jetzt im Array hat auch den schönen Vorteil, dass wir in
konstanter Zeit von hinten löschen können , weil wir nichts verschieben müssen. Also, wenn wir die Vier einfach von hinten löschen wollten, müssen wir sie nur löschen. Also im Code, wissen
Sie, es könnte so etwas wie X von drei gleich sein, kein leeres Zitat oder was auch immer es ist,
es leer zu machen . Wie auch immer
, so einfach ist es. Es Zingale Operation. Nichts anderes muss reinkommen, also ist es auch der Frau konstante Zeit zu verdanken. Also diese Luft, die Luft, die kurzfristig, die ich manchmal verwenden werde, ist lineare Zeit. Das sind also alle lineare Zeit. Dies ist konstante Zeit, linear, konstant. Und ich möchte Ihnen diese Abstimmung jetzt beibringen, denn, wie ich schon sagte, könnte
ich sie in Zukunft austauschen und sagen:
Oh, Oh, zu den 10 zum N Jedes Mal wird ein wenig ermüdend. Also viele Leute werden nur sagen, Constant, Sie werden sagen, linear diese so exponentiell. Wie auch immer, schauen wir uns unsere letzte an. Wie lange dauert es, um etwas zu suchen? Die Such- und unsortierte Liste. Das hier ist unsortiert. Wir haben sieben. Wir haben 89 10 und dann eins. Also gibt es hier keine Art von Ordnung. Wir kennen den Befehl nicht wirklich. Wie lange wird es dauern? Nehmen wir an, wir wollen sehen, ist ein neun Geschenk. Nun, es gibt keinen Riel. Schneller Weg, dies zu tun. Was wir tun müssen, ist, dass wir die rohe vierte Brute-Force-Methode machen müssen. Das heißt, wir müssen hier anfangen. Ist dieses Böse geleugnet? Nein. Wechseln Sie zum nächsten. Ist diese Fortsetzung heute Abend? Nein. Wechseln Sie zum nächsten. Ist die Single die Neun? Ja, ist
es. Aber wenn wir
zum Beispiel nach 90
suchen, wären wir so, Nope. Nein, nein. Und wir gehen den ganzen Weg runter, bis wir ausgehen. Bis wir hier zu einem Raum kommen, der keine Informationen hat. Und dann würden wir zurückkehren. Nein, es ist nicht gleich 90. Also, diese Operation endet wie der Rest. Oh, das Ende. Denn im schlimmsten Fall werden
wir 02 Uhr bekommen. Wir müssen jedes einzelne davon runtergehen und
es bis zum Ende schaffen , um herauszufinden, ob es tatsächlich innerhalb des Arrays existiert, könnten
wir Glück haben. Natürlich kann es manchmal ganz am Anfang sein. Manchmal kann es zwei oder drei Elemente sein,
aber im Durchschnitt ist
der schlimmste Fall, dass es bis zum Ende geschuldet wird. Das wird also auch lineare Zeit sein. Und dann das letzte, das letzte Mal. Wir werden eigentlich für die nächste Vorlesung sagen, weil dies vor funktionieren wird, ein bisschen tiefer Eintauchen in warum ein suchsortiertes Array herauskommt, um sich anzumelden. Und so könnten Sie sehen, dass gerade jetzt wie Was bedeutet das? Deshalb werden wir tief in genau eintauchen, warum diese Suche sortiert gleiche Log des Endes. Aber ich wollte nur noch ein oder zwei weitere Dinge in diesem Vortrag durchgehen, und dann gehen wir weiter und springen in diesen Vortrag. Das Letzte, was ich übergehen will, ist, was sagt uns das alles? Was sagt uns das über die Vorteile und Nachteile eines Arrays, die wir
direkt von der Fledermaus sehen können , dass zum Speichern von Daten, die alle eine Art Integrität für sie haben, vielleicht in einer Rate nicht das Beste ist, wenn wir Ah haben, Programm, das einfügen und Elite ständig, weil jedes Mal, wenn wir löschen einfügen wird
es bis zum Ende schuldig sein,
vor allem, wenn wir nach vorne oder zufällig darin einfügen. Und wir haben tatsächlich andere Datenstrukturen, die diese alle konstanten Zeiten machen können. Vielleicht ist so etwas nicht sehr wichtig. Und etwas, das nicht hier drüben ist, aber wir haben für selbstverständlich gehalten, ist die Fähigkeit einfach
zu überprüfen, was an jedem dieser Elemente ist. Ich kann nur sagen, du weißt schon, ich kann anrufen, außer drei. Ich kann dieses Element nennen, und es wird mir sofort sagen, dass 10 da sind. Das ist etwas anderes, das ein großer Vorteil für ein Rennen ist. Ist das eine konstante Zugriffszeit? Das ist etwas anderes, das wir vielleicht nicht mit anderen vergleichen. Aber es heißt Zugriffszeit. Wie lange dauert es, bis zu einem Element innerhalb des Arrays und in dieser Situation alle diese Luftkonstante Zeit erreicht? Das ist, was für ein Array Ihnen gibt, ist die Fähigkeit, einfach irgendwo zu beginnen und dann
zu einem dieser Elemente zu gehen und sofort darauf zu gelangen. Die Zugriffszeit ist also konstant, und das ist sehr wichtig. Wenn, zum Beispiel, lassen Sie uns sagen, dass wir kein Programm haben, das nimmt und fügt viele Informationen mit dem Programm, das ab und zu tut es, dass es das tut. Aber die meiste Zeit überprüft es nur verschiedene Orte. Wir speichern hier nur verschiedene Informationen, und dann sind wir wie dann die Programme wie, Okay, ich brauche Nummer drei, was ist an Nummer drei? Und Nummer vier? Was ist an Nummer vier und dann ist es ständig eine Art, diese Informationen hin und
her zu senden . Aber die meiste Zeit. Dies bleibt Zitat unquote statisch, was bedeutet, dass es sich nicht ändert. Das ist, wo ein Array nützlich sein kann. Wir haben diese sehr schnelle Zugriffszeit, und das wird alles viel schneller laufen lassen. Wie ich bereits sagte,
wenn wir die ganze Zeit in Führung einfügen,
vielleicht eine andere Datenstruktur betrachten wollen,
lassen Sie uns in das wirklich benötigte Beispiel der Suche einspringen,
und Wie ich bereits sagte, wenn wir die ganze Zeit in Führung einfügen, vielleicht eine andere Datenstruktur betrachten wollen, lassen Sie uns in das wirklich benötigte Beispiel der Suche einspringen, schauen wir uns an, warum das kommt, um sich anzumelden
12. 2-4 Algorithmus zur bildenden Suche (Fixed Array --geordnete Suche): Also lasst uns übergehen, worüber wir in der letzten Vorlesung gesprochen haben. Und das wird die feste Array-Suche sortiert sein. Warum ist das anders? Warum hilft uns das, zu dieser interessanten Laufzeit des Logs zu kommen, in der wesentlich
schneller ist als das O bis zum Ende. Die unsortierte Version. Das wird viel schneller sein, als warum, wenn wir es sortieren, haben wir diesen Vorteil? Und das liegt daran, dass wir etwas tun, das als binäre Sorte bezeichnet wird. Es wird also ein binärer Sortieralgorithmus oder ein binärer Suchalgorithmus sein. Mein schlechtes. Ein binärer Suchalgorithmus. Der Grund, warum dies uns erlaubt, einen binären Suchalgorithmus durchzuführen, liegt an der Art und Weise, wie er eingerichtet wird. Stellen Sie sich die alte Art vor, es zu tun. Und das ist die Brute-Force-Methode. Sagen wir, wir versuchen zu finden, gibt es 19? Also versuchen wir herauszufinden, ist 19 existieren wie Also, um das mit einer Brute-Force-Methode zu tun, gehen
wir einfach von Anfang an. Ist er hier? Nein. Nein, nein, nein. Und wir gehen einfach weiter auf die Liste. Und natürlich, es könnte nicht in der Liste sein und daher müssen
wir durch die gesamte Liste gehen, um herauszufinden, dass. Oder es könnte auf halbem Weg zur Liste oder am Ende sein, oder vielleicht gleich am Anfang. So oder so, im schlimmsten Fall, wird
es dauern, dass die ganze Liste O bis zur Endzeit bringen wird. jedoch Mit einer binären Suche können
wirjedochgarantieren, dass es auf Lee Going ist, um das Protokoll der Endzeit und das Anmelden der Zeit zu nehmen, wie ich sagte, es ist viel schneller. Denken Sie daran, wenn Sie über Login und die vorherigen Tutorials sprechen, es geht so,
was bedeutet, dass die am Anfang, die Zahl aus der Anzahl der Elemente, die wir haben. Also lassen Sie uns sagen, dass dies nach rechts hier geht, dieser Zugriff wird die Anzahl der Elemente sein, in denen wir haben. Und so lange dauert es. Die Suche oder Laufzeit ist Laufzeit. Und was uns das sagen wird, ist, dass mit dem Mawr, dass wir diesen Lauf bekommen, Zeit langsamer wird, so dass wir irgendwann wie 32.000 rauskommen und es im Grunde
die gleiche Laufzeit bei 64.000 sein wird , was im Grunde die gleiche Laufzeit wie 128.000 ist. Es wird jedes Mal langsamer und langsamer steigen. Und so geschieht dies aufgrund der Art, wie die binäre Suche funktioniert. Gehen wir also weiter und gehen Sie durch dieses Beispiel. Wie würden wir durchmachen? Wie würden wir ein festes Array suchen? Nun, was wir tun, ist, dass wir weitermachen und diese kleine Formel machen. Es heißt links plus rechts rüber zu. Also nehmen wir links und rechts, und dann gehen wir weiter und teilen das durch zwei. Das ist also unsere Formel. Also lasst uns weitermachen. Nehmen wir das und lassen Sie uns das da oben bewegen, denn wir werden das viel referenzieren , während wir das tun. Also links, plus, rechts rüber zu. Was übrig bleibt, wird weitergehen und der ganz linke Teil sein. Es wird die Nummer sein, die wir links haben, wenn das Sinn ergibt. In dieser Situation ist
es ein vollständiges Array. Sind links, ist Null und rechts ist die volle rechts auf der rechten Seite hier, das ist die 10. Wir nehmen diese zwei Zahlen, fügen sie zusammen, und dann teilen wir uns durch zwei. Und das ist der Index, den wir zuerst suchen werden. Das bedeutet also unseren ersten Schritt hier. Wir gehen nach links. Lassen Sie uns die Zahlen hier gleich halten. Wir nehmen die linke, die Null sein wird, und dann gehen wir weiter und fügen rechts hinzu, das ist die 10. Und sie wollten das durch zwei teilen. Was, natürlich, kommt
nur auf 10 geteilt durch zwei, das ist fünf. Also unser erster Schritt, wir greifen Index fünf genau hier. Also gehen wir weiter und wir greifen Index fünf. Wir gehen weiter, wir nehmen es, wir bringen es zurück und wir schauen uns an. Was ist das? Also, was ist Ex von fünf? Nun, es gibt 12. Jetzt ist unsere nächste Entscheidung 12. Weniger als oder ist es größer als die Zahl, nach der wir suchen? Nun, 12 ist kleiner als die Zahl, nach der gesucht wurde. Und denken Sie daran, dies ist ein sortiertes Array. Wenn also 12 kleiner ist als die Zahl, nach der wir suchen, warum sollten wir dann überhaupt auf dieser Seite suchen? Wir wissen bereits, dass das sortiert ist, also meine ich alles, bevor es weniger als 12 sein wird, und wir wissen, dass unsere Zahl
tatsächlich größer als 12 ist . Wir wissen, dass 19 größer als 12 ist. Also müssen 19 auf dieser Seite sein. Also nehmen
wir einfach die ganze Seite hier drüben und wir verlassen einfach. Wir sehen es nicht mal an. Wir werden es nicht anfassen. Wir werden nicht überprüfen, was da drin ist, weil wir vertrauen, dass dieses Array sortiert. Deshalb gehen
wir weiter und gehen nach rechts. Wir werfen einen Blick auf die rechte Seite, und dann machen wir noch einmal unsere kleine Formel. Also gehen wir weiter und biegen links ab und die Linke ist jetzt eine Fünf. In der Regel jedoch haben
wir dies
jedochbereits durchsucht. Wir müssen uns das nicht ansehen. Also werden wir es tatsächlich tun, da es größer ist, als wir es hinzufügen. Wenn es weniger wäre, als würden wir einen wegnehmen. Aber wir werden jetzt mit sechs beginnen, also gehen wir weiter und gehen mit sechs, und dann fügen wir ein,
äh, äh, plus die rechte Seite hinzu, die noch zehn ist. Teilen Sie das durch zwei. Und diese Situation, wir werden tatsächlich eine 16 durch zwei geteilt bekommen, die gleich acht ist. Und damit wir uns Sektion acht oder Index acht hier ansehen, sagen
wir: Was ist das? Index acht. Wir schauen uns mal an. Und
natürlich natürlich X von acht. Nun, das gibt eine 20. Nun, ist 20 größer als oder ist es weniger als unsere 1920 ist größer als 19. Also war unsere zweite Suche genau hier. 20. Wir schauen uns mal an. Uns ist klar, dass es Lektion ist. Also gehen wir nach links. Und das bedeutet, dass Hey, wir brauchen nicht den ganzen Abschnitt hier drüben. Also, jetzt gehen wir weiter und nehmen die Acht minus es nach dem anderen, und dann nehmen wir alles, was noch übrig ist. Der linke Teil davon ist sechs. Der rechte Teil ist sieben. Also werden wir die Formel weiter runtergehen. Also gehen wir voran und wir nehmen die sechs und dann fügen wir es zu den sieben in dieser Situation hinzugefügt sieben
hinzu. Dann teilen wir das durch zwei, und wir bekommen uns 13 geteilt durch zwei. Nun, das ist wichtig. Wir haben 13 durch zwei geteilt. Damit machen
wir typischerweise etwas, das Abschneiden genannt wird, wo dies in dieser Situation nicht 7,5 entspricht . Oder eigentlich wäre
nichts davon 6,5. Das ist nicht gleich 6.5 und wir runden es nicht ab. Wir machen es nicht um alles. Wir tun, was wir es Abkürzung nennen, das heißt, Wir schneiden einfach das Backend ab. Was auch immer das ist, wir löschen es und wir nehmen, was die ganze Zahl ist. Wir nehmen, was auch immer die Zahl am Anfang die ganze Zahl ist. Also, zum Beispiel, wenn wir eine 7.9 hätten, wäre
es immer noch sieben. Wir hatten 7,3. Es wären immer noch sieben. Wenn wir 7.98 hätten, wären es immer noch sieben. Das ist es, was Abschneiden ist. Das ist es, was wir tun. Was auch immer wir diese Formel machen. Also haben wir abgeschnitten und wir überprüfen sechs. Wir gehen weiter und schauen uns sechs an. Wir werfen einen Blick auf sechs und wir bekommen uns die Nummer 17. Wir machen unseren kleinen Prozess wieder. Nun, wir wissen, dass es richtig ist, und wir können die Formel
hier noch einmal machen und normalerweise einen Scheck haben. Wenn es das letzte Element ist, schauen Sie sich
einfach das Element davon an. Ist es da? Ist es nicht weitermachen? Aber wir können das Ganze noch einmal machen. können wir tun. Die Sieben sind eine Linke. Plus sieben ist das Recht geteilt durch zwei. Das ist also 14 geteilt durch zwei, was gleich sieben ist. Dann machen wir unsere Formel, die wir überprüfen, ist sieben. Genau hier ist 19 gleich 19. Ist es. Das bedeutet, genau hier gehen wir weiter und wir überprüfen es einfach ab. Es ist so, das ist, was diese Formel tut. Es braucht es und jedes einzelne Mal teilt es es in zwei Hälften. Und das ist irgendwie der wichtige Teil hier. Zu verstehen ist, dass jedes Mal, wenn wir das Problem teilen und 1/2 so das bedeutet, zum Beispiel, wenn wir mit oh begonnen haben, ich weiß nicht, wie 128 verschiedene Elemente nach der ersten Generation wurden nur 64 Elemente überprüft. Danach überprüfen
wir 32 Artikel und danach überprüfen wir, wissen
Sie, wissen
Sie, 16 und in acht und dann vier und dann zwei und dann eins. Und die Sache
ist, weil sich dies jedes Mal verdoppelt, die Anzahl der Schritte erhöht sich nur. Es erhöht sich langsamer und langsamer. So ist zum Beispiel jeder von ihnen ein Schritt. Also haben wir 123456 und sollten dies mehrmals in diesem Kurs durchlaufen weil es in so vielen verschiedenen Bereichen so wichtig ist. Aber was wir hier haben, ist, dass 128 Onley sechs Schritte entspricht. Nun, wenn wir das verdoppeln, wenn wir einen weiteren Schritt weiter gehen Also statt 128 Elemente, haben
wir 256 Elemente Will 256 nur gleich sieben. Wir machen nur noch einen Schritt, um dorthin zu gelangen. Und dann, natürlich, könnten
wir noch einen runtergehen
, der 512 sein wird. Und das ist nur gleich acht und so weiter und so weiter und so weiter. Also bekommen wir, dass das Diagramm, von dem wir reden, nicht so hässlich ist. Haben Sie einen Graphen. Wir bekommen das Diagramm, über das wir reden, wo es hinaufgeht und wo die Anzahl der in, dass wir die Änderung erhalten, die Laufzeit, das ist die Laufzeit der linken wird immer weniger und immer weniger und weniger und weniger im Laufe der Zeit. Und dass dieses Muster hier, das heißt Log in. Und wenn wir uns tatsächlich beworben haben, wenn wir tatsächlich in Log von 512 setzen, bekommt es uns tatsächlich. Es gibt acht aus. Das ist, was das Muster ist. Dies ist nur die Art und Weise, die Mathematiker repräsentieren. Dieses Muster ist durch diese Sache namens log. Und deshalb kommt die Laufzeit zum Loggen heraus. Weil dieses kleine komplexe Muster hier nicht wirklich zu komplex ist. Sobald Sie an einen Computer angeschlossen haben, ist
es wie sechs Codezeilen. Aber dieses Muster hier macht eigentlich das Ganze. Es tut es und es schneidet es jedes Mal in zwei Hälften, so dass wir das Login in Zeit bekommen. Und deshalb, da wir es dort tun können, können
wir diese binäre Suche verwenden, um es zu tun. Unser schlimmster Fall, Laufzeitumgebung, kann nur auf log von n
13. 2-5 Kreisläufe: in der letzten Lektion haben wir eine Gehaltserhöhung diskutiert und wie wir hinzufügen können subtrahieren. Und dann diskutierten wir auch über die Zeit dieser Strahlen, wie was? Jede Art von Operation, was es kostet. Wenn Sie also zufällig antworten wollten, könnten
wir es im Grunde sofort tun. Aber wenn wir es in der Front in Bezug auf einfügen wollten, wie der Rest des Rennens, müssen
wir den Rest des Strahls zurück schieben müsste tatsächlich alles in gehen. Und all diese Art von, weißt
du, sie gehen davon aus, dass wir nicht überschreiben. Dinge, wenn sie davon ausgehen, dass wir unsere Daten effektiv verwalten, wenn wir nicht löschen oder überschreiben oder zu weit über unsere Array-Grenzen hinausgehen. sind also im Grunde die Array-Grenzen, die wir erstellt haben, aber wir können tatsächlich an einer von ihnen verbessern, und das wird dieser hier sein,
der Einsatz an der Vorderseite, indem wir etwas schaffen, das als kreisförmiges Array bekannt ist. Also in der Theorie, was wir tun, ist das Array und Gedächtnis wird immer so aussehen. Es wird immer ein Block sein,
der vom Anfang bis zum Ende gehen , wird, also wird es zugewiesen und dann wird es
gefüllt werden , und das ist darüber. Du kannst es nicht so schaffen wie alles andere. Aber wir tun theoretisch, ist, dass wir einen Weg finden, wie wir das
ankommen können , und wir könnten es in einen kreisförmigen Strahl schaffen
, der so ist. So, zum Beispiel, jetzt und jetzt
offensichtlich, werden wir tatsächlich dieses Array nehmen, und wir werden es in diesen Kreis schaffen, genau hier. Auf den Vorteil, dass jetzt, wenn wir etwas einfügen wollen, sagen wir, wir haben 123, wenn wir etwas an der Vorderseite einfügen wollen. wir also, das ist die Front. Alles, was wir tun müssen, ist nur einen zurück zu schauen und ihn dort einzufügen. Und wie schnell damit. Das war eine konstante Zeit, was bedeutet, dass wir die Einfügung auf die Vorderseite als konstante Zeit verbessern können, indem dieses kreisförmige Array
erstellen. Und was wir tun werden, ist, dass dies ein wenig schwierig ist, in Code zu implementieren, aber die Theorie dahinter ist nicht so schwierig. Also werden wir haben, was wir als Zeiger bekannt ist. Wir werden eine haben, die hier oben rechts zeigt. Und sie wollten eine haben, die hier unten rechts zeigt. Und sie werden beide genau an die gleiche Stelle zeigen, weil diese Top, diese Top, hier oben, die Vorderseite unserer Rechten sein
wird. Wir werden etwas haben, das uns sagt, dass dies die Front ist, und wir werden etwas haben, das uns sagt, dass es die Rückseite ist. Und so jetzt, wann immer wir in das Array einfügen und wir sagen, dass wir keine zufälligen Einfügungen nur an der Rückseite oder Einfügen der Vorderseite des Arrays tun. Also stecken wir jetzt hinten oder vorne. Sie sind beide genau auf die gleiche Stelle gerichtet. Wir gehen einen Einsatz voran, eine Nummer genau hier. Und jetzt, da wir eine Zahl in unser Array eingefügt haben, können
wir dann die Rücknahme nehmen und je nachdem, wie Sie es implementieren. So zum Beispiel immer ein Plus einfügen, könnten
wir
zum Beispiel immer ein Plus einfügen,was auch immer die Rückseite hervorgehoben wird, oder wir können die Rückseite auf den nächsten verfügbaren Platz zeigen. Ich werde auf den nächsten verfügbaren Platz zeigen, also füllten wir diesen jetzt und auf der Rückseite ist tatsächlich hierher bewegt. Also, jetzt zeigt es hier so und jetzt haben wir das hier zurück,
wird darauf hingewiesen, wird darauf hingewiesen, und so gehen wir weiter und fügen Sie eine weitere Nummer ein. Also, unser Programm, wir können einfach, wenn wir das in ein Programm schreiben, könnten
wir tatsächlich so etwas tun. Wir könnten X zurück gehen, und es wird uns tatsächlich auf den genauen Ort hinweisen, den wir füllen wollen. Also gehen wir X zurück gleich sechs. Und so können wir jetzt eine Sechs hier reinlegen. Wir werden genau das tun, was wir vorher getan haben. Wir werden das hier auswählen. Lassen Sie mich hier eine Auswahl bekommen, damit ich überhaupt auswählen kann. Wir werden dieses Element packen, und dann werden wir es einfach zum nächsten Teil hier drüben bewegen, und irgendwie hat es ein Teil meines Pfeils nicht damit geschafft. Also lasst uns gut, ein Teil davon wollte ich dort bleiben. Also, was wir jetzt haben, ist, dass der Rücken über eins bewegt wird. Also jetzt sind zurück hier zeigt, und so geht alles gut. Aber was wir jetzt tun können, ist, weil wir diese Hinweise haben, die uns sagen, wohin genau alles geht. Wir können die Front tatsächlich einsetzen, ohne dass wir alles nach
vorne schieben müssen. Und das liegt daran, anstatt alles vorwärts zu schieben, werden
wir den Zeiger einfach zurückbewegen. Also lassen Sie uns die Vorderseite jetzt einfügen und die Vorderseite einlegen. Also, zum Beispiel könnten
wir gehen, ähm, wir gehen x von vorne gleich einer Zahl, aber Sie werden feststellen, dass in dieser Situation die Front tatsächlich nach vorne gerichtet ist. Also, was wir tun können, ist, wir könnten x von vorne minus eins gehen, und das bringt uns an die Stelle direkt daneben. Das Minus eine Stelle. Und wir hätten tun können, was wir mit dem Rücken gemacht haben, wo es entfernt und gesagt, das zu tun. Aber ich wollte hier beide Wege machen, also machen wir X von Front minus eins gleich sieben. Und so wird uns das Ex von negativem eins gleich sieben bekommen. Aber dass das nicht funktioniert. Wir können kein negatives Inju hinzufügen. Unser Strahl wird einen zweiten Sturz bekommen. Wir gehen außerhalb unserer Grenzen. Negative Zahlen erscheinen nicht in einer Erhöhung. Also, was wir tun und sagen können, ist, dass es tatsächlich diesen Algorithmus hier tun wird, wo
wir die Nummer nehmen werden, was auch immer ist. Also haben wir in negative ein eingefügt und wir werden hinzufügen, wie viele, ähm, Flecken es hier drin gibt und so können Sie sehen, dass es 123456789 10 11 12, weil denken Sie daran, das ist in minus eins. Hier drüben, das ist in minus eins. Das bedeutet also, dass unsere in gleich 12. Also werden wir tun, ist, dass wir die illegale Bindung nehmen und wir werden in
sie hinzufügen . Und in diesem Fall, Also ist es negativ eins plus und so fügen wir in als 12. Und so wird uns das die Position von 11 geben. Also, wenn wir jetzt zu diesem negativen gehen, werden
wir es dann wieder assoziieren, und wir werden das tatsächlich in den Rücken einfügen, richtig? Stecken Sie diese sieben genau hier in die Rückseite des Strahls ein. Und jetzt, was wir zu Dio gehen, ist, dass wir dieses Element nehmen und wir werden es hier rüber
ziehen, und jetzt ist die Vorderseite unseres Strahls, lass mich voran gehen und Rennen damit wir hier keine Pfeile bekommen. Also, jetzt ist die Rückseite oder die Vorderseite unserer Rate tatsächlich auf der Rückseite unserer Rechten, und so wird das ein wenig verwirrend. Du bist wie, Was ist die Front? Was ist der Rücken? Also müssen wir uns das nicht mehr so vorstellen,
diese gerade Linie. Wir müssen daran denken, als ob wir das in Kreisen herumgewellt hätten. Also tun wir es, um zu emulieren, dass curl ist, dass wir tatsächlich die Front und
die Rückseite nehmen , die wir verfolgen, und dies wird uns erlauben, an beiden Positionen einfügen, indem wir nur eine bestimmte
Nummer aufrufen und einfügen dort. Und das wird weiter so gehen, während dieser hier weiter geht. Und
natürlich können Sie an einen Punkt kommen, an dem sie sich gegenseitig überschreiben. Und wieder, das ist nicht etwas, was wir versuchen, mit dir umzugehen. Das ist ein Fehler. Wenn Sie jemals Ihre Vorder- und Rückseite haben, so wie versuchen Sie, genau den gleichen Bereich anzugreifen. Das ist ein Fehler Ihrerseits bei der Umsetzung Ihres Programms, und es muss irgendwo im Mantel
angesprochen werden . Aber hier geht es nicht um den Code. Hier geht es um die Theorie. Also mit diesem, was wir hier mit diesem kreisförmigen Strahl erstellt haben, indem wir die vorderen und hinteren Zeiger und, wissen
Sie, sie könnten einfach Variablen sein, die buchstäblich unsere Zahlen. Also könnten wir jetzt sagen, vorne gleich 11 ist. Während wir sagen konnten, zurück gleich zwei und dann, wenn wir jemals einfügen wollten, könnten
wir einfach x von zurück gehen, wie wir da oben gleich etwas getan haben. Oder wir könnten x von vorne minus eins gehen. Und ich habe sowohl das Minus eins als auch das exakte darin gemacht, weil ,
wie
ich schon sagte, ich wollte Ihnen beide Wege zeigen, aber Sie könnten sie irgendwie ähnlich halten wollen. Ähm, also sollte es hinten minus eins und vorne minus eins oder hinten und vorne sein. Es wird nur verwirrend sein, wenn einer von ihnen anders ist als der andere. Aber was ich hier sagen will, ist jetzt, da wir diese Variablen haben und sie wirklich leicht Auge behalten können. Nachdem wir etwas erstellt
haben, sagen wir einfach vorne plus einen Rücken plus eins oder was auch immer. Unsere Vorderseite minus einen Rücken plus eins und dann können wir sie immer wieder anrufen. Beginnend an der Rückseite in der Vorderseite dieses Strahls, machen
wir es kreisförmig. Und durch all das, was wir schaffen, können
wir das o von in durchkreuzen und mit einem kreisförmigen Strahl werden Einfügezeit tatsächlich o von Eins.
14. 2-6 dynamische Arrays: bis zu diesem Punkt haben wir wichtige Fall ignoriert. Und das ist die Tatsache, dass eine Gehaltserhöhung füllen kann und was wir tun, eine Gehaltserhöhung
gewinnen, füllen. Wir haben vor diesem Punkt im Grunde diskutiert, was als feste Arrays bekannt sind, die angehoben werden, dass, sobald sie bis zum Ende kommen, wenn sie voll von Kapazität sind, nichts anderes passiert. Sie müssen einige Zweifel überschreiben,
ein Zuschuss, um einige Daten zu löschen. Irgendwie muss ein Kompromiss getroffen werden. jedoch eine Art Array, Es gibtjedoch eine Art Array,das mit Ihrem Programm wachsen kann, und dies wird als dynamisches Array bezeichnet. Und was wir in diesem Vortrag diskutieren werden, ist dynamisch erhöhen, wie sie funktionieren und einige der Laufzeiten, die mit einer solchen Erhöhung verbunden sein könnten. Das erste, was wir verstehen müssen, ist, dass eine Seite und Ray voll wird. Also lassen Sie uns sagen, dass wir in einem Strahl genau hier und sobald es voller Zahlen oder Stück
Daten wird . Also haben wir, wie, eine Drei hier, zwei, vielleicht eine 1 1007, wissen Sie, spielt keine Rolle, wenn es voll ist. Sobald unser Ray hier oben voll ist, was wir tun, um das hinzuzufügen. Also, wenn wir, wissen
Sie, hier unten
beschriften, welche Bereiche hier sind. Also haben wir die 01 Spalte 234 Der einzige andere Weg, den wir hinzufügen können, ist, dass wir etwas
überschreiben müssen . Und wenn wir bis zum Ende hinzufügen wollen, dann bekommen wir ein großes Problem, weil wir nicht hinzufügen können, und es gibt kein Ende. Es wird sagen, ähm, zum Beispiel, wenn Sie ein Programm haben, das die ID jedes Mal um eins erhöht, wollten
wir zum Ende hinzufügen. Sobald wir zu diesem Punkt gekommen sind und wir versuchen, das Ende noch einmal hinzuzufügen, wird
es einen zweiten Sturz bekommen. Wir werden so etwas wie, wissen
Sie, ähm, wir müssen bis zu Ex von fünf addieren, jetzt gleich sieben. Das wird nicht funktionieren. Das wird in einem Segue-Fehler enden, weil es hier keine fünf gibt. Es gibt keine fünf auf der rechten Seite hier drüben, also wird es versuchen, Daten zu berühren, die es nicht die Fähigkeit oder das Wissen zu berühren hat, was Fehler das Programm gesetzt. Es wird lüften und es wird nie hinrichten. Was machen wir dann in dieser Situation? Was wir tun können, ist, dass wir tatsächlich dynamisch die Größe des Arrays erhöhen können. Jetzt ist das Problem, dass, sobald ein Array erstellt wird, die Größe erstellt wird. Wenn Sie sich erinnern, zurück zu haben, wurde ein Speicher erstellt, zum Beispiel hatten
wir eine Reihe von Segmenten und sagen wir, in jedem dieser Segmente hat es dieses
Array direkt hier erstellt . Aber das Problem ist, dass dies Segment bereits zugewiesen wurde und danach zusätzliche
Daten waren . Sie können also nicht einfach die Größe des Arrays erhöhen. Das funktioniert nicht, weil Sie
hier einige andere vielleicht systemkritische Daten überschreiben würden . Und das ist ein Problem. Das wollen wir nicht tun. Also, was Sie tun können, ist, anstatt nur bis zum Ende hinzuzufügen, können
Sie ein neues Array erstellen und alle Informationen dort drüben ein neues,
größeres Array kopieren . Und so ist das die übliche Technik, die normalerweise verwendet wird. Und so da. Du weißt, dass es ein paar verschiedene Möglichkeiten gibt, dies zu tun. Nehmen wir an, dass anstelle einer Fünf Array eine am Ende hinzufügen wollte. Also, jetzt, was wir tun müssen, ist, lassen Sie uns in einem seltenen hier zu schaffen. Nehmen wir an, es ist statt fünf Bigot, sechs große. Also ist es hier. Hier, hier, hier, hier war das 123456 Okay, und dann kopieren wir eine Daten. Also haben wir drei und das halten das Problem hier ist das, was wir haben, um ein neues
Array zu erstellen ? Denn worüber wir gerade gesprochen haben, können
wir es nicht einfach länger machen. Also müssen wir ein neues Array erstellen, aber es gibt keine Erhöhung leer. Jetzt müssen wir wirklich reingehen und jedes einzelne Stück Daten erfassen und kopieren . Und wenn wir das
tun, wird es am Ende sein, dass wir eine Transaktion machen müssen. Also ein Preis hier ist drei, dann ein Preis, um die 21 Kosten zu erhalten, um die 11 Kosten zu erhalten, um die 10 1 Kosten zu erhalten, um die sieben und dann den Einsatz hier zu bekommen. Lassen Sie uns
zum Beispieleine Einfügung erstellen. zum Beispiel Jetzt schafft es Ex von fünf. Wir sagten, es ist gleich sieben. Und so bekommen wir die sieben eingefügt. Aber Sie werden feststellen, dass anstelle des normalen Einsatzes bis zum Ende, mit dem wir es zu tun ,
denken Sie daran, zurück in all dem, innen nach hinten sollte konstante Zeit sein. Das dynamische Ray, das Problem ist,
ist, dass wir, als wir versuchten, ein bereits aufgefülltes Array auf die Rückseite einzufügen, ein zusätzliches hinzugefügt
haben, aber es dauerte rechtzeitig. Warum hat es Zeit gedauert? Weil es in Zahlen hier 12345 gibt, also in dieser Situation sind wir in gleich fünf . Aber wir mussten mitnehmen. Wir haben eins zu unseren Enden mit einem R N wurde sechs, und es dauerte sechs Operationen, um alles zu kopieren. Und so stellen Sie sich vor, wenn dies eine Reihe von, sagen
wir,
100 von diesen hier wäre . Es würde 100 Operationen dauern, um alles zu kopieren. Das bedeutet also direkt proportional dazu, wie viele Zahlen wir hier haben. Wie maney drin haben wir hier. Das ist genau,
wieviele ,
wie Operationen dauern werden. Also statt unserer schnellen Geruch zuerst,
oder sind konstante Zeit ist nicht mehr, dass dieser Einsatz tatsächlich o der Endzeit wird, und das ist ein Problem, weil das Einfügen in ein Rennen schnell sein sollte. Das ist einer seiner Vorteile. jedoch Wenn wirjedochbis zur Endzeit kommen, beginnen einige unserer anderen Optionen viel
appetitlicher zu werden , denn wir haben nicht mehr sofortige Einsätze. Also, was tun wir? Es gibt tatsächlich einen Weg, um das zu umgehen. Es gibt einen Weg, dass Sie diese Implementierung nicht durchführen müssen, damit Sie
sie nicht bis zum Ende ändern müssen. Sie können das hier relativ behalten, und es kommt alles auf einige Durchschnittswerte an. Sagen wir also, anstatt es auf die naive Art zu tun, die darin besteht, jedes Mal eine neue Box einzufügen. Also, wenn wir sechs brauchen, würden
wir nehmen Wir würden eine Schachtel hier am Ende einfügen, was wir hier gemacht haben. Und wenn wir einen brauchen, erstellen
wir hier unten ein ganz neues Array, und dann haben Sie es wissen, es B B 7 groß, und wir könnten das weiter tun. Aber alles, was wir tun, dass es das Ende geschuldet wird, also können wir stattdessen schwächen tun, ist es jetzt doppelt so groß wie das Array. Wenn Sie also ein Array haben, das erstellt wurde, gehen
wir hier durch die doppelte Art von Diagramm. Sie haben also ein Array. Es ist jetzt mit einem gefüllt. Jetzt fügen Sie bis zum Ende ein. Jetzt verdoppeln wir es. Es ist zu vier als acht von 16 als 32 in 64 1 28 und so weiter. Es geht hoch, wir tun Exponential ist hier, um das X genau hier oben zu tun. Das ist, was wir hier tun, ist jedes Mal, wenn die Raketen gefüllt sind, wir werden die Größe des Arrays verdoppeln und die Art und Weise, dass der Grund dafür ist wenn Sie bemerken, dass es eine abnehmende Zeit gibt, die wir über die Ende. So zum Beispiel sehen, werden
Sie
zum Beispiel sehen,dass
es in jedem dieser Punkte O bis zum Ende sein muss. Wir haben zu dir. Wir müssen die gesamten Daten aus dem obigen kopieren. Wir müssen die vorherigen Daten in die neue kopieren. Aber Sie bemerken auch etwas hier ist, dass es eine zunehmende Menge an Abstand zwischen jeder dieser Zahlen gibt. In zunehmendem wird
es
länger, länger und länger, was bedeutet, wenn wir die Größe nicht ändern müssen, müssen
wir hier oder hier nicht die Größe ändern. Was bedeutet, zwischen zum Beispiel 65 65 zu 1 27 Wir müssen es nicht ändern,
was bedeutet, dass alle diese Operationen eine Straße zu der einen, weil wir gerade regelmäßige
Einfügungen an diesem Punkt machen . Das ist also irgendwie, was das hier unten die untere hier darstellt, was ich hier vertrete, ist, dass wir diese Größe nehmen und anstatt sie fünf haben, verdoppeln
wir sie auf 10. Also, jetzt kopieren wir die Daten direkt hier und wir gehen zu drei, 21 10 107 und bei den sieben. Und jetzt, anstatt über das Ende für die nächsten vier Operationen zu tun, werden
diese Anzeigen alle oh,
um die eine, weil wir nicht haben, um die Größe zu ändern schwächen. Fügen Sie es einfach wie ein normales Array ein. Und so war das O bis zum Ende. Und dann, wenn wir es zurückbringen, wenn wir hier nach oben schauen, können
wir darüber nachdenken, so dass dieser am Ende gewesen wäre, um einzufügen, und dann musste er sich verdoppeln. Das wäre also bis zum Ende raus gewesen. Aber dann haben wir einen Platz von 02 mit einem oh zu dem einen und dann würde ein Doppel haben. Das war fünf. Es sollte vier sein. Wenn wir es auf diese Weise tun, werden
wir sehen, dass es immer mehr Menge des O zu den Einsen. Und warum ist das so wichtig? Denn das bedeutet, dass
wir, anstatt unsere gesamte Operation bis zum Ende O zu sein, tatsächlich in einer Art Durchschnitt schaffen können. Werfen wir einen Blick auf diesen Durchschnitt. Also gehen wir hier rein und lassen uns hier ein paar Mock-Schöpfungen durchlaufen. Also haben wir einen Einsatz 23456 Ich werde einfach die Liste hier runtergehen. Wir schaffen uns hier nur einen kleinen Tisch. Von allen möglichen Einfügungen, die wir bis zu einem bestimmten Punkt machen könnten und Sie beginnen, das Muster hier zu sehen, werden
Sie beginnen zu verstehen, warum das wirklich gut ist, es zu tun, um das dynamische
Array zu verdoppeln , und Wir gehen bis zu 25 hier. Wir sind tatsächlich gehen bis zu 32, denn das ist einer unserer Bits sind einer unserer
Doppelpunkte . Okay, wenn wir 12 hier einfügen, wird
es eine ständige Operation sein. Wir haben ein Array. Wir werden unser Recht schaffen und es wird F-Größe eins sein. Das wird also konstant sein, wird genau hier eine sein. Jetzt, sobald Sie zu diesem Punkt kommen, läuft in den Weltraum, also mussten wir es verdoppeln. Jetzt ist es zu groß. Dies war also eine Ode an das in Betrieb, was , tatsächlich ein Nein an die eine Operation
war,weil wir nur ein Stück Daten hatten, über das wir
übertragen mussten . Aber es ist technisch gesehen eine Ode an das Ende, also werden wir ohne dich da drinnen sitzen. Jetzt haben wir hier einen offenen Raum, also wenn du darüber nachdenkst, werde
ich das Bild hier am Anfang ein bisschen zeichnen, um zu veranschaulichen was wir hier tun. Also hatten wir einen Platz. Das Problem war, dass wir eine 2. einfügen wollten. 1 Es gibt keine Flecken mehr. Also, was wir taten, war, dass wir uns verdoppelt
, die Daten überschrieben haben. Jetzt gibt es genug Plätze. Jetzt wollen wir zu drei gehen. Das Problem ist, dass wir, wenn wir drei
sind, es erneut verdoppeln müssen, weil es keine Plätze gibt. Jetzt werden wir uns wieder verdoppeln, und wir füllen das Insulin wird ein weiteres O bis zum Ende sein. Aber jetzt Nummer vier, um den vierten Platz zu füllen, es ist offen, also können wir einfach zu dem gehen, den wir hier nicht verdoppeln müssen. Die Spot-Rate hier ist offen, und so machen wir weiter, und wir haben bemerkt, dass fünf verdoppelt werden müssen, weil wir auf den Spots gelaufen sind, damit wir sie wieder verdoppeln
können. Kopieren Sie alle unsere Daten auf das neue Array. Und jetzt gehen wir weiter und entfernen Sie die Mehrdeutigkeit direkt dort. Und so haben wir jetzt alle unsere Daten. Unsere Daten an dieser Stelle füllen dieses und dieses und dieses und dieses ein und fünf aus, und jetzt, sobald wir kämpfen können. Also, dass fünf Operationen, die man uns brachte, bis zum Ende gehen, und jetzt, sobald wir zu sechs hier oben sind, können
wir es sofort ausfüllen. So gehen Sie auf die 17 ist genau der gleiche Weg über die eine und sind Platz hat acht Plätze. Also ist es bis zum Ende hier oder meine schlechte, meine schlechte. Es ist immer noch eins mit einem, weil wir hier einen offenen Raum mit einem anderen O zu dem einen haben. Also jetzt haben wir die Gesamtheit des Arrays wieder gefüllt, das ist 12 12345678 Es ist gefüllt, und jetzt müssen wir noch einmal verdoppeln, also verdoppeln wir es wieder. Und jetzt müssen wir ein Nein für die Inbetriebnahme schaffen, und ich werde es jetzt weiter zeichnen, weil Sie jetzt irgendwie ein Muster sehen können. Hier ist also haben wir es verdoppelt. Und jetzt ist es gut bis zu 16 Spots, also könnten wir mit einem ausgehen. Oh, der mit einem. Wir können weitermachen, bis wir zum nächsten Doppelteil kommen. Und dann sind wir jetzt bei 16 Uhr. Also, jetzt geht es bis zum Ende, und dann werden wir fortfahren Konstante Zeit,
konstante Zeit, konstante Zeit, konstante Zeit, konstante Zeit, konstante Zeit. Ich werde Theo's nicht mehr schreiben. Ich werde nur die konstanten Zeiten korrigieren,
konstant, konstant, konstant , konstant. Und dann bis, wenn wir 32 konstant 33 in und so weiter. Und warum ist das wichtig? Nun, Sie werden am Anfang bemerken, wir ein Haufen O zu den N-Operationen hatten. Aber danach wurde es immer weniger so bis zum Ende. Und immer mehr Blockhaus oder zunehmend, mawr konstante Zeit. Wir, zum Beispiel, hier haben wir drei Konstanten als eine lineare Zeit. So nennt man es. Wir werden anfangen, es linear zu nennen, dann eine Reihe von konstanten Zeiten, eine schlankere Zeit als eine außergewöhnliche Menge an konstanten Zeiten als einmal. Und was passiert, ist im Laufe der Zeit diese konstanten oder nicht konstanten Zeiten, die diese linearen Zeiten Unterzahl
werden. Sie werden überwiegen. Und das liegt daran, dass wir uns jedes Mal verdoppeln, also wenn wir es verdoppeln, erstellen
wir tatsächlich ein log-rhythmisches Vorkommen von O bis zum Ende. Also erstellen wir ein Vorkommen wie dieses, das Sie lesen können. Am Anfang haben
wir einen Haufen loswerden vom Anfang. Wir haben ein paar andere. Es geht von Null Zehe. 1234 Anrufe von eingeloggt. Aber danach sind fünf Anrufe hier drüben. Sechs ruft seinen Weg hierher. Sieben Anrufe sind einfach komplett aus dem Bildschirm. Und so wird es im Laufe der Zeit immer weniger. Und all das läuft auf eine wichtige Art, ähm, eine wichtige Erkenntnis. Und das ist, lassen Sie mich weitermachen und hier etwas tun. Und das ist die Tatsache, dass, wenn wir es jedes Mal verdoppeln, was wir tatsächlich tun, ist, dass wir
ein Protokoll von Zeit erstellen, ein Protokoll von durchschnittlich vier unseren Enden, was bedeutet, dass diese Art von etwas kniffligen Matthäus. Also werde ich es dir einfach sagen und es einfach irgendwie verstehen. Vielleicht fügen wir ein Dokument an, das es ein bisschen mehr versteht. Aber was hier passiert ist, ist das Protokoll des Endes, denn in ist damit verbunden, weil unsere Anrufe, weil unsere Anrufe an, weil unsere Anrufe zu beenden beginnen, in ein Protokoll von in gehen. Wir können das tatsächlich auf konstante Zeiten senken. Der Durchschnitt wird konstante Zeit, was bedeutet, dass das Gesamt-Worst-Case-Szenario
für alle intensiven Zwecke
konstanteZeit wird für alle intensiven Zwecke
konstante . Jetzt ist es eine Berührung über der wahren, konstanten Zeit, aber für relationale Zwecke, um es mit anderen Dingen zu vergleichen, können wir verstehen und schwächen. Und es wird sehr allgemein angenommen, dass dieser Einsatz konstante Zeit wird. Und so, durch all das, es kann man nur daran denken. Es gibt ein paar verschiedene Möglichkeiten, ein dynamisches Array zu implementieren, aber es gibt einen sehr effizienten Weg, dies zu tun. Und Sie werden feststellen, dass viele Informatik solche Sachen hat, wo es eine sehr
effiziente Möglichkeit gibt , diese Designs und diese Muster zu implementieren. Und es gibt einen sehr ineffizienten Weg. Und so ist in dieser Situation, Verdoppelung in jeder Zeit sehr ausreichend in der Tatsache, dass es am Ende wegen dieser logrhythmischen Veränderung zu konstanten Zeit kommt . Und deshalb ist es Verständnis. Die Mathematik ist irgendwie wichtig, denn dadurch könnte
Matthew verstehen, dass, wenn Sie diesen langen Durchschnitt von Ketten im Laufe der Zeit erstellen, Ihre Operation tatsächlich zu konstanter Zeit durchläuft, und dass wäre der effizienteste Weg, dies zu tun. Das sind also dynamische Arrays und ein wenig von der Theorie dahinter. Ein wenig Mathematik hinter ihnen und nur eine Art gute Einführung in die dynamische Erhöhung der
Arbeit und wie man eine dynamische Rate erstellen könnte, die nur eine neue erstellt und dann die Größe verdoppelt und dann alle Informationen in jedem Mal, wenn es verdoppelt. Also, diese sind dynamisch erhöhen ihre
wirklich, wirklich cool, weil sie einige dieser Begrenzung der Raumgröße entfernen, die konstant sein , und sie erlauben Ihnen, nur eine Menge Flexibilität in Ihrer Programmierung zu haben.
15. 2-7 Array Review: Also haben wir in diesen letzten Vorträgen viel über eine Gehaltserhöhung berichtet. Und so wollte ich irgendwie einfach einen Schritt zurück machen und einfach alles wieder ganz schnell durchgehen und das alles irgendwie in 11 Video zusammenbinden. Also werden wir schnell rüber gehen. Was wir in den vorherigen Lektionen gelernt haben, Art von re, Sie wissen, wieder zu veranschaulichen, was wir gelernt haben und dann nur alle diese Aspekte zusammen zu binden
, so dass wir wirklich ein gutes Verständnis für eine Erhöhung haben können, wie sie funktionieren was ihre Laufzeiten, etcetera. Das erste, was wir tun müssen, ist, sich daran zu erinnern, wie das Rennen funktioniert. So erhöhen sind nur ein Punkt von Daten innerhalb unserer Festplatte oder unserem RAM oder einem anderen Punkt unseres Computers. Und diese Daten werden in ein Segment gebracht, wenn wir ein Array erstellen, das auf das
Stück Daten als Ganzes zeigt , und wir geben ihm einen Namen. Zum Beispielhat
es eine physische Adresse,
eine Computeradresse,
aber wir könnten es nur als eine Variable deklarieren, wie,sagen
wir,
X istgleich einem Array, was eine Ranglänge fünf ist. Zum Beispiel hat
es eine physische Adresse, eine Computeradresse, aber wir könnten es nur als eine Variable deklarieren, wie, sagen
wir,
X ist Und so könnten wir in dieser Situation unser Array von dem Namen von X erklären, während im Computergespräch. Es wird eine Adresse von einem bestimmten Ort und Speicher zu finden, und wenn wir diese Adresse anrufen, wird
es uns dann in das Array selbst bringen. Und das Array hat diese vielen Namen, die ich gerne nenne, die nur die Art des Teils des Arrays sind, den wir kontaktieren möchten. Und dann können wir all diese kontaktieren und sie sind normalerweise so, als würden sie hier sogar
am Ende stehen . Das könnte also Null sein, etcetera. Allerdings macht
der Computer diese Art von außerhalb des Geltungsbereichs dieses Kurses, Aber der Computer wird sein Ding tun, damit wir
sofort auf jeden dieser Punkte zugreifen können , indem wir ihm seinen vollständigen Namen geben. Und dann sind es viele Namen. Also in dieser Situation, wenn wir wollten, wenn wir die sündlose und Datenrate hier gefüllt , zum Beispiel, wir haben, wissen
Sie, nur einige Zahlen hier, und wir wollten einen bestimmten Punkt oder einen bestimmten Ort hier eingreifen. Alles, was wir tun müssen, ist, ihm einfach den Namen und dann den Mini-Namen in dieser Situation zu geben. Und dann bekommen wir unsere Ergebnisse zurück. Zum Beispiel würde
dies es auf 10 setzen und dann,um es zurück zu bekommen,würden
wir sagen, wir würden es einfach anrufen und es würde es zurückrufen und es würde uns 10 geben,
weil es gehen würde. Zum Beispiel würde
dies es auf 10 setzen und dann, um es zurück zu bekommen, würden
wir sagen, wir würden es einfach anrufen und es würde es zurückrufen und es würde uns 10 geben Dies ist sein Hauptname. Es packt seinen Mähnennamen. Es wird in seinem vielen Namen verwendet, und dann erhält es unsere Daten so und so kann eine Erhöhung auch zusätzliche
Eigenschaften haben , das Array in dieser Situation. Was wir tun, ist, dass wir eigentlich nur von eins zum nächsten gehen, und wir nennen es willkürlich sagen, sollte 10 3 sein, sollte 44 sein. jedoch Wenn Siejedochein wenig mehr von einem Stil eine Struktur hinzufügen möchten, können
wir anfangen, auf der Rückseite hinzuzufügen oder an der Vorderseite hinzuzufügen und nur von selbst. In dieser Situation beginnen
wir, in das Problem zu bekommen, wo, wenn wir an die Front hinzufügen wollen, wir alle unsere Daten nehmen und sie um eins verschieben müssen, weil es keine Möglichkeit gibt , dass wir einfach verknüpfen können. Aber das ist die Front. Das ist das Ende. Wir können nicht zu negativem gehen. Negativ ist ein SEC-Fehler, der in unserem Programm nicht existiert. Also müssten wir alles nach unten verschieben. Und das bringt ein Problem, damit wir das beheben können. Das Problem ist, dass wir anfangen können, eine Art zusätzliche Aspecto Ehre zu schaffen. Also, wenn wir es kreisförmig machen wollen, denken Sie daran, dies wurde gelehrt Wenn Sie es kreisförmig machen wollen, fügen
wir einfach einen vorderen Zeiger und einen hinteren Zeiger darauf hinzu und dies wird ein kreisförmiges
Array emulieren . Es wird diese Art von Sache emulieren, wo das Array tatsächlich kreisförmig ist, dass es wird, wenn Sie nach vorne hinzufügen möchten, alles, was Sie tun müssen, ist eins nach links zu bewegen hinten zu
gehen. Alles, was Sie tun müssen, ist eine
oder in dieser Situation
gegen den Uhrzeigersinn oder im Uhrzeigersinn zu bewegen oder in dieser Situation . Wenn Sie auf der Rückseite hinzufügen möchten und so können wir dann diese Zeiger verschieben, was auf allem ist können
wir diese Zeiger dann von einem Bereich zum nächsten verschieben. Wenn wir so wählen, sobald wir ein Element hier hinzufügen. Wir könnten den Rücken hier verknüpfen. Wir könnten den Rücken direkt hier verknüpfen. Und dann können wir in sofortiger Zeit auf die Rückseite hinzufügen und an der Front und Instant Time als auch hinzufügen. Aber dann stoßen wir auf den Fall, in dem zum Beispiel Array der Platz auslaufen könnte. So zum Beispiel könnten
wir
zum Beispieldieses Recht haben, und es könnte zu groß werden. Und wenn unser Strahl am Ende zu groß wird, können wir
eigentlich dio weitermachen, wenn wir seine Größe verdoppeln können. Das macht es also zu einem dynamischen Array, schwächen tun wirklich, irgendeine Möglichkeit, es größer zu machen? Wir könnten es gehen lassen, zum Beispiel, Ähm, fügen Sie
einfach eins bis zum Ende hinzu. Aber wir haben gelernt, dass es dadurch nicht effizient ist. Das macht es wirklich ineffizient. Wenn wir also ein Array von zu
hätten, könnten wir die Größe verdoppeln, sobald wir einen ungültigen Punkt erreicht haben, und wir könnten es zu einem
Array von vier wie diesem machen und wir werden es weiter verdoppeln und nach oben und oben, und wir werden sehen, dass es langsam größer wird und größer und größer, um unsere Daten im Laufe der Zeit anzupassen, und dies ermöglicht es uns, eine Tabelle oder ein Array zu erstellen, das im Laufe der Zeit eine Einfügung des Endes von O von eins durch Mittelung hinzufügt. Also werden wir ein paar Instanzen dieser Instanzen hier haben, wo es sein wird,
wo es in jedem dieser Fälle eine lineare Zeit sein wird, und das kommt nur auf die Tatsache, dass wir alle unsere Inhalte von jedem Mal kopieren müssen, wenn wir re Größe es. Wir müssen unsere Inhalte vom älteren A in den neuen Strahl kopieren und dann unsere zusätzliche
Nummer hinzufügen . Und jedes Mal, wenn wir das erweitern müssen, werden
wir es am Ende überall kopieren müssen, was in,
ähm,
Prozedur sein wird ähm, . Es wird also jedes Mal ein in Verfahren sein, wenn wir das tun müssen. Aber wenn wir es jedes Mal verdoppeln, wenn dies im Verfahren immer weniger üblich wird, bis es
in einen unendlichen Punkt geht , an dem es im Grunde wird, werden
wir es ändern müssen. Wir werden die fast null Mal verwenden müssen, also denken, wenn wir
irgendwann ins Unendliche gehen , wird
es eine Zeit geben, in der wir,
du weißtschon, du weißt 1.000.000.000 konstante Operationen benutzen und dann eine in Betrieb sind. Und wenn Sie eine nehmen und sie durch 1.000.000.000 teilen, erhalten Sie eine Zahl, die so klein ist, dass sie genauso gut Null sein könnte. Und aus diesem Grund ergibt
es, dass die Enden, wie sie in die Unendlichkeit gehen, die Enden hier, wie sie in die Unendlichkeit gehen, tatsächlich Null werden, und sie werden im Grunde nutzlos. Wir sehen sie nicht mehr an. Also schauen wir uns einfach diejenige an, die eine Art aus, und das ist die ständige Nutzung von konstanter Zeit. Wenn wir also jedes Mal unsere A-Erhöhung verdoppeln, wenn ihnen die Daten ausgehen, können
wir einen konstanten Zeiteinsatz nach hinten bekommen, und das macht unser Programm so viel effizienter. Das ist also nur eine Art Überblick über das, was wir in diesen letzten Vorträgen über
eine Gehaltserhöhung behandelt haben , wie man sie kreisförmig machen könnte, wie man sie dynamisch machen könnte, und in einigen der Zeiten mit jedem dieser Strahlen. Also wird das diese Daten in der nächsten Art von Lektion testen, wo wir tatsächlich ein kleines Quiz hier machen, um sicherzustellen, dass all das Zeug in Ihren Köpfen zementiert ist und Sie zumindest die Grundlagen verstehen. Du musst diese ganze Sache nicht zu 100% verstehen. Viele Informatiker verstehen diese ganze Sache nicht zu 100%. Wir wollen nur ein gutes Verständnis davon haben, damit wir, wenn wir etwas vergessen, es nachschlagen können. Und wir haben eine gute Basis, dass wir verstehen, was wir nicht verstehen. Wenn das Sinn ergibt, verstehen
wir den Teil, dass wir Probleme haben, nach oben zu suchen. Und wenn wir nur ein kleines bisschen verstehen, wenn wir eine Grundlage haben, dass wir unser Lernen fortsetzen können. Ich freue mich, dass wir es so weit geschafft haben, dass wir begonnen haben, Ihre erste
Datenstruktur in einer Gehaltserhöhung zu lernen , und ich kann es kaum erwarten, Sie in der nächsten Einheit zu sehen, wo wir verknüpfte
Listendiskutieren werden Listen
16. 2-8 reale Beispiele aus der Welt: Nun, da wir ein gutes Verständnis für eine Erhöhung haben und wie sie theoretisch funktionieren, schauen wir uns einige Beispiele der realen Welt an, wo wir mit einem Array interagiert haben ohne es zu wissen. Das gebräuchlichste Beispiel
oder etwas, das sehr häufig verwendet wird, ist auf unseren Smartphones. Ah, oft sind sowohl die Listen hier als auch die Art des APP-Layouts alle Array-basiert. Also, was sie tun, ist ein Sturm in einer Gehaltserhöhung. Und wann immer Sie darauf klicken, ruft
es den Befehl auf, welches Array Sie haben. Also, zum Beispiel, lasst uns dieses Gitter hier auf der rechten Seite haben. Sie können sehen, dass wir 12345678 den ganzen Weg nach unten haben. Und das ist das Array. Zahlen in jedem dieser Arrays werden in einem dieser Arrays gespeichert. Also, was haben wir auf eine Schaltfläche geklickt? Also, zum Beispiel, wenn wir hier auf Facebook Rate geklickt haben, die mit der Nummer 10 ausgerichtet ist, wird es in das Array gehen und nach dem Befehl bei 10 suchen . Sobald es sieht, dass der Befehl bei 10 offen Facebook ist, wird
es öffnen Facebook, und wir werden das gleiche mit tun, wenn wir 15 hatten. Es wird wieder nach oben gehen. Wir hatten 19. Es wird zu lokalen etcetera usw. gehen. Was es also tut, ist, wenn es es erstellt, es erstellt ein Array mit einer Reihe von Referenzen dessen, was es öffnen sollte. Und diese Strahlen haben auch andere Informationen. Wie was? Das Symbol sollte die Farben sein. Sie wissen, ähm, und andere Art von Informationen, die mit jedem von ihnen funktionieren würden, der Name der APP, Sachen wie das. Und dann, wenn wir darauf klicken, geht
es hinein und es findet die eigentliche Software, die sich öffnet, wenn wir darauf klicken. Und hier drüben haben wir auch eine Liste. Viele Male werden diese mit einer Erhöhung erstellt, so dass Sie das Account-Array haben, das hier eine Reihe von verschiedenen Dingen haben wird. Und dann haben Sie das allgemeine Array, das hier
auch eine Reihe von verschiedenen Eigenschaften haben wird. Der Grund, warum Arrays funktionieren. Das Beste hier ist, weil sie sofort sind. Wenn wir also 18 klicken, wollen wir keine Verzögerung dazwischen. Und wenn wir auf einen geklickt
haben, erfahren wir in der nächsten Lektion etwas über eine andere Datenstruktur, die länger dauert, je weiter Sie gehen. Wenn es
zum Beispiel45 APS gab,möchten
wir nicht, dass Nummer 45 länger dauert als Nummer eins. zum Beispiel Wenn es
zum Beispiel45 APS gab, Wir wollen sie alle auf den Augenblick. Gleiches mit hier drüben, wenn wir auf etwas klicken, wollten
wir genau die gleiche Zeit sein. Und, wie wir über eine Gehaltserhöhung gesprochen
haben, haben Sie diese Fähigkeit. Sie können das Array von zwei oder vier oder 10 aufrufen und dieses Element sofort erhalten, und deshalb sind sie so wichtig. Und sie sind sehr wichtig, um sie zu benutzen. Wenn Sie sich ansehen möchten, was einige der Aufrufe für eine Gehaltserhöhung in verschiedenen Sprachen sein könnten, gibt es tatsächlich einen wirklich benötigten Wikipedia-Artikel darauf. Aber es gibt diese tolle Tabelle hier und Sie können alle diese Sprachen sehen, und jede von ihnen hat ein Array in irgendeiner Weise, Form oder Form. Hier ist eine Art der großen Spieler in der Programmierung genau hier haben Sie wissen, Ihren Ruby, Ihr Python, Ihr Javascript, Java C C plus plus so wirklich, die großen Spieler auf dem Markt und sie sind alle genannt mit dem Namen des Arrays und in der Indexnummer Also, zum Beispiel könnte
dies AP-Array sein, und dann ist dies Index 10. Dies wäre also ein Aufruf von APP Array 10 und es würde alles darin aufrufen, also ist das eine Art interessanter Weg, es anzusehen. Sie können sehen, dass, obwohl alle diese Sprachen sind so verschieden voneinander, wenn sie alle eine Erhöhung in irgendeiner Form verwenden, oder eine andere gemeinsame Verwendung eines wirft mit Datenbanken mit wirklich, wirklich große Datenbanken, Manchmal werden sie nicht in einer Gehaltserhöhung gelagert, ihre in etwas anderen Manieren gelagert, wie Bäume oder solche Sachen. Nur weil du einmal so ein wirklich großes Array
hast, Milliarden magst, wird
es ein bisschen mühsam und eine Menge RAM muss gespeichert werden, wenn du all
diese sofort speichern willst . Also, was sie tun, ist, dass sie Dinge schaffen, die fast sofort sind, aber ein bisschen
mehr Zeit in Anspruch nehmen werden . Aber das ist das für eine Art späterer Erklärungen. Dies
ist
jedoch, jedoch, was in einem Strahl aussehen könnte. Wenn Sie eine kleinere oder sogar nur Tabellen in einer Datenbank
haben, verwenden sie eine Erhöhung. Wenn wir
zum Beispielnach Kochgeschirr sortieren wollten,könnten
wir alle diejenigen greifen, die Kochgeschirr gleich sind und dann einfach zurückrufen. zum Beispiel Wenn wir
zum Beispielnach Kochgeschirr sortieren wollten, Will könnte vielleicht eine Liste all dieser Zahlen machen, und dann übergeben wir es an eine Funktion, und dann ruft es einfach alle dieser Zahlen auf. Also, zum Beispiel, würde in unserer Liste sein und dann 13 und 14 werden in unserer Liste sein. Und als wir 13 14 anriefen, konnten wir eine weitere Liste mit nur Kochgeschirr erstellen, damit wir diese Liste
herausfiltern konnten . Arrays werden auch häufig im Web verwendet. Dies ist eigentlich eine meiner Websites, die ich habe, und das ist mit WordPress. Aber mit dem ordentlichen Teil darüber ist, dass ich den Code durchlaufen habe und jeder Teil davon tatsächlich ein Array in irgendeiner Form oder Form verwendet, was es tut, das alle Artikel als Array aufruft . Und es platziert sie hier, genau wie unser App-Beispiel früher. Und wann immer Sie auf eines dieser klicken, ruft
es die Funktionen auf, die Namen, die alles, was mit ihm kommt, und es geht irgendwie durch. Also diese Web-Seiten Facebook, Twitter sie alle verwenden eine Erhöhung in irgendeiner Form oder Form, um die Daten zu zeigen. Und dann wollte
ich auch einen Teil des Back-End-Codes hier zeigen. Also das ist eigentlich ein Code von , der Website, und dieses Zeug ist sehr, sehr komplex. Ich verstehe es nicht mal so gut. Es dauert eine Weile das Feld, um einfach hier zu springen und beginnen, Dinge zu verstehen. Aber eines der ordentlichen Teile ist, dass man einfach hier sehen könnte. Dies ist ein Kommentarformular auf WordPress. Es baut im Array auf. Es erstellt ein Array aller Informationen, die es aus dem Kommentar sammelt. Und es wird genau hier benutzt. Du kannst es sehen. Das Array wird hier deklariert. Und da ist Honore hier unten und Arrays hier oben. Es gibt Strahlen von in einer Raise in einem Rennen. Wie ich schon sagte, wirklich, wirklich komplex. Dieser Code ist eine Art Kauderwelsch, es
sei denn, Sie sehen ihn wirklich durch und verbringen Stunden und Stunden und Stunden damit, ihn zu analysieren . Aber ich wollte Ihnen nur zeigen, dass in all dem auch ein Array vorhanden ist. Also überall, wo Sie schauen, dass mit Codierung eine Erhöhung unserer gibt es vorhanden zu tun hat, und sie werden eine Erhöhung verwendet werden, sind fast die meisten. Tun Sie es, wenn nicht die am häufigsten verwendete Datenstruktur da draußen. Also, sie wirklich gut zu verstehen und dann einige ihrer Vorteile zu verstehen, wie sie schnell Laufzeit sind, wird Ihnen irgendwie zeigen, warum sie in der realen Welt so oft verwendet werden.
17. 3-1 Noten: Also, bevor wir in verknüpfte Listen zu bekommen, müssen
wir verstehen, was sind verknüpfte Liste, aus dem, was sie gemacht sind? Und so werden wir darüber reden, ist das, was sie gemacht haben. Und es werden Knoten genannt. Also, was genau ist eine Notiz? Eine Notiz ist wirklich nur ein Locationsobjekt. Es ist ein Objekt, das auf andere Objekte verweist, und das könnte ein bisschen eine verwirrende Definition sein. Also lasst uns voran gehen und schreiben das irgendwie. Lassen Sie uns illustrieren, was eine Notiz ist. Also diese Boxen hier unten, diese beiden Boxen unten, dieses linke in diesem rechten, das würden unsere
Knoten gezählt werden . Und hier oben haben wir ein Gedächtnis. Sie könnten also ein Array sein. Es könnte Ram sein. Es könnte wirklich jede Art von Speicher hier oben sein, aber was ich weiß, tut, ist, dass es eine Reihe von verschiedenen Eigenschaften darüber hat. Zum Beispiel könnte
es,
ähm,gehen
wir mit,
wie in der Regel hat es eine Dateneigenschaft. Zum Beispiel könnte
es, ähm, gehen
wir mit, gehen
wir mit, Das ist also die wichtige Eigenschaft. Zum Beispiel könnte
es ein Stück Daten wie so haben, und vielleicht hat dieser ein Stück Daten wie so, aber sie sind normalerweise nicht innerhalb der Notiz, weil dies nur wie ein
Standortobjekt sein soll . Also, was der Knoten tatsächlich tut, ist, dass er eine Stelle für die Daten an der Spitze hat, und dann hat er andere Art von Eigenschaften der Unterseite, die wir hier in einer Sekunde gehen werden. Und dieser obere Teil der Daten, es enthält tatsächlich die Adresse zu einem Punkt des Speichers. Also, zum Beispiel, sagen
wir in unserem Gedächtnis, hier haben wir,
ähm, wir haben diese Bereiche und das ist kein Array diese oder haben sie nur, wissen
Sie, es gibt zusätzlich Speicher hier drüben und hier drüben und diese Luft nur tatsächliche Punkte im Speicher. Also, wie dieser hier ist F Null. Das hier ist F eins. Das hier ist F zwei, und das hier ist F drei. Und was also? Es speichert tatsächlich hier, ist es, den Speicherort der Daten zu speichern, so dass es nicht in Ordnung sein muss. Zum Beispiel könnte
dieser Null x f drei speichern. Es hat also einen Zeiger, der es im Grunde auf dieses Stück Daten verweist. Nun, dieser hier drüben könnte vielleicht Null x f eins speichern und so wird es das bedeutet, dass Pointer genau hier ist. Und so jetzt, wann immer wir unsere Daten wollen, wann immer wir unsere Daten von unserem Knoten. Also, wenn wir die Daten von den Knoten wollen, was wir tun können, können wir einfach den Knoten aufrufen, und dann was auch immer sein Datenteil genannt wird und es wird uns geben, es wird gehen und die Arbeit für
uns erledigen . Es wird es finden und dann für uns zurückgeben. Und so ist der wichtige Teil über Knoten und der Grund, dass sie so oft verwendet werden, weil sie eine andere besondere Eigenschaft haben. Und ich werde diese Fondsgalaxie nutzen, die Penda diese Eigenschaft zeigt, und das ist die Tatsache, dass sie die Fähigkeit haben, sich miteinander zu verbinden. Also, zum Beispiel könnten
wir sagen, dass Naja, sagen wir, wir haben ein schmales Kommen hierher und wir haben einen Pfeil, der hier raus geht. Wir könnten hier vielleicht so etwas wie eine nächste haben, also könnten wir einen nächsten Teil von jedem dieser Knoten haben. Wir könnten einen vorherigen Teil zu einem dieser Knoten haben und diese können wirklich alles sein. Das könnte die Front sein. Wir kommen vorne auf einer dieser Seiten, die immer nach vorne zeigen wird. Wir könnten es immer nach hinten zeigen lassen. Wir könnten immer auf bestimmte Standorte zeigen, aber eine gemeinsame Technik ist die haben es vorher und vorne. Und so lassen Sie uns voran gehen und genau richtig, dass ein wenig klar vorherige, als nächstes. Und so hat jeder von diesen Vorherigen und Nächsten. Und was passiert, ist, dass wir es sagen. Wohin sollte der nächste gehen, wenn wir auf einen anderen Knoten zeigen können? Und in dieser Situation könnten
wir auf eine vorherige Notiz zeigen, und dieser vorherige Knoten könnte in diese Richtung rückwärts zeigen, so lassen Sie mich. Das war eine schlechte Luft. Lassen Sie mich Ihren ganzen Pfeil lesen, damit er so rückwärts zeigen kann, und dann könnte dieser nach vorne
zeigen, was genau da ist, und es könnte einen Pfeil haben, der tatsächlich rückwärts auf ihn zeigt, so
wie dieser. Und das, was das tut, ist, dass es eine verknüpfte Liste erstellt, und das ist, was wir diskutieren werden, ist, dass wir diese Jungs diese Knoten direkt hier verwenden, um verknüpfte Listen zu erstellen, und so gehen wir über genau, warum verknüpfte Listen wichtig sind Ähm, und wie sie wie sie uns helfen,
Ähm,
und wie sie
sich mit anderen Dingen vergleichen,
wie dem Array, über das wir bereits gesprochen haben. sich mit anderen Dingen vergleichen, Also in dieser Art von Vortrag der Art von Einheit würde verlinkte Listen diskutieren.
18. 3-2 Liste: Nun, da wir eine gute Vorstellung davon haben, wie Knoten funktionieren, lassen Sie uns ein wenig weiter untersuchen und hinter die Intuition von verknüpften Listen zurückgreifen. Also, was für eine verlinkte Liste ist, was ich in der letzten Vorlesung beschrieben habe, wo Sie einen Haufen von dieser kleinen Nase haben. So zum Beispiel könnten
wir
zum Beispielein paar davon haben. Ich meine, diese Dinger könnten unendlich sein, also könnten wir hier eine Notiz haben. Eine Notiz hier, eine Notiz hier, eine Notiz hier, Notiz hier, und neu tut so weiter und so weiter. Und die Abkürzung für die Art der Zeichnung, die drin ist, wird der Datenpunkt sein. Und wenn es auf einen anderen Ort zeigt, zeichnen
Sie einfach einen Pfeil. Also, was wir hier haben, ist, dass wir eine Reihe von verschiedenen zufälligen Positionen im Speicher haben, die
alle durch diese Zeiger miteinander verknüpft sind . Also sind wir in einem Array. Wir hatten alles im linearen Raum. Honore, zum Beispiel, wir hatten in einem Array. Wir hatten alles in, wie ein linearer Raum, in dem es nacheinander war. Also, das wäre wie 34 10 12 und dann 11 hier, wo wir eins hatten nach dem nächsten in, in einer dieser Arten von in einer verlinkten Liste, was Sie haben werden ist, dass es überall in Erinnerung bleiben wird. Also könnte dieser irgendwo sein. Wie zum Beispiel, diese vier könnten,wissen
Sie,hier
unten sein wissen
Sie, , während diese 10 in einem anderen Stück Speicher vorbei ist und diese 12 ist es nicht ein anderes Stück Speicher und so weiter und so weiter. Also, was eine verknüpfte Liste lebt Sie dio ist es Ihnen erlaubt, Daten überall
miteinander zu verbinden . Und was dies gibt Ihnen die Fähigkeit zu dio ist, es gibt Ihnen die Fähigkeit. Lass uns das loswerden. Es gibt Ihnen die Möglichkeit, tatsächlich kontinuierlich auf die Längenliste hinzuzufügen, ohne Dinge wie Erweiterung oder Verdoppelung
tun zu müssen . Und wenn Sie darüber nachdenken, wenn wir über das Array sprechen, wie es jedes Mal verdoppeln musste, um effizient zu sein, wenn es größer wurde, könnten wir oft in einen Fall stoßen, in dem nur die Hälfte des Arrays gefüllt ist, was bedeutet, dass wir alle seine anderes Zimmer über auf der anderen Hälfte. Das wird nicht gefüllt, was ineffizient ist. Wir verschwenden Platz. Es gibt nur Sein Es wartet darauf, zugewiesen zu werden, aber es ist nicht zugeteilt. So verlinkte Liste erlaubt es uns, immer und ständig haben, um die Erinnerung, die benötigt wird, um unsere Liste zu halten und nicht mehr und nicht weniger. Wenn wir also eine Zahl hinzufügen müssen, können
wir sie bis zum Ende hinzufügen. Also, zum Beispiel, wenn wir Ach,
vier hinzufügen wollen , könnten
wir gehen. Und dann gehen wir einfach bis zum Ende und wir fügen vor der Liste hier und worüber ich hier spreche, sind Singley-verlinkte Listen. Und was das bedeutet, ist, dass Sie einen Ausgangspunkt haben, oder? So Und so ist dies als Startnote markiert. Also, wenn du Start
anrufst, gehst du hierher. Und was wird dio ist, du wirst von hier gehen und du wirst im Grunde nur
der einzige Weg, den du durchqueren kannst, ist von hier nach hier zu gehen, hier nach hier, hier nach hier und einfach den Pfeilen nach dem nächsten zu folgen, den ganzen Weg über, bis Sie es bis zum letzten schaffen und dann an diesem ist die Art und Weise, wie Sie
wissen, dass Sie am Ende sind, weil statt dieser auf einen anderen Knoten zeigt, also in dieser Situation, wie zum Beispiel, könnte
es darauf hinweisen, es könnte hier auf einen anderen Knoten verweisen. Sagen wir, dieser hier ist wie eine Fünf, aber wenn wir am Ende einer Liste stehen, wird
es auf etwas namens Nein verweisen. Und was nicht bedeutet, ist, dass es nichts ist. Es deutet auf nichts hin. Es ist kein Speicher zugewiesen. Es hat keinen Speicherort im Speicher. Es deutet auf nichts hin. Und wenn wir das verstehen, sind
wir umsonst. Wenn wir dann etwas einfügen, ersetzen
wir das nichts durch unseren neuen Knoten. Also haben wir diese kleine Notiz hier erstellt. Es ist, als ob zum Beispiel zeigen
möchte, ich Ihnen
zum Beispiel zeigen
möchte,wie wir das tun könnten. Wir haben einen neuen Knoten erstellt, ein neues Know-how hier unten genannt 15 und wir wollen es an diese verlinkte Liste anhängen. Und so gerade jetzt zeigt dieser auf Nein. Und so wollen wir gewinnen. Bringen Sie das an. Also gehen wir zu diesem Anfang. Wollten an den Anfang gehen. Ich werde nach unten gehen, sind verknüpfte Liste. Es hat etwas. Es hat etwas. Es hat etwas. Es hat etwas. Oh, das ist
es, das wissen. Also werden wir tun, ist, dass wir das bewegen. Nein, wir wählen uns das aus. Lassen Sie uns das hier rausbringen, um es irgendwie zu machen, dass wir das schnappen. Nein, wir werden es hier rausschieben, und wir werden den neuen Knoten genau hier greifen, und wir werden ihn in und diesen neuen Knoten standardmäßig ablegen. Als wir den Knoten erstellt, es ist der nächste Punkt wurde festgelegt, um zu wissen. Also standardmäßig, wenn dieser Hinweis erstellt die nächste, aber sagte zu wissen, und Sie werden sehen, dass dies hilft, weil jetzt, wenn wir tatsächlich wählen Sie diese und greifen Sie es und verschieben Sie es hier nach oben, werden
Sie feststellen, dass das Ende wieder zeigt zu wissen. Und dieser wurde nun wieder zugewiesen, um auf den neuen Knoten zu zeigen. Und der Zyklus geht weiter. Wenn wir einen anderen einfügen wollen, können
wir voran und 13 hier, und wir haben das geschaffen. Es stellt automatisch fest, dass es noch nicht in unserer Liste auf, wissen
Sie, gerade noch. Es wird immer noch nur erschaffen. Jetzt möchten wir es der Liste hinzufügen. Also, wenn wir an den Anfang gehen, gehen
wir runter, wir gehen runter, wir gehen runter, jetzt ist dieser hier kein Nein. So wie OK, gibt es noch einen. Hier gehen wir zu 15. war wie, Oh, es gibt kein hier. Was bedeutet, dass wir jetzt 15 machen werden, anstatt darauf zu zeigen, dass wir dann den Zeiger bewegen werden. Also werden wir das Nein löschen hier, und wir werden seinen Zeiger 2.2,
unseren neuen Knoten, bewegen . Technisch gesehen würde
es dies tun, weil sich der Knoten hier nicht wirklich nach oben bewegen würde. Wurden es nur gesagt, auf diese neue zeigen gefragt, dass wir dieses neue Asset direkt hier dieses neue,
dieses neue Stück von Daten, die wir erstellt haben, und dann, da wir bereits erstellt haben, um bereits eine Null des Endes zu haben, sobald es zu hören geht, es wird auf den Knoll zu bewegen. Und jetzt, wenn wir etwas anderes beantworten wollen, wird
es sich bis zu diesem Punkt bewegen und wir können,wissen
Sie, wissen
Sie eine
gute Art Graph in Gang bringen. Jetzt. Was passiert dann, wenn wir wollten,
zum Beispiel, um, löschen Sie etwas aus diesem in einem Array, wenn wir etwas daraus löschen. Alles, was wir tun mussten, war zum Beispiel, lasst uns ein Array hier haben. Alles, was wir tun müssen, ist den Ort anzurufen, den wir löschen möchten. Also bei 321012 könnten wir einfach X von zwei gleich nennen nein oder irgendeine Art von Löschalgorithmus kommt ins Spiel. Und ich war alles, was es tut, ist es einfach geht ,
Oh, Ausgang zu ist nichts mehr getan. Nichts zu befürchten Wenn wir die 1. führen wollten 1 Einfach getan. Nichts zu befürchten mit Links Liste. Sie bemerken jedoch, dass es Anführungszeichen Abhängigkeiten gibt, wenn Sie löschen, wenn wir nur löschen. Wenn wir sagten, wir wollten löschen 10 war ein Löschen 10 genau hier. Was passiert? Wie auf der Erde sollen wir auf den Rest unserer Liste für nicht mehr Punkte für
etwas zu bekommen, weil nur automatisch Standardwert zu zeigen, um wissen. Es deutet also darauf hin, jetzt zu wissen, weil 10 da drin ist, was bedeutet, dass dies nicht das Ende ist, und wir verlieren den Rest unserer Liste genau hier. Also müssen wir tatsächlich ein bisschen eine komplexe Art von Operation machen, um zu löschen, lassen Sie mich das einfach zurückbringen. Also löschen Sie stattdessen, was wir können dio. Nehmen wir an, wir haben hier einen Knoten. Eine Notiz hier und eine Notiz in der Mitte. Wir haben die Singley auf die einzelnen spitzen einzelnen Zeiger gerichtet. Hier ist die Singley-Liga-Liste. Und wenn wir löschen wollten, wird dies diese alle Werte geben, so dass wir sie durch
etwas nennen können . Wenn wir 10 hier löschen wollten. Was wir tun müssen, ist, bevor wir das löschen, müssen
wir es sagen, Hey, drei werden jetzt darauf hinweisen, zu mögen, also müssen wir zu drei gehen. Wir werden den nächsten löschen. Also gehen wir zu drei und wir sagen es, Hey, du brauchst 2.22 Und dann, wenn diese neue Zuteilung erstellt wurde, wird
diese natürlich einfach wegfallen. Jetzt ist es eine schlechte Übung. Lassen Sie das hier einfach, denn das ist eigentlich noch technisch solide. Also, zum Beispiel, davon ist ein Anfang, dieser Graph hier ist immer noch technisch solide. Es wird 3 zu 2 gehen und dann hier drüben Punkte zu wissen. Und so funktioniert das alles noch, es ist technisch immer noch korrekt. jedoch haben, Was wirjedoch haben,ist, dass wir hier Platz verschwendet haben. Wir haben das Nein nicht wirklich gelöscht. Also können wir tatsächlich, bevor wir das tun, können
wir das tatsächlich in einer Art Variable speichern wie zuvor. Wie wir sagen könnten, wissen
Sie, ähm, haben Excel verwendet. Rennen gehen w gleich dieser Note von 10. Und dann, wenn wir dieses Ding wieder machen,
was wir sagen können , können
wir löschen darauf nennen und wir entfernen es tatsächlich aus dem Speicher, so dass wir
dieses Ding nicht mehr hier sitzen. Aber was ich zeigen wollte, ist, dass alles, was wir tun müssen, um es zu löschen, anstatt das
Asset selbst zu löschen ,
alles, was wir tun müssen, ist den Pfeil neu zu zeichnen. Und eigentlich, technisch gesehen, würde
dieser immer noch dorthin zeigen. Also müssen wir tun, ist die Notiz so neu zu zeichnen und dann ist diese technisch nicht in
der Liste. Es gibt keine Möglichkeit, jemals wieder zu 10 zu kommen. Es gibt keine Möglichkeit, versehentlich zu 10 zu gehen. Es ist nur chillt dort, und es kann immer da sein, und unsere Liste wäre immer noch gut. jedoch, Der effiziente Weg wärejedoch,dies dann zu löschen, so dass unsere Liste keine
zusätzlichen Daten speichert , die sie nicht speichern muss. Und so haben wir noch einen Fall zu decken, wie verknüpfte Listen funktionieren, und das wird darauf sein, wie genau man könnte, wie genau man in die
Mitte eines Strahls einfügen könnte . Also, zum Beispiel, was wir hier tun, ist, sagen
wir, die Mitte einer verlinkten Liste. Also, wenn Sie in ein Array einfügen wollten, sagen Sie seine Rate wie so in einem Strahl hier, was? Und wir haben zwei hier, wir haben eine Sieben hier. Wir haben eine Vier hier, und wissen Sie, wir haben 0123 und wenn wir hier drüben direkt in diesen Teil einfügen wollten, müssen wir nur Ex von zwei gleich sieben machen und wissen Sie, es geht auf sieben wirklich einfach zu machen. Wenn Sie irgendwo anders einfügen möchten. Das du wirklich tun musst, ist nur etwas zu überschreiben. Wenn wir also nur gleich Null machen wollen, können
wir einfach weitermachen. Es wird dies einfach überschreiben und gleich Null machen. Kein Riel, Sonstiges zusätzliches Zeug benötigt. jedoch Ein Strahl oder verknüpfte Listen sindjedochnicht so einfach mit einer verknüpften Liste. Was wir tun müssen, ist, dass wir es tatsächlich tun müssen. Wir müssen tatsächlich Punkte und Dinge neu zuordnen oder neu zuordnen. Genau wie in der Elite hatten
wir hier eine Kiste mit drei. Es bewegt sich auf 10. Und dann sagen wir, dass dieser bewegt sich über 25 jetzt haben wir eine Box hier haben wir eine Box, die
wir einen neuen Knoten erstellt haben, den wir erstellt haben, dass vielleicht 18 und es zeigt zu wissen. Also, wie schaffen wir es hier? Wie legen wir es dort hin? Wie bringen wir es gleich dort hin? Nun, wir können nicht einfach einfügen. Wir können nicht einfach den zweiten Platz anrufen. Sagen
Sie, einfügen, es gibt nicht, dass die Zeiger alles durcheinander bringen werden. Was wir also tun müssen, ist, dass wir das hier mitnehmen müssen. Wir müssen sie löschen. Wir müssen sagen, es weist jetzt darauf hin, dass es jetzt auf 18 hinabweist, und dann müssen wir das übernehmen . Wir müssen einen neuen Zeiger erstellen, der bis zu 10 zeigt, und es gibt ein paar kleine Herausforderungen damit. Denn wenn Sie etwas bemerken, wenn wir wieder dorthin gehen, wo es angefangen hat. Wenn wir löschen, wenn wir das zuerst löschen, dann haben wir plötzlich den Rest unserer Liste verloren. Es gibt keine Möglichkeit, zum Rest unserer Liste hier zu gelangen. Wir können nicht mehr anfassen. Also, was wir normalerweise tun müssen, ist, dass wir das nächste,
dieses hier drüben,
in eine Variable speichern müssen dieses hier drüben, . Also, ähm, was wir nicht tun konnten, gibt es tatsächlich ein paar
Möglichkeiten, wie wir das tun können. Am effizientesten wäre es wahrscheinlich, nur die nächste zuerst zu setzen. Also, sobald wir zu bekommen, sobald wir diesen Ort im Speicher haben, sobald wir durchquert sind sind verknüpfte Liste. Und wir haben es hier drüben zu diesem Zettel geschafft. Schwächen hat nicht gesagt, Hey, wir wollen, dass 18 gleich sind. Nein, wir wollten auf diese Notiz hinweisen. Wir wollten auf diese Notiz hinweisen. So können wir dio ist, dass wir sagen können, dass dies jetzt auch auf diese Notiz verweist. Und dann können wir jetzt wieder an den Anfang zurückkehren. Wir können das löschen, und jetzt können wir darauf hinweisen. Jetzt können wir das auf R 18 hinweisen und dann haben wir jetzt eine gute Einfügung und wir haben
die Daten auf dem Backend nicht verloren . So verlinkte Listen gibt es ein wenig knifflig dort ein wenig schwer zu verstehen. Aber sie haben einige Vorteile, und einer der größten Vorteile ist die Tatsache, dass wir weiter bis zum Ende hinzufügen können. Und es wird nur Daten erstellen. Das ist wie, ähm, die Daten erstellen. Das ist, weißt
du, so groß wie wir es brauchen,
wir müssen die Dinge nicht weiter verdoppeln und es erlaubt uns eine Art Werbung nach Laune. Wir könnten es einfach bis zum Ende hinzufügen. Wir müssen uns keine Sorgen um die Sortierung oder die Organisation davon machen, und wir überschreiben keine Dinge, wenn wir alles einfügen wollen, was eigene Daten ist , die wir greifen und bewegen können, anstatt ein Array zu haben, in dem alles irgendwie eingesperrt in eine Box, die einige der Dinge einschränkt, die wir damit machen könnten, besonders später. Und was an diesem Ansatz auch interessant ist, ist, dass eine einzige, eine verknüpfte Liste an sich ist, wissen
Sie, nur einzeln verknüpft. Aber wir könnten zum Beispiel Nasensträuße auf verschiedene Bereiche hinweisen lassen. Und das erlaubt so viele Dinge. Und das ist eigentlich, wo wir später in Bäume kommen Bündel die Notizen
hinzufügen. Aber das ist eine Art der Grundlagen davon kann Liste von sich selbst verknüpft werden. Nur einzeln. Verknüpfte Liste sind nicht die nützlichste Sache, aber es wird später in wirklich nützliche Dinge aufbauen. Also, das sind Singley-Längenlisten. Der nächste Teil. Wir werden weitergehen, um sie doppelt zu verknüpfen und dann irgendwie die Laufzeiten
hinter all dem zu verstehen und wie es mit so etwas wie dem Array verglichen wird.
19. 3-3 Linked List: Jetzt haben wir ein gutes, intuitives Verständnis dafür, wie verknüpfte Listen funktionieren. Lass uns da rüber gehen. Laufzeiten Wahrscheinlich sagte in der Informatik, Laufzeiten sind wichtig, weil sie uns erlauben, diese Datenstrukturen zu analysieren und ihre Stärken und Schwächen zu
verstehen. Also lasst uns eine schnelle Auffrischung über die Laufzeiten unseres Strahls hier machen. Also, was wir hier haben, ist, dass wir die Laufzeiten haben, die wir für das Array rausgekommen sind, und so werde ich das
einfach hier hinlegen. Dies ist für das Array. Und dann möchte
ich auch bezeichnen, dass dies für zufällige Löschung ist. Wenn Sie
beispielsweise
in einem Array löschen, beispielsweise
in einem Array löschen, ähm, am Anfang, wie
zum Beispiel, wie zum Beispiel, ein unbekanntes
kreisförmiges Array und Sie haben den Anfang hier gelöscht. Also löschen Sie diesen und Sie möchten, dass alles rückwärts verschoben wird, was auch ove in
genau wie die in der Art der Front sein wird. Das hier könnte also zwei verschiedene sein,
je nachdem, wie Sie es betrachten möchten. Aber löschen Sie zufällige wird immer über die eine sein, während löschen. Grundsätzlich wird
Dieb Front bis zum Ende geschuldet werden. Also wollte ich nur diesen kleinen Vorbehalt da rein setzen, diese Art von Zeitkomplexität kann ein wenig davon bekommen, was genau Sie betrachten,
wie speziell, damit sie in diesem Aspekt ein wenig verwirrend werden könnten. Aber wenn Sie wirklich nur über sie denken intuitiv verstehen können. Also, zum Beispiel, im Array, wenn wir hier aus der vorderen Rate löschen, muss sich
alles zurückverschieben. Also müssen wir uns in der Anzahl von,
ähm,
in der Anzahl der Plätze am schlimmsten vorbei bewegen ähm, . Und lasst uns einfach die Intuition dahinter. Aber wir können etwas von diesem Zeug hier sehen. Wir haben die Einfügung zufällig. Wir waren vorne auf der Suche. Suche löschen, unsortierte Suche sortiert. Also lassen Sie uns diese Operationen in einer verknüpften Liste durchgehen. Lassen Sie uns also ein wenig von einer beispielhaften verknüpften Liste hier erstellen. Was wir also erstellen müssen, ist, dass wir unsere Knoten erstellen müssen. Also haben wir den Anfang der Liste, die wir einfach so erstellen können,
beginnen Sie hier, damit wir erstellen können, wie Start, und dann zeigt es in den Anfang unseres ersten Knotens. Nehmen wir an, unsere erste Notiz hat eine drei, und dann ist dies eine einzelne Linkliste. Wir haben noch nicht über Double gesprochen, also gehen wir einfach mit einer einzigen Längenliste. Ich verdopple nur verbessert leichte Dinge, leichte Berechnungen, und dann gehen wir zu, wie, sagen
wir, 19 hier oder so, und dann ist das das Ende. Also das ist eins, dann zeigt es, hier drüben zu wissen. Okay, also haben wir verknüpfte Listen wie so, und lassen Sie uns voran und erstellen Sie unsere 1. 1 Also hier oben hatten wir zufällig einfügen. Wenn Sie also etwas einfügen möchten, und das ist zufällig so irgendwo in der
Datenstruktur , lassen Sie uns das Gleiche tun. Notation ist auch die letzte. Also möchten wir zufällig in ein Array einfügen, das uns sofortige Zeit in Anspruch nahm, weil wir Dinge
überschreiben würden , wenn Sie versuchen würden, das Überschreiben zu berechnen. Dann haben Sie vielleicht einige Vorbehalte darin,
aber wenn wir gerade etwas vollkommen in Ordnung überschreiben würden, könnten
Sie einfach sagen, ex of Five ist gleich einer Zahl was auch immer, und es wird es in einer verknüpften Liste überschreiben. Allerdings wird es ein Problem ist, dass Sie nur von hier kommen können. Sie können nicht einfach zu einer dieser Positionen springen. Wenn ich also zu 19 hier drüben kommen wollte, müsste
ich von Anfang an über 123 gehen und dann zu ihm kommen, und ich müsste dies für jede Menge in diesem tun. Was das bedeutet, ist, dass unser Insert-Zufall tatsächlich in O von in Notation kommt. Und das liegt daran, dass unser Worst-Case-Szenario nach dem Zufallsprinzip auf der Rückseite eingefügt wird. Was bedeutet, dass man 1234 einfügen wird, sind in. Diese Situation ist vier. Es wird also vier dauern, um zurück zu hier zu kommen, und das gilt für jede Liste beliebiger Länge. Es gibt 1000 davon und Sie wollen in der Nähe der Rückseite einfügen. Es könnte 950 bis 1000 dauern. Das bedeutet also, dass unser Worst-Case-Szenario für Insert-Zufall tatsächlich O
von N wird . Und das liegt nur daran, dass es keinen sofortigen Zugriff gibt. Es gibt keine Möglichkeit, dass wir wissen, wie man zwischen diesen schneller springen, als von Anfang an gehen und dann nach unten wie so und so unsere nächste wird in die Front eingeführt werden, so setzen Sie vorne und vorne, so mit Einsatz vorne und wird fügen Sie auch mit einer grundlegenden, ähm, einer grundlegenden verknüpften Liste zurück. Es wird auch bis zum Ende sein. Oder tatsächlich, die Antwort auf die Front wird eine konstante Zeit sein. Nun, beim Anfangen wird
der Rücken O bis zum Ende sein. Und das liegt daran, dass wir zuerst die Front einfügen. Wenn wir einen neuen Knoten einfügen wollten, wir an, wir haben hier eine Notiz. Ein neuer Zettel hier von vier. Wenn wir das in die Front einfügen wollten, wie genau würden wir das tun? Nun, es ist eigentlich ziemlich einfach. Was auch
immer unsere Front ist, was auch immer unser Zeiger ist, wir müssen nur OK sagen, anstatt auf diesen einen Punkt zu zeigen, und dann mussten wir vier auf unseren alten setzen. Also musste ich vier an unsere alte Front setzen. Und was das tut, ist, dass es es es tatsächlich jedes Mal in 123 Schritten hinzufügen wird, egal was Sie dort einfügen, also wird es immer eine konstante Zeit sein und die Art, wie Sie das wirklich tun wollen. Es gibt tatsächlich einen Weg, den Sie hier einfügen sollten, weil diese Art von geht mit dem Verlust Gedächtnis. Wenn ich dies lösche und dann diesen Punkt auf dies wie so verliere ich die Fähigkeit, die ich diese
erste Note hier verliere , habe ich nicht mehr aktivieren, um es zu greifen, weil wir den einzigen Punkt gelöscht haben, den wir dazu . Also, wenn Sie in die Front einfügen wollen, was wir tun müssen, ist, dass wir unseren Knoten nehmen müssen. Wir haben das erste zu den drei gesagt. Und so zeigt das immer noch nach vorne. Also werden wir sagen: „
Hey, Hey, vier, wir werden sagen: „
Hey, Hey, vier, du zeigst jetzt auf deine nächste statt auf Nein, es zeigt jetzt auf drei. Es ze