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 zeigt jetzt auf unseren Anfang. Wir werden sagen, es zeigt an, zu beginnen, und das wird es an den Anfang zuweisen. Dann, sobald es hier gezeigt wird, wir hier löschen, und wir werden den Startpunkt hier unten machen, und dann wird das unsere Einsätze erstellen oder einfügen ist immer konstante Zeit. Es wird immer diese drei Operationen erstellen zugewiesen dem Start ein Zeichen beginnen zwei neue Nein zu neuen Notizen. Es wird also immer eine konstante Zeit sein. Das ist also konstante Zeit. Und dann haben wir Einsatz auf der Rückseite. Also fügen Sie nach hinten, obwohl, wird uns ein wenig Arbeit nehmen, weil,
wie ich sagte, es gibt keine Möglichkeit, hier zurück zu kommen, es sei denn, wir später, ich gehe rüber, wie Sie kleine Zeiger, um Ihnen zu helfen. Aber gerade jetzt, mit nur einer einfachen Singley-Link-Liste, gibt es keine Möglichkeit, hier zu kommen, ohne die gesamte Liste zu durchlaufen. Und so wird das immer drin sein. Es wird immer in sein, was bedeutet,
standardmäßig, standardmäßig, es ist der schlimmste Fall ist auch in. Es ist der schlimmste Fall wird auch sein, weil, wie ich sagte, es gibt keine Möglichkeit, dass wir hier springen können. Wir können nicht von Anfang an kommen und dann einfach bis zum Ende gehen. Es gibt nichts, was uns ans Ende zeigt. Wir wissen nicht, was hier ist. Wir wissen nicht, wie viele Knoten dazwischen liegen. Alles, was wir wissen, ist, wo wir anfangen und wie man zum nächsten kommt. Also werden wir tun müssen, ist Start laufen. Wir mussten uns einen neuen Knoten anlegen. Wenn Sie also eins zum Ende hinzufügen wollten, sagen
wir, wir möchten diese vier bis zum Ende hinzufügen. Der einzige Weg, wie wir das tun können, ist, dass wir gehen müssen. Ok. Nun, was ist am Ende? Geh runter 4 zu 3. Entschuldigen Sie sich 2 zu 10, das ist das Nein, wir sind am Ende. Großartig. Jetzt, wenn wir am Ende sind, haben
wir die Endnote. Dann können wir es sagen. Hey, du wirst umziehen. Du weißt nicht mehr, dass du auf vier gesetzt wirst. So Und dann natürlich standardmäßig. Als wir dies erstellt haben, wurde
dies darauf hingewiesen, dass unsere Liste wieder funktioniert. Also, wenn Sie hier unten sind, ist
die Operation nur wie eine oder zwei Arten von Erstellungsnummern. Aber hierher zu kommen ist bis zum Ende schuldig. Und das ist, warum unser Lauf kann Zeit auch Odeon sein. Und so wird der nächste, den wir greifen wollen, das Löschen zufällig sein. Also wollen wir zufällig löschen. Und so mit einem Delish in es hängt Art davon ab, wie Sie löschen und wo Sie
löschen möchten . Das Problem ist also, dass, wenn wir von der Vorderseite löschen, es wirklich einfach ist. Wenn wir von vorne löschen,
alles, was wir tun müssen, ist nur sagen, starten gleich nach vorne als nächstes. Also lassen Sie mich das schreiben, weil diese Art von geraten in einige. Wenn du anfängst, diese Sachen zu schreiben, wird
es so sein, wie ,
ähm, Anfang ist gleich dieser Notiz hier. Startpunkt als Nächstes. Und dieser Pfeil würde als nächstes aufgerufen werden. Also, was wir sagen, ist, dass der Start jetzt gleich ist, als nächstes zu beginnen, und dann wird dieser einfach irgendwie aus dem Zyklus entfernt und der Pfeil wird wieder Associate ID von hier raus, und dann geht es direkt zurück nach hier. Also, wenn wir die Front löschen, ist
es mit einer Zeit. Also, wenn wir die Front löschen, wird
es mit einer Zeit raus sein. Aber wenn wir zufällig löschen, was irgendwo hier drin ist, wenn wir sagen wollen, dass wir das vierte Element oder das Neunte Element löschen wollen, wird
es Odienne brauchen, weil wir die ganze Sache durchqueren müssen. Und wenn Sie bemerken, können wir nicht rückwärts gehen. Also, wenn du diesen hier anführen wolltest, Felsen. Du musst das davor packen,
und dann müssen wir es tun. Also, zum Beispiel, wenn wir drei hier löschen wollten, müssen
wir tun, ist, dass wir zu zwei gehen und dann müssen wir ihm sagen, dass es als nächstes gleich sein
wird, wird der nächste Punkt gleich sein wird Als nächstes, welche Art von wird ein wenig kompliziert. Es wäre also, als wären wir bei Nummer zwei hier. Wir sind an diesem Knoten, oder? Hier sind alle Aktionen, oder? Was? Die Zahlen sind so richtig. Knoten vier. Und was soll ich sagen? Knoten vier Punkt Nächster gleich für Punkt nächsten Punkt Weiter. Und was du tust, ist, dass du das nächste Ende im nächsten packst. Du sagst, es ist jetzt gleich. Also umgehst du das hier, indem du das
umgehst, entfernst du es. Aber um zu diesem Punkt zu kommen, um es bis zu diesem Punkt zu schaffen, muss
man wissen, dass es das Ende übernehmen wird, was bedeutet, dass die Führung zufällig auch nicht reinkommen wird. Also das wird o bis zum Ende sein und wir haben nur herausgefunden, dass das Löschen von vorne konstant sein
wird, und Sie sehen bereits eine kleine Verbesserung dort. Also hatten wir eine Menge Dinge, die länger dauern könnten. Aber zwischen dem Array, Wenn Sie sehen, dass das Löschen von vorne auf einem Array O bis zum Ende dauert, während das Löschen von vorne auf einer verknüpften Liste nimmt, was tut Das sollte konstant sein. Das sollte konstant sein. Während Wahnvorstellungen von diesem wird o eine konstante Zeit sein,
was bedeutet, dass es nicht skalieren wird, was großartig ist. Und aber Sie sehen auch einige andere Unterschiede hier ist, dass die Einfügung zufällig
sofort war . Während die Einfügung hier bis zum Ende sein wird, war
eine aufständische Front hier drin odienne. Aber Einfügefront in eine verknüpfte Liste ist mit einer beendet. Also sehen wir hier ein paar Kompromisse. Einige Unterschiede zwischen diesen beiden. Und so lassen Sie uns jetzt gehen und den letzten Zug löschen. Wir löschen diesen nicht mehr. Es wird zurück zu einer netten kleinen Linkliste hier gehen, und was wir jetzt brauchen, ist sortiert und unsortiert gesucht. Also was? Wir haben diese Suche nach sortiert und auf der Suche nach unsortierten. Und so werden beide am Ende auch O bis zum Ende sein. Und das werde ich in einer Sekunde erklären. Und der Grund ist, es spielt keine Rolle, ob dies sortiert oder unsortiert ist. Sie müssen immer noch die ganze Sache durchqueren, um zu finden, wonach Sie suchen. Wenn wir wussten, dass dies 12345678 war, dann ist es egal, weil wir immer noch keine Möglichkeit haben, dass wir einfach zu zwei springen oder auf Nummer acht oder irgendwo hier drinnen springen
können. Wir können nicht springen. Wir müssen beginnen und dann von Anfang an die verlinkte Liste verschieben. bedeutet, dass, egal was, wenn wir hier hineingehen wollen, wenn ,
wie zum Beispiel, die beiden finden
würden, die es dauern könnte, bis zum Ende zu gehen, es könnte am Ende der Liste, um dieses Ding zu finden. Ob es sortiert ist oder nicht sortiert. Es wird eine ganze Linklistenumkehrung sein, und deshalb wird es lineare Zeit sein. Das bedeutet, dass jeder einzelne Knoten im schlimmsten Fall durchlaufen muss. So ist die Suche in dieser Situation etwas langsamer. Während, wenn wir zu einem Array gehen, werden
wir sehen, dass die Suche unsortiert hat die gleiche. jedoch das Array sortieren, Wenn wirjedoch das Array sortieren,das wir aufstehen können, um sich anzumelden, können
wir es tatsächlich verbessern, weil wir früher darüber gesprochen haben, wo wir es in zwei Hälften geschnitten haben. Wir schneiden weiter und 1/2 bis wir am Ende die Nummer finden, nach der wir suchen. Und so haben wir es da. Dies sind die Laufzeiten einer verknüpften Liste. Wie ich bereits sagte, gibt es hier ein paar Ähnlichkeiten. Ein paar kleine, ähm, Vorbehalte zwischen den beiden und manchmal wie, zum Beispiel, Einfügung zufällig und Einfügen an der Vorderseite hier, werden
Sie sehen, dass sie anders sind. Eigentlich ist das der Aufständische zufällig schneller als auf dem Array. Während die Einfügung nach vorne schneller auf der verknüpften Liste ist, wird das
Einfügen nach hinten wirklich langsam sein, während die Suche nach hinten in einem Array wirklich schnell sein
wird. Delish in wird langsamer auf der verknüpften Liste sein. Aber schneller auf der ah, schneller auf der Front Suche wird im Grunde die gleiche sein, wenn es unsortiert ist. jedoch Wenn esjedochsortiert wird, kommt
das Array voran. So können Sie sehen, dass, obwohl diese beiden sehr unterschiedlich sind, sie völlig anders sind. Vielleicht denken Sie vielleicht, , vielleicht bevorzugen Sie eine gegenüber der anderen war intuitiver gegenüber dem anderen,
dass diese alle eine sehr spezifische Art von Vorbehalt haben. Wenn wir
zum Beispielhier eine Gehaltserhöhung setzen und hier drüben unsere verlinkten Listen haben,könnte
es bestimmte Situationen geben, in denen wir eine über die andere verwenden wollen. zum Beispiel Wenn wir
zum Beispielhier eine Gehaltserhöhung setzen und hier drüben unsere verlinkten Listen haben, Wenn wir ein Programm hätten, das eine Zeit nach vorne eingefügt hat,
würden wir dafür kein Array verwenden wollen, denn wenn wir ein Array dafür verwenden würden, müssten
wir, äh
, alles über und erstellen Sie weiterhin neue A Raise, damit es tatsächlich gut funktioniert ,
in einer verknüpften Liste müssen wir nur einen neuen Knoten und eine Art von Front erstellen. Wenn wir also nach vorne einfügen wollten, hätte
dieser einen Vorteil. Legen Sie vordere schwere Programme Teil meiner Schrift hier. Also fügen Sie front-schwere Programme, alle von einem Array, wenn wir es sortieren und dann suchen wollen Es wäre am besten. Also, was können wir ein sortiertes Array haben? Und das wollen wir. Es ist also so, als würden sortierte Array-Suchen oder sortiert machen wollen. Es ist erbärmlich in einem Rennen sortiert Datensuche, und so können Sie sehen, dass jeder von ihnen ist gut in einem bestimmten Feld und schlecht in verschiedenen Bereichen. Und so hilft das Verständnis den anderen Informatikern, denn man beginnt zu verstehen, welche man verwenden sollte, basierend auf den Vorteilen des einen gegenüber dem anderen.
20. 3-4 3-4: Ist es nicht. Wir haben ein gutes Verständnis dafür, wie einzeln verknüpfte Listen funktionieren und einige ihrer Vorteile einige ihrer Nachteile mit einer Erhöhung und anderen Datenstrukturen. Jetzt können wir beginnen, die Grundidee einer verknüpften Liste irgendwie zu verbessern,
und wir gehen auf diese Idee einer doppelt verknüpften Liste ein. Was ist also eine doppelt verknüpfte Liste? Nun, gehen
wir zurück zu unserer Idee eines Knotens. Denken Sie daran, ich sagte, dass wir hier eine Notiz hatten und wir können jede Notiz haben und es kann, wie, ein Stück Daten oben haben. Und es könnte eine Reihe von verschiedenen Arten von Zeigern hier unten haben. Und einer der Hauptpunkte ist, dass Sie hinzufügen können, ist, dass Sie als nächstes hinzufügen. Und das schafft eine Reihe von Singley Singley verlinkten Liste hier. Also haben wir nicht nur einen Haufen Nächster hier. Lassen Sie mich das gleiche Format hier machen und zum Beispiel, das ist wie vier. Wir haben eine nächste hier, aber die Sache ist, mit dem nächsten, können
wir nur eine Richtung in der Liste gehen, um es doppelt verknüpft zu machen. Was wir tun können, ist, dass wir tatsächlich in früheren ist als auch hinzufügen können. Und das bedeutet, dass es auch rückwärts zeigen wird, doppelt verbunden. Das bedeutet, dass es für jede Ära zwei Pfeile geben wird, einer kommt rein und einer geht aus. Wie hilft uns das? Warum hilft uns das? Wie funktioniert es uns erlauben, von zu gehen, zum Beispiel, rückwärts alle in der Liste
zu starten? Wie hilft uns das? Nun, wenn wir uns die Laufzeiten ansehen, können
wir feststellen, dass es uns in irgendeiner der Laufzeiten nicht so sehr helfen wird. Was tun wird, wird ein bisschen mehr hinter den Kulissen arbeiten, weil es
egal ist , ob wir vorwärts oder rückwärts gehen. Wir werden immer noch die Liste durchqueren, zumindest will zu dem Teil. Aber denken wir an ein anderes Szenario. Lassen Sie uns denken, zum Beispiel, unser Ziel hier ist,sagen
wir, sagen
wir, finden Sie sieben und löschen Sie es und löschen Sie es aus sind verknüpfte Liste. Also haben wir hier eine verlinkte Liste. Nehmen wir an, wir haben einen hier und wir haben zwei, die sich hierher bewegen. Wir haben eine Drei und dann haben wir 75 25 dann runter auf sieben, und wir machen noch eins. Dies verlinkt also weiter unten auf 17 und dies zeigt auf ein Nein. Denk darüber nach. Wenn wir zuerst sieben finden und sie dann löschen müssen, werden wir sie zuerst durchsuchen. Also werden wir das Ding durchsuchen. Also werden wir mögen, schreiben
wir ein kleines Protokoll über das, was wir tun. Also werden wir suchen, und so müssen wir gehen. 1234 Wir haben festgestellt, dass es um sieben Uhr hier ist. Okay, großartig. Wie löschen wir es? Denn der einzige Weg, um es zu löschen, ist, dass wir das vorherige berühren müssen und wir wissen nicht, wo der vorherige ist. Sobald wir hier sind, hat
es keine Möglichkeit, rückwärts zu zeigen. Also, wenn wir hier sind, wenn Sie dies löschen wollen, müssen
wir tatsächlich die Suche wiederholen. Wir müssen von diesem Anfang wieder reinkommen und dann runter gehen und zum vorherigen gehen und ihm
sagen, dass er auf den nächsten Punkt als nächstes zeigen soll. Und das wird tatsächlich so etwas verursachen. Also haben wir die Suche zu finden Es ist oh von in. Und dann haben wir die Löschung wird auch jetzt vorbei sein. Was das herauskommt, ist, dass es tatsächlich schaffen kann. Es wird tatsächlich am Ende sein, wenn du wirklich technisch sein willst, wird das am Ende O zum N minus eins sein weil du den vorherigen dahinter finden wirst. Es spielt also keine Rolle, worauf diese Art von Hulk läuft, ist, dass wir
diese Art von Beziehung bekommen . Wir werden in,
oh,in oh, plus in o
von in und so für unsere Vergleiche anderer Dinge,
denken Sie daran, denken Sie daran, das wird den ganzen Weg runter kommen, um nur im Grunde ein O von zwei in zu sein. Und denken Sie daran, was wir am Anfang gesagt haben, dass wir das einfach durchkreuzen würden, und es ist einfach vorbei. Aber in der realen Welt, zwei Mal in könnte tatsächlich ein wirklich großer Unterschied sein,
etwas, das wir tatsächlich verfolgen und verstehen und verbessern wollen. Und wenn wir die Zeit, die in die Hälfte nehmen wird, verkürzen können, wollen
wir das tun. Und so werden
Sie zum Beispiel sehen, dass es sucht. Und dann müssen wir jetzt das Löschen machen. Und so wird es auf diese Weise einfach ein wenig mühsam. Was wir also tun können, ist, dass wir dies erstellen und es zu einer doppelten Länge Liste machen können. Also jetzt haben wir hier eine doppelt verknüpfte Liste, wo sie alle zueinander zeigen und
lassen Sie mich eigentlich, eigentlich,lasst uns die Pfeile machen. Lassen Sie uns sie hier eine andere Farbe machen, um das wenig klar zu machen. Und was wir haben, ist ein Pfeil, der nach hinten zeigt. Sie ernennen zurück, gewinnen zurück, zeigen zurück. Dann gibt es einen Pfeil, der zurück zeigen wird. Und so haben wir jetzt unsere doppelt verknüpften Listen, und in dieser Situation weist
dies auch darauf hin, zu wissen. Also die Front, die dieser hier zeigen wird, um hier drüben zu wissen, und dann wird es vorher darauf zeigen. Und jetzt haben wir diese ganze Sache schön ausgearbeitet. Und jetzt versuchen wir, diesen Vorgang zu wiederholen, der sieben finden ist, und löschen Sie ihn. Nun, wir gehen. Wir beginnen von der Front. Wir gehen runter. Wir gehen rüber, rüber, rüber, über, über Oh, wir haben sieben gefunden. Also jetzt, um es zu löschen, was wir tatsächlich dio können, ist, dass wir gehen und diese Art von Pseudo-Code genau hier verwenden können, sieben Punkte vorher. Jetzt haben wir es. Wir sind jetzt auf diesem Knoten genau hier. Sieben Punkt vorheriger Punkt Nächster gleich sieben Punkt als nächstes, und so könnte dies ein wenig Komplexe sein, wie, irgendwie in den eigentlichen Codierungsaspekt davon zu gelangen. Aber alles, was wir hier sagen, ist, dass wir zu sieben gehen, dass seine vorherige nächste ist. Also wählen wir dieses aus und dann sagen wir jetzt, da wir hier drin sind und sagen, dass es der nächste ist, der kleine Teil hier drin sagte, ein kleiner Teil von 25, der als nächstes ist, wird jetzt gleich sein was sieben ist, Es ist der Nächste. Also wird es gleich sein, was auch immer. Sieben. Als nächstes wird die 17 sein. Ich weiß. Sobald wir das tun, haben
wir jetzt eine Verbindung. Ähm, es schafft eine Verbindung, wo es kurzschließt, dass es rückgängig gemacht wird. Hat diese Verbindung und dann wird es jetzt einfach gerade nach unten und verbinden sich
hier drüben und in dieser Linie direkt hier verschwinden. Und es ist alles, was wir jetzt tun müssen, ist ein weiterer Schritt. Diese 17 zeigt immer noch auf den falschen Ort, so dass wir etwas tun können, wie wir jetzt wieder in unsere 25 wir einfach zurücksetzen. Also werden wir sagen, dass, wie, 25 Punkt nächsten Punkt vorherigen gleich 25 ist. Und so ist das alles Pseudo-Code. Das ist nicht so, als könntest du das nicht in irgendeinem setzen, wo diese beiden Dinge hier auf der linken Seite nur so
bedeuten wie ihre Kommentare, als wären sie nur eine Art Pseudocode von was würde es dio? Aber jetzt, was wir tun können, ist, dass wir 20 Fünf und nächsten Punkt vorheriger gleich sagen können. Also wählen wir den vorherigen Teil des Datenteils hier von 17 genau hier aus, dass seine vorherige jetzt gleich 25 ist. Und so dann geht es zurück und es teilt sich wie diese sieben wird jetzt entfernt und wir haben unser Endprodukt hier. Und was hat das insgesamt, dio wir werden alles, was es getan hat, war es erlaubt unsere Suche und löschen Sie hier, um eins bis zum Ende zu werden und lassen Sie uns einfach ein wenig Zeit spart. Die Gesamtheit, anstatt zu Ende zu sein, ist nur bis zum Ende gehen. Und so, wie ich schon sagte, das verbessert keine dieser Art von Top-Down-Geschwindigkeiten hier. Aber was es tut, ist, dass es uns tatsächlich ein bisschen Zeit erspart, und es erlaubt uns, etwas mehr Intuition hinter den Dingen zu schaffen, weil
wir jetzt nicht sind. Wir stecken nicht in dieser Art, in eine Richtung zu gehen. Und wenn wir jetzt rückwärts gehen müssen und dann wieder eine Richtung gehen, dann können
wir uns intuitiv vorwärts und rückwärts durch diese Liste bewegen. Es wird immer noch im Durchschnitt dauern Oh, dann zu irgendwohin zu kommen. Aber wir können winzige Dinge wie Verbesserung von zwei in verbessern, um schneller zu gehen, und es macht unsere Codierung nur ein wenig einfacher, weil wir nicht mögen, wie ich sagte, wir müssen nicht die Buchhaltung halten, um von vorne zu beginnen und dann wieder durchzugehen. Also sind sie doppelt miteinander verbunden. Listet eine nette Ergänzung zu Ihrer verknüpften Liste, und sie machen im Allgemeinen Ihr Leben viel einfacher
21. 3-5 Tail Pointer: Also wollen wir jetzt noch eine kleine Sache über verknüpfte Liste und etwas, das tatsächlich eine unserer Laufzeiten verbessern
wird. Und das ist die Idee eines Märchenzeigers. Also was das bedeutet, ist eine Geschichte, die Pointer uns erlauben wird, genau das zu tun. Wird es uns erlauben, bis zum Ende unserer Art zu zeigen sind verlinkte Liste. Also, zum Beispiel, lasst uns voran gehen und einfach die Liebe wirklich kurz zeichnen. Hier, Lassen Sie uns drei Punkte auf zwei Punkte zu gehen 15 und wird sagen, dass dies zu wissen geht. Und hier drüben geht es zu wissen, weil wir das
hier zu einer doppelt verknüpften Liste machen . Und, ja, sieht gut aus. Okay, also was wir verwendet haben, ist, dass es diese Art von Startzeiger gibt. Es gibt immer eine, die uns sagt, wo der Anfang unserer verlinkten Liste ist, und so war das nur eine Art Standard. Das war eine Art von dem, was wir gleich am Anfang verwenden können, denn wenn wir diesen Punkt nicht oder gut hätten, wäre
es schwer herauszufinden, wie man überhaupt damit arbeitet, weil wir nie in der Lage wären
herauszufinden , wo das ist. Also haben wir einen Anfang, Zeiger. Aber was wir tatsächlich tun können, ist, dass wir weitermachen können und wir können uns
auch einen Märchenzeiger erstellen . Und was für ein Märchen Pointer tut. Also, ähm, lasst uns gehen, um es hier zu zeichnen. Lasst es uns anziehen. Vielleicht wie rot wird der Schwanz Zeiger sagen. Also sagen wir den Schwanz Zeiger genau hier. Was ein Märchen Pointer tut, ist es Ihnen erlaubt, immer zu verfolgen, was der letzte Knoten ist und wie dies uns hilft, diese Geschichte zu haben. Zeiger nimmt im Grunde keine Art von Energie. Jedes Mal, wenn wir einen neuen erstellen,
alles, was wir tun werden, ist, dass wir den Schwanz Zeiger über den
nächsten neuen Knoten bewegen , und so wird es tun, ist bei einer zusätzlichen Operation Zehe, die jetzt einen bis zum Ende hinzufügt. Aber was es uns erlaubt zu tun, ist es uns erlaubt, jetzt in den Rücken in oh,
zahn, einfügen in den Rücken, so dass wir dies durchkreuzen können, wenn es einen Schwanz Zeiger hat und es uns erlaubt konstanter Zeit in den Rücken
einzufügen. Und warum erlaubt es uns, das zu tun. Nun, lassen Sie uns einfach zu der Art von Beispiel gehen, jetzt einfügen. Also, jetzt haben wir eine neue Notiz hier. Wir haben einen neuen Knoten von 20 genau hier, und wir wollen dies in den Rücken einfügen, bevor wir tun müssen, ist, dass wir den
Start runter gehen ,
waren, um den Start zu gehen und dann durch sind verknüpfte Liste zu bewegen, bis wir nach hinten kamen. Und das war ein Problem, denn das ist so bis zum Ende. Egal, was immer dauern wird, wie viele es auf der Liste sind, um nach hinten zu kommen, es wird lineare Zeit sein. Also werden wir diese konstante Zeit machen, obwohl
wir anstatt die ganze Liste durchgehen zu müssen, genau dorthin gehen, wo der Heckzeiger uns zeigt, was eine Operation ist. Und dann setzen wir diese Knoten neben unseren 20. Wir sagten, unsere Zwanziger-Knoten. Also haben wir gesagt, dass wir das Nein entfernen, wir haben den Norden entfernt. Wir bewegen es, um hier zu setzen. Wir erstellen diese festgelegte Rate hier und in diesem zeigt standardmäßig darauf hin, zu wissen. Und deshalb,
was es uns erlaubt, Dio ist alles, was es braucht, ist die einzige Operation, um hier zu kommen. 12345 möglicherweise Operationen, die in dem Teil hinzugefügt werden sollen. Aber das wird konstant sein. Es spielt keine Rolle mehr, denn jetzt, sobald wir das getan haben, hatten
wir nur ein bisschen einen Zusatz hier, wo wir einfach voran gehen und wir wieder einen
kleinen Zeiger auf unseren neuen Rücken ziehen . Und jetzt, wenn du wieder in den Rücken einfügen willst, wird
es genau das sein. Es wird ungefähr fünf oder so Operationen sein, um es zu tun, was bedeutet, wenn es immer 555 sein wird, egal wie groß sind, egal wie viel
in geht, auch wenn es diese Unendlichkeit ist, die wir immer noch auf den Rücken der Unendlichkeit einfügen können und einfach fünf Operationen. Wissen Sie, das ist natürlich
theoretisch genau hier. Wenn wir nur in fünf Operationen einfügen könnten, bedeutet
das, dass es immer konstant sein wird. Also, was für ein Märchenpunkt? Oder ist es nur ein kleines zusätzliches Stück Daten, das bis zum Ende unserer Liste verweist? Es ermöglicht uns, in einer Operation viel schneller an das Ende der Liste zu gelangen und
in O zu den N-Operationen einzurichten . Und aus diesem Grund erhöht
es unseren Einsatz nach hinten, um zu dem einen zu gehen,
anstatt linearer Zeit. Und wir können das auch als die gleiche Art und Weise betrachten. Ich habe das hier nicht aufgeschrieben, aber wenn wir auch von hinten löschen wollten, lassen Sie uns das hier hinzufügen. Löschen Sie auch von der Rückseite. Es würde auch verbessern, dass, weil ohne diesen Märchenzeiger, wenn wir von hinten löschen wollten,
wir den Startpfad hinunter gehen müssten, nach hinten
kommen, löschen und dann wahrscheinlich wieder durchlaufen müssen, so dass wir neu zuordnen können, was neben dem hinteren war. Und so wird es bis zum Ende ohne einen Schwanz Zeiger ohne sagen poner es ist o bis zum
Ende geschuldet werden. Aber wenn wir einen Endpunkt haben oder wir das durchkreuzen können und es wird tatsächlich konstant, also macht es dich nicht wirklich,
wirklich konstant. Es macht nicht wirklich,
wirklich große Änderungen, aber was es tut, ist, dass es nur zwei von ihnen verbessert, die es uns erlaubt, einfügen. Es ermöglicht uns, bessere Operationen auf der Rückseite durchzuführen. Und aus diesem Grund, denn jetzt, da wir einfügen und löschen von der Rückseite und mit einem sind es macht es schneller , sind im exakt gleichen Tempo wie ein Array in dieser Hinsicht. Das ist also der Schwanzpunkt. Es ist wirklich, wirklich einfach. Nur ein etwas, das auf das Ende wirklich montiert Art von Implementierung zeigt, sobald Sie erhalten, wenn Sie in den Code gelangen, aber es kann Ihnen viel Zeit sparen und es insgesamt, stellen Sie sicher, dass das Programm viel besser läuft.
22. 3-6 Review: Machen wir einen Schritt zurück und binden alles, was wir gerade gelernt haben, zusammen, damit wir ,wissen
Sie,
eine nette Auffrischung über alles
bekommen wissen
Sie, und wie alles irgendwie miteinander interagieren können. Also, was wir haben, ist, dass wir Sachen haben, die eine verknüpfte Liste genannt werden, und eine verknüpfte Liste ist eine Reihe von Knoten. Es handelt sich also um eine Reihe von Grundstücken, die auf eine bestimmte Datenmenge
verweisen und dann auch auf andere Knoten zeigen. Und so unsere Pizza, dass es drei sein könnte, und dann haben wir nicht die nächste und wir haben eine vorherige Rate hier und was wir es tun können. Das ist, dass wir dann diese Knoten nehmen können. Wir können eine Liste aus diesen Knoten erstellen, und diese Liste ermöglicht es uns, eine ganze Reihe von Daten miteinander zu verknüpfen. Und das Gute daran ist, dass wir zufällig einfügen können. Wir müssen dafür keine bestimmte Größe
zuweisen. Es wird sich auf unbestimmte Zeit erweitern. Wir müssen es nicht mögen, verdoppeln. Es gibt nichts von dieser Art von Sachen, was bedeutet, dass wir Dinge irgendwie mit ihm verknüpfen können, wenn wir auf sie stoßen, und es wird einfach dynamisch immer größer und größer werden. Etwas Nachteile, dies ist direkt aus der Fledermaus ist, dass Sie immer in
diesen Startbereich kommen und durch die Liste zu bekommen, müssen
Sie von einem zum nächsten gehen. In dieser Situation gibt es keine direkten Routen zu irgendwas nach dem Start, was bedeutet, dass es O von in der Zeit dauern kann, um viele Operationen durchzuführen. Wir können dies verbessern, indem wir es als doppelt verknüpftes weniger hinzufügen. Dies erlaubt uns, nicht gehen zu müssen. Wenn wir
zum Beispielhier gehen wollten,werde
ich dem vorherigen etwas antun. zum Beispiel Wenn wir
zum Beispielhier gehen wollten, Wir müssten dann nicht zum Anfang zurückkehren und dann den vorherigen finden. Wir könnten einfach hin und her auf dieser Liste gehen, wie wir es für richtig halten. Und dann, was wir tun können, um es weiter zu verbessern, ist, dass wir ein wenig,
ein wenig,
ähm,
einen Märchenzeiger zum Ende hinzufügen ein wenig, ähm, können, was der Schwanz Zeiger uns erlaubt, ist direkt bis zum
Ende zu gehen . Und das wird uns erlauben, Operationen bis zum Ende wirklich, wirklich,
wirklich,
wirklich schnell anzuwenden wirklich, . Und das wird uns erlauben, ein paar unserer Laufzeiten zu verbessern. Nun, wenn wir uns unsere Laufzeiten hier ansehen, können
wir sehen, dass es viele Laufzeiten hat, die anders sind als erhöhen, und einige Laufzeiten, die gleich sind. Und dann einige Laufzeiten, die besser sind. Zum Beispiel wird das
Einsetzen an der Vorderseite aus dem Fledermaus gerade nach oben konstante Zeit sein. Sie müssen es nicht kreisförmig machen, um diese Art von fortgeschrittener Logik zu machen. Alles, was Sie tun müssen, ist, alles zu erstellen, was Sie tun müssen, ist, einfach nach vorne einzufügen und den
Startpunkt zu diesem neuen und demselben zu verschieben . Wenn wir diesen Märchenpunkt oder in der Rückseite erstellen, können
wir Löschungen von der Rückseite und Einfügungen in der Rückseite in konstante Zeit als auch erhalten. Einige der Kompromisse ist, dass es egal ist, ob es sortiert ist. Wir werden immer reingehen müssen, um dieses Ding zu durchsuchen,
was bedeutet, dass wir je größer die Datenmenge haben, desto länger wird es uns brauchen, um es zu sortieren, was Sie wissen können, ob wir das eine Priorität für unser Programm haben, Daten zu finden, dann weißt du, du denkst irgendwie, dass die Längenliste vielleicht am besten ist. Vielleicht wird ein Array oder einige der anderen Dinge in der Zukunft, die übergehen werden, besser sein als das. Aber das, kurz gesagt, ist oder all dies ist verknüpfte Listen. Wir haben eine einzelne Link-Liste. Wir haben doppelt verlinkte Listen. Wir haben Tail-Zeiger, und sie alle kommen zusammen, um diese Art von verknüpfter Datenstruktur zu bilden, die es uns ermöglicht unsere Datenstruktur nach Laune
dynamisch hinzuzufügen und zu löschen. Es hat ein paar Nachteile. Es hat einige Vorteile, aber es ist eine der wichtigsten Datenstrukturen, und so ist das eine Art Ende dieses Linklistenabschnitts. Ich bin wirklich aufgeregt, in die nächste Einheit zu springen, in der wir
dies implementieren werden , um daraus aufzubauen und einen neuen Satz von Datenstrukturen
namens Stacks and Queues zu schaffen . Also werde ich da drüben sehen
23. 3-7 Beispiele aus der Realwelt: Nun, da wir ein gutes Verständnis dafür haben, was verknüpfte Listen sind, lassen Sie uns voran und schauen uns einige Beispiele für Längenlisten aus der realen Welt an. Jetzt wird dieser Abschnitt ein wenig kürzer sein als die meisten anderen Abschnitte, weil wir eigentlich über zwei der wichtigsten Verwendungen von verknüpften Listen im Detail sprechen werden. Und das ist der Baum und das Q. Der nächste Abschnitt wird eigentlich auf,glaube
ich,
Stapel und Warteschlangen sein glaube
ich, . Du wirst also die Schlange da drin sehen und später werden
wir Bäume bedecken. Dies sind zwei große Verwendungen von verknüpften Listen, aber eine andere Verwendung einer verknüpften Liste ist die Datenspeicherung. Was auch immer Ihre Festplatte Daten füllt, es sucht nach freiem Speicher, und es verbindet den freien Speicher irgendwie miteinander. Nun, in einer perfekten Welt, hättest du, weißt
du, etwas Speicher an einem Ort für das Programm, das du speicherst, zugewiesen. Aber sagen wir, am Anfang der Festplatte, Sie haben nur wie ein Gigabyte. Jeder Teil davon ist ein Gigabyte, und all diese sind bis hier gefüllt. Sagen wir mal, dass diese drei hier drüben ausgefüllt sind. Nun, wenn man nur ein Gigabyte hat, die Front und vielleicht ein Gigabyte hier und hier und hier ein Gigabyte frei. Und Sie haben einen 13 Gigabyte, wissen
Sie, Download kommen. Sie wollen nicht das Programm, das Hey, wir können das installieren. Wir haben nicht viel davon in einem Siri. Was sie also tut, ist, dass sie diese Bereiche tatsächlich miteinander verbindet. Es wird ein Gigabyte der Dateien hier installieren. Dann wird es einen Zeiger auf diesen Bereich zeigen. Es wird Punkt ging hier rüber, stellen Sie eins hier oben und hier, und es tut nicht eine etwas effizientere Art und Weise, als Sie hier sehen könnten. Aber das sind die Grundlagen, wie es geht. Es wird das Programm durch mehrere dieser Arten von Schleifen miteinander verknüpfen, und es wird Ihnen tatsächlich nur zeigen, oder es wird angezeigt, dass fast in Echtzeit alles durchsucht und es wirklich zurückbringt schnell. Aber was es tatsächlich tut, ist eine verknüpfte Liste für diese Daten zu erstellen. Und die Art der ordentlichen Sache
ist, wenn Sie Ihren Computer defragmentieren, entfernen
Sie tatsächlich etwas davon. Sie versuchen, es direkt nebeneinander zu setzen und Sie erlauben die eigentliche Festplatte selbst Zehe suchen müssen,
das ist, wo es bewegt sich zu gehen. Suchen Sie nach diesem. Andere Teile davon können sich auf separaten Seiten der Festplatte befinden. Es stellt sie nebeneinander, so dass es weniger Zeit mit, dass auch die Ladezeiten reduziert. Ein weiteres Beispiel in der realen Welt ist eigentlich mit einem Webbrowser. Wenn Sie darüber nachdenken, ist
dies eine verknüpfte Liste. Der Rücken und der Ford Arrow. Moment stehen wir am Ende der Liste, also ist es keine kreisförmige Liste. Ich kann nicht klicken, vorwärts
gehen und zum Anfang zurückkehren. Was ich tun kann, ist, dass ich diese Liste durchqueren kann, damit ich rückwärts gehen kann und ich gehe zur Google-Suche oder
zur falschen Rechtschreibung der Google-Suche. Wahrscheinlich alle fünf Mal. Ich kann zurück zu drei zurück zu hinteren Zehe eins gehen, so dass meine Geschichte fast verlinkte Listen von Arten ist. Ich kann vorwärts gehen, und ich kann es durchqueren, aber nur eins nach dem anderen. Es sei denn, ich ging
natürlich auf die Registerkarte „Historie“, die in diesem Sinne eher wie ein Array wäre, aber das ist eine Art von der engsten oder am meisten riel verknüpften Liste Beispiel, an das ich denken könnte. Dass jeder bisher höchstwahrscheinlich verwendet hat, ist die Geschichte in unseren Webbrowsern. Aber das ist nur ein paar Beispiele für verknüpfte Listen. Lassen Sie uns tatsächlich in einige der mehr in Feuerstein wie Implementierungen davon auf einer
Informatik-Perspektive mit einigen dieser zukünftigen Vorträge springen .
24. 4-1 Stapel: Jetzt, da wir ein gutes Verständnis von einigen grundlegenden Datenstrukturen sind Array und unsere verknüpfte Liste, können
wir beginnen, auf diesen aufzubauen, um komplexere, aber nützlichere Datenstrukturen zu erstellen. Und das erste, worüber wir reden werden, ist ein sehr wichtiges in der
Informatik . Und das ist der Stapel. Also, was genau ist ein Stack? Was können wir darüber denken? Dies auf eine Art intuitive Art und Weise. Ein Stapel ist im Grunde die Art und Weise, wie Tabletts in einem Lunchroom funktionieren würden. Sagen wir also, Sie haben einen Stapel Tabletts in einem Lunchroom oder wie eine Cafeteria oder so . Und so haben Sie einen Stapel. Hier gibt es ein paar verschiedene Tabletts, alle übereinander gestapelt sind. Nun, wenn Sie A wollen, wissen Sie, wenn Sie eines dieser Tabletts wollen, gehen
Sie nicht nach unten, um es zu greifen. Das wäre, du müsstest alles abheben und dann irgendwie,
du weißt schon, du schnappst alles, bewegst es, dann schnappst die Flasche und steckst alles wieder zurück. Das ist also nicht das, was wir hier tun wollen. Was wir tun, ist, dass wir normalerweise die 1. 1 von oben nehmen und sie packen, wissen
Sie, also haben wir dieses Tablett, und dann geht das nächste und wer das packt, sie haben ein Tablett. Und wenn wir einmal das tun, sind die weg. Also wir mögen, entfernen Sie diese beiden von unserem Stapel. Wenn jemand ein paar saubere Tabletts hat,legen
sie es nicht unten,dann setzen
sie ihn wieder auf die Oberseite. Wenn jemand ein paar saubere Tabletts hat, legen
sie es nicht unten, Also haben wir diesmal ein paar neue saubere Tabletts dort blau. Und so werden sie an die Spitze hinzugefügt. Wenn jemand einen schnappen will,gehen
sie voran und schnappen sich einen. Wenn jemand einen schnappen will, Und dann, jetzt bekommen sie eine so und so haben sie ein Bleu Tablett und jemand anderes hat ein blaues Tablett, und dann schnappt jemand die 3. 1 Also haben sie, Ah, Schwarzhandel. So, und am Ende davon,wissen
Sie, wissen
Sie gehen
wir weiter nach oben und unten, oben und unten durch diese Art dieser Strukturrate hier. Und jedes Mal, wenn wir die sauberen Tabletts ausgehen, werden sie an die Spitze gelegt und jedes Mal,
wenn wir es von oben nehmen, so dass wir Onley irgendwie auf einer Seite dieses Stapels hier ausführen. Und genau so funktionieren Stacks in der Informatik. Also im Grunde, was es sein wird, wird eine Datenstruktur sein, in der wir eine Reihe von Informationen haben , die irgendwie so angeordnet sind. Also haben wir , eine Drei,
um, ähm, wir könnten hier ein Wort haben. Wir könnten Katze hier haben. Wir können wirklich alles, was wir wollen, in diesem Stapel haben. Aber was daraus herauskommt, ist, dass, wenn wir aus dem Stapel greifen wollen, wir nicht überall hier drinnen zugreifen können, außer auf die Spitze. Und wenn wir etwas schnappen wollen, heißt
es Pop. Also stecken wir nichts in diese Prinzen, weil wir keine Wahl bekommen. Wo sind wir nur knallen. Wir rufen den Stapel an und sagen, Hey, knallen Sie ein Element daraus. Und wenn wir Element daraus poppin, bekommen
wir das oberste Element auf dem Stapel genau hier. Das bedeutet also, dass diese fünf hier landen. Und ich werde auch platzen. Wir bekommen eine Fünf und dann wird es aus dem Stapel entfernt. Und jetzt, wenn wir wieder auftauchen. Also, wenn wir einen zweiten Pop so nennen, was wir am Ende bekommen wird,
wird das zweite Element herauskommen und es wird geschoben oder Italien packt und hier setzen setzen Rate hier. Und dann machen wir genau das Gleiche, was wir von diesem löschen und das jetzt sind Stack
hat nur noch zwei und drei übrig. Aber wenn wir ein paar Informationen hinzufügen wollen, machen
wir etwas, das man einen Push nennt. Und dann in den Prinzen, müssen
wir angeben, was wir hinzufügen. Unser Stapel würde angeben, was hier los ist, was genau hier geht. Und so schwächen setzen Sie wissen, etwas hier drin? Setzen wir 107. Also schieben wir 107 auf den Stapel. Das bedeutet, dass 100 7 dann ganz oben auf den Stapel gehen wird, und dann legen wir es auf den Stapel. Und das ist im Allgemeinen, wie ein Stack funktioniert. Und was wir das nennen, ist, dass wir es zuletzt nennen. Zuerst haben
wir es mit einem anderen namens F I F zu tun. Oh, das ist ein Stichwort. Das wird irgendwie als nächstes in dieser Serie sein, aber das nennt man letztes in erster Linie. Jetzt gebe ich zu, dass das ein bisschen zweideutig ist. Ich bekomme das manchmal mit einem Q verwechselt, weil du denkst, dass der letzte in vielleicht
derjenige ist ,
der dort war , der längste, und du denkst, dass man der erste ist. Aber so funktioniert es nicht. Es redet darüber, welcher der letzte war, der reinkam. Das ist derjenige, der zuerst draußen sein wird. Wir können uns das wieder vorstellen, da wir uns dies als statt letztes in erster Linie vorstellen können. Dies ist das jüngste in den letzten Jahren. So ist es das letzte in der ersten Ausgabe. Und wenn das, weißt
du, es dir
erlaubt, leichter zu denken, als dafür zu
gehen, denk daran, L I f o wird irgendwie der Standard sein, den sie sagen werden, wenn sie
über einen Stapel reden . Aber was es wirklich bedeutet, ist nur die neueste in ist die 1. 1 aus. Und wenn wir also nur einen Schub gemacht haben, wissen
Sie, wir haben auf 107 gestoßen, wir knallen 107 wir drücken auf 107. Wir knallen 107. Wir machen das unendlich. Diese beiden werden nie berührt werden. Sie werden verhungert sein. Sie werden nie aus dem Stapel gebracht. Und in vielen Situationen ist
das eigentlich
für uns in der Informatik wichtig,weil für uns in der Informatik wichtig, dies
zum Beispiel verwendet werden könnte,
um wie ein nachzuspüren. zum Beispiel verwendet werden könnte, Dies wäre eine gute Möglichkeit, es zu tun, denn jedes Mal, wenn Sie eine Wendung hatten, könnten
Sie das auf einen Stapel schieben. Und dann, wenn man erwischt wird, wie eine Sackgasse, fängt
man an, aus dem Stapel zu springen und dann, sagen
wir, es war eine Sekunde. Es gab eine zweite Richtung hier. Also die zweite Richtung hier. Also bist du hier runter gegangen. Du bist hier runter gegangen. Du bist hier runter gegangen. Wir haben Spottstapel hier
einen kleinen
Spottstapel,
und jedes Mal, wenn du eine dieser Umdrehungen
machst, setzst du das auf den Stapel. Also, wissen
Sie, drehen Sie sich um drei drehen für Sie, wie,
oh, oh, wir sind in eine Sackgasse geraten. Also, was Sie tun können, ist eigentlich nur Pop, um rückwärts in der Zeit zu gehen und dann in eine andere Richtung zu starten und beginnen, auf Ihre neue Richtung zu drücken, was dieser neue blaue Weg und so eine Art von einer der kleinen Anwendungen, die verwendet ist ideal für,
wie, wie, Graphentheorie und einige der fortgeschritteneren Art von Konzepten in der Informatik. Aber im Moment müssen wir nur verstehen, wie ein Stack funktioniert, und wir können auch verstehen, wie er implementiert ist, weil es keine Art von,
ähm, wissen
Sie, wissen
Sie, genaue Art und Weise , um dies zu tun. Es gibt ein paar verschiedene Möglichkeiten, wie wir einen Stapel und ihre Möglichkeiten erstellen können, über die wir
bereits gesprochen haben . Wir können ein Array erstellen, das ein Stack ist, und wir können eine verknüpfte Liste erstellen, die ein Stack wie so ist und Sie müssen darüber nachdenken, welcher Mawr effizient wäre. Also haben wir unser Array hier und sagen wir es. 01234 und so müssten wir die ganze
Zeit über die Vorderseite des Stapels verfolgen , denn sagen wir, die Front ist hier genau und dann haben wir einen Cursor, von dem Sie wissen, dass er das im
Auge behält. Also haben wir eine zu 10 und eine Neun nach vorne ist genau hier. Und jedes Mal, wenn wir Pop anrufen, also jedes Mal, wenn wir Pop in dieser Situation anrufen, wird das, was tatsächlich tun wird, greifen, was diese Cursor Nummer ist. Also, zum Beispiel, gerade jetzt ist dieser Cursor auf wird aufgerufen. Der Cursor Siehe ist auf drei gesetzt. Wenn wir also platzen, werden
wir eigentlich nur das Element bei Nehmen wir an, dieses ganze Array ist auf X gesetzt. Wir werden das Element bei X drei greifen. Also bekommen wir, dass dieses Element sein wird, es wird uns A liefern Es wird uns eine neun ein neun liefern. Also lasst uns das machen. Es wird uns eine Neun liefern, und dann, was es tut, ist es, dann nimmt diese Zahl und es mindert sie um eins, damit wir gehen können. Also ist unsere neue R C jetzt gleich C minus eins, was bedeutet, dass es jetzt gleich zwei ist, und dann können wir das weiter tun. Also knallen Sie diese Informationen einfach ab. Wir packten es, und dann nahmen wir den Cursor. Wir nahmen den Cursor hier und wir bewegten ihn zurück entfernt einen hier drüben. Und so könnte es auf einem Array funktionieren. Jetzt denken Sie vielleicht, dass dies eine Einschränkung haben wird, sobald wir bis zum Ende gekommen sind. Wenn wir versuchen, weitere Informationen zu diesem Zweck zu bringen, wird
es brechen. Wir werden eine Segue-Schuld bekommen, und das kann es ein bisschen gefährlich machen. Aber wenn Sie wissen, dass Sie nur mit 10 oder so Elementen arbeiten, könnte
dies eine schnellere Möglichkeit sein, Ihren Stack zu implementieren. Jetzt. Der andere Weg, wie wir es tun könnten, ist, dass wir eine verknüpfte Liste verwenden können, und diese ist eigentlich auch ziemlich intuitiv. Alles, was wir tun werden, ist jedes Mal, wenn wir eine neue Information bekommen, werden
wir sie einfach an die Front stellen. Also werden wir es an die Front hinzufügen, wie wir es mit Linked Weniger Solicitous getan haben , lassen Sie uns ein paar Zahlen hier rein, nur um dies nicht so verwirrend zu machen. Und sagen wir, wir wollten hier eine Vier hinzufügen, also müssen wir das jetzt nur so verknüpfen und dann
natürlich natürlich unsere Starterposition
geändert haben. So dass es so zeigt, dass es auf unsere neue zeigt. Und jedes Mal, wenn wir von Anfang an anfangen wollen, müssen wir uns nur ändern. Schnappen Sie sich die Informationen von diesem und ändern Sie dann unseren Starter
zurück, sichern Sie einen. Und so können Sie sehen, dass dies tatsächlich ein bisschen schneller sein könnte, in dem Sinne, dass Sie nicht irgendwie alles hier einrichten müssen, aber, ähm ,
und ganz Besonderes, weil wir nicht alles von hinten. Wir müssen das nicht durchsuchen. Diese Luft immer konstante Zeit hier oben, und es könnte bis in die Unendlichkeit erweitert werden. also Sie könnenalsoimmer wieder Notizen hinzufügen. Das, solange du willst. Du musst nicht definieren, wie groß sein wird. Dies ist normalerweise die typische Art und Weise, wie Stacks implementiert werden. Es ist eine Art Linkliste. jedoch Sie könnenjedochin einer Erhöhung implantiert werden. Das wollte ich dir auch nur zeigen. Und oft etwas, das es nicht ist, wissen
Sie, völlig ungewöhnlich, dass sie mit einem Array implementiert werden
25. 4-2 Stapelbeispiel: dass wir einige der Intuition hinter einem Stapel haben. Ich wollte die Idee eines Stapels festigen, indem ich ein paar Beispiele durchführe, irgendeine Art von Möglichkeiten, wie wir sehen können, wie ein Programm die Daten, die
Ausgabe,
die Daten eingibt Ausgabe, und dann, wie alles zusammen funktionieren wird. Was wir also tun werden, ist ein paar Beispiele hier durchzugehen. Also hier draußen haben
wir nur ein einfaches Beispiel. Es sagt, geben Sie die endgültige Ausgabe und die restlichen Elemente des Stapels. Was wir also tun werden, ist, dass wir diese Befehle ausführen und dann sehen, was unsere Ausgabe wird und was noch am Ende auf dem Stapel übrig ist. Beginnen wir damit, dies Schritt für Schritt zu tun. Also werden wir hier einen leeren Stapel haben. Es ist absolut nichts drin. Und dann unsere Ausgabe. Ich werde unsere Ausgabe hier unten stellen, , lass es
uns hier auf die linke Seite setzen, weil es lange dauern könnte, dass wir unsere Ausgabe genau
hier platzieren werden, und
so wird die Ausgabe einfach zu haben diese Zahlen können aufeinander koffeiniert werden. Also werde ich das in einer Sekunde erklären, aber werden die Ausgaben hier unten unten sein, und dann wird unser Stapel weiter über die Spitze
gehen? Also ist dieser Schritt ein Schritt sagt Push für Also wir gehen für hier zu drücken,
was bedeutet, dass wir einfach eine Vier unter dem Stapel hinzufügen. Und dann gehen wir jetzt zum nächsten, der zu geschoben wird, also ist nichts anderes passiert. Es wurde nichts aufgetaucht. Also haben wir einen Stapel von vier, und wir werden darauf drängen. Also gedrängt für, ich meine, Push zum Schreiben geht genau da. Und jetzt gehen wir zum nächsten Schritt, sagt: „ Push 15.“. Also haben wir eine Vier, wir haben eine Zwei, und jetzt haben wir eine 15 wie so und dann kommen wir endlich zu unserem ersten Ausgang. Unsere erste Ausgabe, sagt Pop, Denken Sie daran, es muss nichts im Topf sein, weil es nur gehen, um zu greifen, was Element an der Spitze ist. Es hat keine bestimmte Art von Element, wird greifen. Du kannst nichts unter der Spitze schnappen. Also alles, was wir sagen müssen, ist nur ein Element zu knallen, damit wir tun werden, ist
, dass wir dieses Element abknallen . Und so ist alles, was wir noch haben, ein Vier und ein Zwei, und dann fährt 15 bei 15 weiter runter zu unserem Ausgang hier unten. Und dann haben wir jetzt 15 in unserer Ausgabe. Und so war dies dieser Schritt. Und so der nächste Schritt, den wir tun, ist, dass wir 27. Jetzt haben wir vier, wir haben es geschafft, und dann haben wir 27 von der Spitze. Und dann, was wir jetzt zu Dio gehen, ist, dass wir mit Pops tun werden. Also werden wir die 1. 1, die unsere 27. In diesem Pop werden
die 27 nach unten gehen und in unsere Ausgabe gesetzt werden. Also jetzt haben wir 27 hier, und du könntest das durch Kommas oder irgendetwas trennen. Ich setze sie nur zusammen. Also 15. 27 Wir werden das alles einfach so zusammenstellen und dann müssen wir wieder knallen. Das war also dieser Pop hier. Wo dieser Pop. Jetzt müssen wir noch einmal platzen. Also, jetzt haben wir nur noch die vier auf dem Stapel und sind zu gut
, so wie sie beide so gehen. Also der Kauvorgang, der hier war, geht runter und es wird auf den Ausgang gesetzt, richtig? So wie so. Also dann haben wir nur die beiden hinzugefügt. Und das war also unser zweiter Pop, richtig? So wie das. Und jetzt können Sie sehen, dass wir diesen Stapel eine Art Schritt nach dem anderen hinuntergehen. Die schiebt die Pops und dieser Stapel ist wie, Dynamic wächst, es schrumpft, und es greift nur von oben die ganze Zeit. Also machen wir unsere letzten Schritte hier. Wir werden eine Drei schieben, also ziehen Sie es hier, weil all das hier oben aufgegriffen wird. Also haben wir vier und dann drei hinzugefügt, wir haben auf unsere drei gestoßen, und dann die nächste, die wir tun werden, ist, dass wir auf weitere vier drücken müssen, also vor drei und dann vier. Und so drücken wir auf diese vier so und dann haben wir jetzt drei
Pop-Statements . Also wird unser erstes Pop-Statement hier sein, das zweite Pop-Statement wird hier sein, und ich dritte Pop-Statement wird hier sein. Und das, was wir auf der 1. 1 haben, ist, dass wir die vier abknallen. Wir werden die vier abschalten, damit es auf den Ausgang kommt, und dann werden wir die drei abschalten. Also alles, was wir noch haben, ist, bevor, so dass drei geht an die Ausgabe. Und dann endlich werden
wir das letzte Element abknallen. Also haben wir hier ganz am Ende einen leeren Stapel. Und so haben wir die vier
großartigen, großartigen, und du wirst etwas bemerken. Sie werden feststellen, dass wir am Anfang diese vier hinzugefügt haben und sie nicht bis zum
Ende entfernt wurden . Es gab eine ganze Reihe von Sachen hier an der Front, aber es wurde nicht bis zum Ende bewegt, weil es ein Stapel ist. Und wie ich schon sagte, es könnte hier unten verhungert werden. Es könnte nie wieder berührt werden. Also das ist einfach so wie eine der kleinen Vorbehalte, die mit einem Stapel kommt. Und so lassen Sie mich einfach diese Pfeile zu Ende ziehen. Dieses Diagramm wird hier ein bisschen gruppiert werden, aber so wird alles laufen. Also einen Schritt nach dem anderen. Wir bewegen langsam einen zum nächsten,
den nächsten zum nächsten, und leeren diesen Stapel aus, und das wird unser endgültiger Ausgang sein. Ist diese Nummer hier? 15 bis 7 bis 434 Wenn wir Kommas hier reinsetzen wollen, dann ist es es. Raus. Sag es so. Und so, ja, das ist die endgültige Ausgabe unseres Stapels. Und dann war unser letzter Stapel komplett leer. Also lasst uns hier noch ein Beispiel machen, und ich werde das etwas sauberer machen. Jetzt, wo wir es nicht tun. Ich werde nicht versuchen, diese Pfeile wieder zu zeichnen. Das war gut für die 1. 1, aber lassen Sie uns es irgendwie auf eine Weise machen, die ein bisschen
besser aussehen könnte . Okay, also habe ich hier Zahlen gesetzt. Und jetzt lasst uns gehen. Schritt eins. Schritt eins ist ein Push auf 10. Also hatten wir einen leeren Sack zu beginnen, löschen, hier
hinlegen. Also hatten wir hier einen Push von 10. Also lasst uns weitermachen und 10 drücken. Schritt zwei sagt Pop. Also nehmen wir die 10 und wir knallen es sofort ab. Jetzt sind wir wieder in einem leeren Stapel. Und dann geht die 10 hier runter. Das 10 geht hier runter und lasst uns den Schritt setzen, an dem es passiert ist. So geschah es bei der Einstellung. Und so gehen wir zu Schritt drei. Das ist der Schub, also werden wir die beiden so drängen und dann sagt Schritt vier um fünf vor fünf zu schieben. Schritt Fünf sagt, ein C zu drücken also werden wir verschiedene Werte hier fünf mischen und dann an der Spitze sehen. Schritt sechs ist ein weiterer Pop, also werden wir das Meer abknallen. Alles, was wir noch haben werden, sind fünf und zwei, und wir werden den See hier unten stellen. Und dann war es auf Schritt sechs, dass das passiert ist. Und dann gehen wir zu sieben, was ein weiterer Pop ist. Also, jetzt haben wir nur noch die beiden auf dem Stapel übrig, und dann werden wir auch
die fünf abknallen und wir legen es hier runter. Das ist nicht Schritt sieben, und wir sind jetzt bei Schritt acht. Acht sagt, wir müssen auf eine 14 drücken, also haben wir zwei 14 neun sagt, dass wir auf Hund stoßen müssen. Also jetzt haben wir zu 14 und dann Hund an der Spitze hier. Und dann werden wir jetzt alle drei Elemente abknallen. Also 10 geht runter zu und 14 und wir werden Hund hier unten hinzufügen. Und das war auf 10. Und dann gehen wir weiter und gehen zu stoppen 11 genau hier, was aus der 14. Alles, was wir haben, ist zu üblich, und das war in Schritt 11. Und lassen Sie uns einfach beenden, ist oft können wir diese Grafik hier unten beenden. Es ist ein letzter Pop, also ist es ein leerer Stapel. Also bekommen wir oder mein Vater 11 11 sollte 14 11 sein. Sollte hier 14 sein, und das sollte auch sein. Und dann ist dies auf Schritt 11 und 12. Sagen wir aber, dass wir nicht Schritt 12 hatten. Der Weg kam zum genau gleichen Ding am Ende hier kamen wir mit einem leeren Stapel, wie wir es im letzten Beispiel getan haben. jedoch Lassen Sie unsjedochein Let's nicht in einem leeren Stapel enden. Also sagen wir was? Wir streichen Schritt 11. Nehmen wir an, wir sind Schritt 12. Also streichen wir Schritt 12 aus und wir verwenden das nicht. Das bedeutet, dass dies in einem nicht leeren Stack enden wird, so dass wir diese ganze
Sache einfach löschen können . Und das passiert viel in diesen Arten von Beispielen ist, dass der Stapel nicht leer sein muss ,
um am Ende zu enden. Das Problem ist, dass es immer noch einen Wert darin haben kann. Oder könnte es immer noch mehrere Werte darin haben? Und in dieser Situation haben
wir hier einen Ausgang von 10 c fünf Hund 14. Aber wir haben auch etwas auf dem Stapel übrig, und das ist auch wichtig. Deshalb müssen wir das tun. Normalerweise gingen diese beiden Situationen in diesen Situationen, um die Ausgabe und den amtierenden Stack . Da der Stapel möglicherweise nicht leer
ist, kann er möglicherweise nicht wie bei diesem mit Anti Stack beginnen. Wenn wir darauf zurückkommen, wenn wir verstehen müssen, dass noch zwei im
Stapel verbleiben und lassen Sie uns ein etwas anderes Beispiel machen, sagen wir, dass wir etwas versucht haben, wo wir für 12 und dann 13 aufgetaucht sind. Wir Pop wieder, wenn wir einen Pop auf einem leeren Stapel machen. Es gibt also einen leeren Stack und wir versuchen, diesen letzten Pop zu implementieren, so dass dies mit
dem ursprünglichen Fall geht , in dem wir uns auf einem leeren Stack befinden. Und dann versuchen wir jetzt, etwas von einem leeren Stapel zu knallen, was zu einer Luft führt . Wenn Sie versuchen, von einem leeren Stapel zu springen, werden
Sie eine massive Luft etwas entlang der Linie einer Segue Störluft bekommen oder keine Luft existiert,
was auch immer Art von Programm, das es verwendet wird, wird eine andere Luft werfen. Aber im Grunde, was passiert, ist, dass Sie versuchen, Informationen zu greifen, die nicht da sind, und so könnten Sie es in den Code schreiben, wo es nur sagen wird, Hey, ähm, es wird es ignorieren oder was auch immer. Das ist normalerweise nicht die beste Codierungspraxis, weil das bedeutet, dass Sie das Problem ignorieren , dass Ihr Code Unschuld falsch war, wo er versucht, etwas zu öffnen, das nicht da ist, was Unschuld bedeutet, weshalb Hat es versucht, etwas zu knallen, das nicht da war? Was für ein Zeug kommt daraus? Vielleicht war das Design falsch im Code. Vielleicht versucht es, etwas zu schnappen, das es nicht hat, also benutzen wir nicht. Ich möchte das ignorieren. Wir wollen die Luft durchkommen lassen und dann können wir unseren Code reparieren. Wir können die Daten reparieren, die ein- und auskommen, um das zu beheben. Also verstehe
nur, nur, dass Knallen. Wenn Sie versuchen, aus dem leeren Stack zu springen, erhalten
Sie eine Luft daraus. Aber das sind die Beispiele und die Art der Intuition, wie Sie ein
Stack-Beispiel hinuntergehen könnten ,
daswirklich,
wirklich irgendwie einfach drängt wirklich, , besonders wenn Sie es herausziehen. Ich empfehle Ihnen, es herauszuziehen, damit Sie sehen können, wie einfach das wirklich ist. Dein Hinzufügen von Sachen an die Spitze. Sie knallen es von oben und Sie listen nur die Ausgabe am Ende auf
26. 4-3 Warteschlangen: Jetzt, wo wir Stapel unter unserem Gürtel haben, gehen
wir mit ihrem Bruder. Und das sind die Hinweise. Cues sind Stax sehr ähnlich, außer dass sie einen wichtigen Unterschied haben, und das ist, wie Informationen aus der Datenstruktur gezogen werden. Also lasst uns genau das tun, was wir mit den Stacks gemacht haben. Und lasst uns irgendwie die Intuition hinter dem, was ein Q ist, durchgehen. Und der beste Weg, dies zu tun, ist eigentlich nur in Großbritannien, wie die britische Sprache und, glaube
ich, australische Sprache. Sie nennen das, was Amerikaner eine Linie Q nennen, und das ist aus gutem Grund. Zum Beispiel, lassen Sie uns sagen, dass wir, ah, Bankkäufer hier haben. Das ist eine Bankkasse und es gibt eine Linie, was wir in Amerika sagen, eine Reihe von Leuten, die warten. Jetzt haben Sie diese Person, diese Person, diese Person, diese Person und diese Person. Und die Art und Weise, wie diese Datenstruktur funktioniert, ist, dass die erste Person, die hier ist, herauskommt . Sie werden bedient, sie werden entfernt, und dann werden alle neuen Leute hier drüben zum Ende hinzugefügt. Und das funktioniert so, dass es genau eine Warteschlange erstellt. Die ersten Leute hier sind die ersten, die hier drüben bedient werden. Also dieser ist der Erinnern Sie sich, wie wir in der letzten Zeit über l i f O gesprochen haben, dieser ist f i f o. Und das bedeutet zuerst in der
ersten, zuerst aus. Also die ersten, die angekommen sind, sind die ersten,
die wieder
rauskommen . Und so, wie ich schon sagte, diese Art von Terminologie könnte ein wenig verwirrend werden. Wenn Sie also auf eine andere Weise darüber nachdenken wollen, ist
das das, ähm, das längste Warten, das längste Warten ist das 1. Die längste Person, die gewartet hat, ist die 1. 1 raus, und
das wäre natürlich die Person an der Front hier. Und die Art und Weise, wie Sie dies in eine Datenstruktur implementieren, besteht darin, einen Stapel wie
diesen zu zeichnen , weil Sie nur von einem Ende greifen können, ist, dass Sie ihn irgendwie
seitwärts zeichnen können . Und so zeichne ich normalerweise, dass du diese Art von Datenstruktur hast, in der du , ähm ,
irgendwieSeiten hier
hast ,
irgendwie , und wenn jemand, könnte
das sein die Rückseite, und das könnte die Front sein. Und wenn die Leute dazu hinzugefügt
werden, werden sie nach hinten hinzugefügt. Nehmen wir an, wir haben jetzt einige Daten hier. Wenn Leute dazu hinzugefügt werden, werden sie auf dieser Seite hinzugefügt, und wenn Leute davon entfernt werden, werden
sie von dieser Seite genommen. So zum Beispiel haben
wir
zum Beispieleine neue Person, die hereinkommt. So gibt es 31 Person wird serviert. Also werden diese drei entfernt und die Bestände bewegen sich so nach unten. Und Sie sehen, dass es ein wenig schwieriger ist zu zeichnen, weil es nicht gerade stationär
ist, ist es nur, dass es sich bewegt, während Sie gehen. Und das ist nur eine Art von der Natur eines que in dieser Situation. Und so zum Beispiel gibt es
zum Beispielnoch die Push- und die Pop-Operationen, aber sie funktionieren einfach ein bisschen anders. Der Pop wird immer von vorne greifen statt von der Rückseite, also greift der Pop von vorne statt wie in einer Warteschlange, wo er greifen wird, oder statt wie in einem Stapel, wo er von genau der gleichen Seite greifen wird, die er geschoben . Also wird Pop von vorne greifen. Push wird nach hinten schieben. Und das ist der Hauptunterschied. Und du denkst vielleicht, wie genau? Damit, weißt
du was? Was? Einige. Die Vorteile davon. Stellen Sie sich einen Computer vor. Wir haben hier einen Prozessor. Ah, Prozessor. Also eine CPU, wie bekommt es Daten? Nun, wie kommt es, eigentlich Anweisungen, was es tun sollte? Nun, die Sache
ist, dass, wenn es einen Stapel verwendet, um Anweisungen zu erhalten, Sie ein Problem haben würden, wo, wenn zum Beispiel, sagen
wir, dass diese oben war wie, ah, Web-Browser. Und dann war dieser etwas, das für die gerechte allgemeine Verarbeitung tun musste. Und dann hier unten war ein Wortdokument. Stellen Sie sich vor, wenn dies ein Sack wäre und diese beiden immer wieder in unserem Wortdokument kamen, würden einfrieren weil es nie berührt werden würde. Es wäre das, was hier unten als verhungert bezeichnet wird, und das ist keine gute Implementierung für eine CPU. Ah, bessere Implementierung wäre, wenn statt dies ein Stack ist, anstatt ein Stack zu sein, was wir tatsächlich gemacht haben, ein Q wäre, weil es jetzt ausgeführt wird. Die erste Aufgabe wird die erste Aufgabe und in der zweiten Aufgabe und in der dritten Aufgabe ausführen . Und dann, wenn etwas als nächstes ausgeführt werden muss, werden
diese hier unten hinzugefügt. Und dieses Q wird einfach mit neuen Dingen umwickeln, die es braucht um dio und unsere CPU wird nur eine nach dem nächsten nach dem nächsten nach dem nächsten
nach dem nächsten erreichen . Und es wird in der Lage sein, durch alle Programme zu fahren, die wir brauchen. Sie wissen, dass es die Berechnungen durchführen muss, die zu dio ohne jemals eine
bestimmte Aufgabe verhungern muss. Und so funktioniert eine Art CPU. Es ist ein bisschen komplexer als das, nur weil ich meine, es muss so etwas wie drei Millionen Mal pro
Sekunde oder so eine verrückte Zahl machen, und bestimmte Dinge haben Vorrang vor anderen Dingen. Aber im grundlegenden Sinne würden Sie
deshalb ein Q über einen Stapel verwenden, wenn Sie möchten, dass alles den
gleichen Wert hat und Sie möchten, dass das Ding, das am längsten gewartet hat,
zuerst bedient wird . Dann schauen wir uns die Implementierungen an. Wie wir das tun könnten, könnten wir wieder eine verknüpfte Liste verwenden oder im Array sind bisher verknüpfte Liste. Wir waren für unseren Ray, mein Dad für Array. Wir hätten so etwas hier. Und die Sache ist, das müsste ein kreisförmiges Array sein. Das müsste kreisförmig sein. Denken Sie daran, als wir über die Stapel sprachen, dass wir einfach das normale Recht verwenden konnten, wenn wir zu tun
hatten, war ein Fluch. Sind eine Art von Yeah, ein Cursor, der nach unten, auf
den Rücken zeigt , und dann ist es einfach irgendwie nach oben und unten bewegt. Das Problem
ist, dass die Vorder- und Rückseite sich immer um den Ort bewegen. Was wir also tun müssen, ist, dass wir tatsächlich umsetzen müssen. Wir müssen ein kreisförmiges Recht implementieren, damit sich die Vorder- und Rückseite bewegen können. Also, was wir tun, ist, dass
wir, sagen wir , einige Informationen hier haben, einige Informationen hier haben,
und wir hätten einen Cursor, der nach vorne zeigt und einen Cursor, der auf
die Rückseite zeigt , würde sagen: Vielleicht ist das die Front. Vielleicht ist das die Rückseite. Und jetzt, wenn wir Daten hinzugefügt haben, würden
sie auf der Rückseite hinzugefügt werden oder die Vorderseite spielt keine Rolle, solange die Seiten gegenüberliegen. Sie hatten zu einer Seite hinzugefügt und Sie nehmen Daten von der anderen Seite. Dann würdest du jede von ihnen rüber bewegen. Also, wenn Sie nehmen oder wenn Sie in den Rücken hinzugefügt, würde
die Rückseite dann verschoben werden. Der Rücken in mir zog zu dem neuen Stück Daten etwas hart da. Aber es würde so bewegt werden, und dann würde sich die Front nicht bewegen. Und wenn du von vorne runtergegangen bist, dann schnappst du das und bewegst das auch über. Genau so haben wir über das kreisförmige Array gesprochen. Wir müssen es kreisförmig machen. Damit es funktioniert, wird es sonst in Situationen laufen, in denen wir O bis zur n
Zehe verwenden müssen, bewegen Sie alle Daten hin und her. Und das wird wirklich, wirklich mühsam Ende wirklich ressourcenintensiv. Die nächste Option schwächen Dio ist, dass wir unsere verknüpfte Liste verwenden können, damit wir unsere verknüpfte Liste
hier haben können und die Art und Weise, wie wir dies tun werden, ist, dass wir sowohl diesen
Starter-Zeiger haben müssen , den normalen Startpunkt, den wir haben. Wir müssen auch diesen Schwanzzeiger haben, über den wir gesprochen haben. Der Grund, warum wir den Tail Pointer brauchen, ist, dass wir genau wissen, was am Ende der Liste hier
drüben ist . Und wenn wir wissen, was am Ende ist und wenn wir es sofort erreichen können,
dann schwächen, greifen Sie es, greifen Sie es, schwächen
Sie, löschen Sie es und wir können es abschalten. Aber es gibt ein Problem hier ist, dass, wenn wir nur einen Schwanz Zeiger haben und wir versuchen,
dies abzuschalten, dieser wird nicht zurückgesetzt werden und das wird ein Problem sein. Wir können nie zuvor gehen, also wird dies eigentlich in der Regel eine doppelt verknüpfte Liste sein müssen. Dies wird es uns ermöglichen, nicht nur bis zum Ende zu bewegen, sondern auch einen zurückzusetzen und all dies zu wissen, so dass wir keine Probleme haben, wo
dies immer noch ein Nein kontaktiert, das nicht mehr existiert. Also müssen wir, dass sie die fortschrittlichste verknüpfte Liste verwenden müssen
, über die wir gesprochen haben , die eine doppelt verknüpfte Liste mit einem Schwanz Zeiger ist. Und jetzt jedes Mal, wenn wir etwas hinzufügen wollen, haben wir gerade am Anfang hinzugefügt. Also haben wir gerade hinzugefügt. Wir fügen es einfach so hinzu und wiederholen die Pfeile und es wird jedes Mal nach vorne hinzugefügt, wenn wir etwas löschen
müssen, wir entfernen es einfach von hier und passen dann den Schwanz Zeiger auf die Rückseite alle in konstanter Zeit. Und das ist für all diese unerlässlich. Wir werden über das Ende davon reden, wie die Laufzeiten von all diesen sind. Aber im Moment müssen wir es nur verstehen, und das wird es sein. Der Hauptpunkt ist, dass sie alle als konstante Zeit enden müssen. Ansonsten beginnt
es viel zu ressourcenintensiv zu werden, und vor allem, weil, wenn Sie es einfach richtig , sie alle können konstante Zeiten sein, machen
,
sie alle können konstante Zeiten sein,
also gibt es keinen Grund, es über das Ende zu schaffen. Wenn sie alle können konstante Zeit sein. Das ist also ein Q. Und das ist die Intuition hinter einem que in der nächsten Vorlesung. Lasst uns genau das Gleiche machen, was wir mit Säcken gemacht haben, und lasst uns einige Beispiele ansehen
27. 4-4 Queue: Ist es nicht. Wir haben die Intuition hinter Cues durchlaufen. Lassen Sie uns zu einigen Beispielen gehen, damit wir sehen können, wie die Statusstruktur mit den Daten interagiert , die sie gegeben ist. Das erste Beispiel, das wir tun werden, wird sehr vertraut sein. Es ist identisch mit einem der Beispiele, die wir für die Stacks gemacht haben, und der Grund ist, dass ich Ihnen zeigen möchte, wie die Daten anders herauskommen, damit Sie
das hier sehen werden . Was wir haben, ist die Stack-Ausgabe, die dies gab. Und dann hier unten ist genau der gleiche Satz von Anweisungen, die wir mit dem Stack gemacht haben, um
diese Ausgabe zu erhalten . Also mal sehen, was ein Q mit sich bringt. Alles, was wir tun müssen, ist im Grunde genau das Gleiche, was wir mit den Stapeln in
der Vergangenheit gemacht haben , wo wir einen Schritt nach dem anderen gehen und indem
wir einen Schritt nach dem anderen gehen
, , können wir sehen, wie Dieser Stack wird gebaut oder in dieser Situation, wie das Q gebaut wird,
und dann, was die endgültige Ausgabe ist. Also lasst uns hier runter gehen und wir werden auch die Ausgabe aufschreiben. Und so werden hier unten Ausgänge sein. Sie sind alle für uns nummeriert. Damit wir,wissen
Sie,dieses Gitter hier der Schritte
erstellen können wissen
Sie, . Also lasst uns anfangen. Ich werde es seitwärts zeichnen. Es ist Zeit, sicherzustellen, dass es wie ein Q aussieht, und wir werden auf eine 10 drücken. Das ist also unser erster Schritt hier. Der zweite Schritt wird sein, zu Pop, also müssen wir in Element abknallen. Es gibt nur ein Element hier, also knallen wir die 10. Also, jetzt, da das Q leer wird, geht
die 10 hier runter und dann können wir auch direkt in dem Schritt, an dem dies passiert ist. Und dann gehen wir zu drei. Also drängen wir auf ein bis vier auf eine Fünf und dann fünf. Wir drängen auf einen C. Oops. Wir sollten wahrscheinlich sicherstellen, dass wir die beiden auch dort haben. Und dann haben fünf auf ein C gestoßen, also wird es zu fünf sein. Siehst du, und dann sind sechs, und in einem Stapel würden wir
hier von der rechten Seite runterspringen , der Seite, die derjenige, der hier die letzte kam. Aber das wird beschuldigt. Also knallen wir diejenige ab, die hier am längsten war. Und du wirst sehen, dass der Unterschied hier drüben im Stapel ist. Wir haben es getan. Wir tauchten die, die ihre erste das Meer bekam. Aber in dieser Situation, in der wir die zu... Also gehen die beiden nach rechts hier und das hat jetzt nur noch fünf und sehen links drin. Und dann können wir weitermachen und sagen: Welche Nummer? Die Wissenschaftler, dieser Schritt sechs, ist
das passiert. Und stattdessen, sieben, werden
wir noch einen Pop machen. Alles, was jetzt auf dem Stapel übrig ist, ist das Meer. Und so haben wir das Meer hier und wir fahren weiter mit einer Acht. Also mit einer Acht wurden schieben auf eine 14. Also, jetzt ist es 14. Für meine schlechte es ist, See ist auf der linken Seite, See ist bereit, als nächstes aufgetaucht werden. Also ist es C und dann 14 geht auf den Rücken, und dann gehen wir zu neun und wir drängen auch auf Hund. Und so haben wir jetzt C 14
und Hund, und dann endlich werden
wir einfach knallen. Also haben wir einen Pop. Es wird ein Element entfernen, die nächsten Pops könnten ein anderes Element entfernen. Und dann haben
wir endlich eine leere Zeichenfolge. Also, der erste Pop, wir werden die 1. 1 hier entfernen,
den, der am längsten gewartet hat, das Meer. Alles, was wir hier oben haben werden, ist, dass wir eine Vier haben, und dann einen Hund oder 14 14 14 14 und Hund. Und dann haben wir nur noch Hund übrig. Und sie werden eine leere Warteschlange haben, gleich am Ende hier drüben. Also kommt das C aus, dann ist es die 14 kommt ab, und dann kommt der Hund ab. Also, was wir hier haben, ist, dass wir haben, Oh, ich habe einen Fehler gemacht. Ich habe einen Fehler gemacht. Dies sollte nicht sehen, Es sollte fünf sein, weil wir die fünf abgetaucht. Nun ist das hier C und dann ist es 14. Und dann ist es Hund. Tut mir Leid wegen dem Fehler, Leute. Und dann passiert das also um 10 Uhr. Das, was bei 11 passiert, und das passiert um 12 Uhr. Und so können Sie sehen, dass alle anderen Fehler, die ich gemacht haben könnte, können
Sie sehen, dass diese tatsächlich sehr unterschiedlich sind als einander. Ihre Ausgänge gibt es eine Art von einer umgekehrten voneinander, wo man sehen kann, dass die beiden fast hier drüben ist, während die beiden am Ende sind. Hier drüben ist der
Hund ganz anders. Also gibt es nicht wirklich so viel von einem Muster hier, Aber Sie können sehen, dass der Startzustand war der gleiche, weil ein Pop schieben wird immer das gleiche sein, ob es ein Stapler que nur einer nach dem anderen. Aber was Sie anfangen, mehr Daten auf dort zu bekommen. Sie haben es auf eine ganz andere Art und Weise gehandhabt. Dies ist also, wenn dies wie
zum Beispiel
ein Computerprozessor oder etwas wäre zum Beispiel , würde
diese Aufgabe auf sehr unterschiedliche Weise erledigt werden. Und in dieser Situation wurden
die beiden ganz oben geschoben. Aber es wurde erst mit der allerletzten Aussage ausgeführt. Dieser hätte also schon sehr lange gewartet. Nun, das hier war viel fairer. Was zuerst kam, wartete am längsten. Es hat sie gemittelt. Die Wartezeiten waren also insgesamt relativ durchschnittlich. Und das ist der Grund, warum dies am besten ist, wie Computerverarbeitung und so etwas. Das ist also das erste Beispiel für das Q, es ist ziemlich einfach. Alles, was Sie tun müssen, ist Pop und dann drücken Sie oder Sie drücken und dann knallen Sie das gegenüberliegende Ende und Sie bekommen diese Art von niedlich, genau wie Linie würde funktionieren. Also lassen Sie uns jetzt ein anderes Beispiel machen, und Sie werden feststellen, dass sich hier die Namen geändert haben und das liegt daran, dass Pop und Push verwendet werden
können. Aber auch Leute verwenden in Q und D. Q. Und der Grund dafür ist, dass es nicht mit
einem anderen Stack im Programm verwechselt wird , ,so dass der Stack knallende Push haben würde, und dann die
das Q würde in Q und D. Q haben. und so, was das tut? Ist es, wie ich sagte, trennt diese beiden. Vielleicht sehen Sie, dass Sie vielleicht nicht, aber ich möchte Ihnen diese Konzepte vorstellen, damit Sie es verstehen. Wenn Sie ein ANC sehen, Sie sind de que, was genau es ist. Und jetzt bei diesem hier werde
ich ein bisschen eine Abkürzung machen, wie ich dieses Problem lösen könnte, denn das
könnte sehr,
sehr rühmt werden. Hier drüben ist
es Es braucht viel Platz auf viel Schreiben, also werde ich Ihnen einen schnelleren Weg zeigen,
es zu tun , wo Sie dorthin gelangen, wo Sie die Schritte nicht jedes Mal ausschreiben müssen, und Sie können genau die gleiche Menge an Genauigkeit. Also lasst uns weitermachen und loslegen. Das erste, was wir tun werden, ist, dass wir hier ein wirklich großes Q zeichnen werden. So werden wir, weißt
du, das wirklich,
wirklich groß
machen . Und dann werden wir hier unten einen Ausgang haben und loslegen. Das erste, was wir tun werden, ist, dass wir in Q A 10 ein 15 und ein 17 gehen. Also schließen wir diese drei Zahlen ein. Also jetzt sind wir hier oben dran, und jetzt ficken wir deine 1. 1. Also, was wir tun können, ist einfach die auf der gegenüberliegenden Seite
, die wir hinzufügen, auszustreichen und sie in unsere Ausgabe zu setzen. Und dann könnten wir einfach auf den nächsten Schritt in Q und l gehen. Also jetzt sind wir in Q auf dieser Seite. Und dann machen wir es jetzt mit Deke. Benutze Ridicu eins. Wir sind
auch in einem süßen, auch in einem süßen, also werden es diese 15 und in dieser 17 sein, damit wir einfach 15 17 durchkreuzen und sie
hier aufschreiben können . 15 kam zuerst, und dann die 17. Und jetzt sind wir hier. Und das, was wir tun werden, ist in Kuba 14. Also haben wir eine 14 hier drüben, und dann haben wir zwei weitere Schwanz verwenden, also gehen wir voran und de que die L d.
Q. Q. die 14 l 14. Reparieren Sie die 14 hier unten l 14 und dann endlich, ganz unten. Hier sind wir, direkt in die letzten beiden Operationen, die in q von vier, und dann werden wir de que, dass für. Und jetzt, was wir noch haben, ist, dass wir unser, ähm und in der Tat, Q. Und dann ist das unsere Ausgabe, und Sie werden feststellen,
dass wesentlich
weniger Zeit gedauert hat ähm und in der Tat,
Q.
Und dann ist das unsere Ausgabe, und Sie werden feststellen,
dass wesentlich
weniger Zeit gedauert hat. Und das ist ein guter Weg, um das Konzept zu erklären, denn Sie können jeden einzelnen Schritt des Weges sehen. Und wenn du es dir ansehen willst, kannst
du sehen, was zwischen jedem Stoß und jedem Pop passiert ist. jedoch Wenn Siejedochdiese Probleme lösen, möchten
Sie vielleicht mit einer
schnelleren, schnelleren Handversion wie dieser gehen , wo Sie nur ein Q haben können, das Sie ein- und aussteigen . Sie möchten also weiterhin Hinweise neu zeichnen und die Dinge im Auge behalten, und das wird Ihnen viel helfen. Denn selbst in dieser Situation,
erinnerst du dich, wie ich mich hier vermasselt habe? Ich habe nicht wirklich eine Fünf gesetzt und ein c dahin gelegt. Selbst darin hat
es mich nicht davor gerettet, bis zum Ende, wo ich hingehen musste. Eigentlich, überprüfen Sie das hier. Es hat genau die gleiche Genauigkeit und beschleunigt Ihren Arbeitsablauf. Es zeigt Ihnen nicht die Konzepte als auch, aber es wird Ihnen das Endergebnis viel schneller. Das ist also dieses Beispiel hier. Wie ich schon sagte, viel schneller. Wenn Sie es auf diese Weise tun und Sie können sehen, dass es genau wie alle anderen Hinweise, die Sie in
dieser Seite setzen . Und dann setzen Sie sich hier drüben auf die rechte Seite. Das wäre wie unsere Front und dann dein Dies ist unser Rücken. Also sind wir von dieser Seite
gestoßen, zur Seite gestoßen, und dieses Ding bewegt sich hier runter, während wir das langsam machen. Also, das sind einige Beispiele auf Cues wirklich, wirklich saubere Datenstruktur, die Sie aus anderen Datenstrukturen aufbauen können und das hat so viele reale Anwendungen und ist wirklich wichtig, um einen za Informatiker zu lernen.
28. 4-5 Warteschlange und Queue: Also, bevor wir diesen Abschnitt abgeschlossen haben, wollte
ich etwas besprechen, über das wir diskutiert haben, und alle anderen Abschnitte. Und das sind die Laufzeiten von Stacks und Warteschlangen und die Laufzeiten sind nicht so geschnitten und trocken wie zum Beispiel dieLancet-Listen oder das Array. Und das liegt daran, dass diese Datenstrukturen keine Datenstruktur sind als sie selbst. Sie sind aus anderen Datenstrukturen aufgebaut, so dass sie Laufzeiten tatsächlich von der Datenstruktur abhängen, auf der Sie sie
aufbauen. Also, wenn wir hier runter gehen und uns unsere Aktien ansehen, einen Push in einem Pop
haben und unsere Cues nicht in Q und D. Q haben. Und wir können entweder für beide verwenden, die wir entweder in Array verwenden könnten. So kennen Sie das klassische Array, oder wir können eine verknüpfte Liste verwenden, so haben wir die Wahl auf jedem von ihnen. jedoch Wenn Siejedochdarüber nachdenken, jeder dieser das Array und die verknüpfte Liste hatten sie alle die Fähigkeit, wenn Sie eine
der anderen Zehe gewählt haben, haben einen Geruch, die eine einfügen bedeutet konstante Zeit einfügen und eine konstante Zeit Löschung am Ende, was bedeutet, dass wir für in unserer Laufzeit von all diesen schießen müssen, müssen
wir für konstante Zeit schießen, weil es in konstanter Zeit durchgeführt werden kann. Also, da es in konstanter Zeit gemacht werden kann, müssen
wir sicherstellen, dass alle unsere Tinte verwendet beschuldigt Pushes und Pops sind auch in konstanter Zeit. Wenn er in linearer Zeit oder in quadratischer Zeit läuft oder eine andere Art von längerer Zeit als unser Q und Stack wäre schrecklich ineffizient, weil
wir, wie ich gerade sagte, wie ich gerade sagte,bereits bewiesen haben, dass diese Operationen in konstanter Zeit durchgeführt werden können, Also warum machen Sie es langsamer als das? Und wie konntest du das machen? Also lassen Sie uns zum Beispiel eines Stapels gehen wirklich schnell. Sagen wir mal, wir haben hier einen Stapel. Und wenn wir
zum Beispiel ein Array mit einem Array verwenden, müssen wir nur ein Ende verfolgen. Also müssen wir tun, ist sagen wir,
drei, wir müssen einfach bis zum Ende drücken, und dann können wir vom Ende springen, bis zum Ende
drücken, Pop vom Ende. Wir können das immer hin und her tun und daran erinnern, dass ein Array immer konstant ist, Zeit einfügen, wenn Sie die Nummer des Spots hier kennen. Also, zum Beispiel, wie 123 Wenn Sie das Beispiel des Spotlichts kennen, dann können Sie einfach zu diesem Löschen
gehen, gehen Sie zu diesem Push One wieder an, was bedeutet, dass das Löschen und das Einfügen beide werden mit einem vorbei sein. Sie können dies auch mit einer verknüpften Liste tun, solange sie einen Schwanz Zeiger hat. Also lassen Sie einfach den Schwanz Zeiger bis zum Ende zeigen. Und dann, wenn Sie dort sind, wird
es wahrscheinlich doppelt verknüpfte Liste sein müssen, so dass wir es zu einem schnellen Einfügen
und Löschen machen können . Wir entfernen einfach das Ende und bewegen dann den Zeiger zurück. Und wenn wir einen hinzufügen wollten, machen
wir genau das Gleiche, wo wir einfach eins hier hinzufügen. Und dann bewegen wir den Schwanzzeiger auch über einen. Und so können beide, wie wir früher bewiesen haben, auch konstante Zeit sein. Das bedeutet also, dass sowohl Pop als auch Push sein sollten, Oh zu dem, und das ist, wie Sie wissen, dass Sie einen effizienten Stack oder Q haben. und dann können wir einfach die schnelle Art von Beispiel auch für die, um für die Also lasst uns voran gehen und Schlange hier oben stellen und jetzt ist dieser etwas komplexer, und hier könnte man eine Luft haben oder so. Wenn Sie sich für das falsche Design entscheiden, werden
Sie etwas wirklich langsam haben. Zum Beispiel, wenn wir hätten Wenn wir implementieren, ist
es nur durch ein normales Array. Implementieren Sie dies also nur durch ein normales Array. Wir müssen schieben und platzen von verschiedenen Enden, also müssen wir zu diesem Zweck drängen. Und wir hatten den Pop von diesem Ende. Aber das Problem ist mit einem Array. Wenn es nicht kreisförmig ist, müssen
wir alle Elemente wieder nach unten verschieben, um alles im Auge zu behalten. Und wenn wir alles wieder nach unten verschieben, wird
das zu einer Ode an das in Betrieb befindliche. Und wie gesagt, das ist nicht das, was wir wollen. Also müssen wir sicherstellen, dass, wenn wir ein Array dafür verwenden, dass es kreisförmig sein muss ,
es Vorder- und Hinterzeiger haben muss. , Wir können einfach die kreisförmige Schiene hier zeichnen. Es muss vordere und hintere Zeiger haben, so dass es, wie wir bereits besprochen haben, dass
es so kreisförmig sein könnte, wo es in beide Richtungen gehen könnte. Und es muss nicht alle seine Daten verschieben, um diese Integrität zu erhalten. Das ist also eine Art kleiner Fallstrick, in den die Leute hineingehen können, wo sie versuchen, ein que,
uh durch ein Array implementiert zu machen . Und das Problem
ist, dass es kreisförmig sein muss. Wenn sie es nicht haben. Circular, sie werden eine sehr ineffizient haben oder genau hier. Und jetzt ist die nächste eine verknüpfte Liste, die tatsächlich sehr häufig für ein Q ist. und das ist, weil es sehr intuitiv mit einem que ist, so dass es doppelt mit einem
Schwanz Zeiger verknüpft werden muss , und dann hat es die normale Ausgangspunkt als auch. Und wenn wir drängen, werden wir zu diesem Zweck drängen. Also wird es gehen, wissen
Sie, hier und dann, wenn wir knallen, werden
wir von diesem Ende abhauen , oder wenn Sie wollen, das ist in Q. und das ist Deke. Sie und beide dieser Zeiger sind ziemlich üblich. Wie ich bereits erklärt habe, ist
der Endpunkt sehr einfach, ihn nur ein wenig zusätzlichen Code,
eine kleine zusätzliche Art von Wartung zu behalten , und der Startzeiger ist immer da. So wissen wir, wo verlinkte Liste ist. Und mit diesen beiden Elementen, die wir schieben können, können
wir Pushor in Q und Popper. Dick, du wirklich, wirklich einfach und immer in konstanter Zeit. Das ist also nur die Grundlage der Laufzeit. Verstehen Sie einfach, dass sie immer konstant sein sollten. Zeit zu schieben und einzuknallen. Q und
D. Q Wenn Sie zu einer Situation kommen, in der es das Ende schuldet, dann ist es ein ineffizienter Algorithmus und es kann neu gedacht werden, um schneller zu sein ,
wirklich hübsch, einfach nur in einem Fall wie diese. Aber ich möchte euch nur erlauben, verstehen
, Konzept zuverstehen
,denn,
wie ich schon sagte,
das wie ich schon sagte, ist ein Informatikkurs und das Verständnis der Laufzeiten. Alles ist sehr wichtig, um zu verstehen, gewinnen und wo man alles benutzt
29. 4-6 Stapel und Warteschlangen in echte Queues: so dass wir ein gutes Verständnis von Stacks und beschuldigt haben. Lassen Sie uns einige Beispiele aus der realen Welt ansehen, wo wir sie in einer oder
zwei von ihnen gesehen haben könnten . Die erste 1, die wir alle zuvor gesehen haben, ist das Rückgängigmachen und Wiederholen. Wenn ich mich
zum Beispiel
fürein Word-Dokument entscheide,können
Sie sehen,dass ich Dinge rückgängig machen kann. zum Beispiel
für ein Word-Dokument entscheide, Wenn ich mich
zum Beispiel
fürein Word-Dokument entscheide,können
Sie sehen, Aber wenn ich mich entscheide, keine Änderungen vorzunehmen, könnte
ich vorwärts gehen und das funktioniert mit zwei Stacks. Also genau hier haben wir,
wie, wie, unseren Aktivierungs- oder Kommando-Stack. Und hier drüben ist es der Reduce-Stack. Also sind wir derzeit bei Kommandofeuer. Wir haben etwas in das Programm eingegeben und wir wollen zurück zum Kommando für das, was wir tun ist es knallt, dass fünf aus und fügt es ein. Es schiebt es auf diesen richtigen Stapel. Nehmen wir an, wir wollen zurück zu den Befehlen gehen. Es knallt die vier ab und schiebt es auch hier auf den richtigen Stapel. Also, was wir jetzt haben, ist, dass wir diesen Stack auf der linken Seite haben, was unsere Aktivierung ist, oder unseren Befehlstapel. Und wir sind jetzt bei Kommando drei, der dritte Befehl, den wir eingegeben haben Jetzt wurden diese Daten nicht gelöscht. Es sitzt nur in diesem reduzierten Akt. Wenn wir die Dinge wiederholen wollen, wiederholen
wir es einfach. Es wirft es aus und bringt es zurück. Sagen wir, wir wollen Sie nicht lesen. 55 war, wo ein Fehler. Waas Wir möchten eine neue 16 hinzufügen. Also, was wir tun ist, nehmen wir und wir fügen 60 hier hinzu. Aber jetzt, wenn wir auf Redo klicken, würde
es diese 500 Pop es auf sechs nehmen und es würde die Integrität dieses
Stacks hier zerstören . Also, wenn wir etwas hinzufügen, wann immer wir nicht wiederholen, Also zum Beispiel, genau hier, wenn wir dieses d f g genau hier, wenn ich all diese lösche und etwas anderes eintippe, gibt es keine Möglichkeit, dass ich könnte darauf zurückkommen. Was ich tue, ist, wenn wir eine neue Änderung hinzufügen, die kein Radio ist, löschen
wir tatsächlich den richtigen Stapel. Also haben wir alles entfernt und machen es wieder so. Und jetzt können wir unsere Untaten beginnen und wieder reduzieren, sich hin und her zu bewegen. Und wenn wir jemals wieder eine Änderung vornehmen, wird
das alles gelöscht und wieder entfernt. So funktioniert das Rückgängigmachen und Wiederherstellen. Es gibt auch eine nette kleine Sache ist, wenn Sie jemals in,
wie,
ein Word-Dokument oder ein anderes Programm gegangen sind wie, , und Sie halten auf Steuerelement Z,
was unfällig ist, oder klicken Sie auf die Rückgängig-Schaltfläche und Sie erreichen das Ende des ungebührlichen. Das liegt daran, dass du den Stapel gefüllt hast. Also,
wenn wir das ganz nach oben erweitern , sagen
wir, wir haben den Befehl,wissen
Sie, wissen
Sie, sechs und dann fünf gehen tatsächlich hierher. Wir haben nichts rückgängig gemacht. Und, weißt
du, wir haben hier oben eine Sieben gestellt. Was war? Wenn du eine Acht setzen willst, um acht zu setzen,
dannwollen
wir nicht dann , weißt
du was? Wir werden das nicht mehr im Auge behalten. Was wir tun, ist, dass wir den einen nehmen und ihn löschen, aus dem Stapel entfernt
wurden, und dann nehmen wir alles und verschieben es nach unten. Also jetzt haben wir 2345678 und Sie werden feststellen, dass Kommando eins jetzt nicht mehr verfolgt wird. Das bedeutet, dass wir Onley rückgängig machen können, um Befehl zu, und jedes Mal, wenn wir einen anderen Befehl ausführen, wird es diese nehmen und den Boden von ihm entfernen und dann alles nach
oben schieben . Also ist es eine Art Ah, modifizierter Stack in der Tatsache, dass wir von unten entfernen können, aber das sind nur vier Überläufe auf den Stapel. Nur eine kleine Art Vorbehalt von,
wenn Sie sich jemals fragen, warum Sie nicht mehr rückgängig machen können, ist, weil Ihr Stack gefüllt war und
keinen Speicher mehr hat , um diese Befehle zu speichern. Eine saubere Art davon Verwendung von Scheduling ist oder ordentliche Verwendung von Cuse ist die Planung. Also, was genau ist die Planung? Nun auf jeder Art von Computer werden
Befehle gegeben, und oft werden viele Befehle an einen Computer gegeben, und es muss Win verstehen, um diese Befehle zu verwenden. Lassen Sie uns ein Beispiel für den Druck denken. Nehmen wir an, wir haben 100 Computer in einem Büro oder einer Bibliothek, die
alle mit einem Drucker verbunden sind, und jeder versucht gleichzeitig zu drucken. Wie geht es damit um, welche zuerst gedruckt werden sollen? Was es tut, ist es eine que, wer bekommt es zuerst bekommt ihren Job abgeschlossen zuerst. Also, zum Beispiel, lassen Sie uns sagen, dass wir an diesem Ort in der Warteschlange sind. Wir haben 345 Der nächste Job abgeschlossen werden ist auf der Unterseite, und das ist eine Art que Aufbau. Also haben wir drei. Es wird weitergehen und gedruckt werden. Und dann, während es gedruckt wurde,
beschlossen, dass sie einen Druckauftrag haben wollten, und dann entschied man, dass sie auch einen Druckauftrag wollten. Also, was es tut, stellt es sie einfach in die Rückseite der Liste, und dann geht es weiter. Sobald es einen Job beendet hat und sich
bewegt, bewegt, habe ich einen nächsten Job für genau hier geht es Kopf in Prince, und es geht auf die nächsten 15 und dann, weißt
du, die
Leute können wieder am anderen Ende gehen. Also lassen Sie uns sagen, dass dieses Q weiter ausdehnt oder wir es tatsächlich kreisförmig machen können. Also setzen wir die drei dort, wo es geht, um es druckt, dass Job 4 einen anderen Job hat, also haben sie es dort gemacht. Einer wird nun abgeschlossen sein, und es geht so. Es ist also nur eine Möglichkeit, all diese Befehle in einer schönen Art von Zeile genau dort zu planen . Es ist also fair, wenn Sie zuerst drucken. Der Typ, der 10 Minuten nach dir gedruckt hat, sollte nicht ihren Job bekommen, bevor du so stopfst . Es ist nur eine Art der Planung, um es fair zu machen. Es gibt auch eine Möglichkeit, ein Labyrinth mit einem Stapel zu durchqueren. Dies ist nur eine Art lustiges Beispiel. Hier, sagen
wir, dass wir einen Stapel mit diesem Gitter haben, der hier nicht genau aufstellt, aber es ist genug, um den Punkt zu machen, was Sie mit Erstaunen tun können, wenn wir sagen, dass wir uns durch das Labyrinth und jede Bewegung bewegen, setzen
wir es auf den Stapel. Also wissen Sie, wir gehen alles hier durch. Wir kommen zu diesem Punkt, wir können entweder rechts gehen. Wir gehen runter, wenn wir nach rechts gehen, werden
wir das anziehen, was auch immer diese Kachel ist. Also lassen Sie uns sagen, dass diese Fliese sieben ist und diese Fliese acht ist. Also werden wir hier sieben anlegen und jetzt hochziehen. Wir hatten eine Mauer. Es gibt keine Optionen mehr und keine Wegbeschreibungen mehr. Also, was wir tun, ist, dass wir anfangen, aus dem Stapel zu springen. Wir fangen an, rückwärts zu gehen, bis wir zu einem Punkt kommen, an dem wir eine andere Entscheidung treffen können. Also kommen wir zurück zu diesem Punkt und wir sind wie, Tja
, der Weg war nicht gut. Also gehen wir hier runter. Jetzt haben wir drei Entscheidungen. Also sagen wir bei der ersten Entscheidung, wir haben beschlossen, gehen
wir nach links, bewegt sich den ganzen Weg hier runter. Keine Reichweite tot in Pop off,
Pop, Pop, Pop, Pop, Pop,
Pop Pop, Pop Pop zurück zu diesem. Aber wir können hier mehr Entscheidungen treffen. Lass uns keinen Pop-Arzt hier runtergehen und dann den ganzen Weg in diese Richtung bewegen. Wir müssen Entscheidungen treffen. Geh nach links. Nein. Dead in Pop, Pop, Pop, Pop, Pop, Pop, Pop. Und dann gehen wir, Lasst uns diese Entscheidung treffen, aber wir haben es aus dem Labyrinth geschafft. Es ist eine Möglichkeit, dass Ihr Programm irgendwie durch ein Labyrinth laufen und den ganzen Weg
durch es finden kann . Dein Kumpel, dein Programm könnte wirklich schnell sein. Nehmen wir an, es trifft richtige Entscheidungen jedes Mal, wenn es richtig erraten wird. Es ist wie hierher zu gehen. Gehen wir runter. Okay, wir haben hier mehr Entscheidungen. Und dann gehen wir den ganzen Weg rüber. Gehen wir nach links. Nein. Lass uns Bottom gehen. Wir haben einen Ausgang gefunden. Wenn das kein Ausgang wäre, würde
ich sagen, OK, gehen
wir den ganzen Weg zurück bis hierher. Gehen wir hierher. Lang die Entscheidungen aus, hier zu gehen und lassen Sie uns sagen, dass wir jetzt wieder zu diesem, und es beginnt, auf diesem auch zu suchen. So ist es nur eine Möglichkeit, dass Sie verfolgen können, wo Sie gewesen sind und welche Richtungen Sie in einem Labyrinth
gehen können . Es ist, ah, eine
Art lustige Art, einen Stapel zu verwenden, um eine Art Gaming-Sache zu machen. Dies sind einige saubere Anwendungen von Stacks und Warteschlangen. Sie werden überall im Internet verwendet, nur weil das Internet und jedes Programm wirklich nur weil Warteschlangen sind ideal für die Planung? Stacks sind großartig, um Dinge anzulegen und sie dann auf eine Weise abzuschalten, die funktioniert, zum Beispiel
funktioniert, wie beim Rückgängigmachen und Wiederholen großer Datenstrukturen und großartiger Dinge zu lernen. Wenn du in die Informatik gehst
30. 5-1 Algorithmus Einführung: So, jetzt haben wir ein gutes Verständnis von einigen grundlegenden Datenstrukturen, vor allem von einer Erhöhung schwächen. Beginnen Sie mit der Diskussion, wie Sie die Datenstrukturen sortieren und die, über die wir
in dieser speziellen Einheit sprechen werden , sortieren verschiedene Arrays. Und Sie denken vielleicht:
Warum ist es so wichtig, ein Array zu sortieren? Nun,
denken Sie daran, wie wir über den Suchalgorithmus sprechen, die Suchlaufzeit für unsere Arrays, und wir sagten, dass die Suchlaufzeit bis zum Ende geschuldet ist. jedoch Wenn esjedochsortiert ist, dann ist es dem Log von in zu verdanken. Und dann haben wir noch weiter gesagt, dass über den Baumstamm davon grundsätzlich konstante Zeit ist. Das bedeutet also, dass wir grob eine
konstante Zeit bekommen können, wenn wir ein Array suchen, das
heißt, das ist sortiert. Das bedeutet, dass das Sortieren unsere Runtime insgesamt verbessert, die ganze Menge. Also, zum Beispiel, wenn wir,wissen
Sie,
eine Drei, eine Sechs und eine Sieben hier hätten wissen
Sie, , anstatt es so zu sein, wenn wir es sortieren, wenn wir einen Sortieralgorithmus verwenden, dann werden wir tatsächlich etwas herauskommen, das seit 1367 ein bisschen mehr macht Und das ermöglicht es uns,
diese schnellere Suchlaufzeit wieder darauf anzuwenden, und es ermöglicht uns, ein paar andere Operationen anzuwenden, die auch etwas schneller sind. Und so ist das Sortieren eines Arrays äußerst wichtig. jedoch Es gibtjedocheine Menge verschiedener Möglichkeiten, es zu tun, und das ist, was wir in dieser Einheit diskutieren werden, sind all die verschiedenen
Aussortierungsrhythmen , ihre Laufzeiten, wenn Sie eine verwenden könnten, die Komplexität und einfach ein besseres Verständnis dafür, wie wir etwas wie ein Array sortieren könnten, um es schneller auf den
verschiedenen Aspekten zu machen .
31. 5-2 5-2: Der erste Sortieralgorithmus, den wir abdecken werden, ist ein Sortieralgorithmus, der als Bubble
Sort bekannt ist und Bubble Sort eine notorisch einfach zu implementierende, aber sehr schlechte Sortierung von ihnen ist, und wir werden diskutieren, warum das so ist. Gehen wir also über die Intuition, wie die Blasensortierung funktioniert. Also lassen Sie uns sagen, dass wir
zum Beispiel
in einem Strahl hier haben zum Beispiel und wir werden es zu einem einfachen Array machen. Wir machen es sechs lange sechs große hier, also getrennt
, das und wie, vielleicht wie einer hier. Sicher, das sind sechs verschiedene Säulen da drin. Und sagen wir, wir haben eine 7 bis 10 153 Und was also macht, ist, dass es an einer Seite
davon beginnt , also beginnt es auf der linken Seite und es geht nach oben und es greift die höchste Zahl, die es sieht. Standardmäßig wird es die erste Nummer schnappen, und dann fragt es Ist diese Zahl größer als diese Zahl? Wenn ja, tauschte ihre Positionen, und dann, sobald sie getauscht sind, geht
es weiter zur nächsten. Ist diese Zahl größer als diese Zahl? Wenn ja, tauschen Sie ihre Positionen und es geht so weiter auf und ab. Also lasst uns einfach ein paar Beispiele hier durchgehen. Also, was wir haben, ist, dass wir diese sieben hier haben. Und so sieben ist jetzt allergisch. Die Zahl ist sieben größer als zwei. Ja, ja, das ist es. Was wir also tun, ist, dass wir vorangehen und ihre Positionen auf sieben getauscht haben. Und lassen Sie mich die einfach in Rot setzen. Also sind wir hier ziemlich konsequent. Also tauschten wir die Positionen auf sieben. Jetzt sind sieben größer als 10? Nein, ist
es nicht. Also, was wir tun, ist, dass wir diese an der gleichen Stelle halten, und jetzt 10 wird unsere größte Zahl. Ist 10 größer als eins? Ja, ja, das ist es. Also tauschten wir ihre Positionen aus und dann haben wir die 10 hier drüben und die hier geht . Ist 10 größer als fünf? Ja, das ist es. Wir haben ihre Positionen getauscht, damit sie fünf hierher gehen. Die 10 geht hier und dann endlich, wir machen es noch einmal, wo die 10 hier geht, und dann die drei bewegt sich zurück. Sie werden also bemerken, dass wir jetzt eine Stelle haben. Sortiertes Zinn ist unsere größte Zahl. Es wurde sortiert. Es ist ganz, ganz oben hier. Und was wir taten, war, dass wir die 10 genommen haben, die ursprünglich hier angefangen haben, und wir haben sie den ganzen Weg nach oben gebracht. Und so haben wir jetzt die erste Nummer. Wir haben einen Ort sortiert. Und jetzt können wir hier einen weiteren Schritt machen. Wir können hier noch einen Schritt machen. Wir werden das wirklich schnell neu zeichnen. Und dann beginnen wir mit unserem sind zwei ist ein größer als sieben. Nein. Also werden die beiden bleiben, wo es ist, und dann werden wir sagen, dass die sieben sieben sind jetzt unsere größte Zahl ist sieben größer als eins. Ja, das ist es. Also tauschen wir das rückwärts und wir werden umziehen. Diese sieben sind sieben größer als fünf. Das ist es. Also tauschen wir ihre Positionen aus. Also, jetzt ist fünf hier und sieben ist hier, und wir werden den Rest einfach zeichnen. Und hier sind sieben größer als drei. Das ist es. Also tauschten wir ihre Positionen noch einmal und jetzt haben wir 37 Also haben wir jetzt zwei Teile sortiert . Wir haben hier zwei Bereiche sortiert. Lasst uns weiter hier gehen. Lasst uns hier weiter gehen. Und ich werde so sein, dass ich kopieren kann. Wir werden das im Kontroll-CV hervorheben und das nach unten bewegen und dann die kleine Linie
direkt dort reparieren . Wir sollten ein guter Dogo sein. Okay, also der nächste Schritt ist, immer wieder zu tun, ist ein grau als zu ihm. ISS Also jetzt bewegen wir diese und wir tauschen diese um 12 ist auf mehr als fünf. Ist es nicht. Also jetzt fünf ist unsere größte Zahl. Fünf ist jetzt unsere größte Zahl. Hier drüben sind fünf größer als drei sie sind. Also haben wir diese 35 getauscht und dann sind diese jetzt in der richtigen Position. Und dann jetzt werden Sie feststellen, wir werden durch sie noch einmal laufen und wir bemerken, dass man nicht größer als 22 ist nicht größer als 33 ist nicht größer als 55 ist nicht größer als 77 ist nicht größer als 10. Und wir sind fertig. Unser kleines um unser Array hier wurde mit Bubble Sortierung sortiert. Der Grund, warum es Bubble Sort genannt wird, ist, weil Sie die höchste Zahl bis zum Ende hochsprengen und Sie sortieren sie einzeln nach dem anderen. Lassen Sie mich ein wenig mehr von einer intuitiven Art zu sehen zeigen. Dies ist eine großartige Website namens Visual Go und so würde ich Ihnen nicht zeigen, dass ihre
Darstellung des Algorithmus hier ist . Also lassen Sie mich voran und klicken Sie auf die Play-Schaltfläche auf diese, und so werden Sie feststellen, hier ist, dass es genau das gleiche tut. Die vier sind größer, und es überprüft nur und was immer größer es tauscht. Die 47 ist also größer als alle Zahlen bisher, also tauscht sie weiter auf, und dann werden 50 zu großen Zahlen. So haben wir jetzt einen Bereich sortiert, der in gelb kommt, und jetzt machen wir es wieder. Die 44 ist jetzt unsere größte Zahl, so dass es geht nach oben und es wird langsam austauschen eins nach dem anderen, und dann 46 wird die größte, und jetzt haben wir eine garantierte, um Flecken, die sortiert sind. Tun Sie es nochmal. Wir gehen weiter mit einer 38 und du siehst das langsam. Es wird immer mehr sortiert, wie wir G o. Jetzt haben wir drei garantierte Plätze, und es wird so weitergehen, bis es fertig ist, so können wir tatsächlich beschleunigen dies eine Registerkarte genau hier und jetzt können Sie sehen, dass, wenn es tut, Das wird es in der Nähe sofort tun. Ähm, es wird alles wirklich,
wirklich schnell durchlaufen . Und das ist die Essenz dessen, was Blasenart tut, und jetzt ist das Ganze sortiert. Das ist also eine Blasen-Sortierung auf den Punkt gebracht. Also lassen Sie uns das jetzt irgendwie auseinander brechen und sehen, warum ist das so ein schlechter Algorithmus? Nun, wenn wir das nur einen einfachen Blick haben, sagen
wir, wir haben vielleicht vier hier. Wenn wir nur einen einfachen Blick auf das, was es braucht, um dio, wir einen Blick auf das Worst-Case-Szenario. Das schlimmste Szenario ist also, dass es ein Element nehmen muss und es dann jedes Mal nach
oben nach oben verschieben muss. Also würde das Worst-Case-Szenario tatsächlich ein komplett umgekehrtes Diagramm,
was bedeutet, dass es in die falsche Richtung sortiert wurde. In dieser Situation wäre es also, anstatt es zu sein, anstatt 37 zu 1 zu sein, es wäre 7321 und so ist dies eine Art genau entgegengesetzte Richtung. Und das bedeutet, dass jedes Mal, wenn
es bläst , es das nehmen muss, es den ganzen Weg über
bewegen, den nächsten
nehmen und den ganzen Weg über bewegen muss. Nimm als Nächstes, zieh es den ganzen Weg rüber. Und so werden Sie sehen, dass die Anzahl der erforderlichen Operationen tatsächlich ziemlich
exponentiell ansteigt . Also müssen wir das nehmen und überlegen. 123 und dann sind die drei hier drüben. Also musste ich es nach oben bewegen. 12 dann eins. Und dann sind wir erledigt. Und das kommt tatsächlich
auch heraus, auch heraus, denn das schlimmste Szenario ist, dass wir das nehmen müssen und wir müssen es in
der Anzahl der Male vergleichen und es in der Anzahl der Orte verschieben, die zu einer Gleichung kommt, die oh, von Endzeiten. Oh, von innen. Was bedeutet, dass das Worst-Case-Szenario dafür tatsächlich im Quadrat liegt. Und wenn Sie tatsächlich etwas Mathematik dahinter machen, werden
Sie tatsächlich verstehen, dass das durchschnittliche Fallszenario ziemlich ähnlich ist. Das durchschnittliche Fallszenario für die Bubble-Sortierung ist auch im Quadrat,
was bedeutet, dass dies eine im Quadrat sortierte Art der Sortierung ist. Erinnerst du dich, wie wir über Exponential gesprochen haben? Wenn Sie etwas über vielleicht
1000 oder 10.000 Dinge haben, die Sie sortieren müssen, kann dies Minuten, Stunden, Tage dauern. Und wenn wir hier unter einen kleinen Tisch kamen, wird das der Tisch in dieser Sache ausfüllen. Nun, wir konnten unsere durchschnittliche Sorte hier sehen. Wir werden die Notation dafür verwenden, sind Durchschnitt tatsächlich im Quadrat und unsere großen Geister oder Worst-Case-Szenarien im Quadrat. nun Sehen
wir unsnundas beste Szenario an. wir also, dass dies komplett sortiert war. Nun, du müsstest immer noch sicherstellen, dass es komplett sortiert ist, also müsstest du immer noch runtergehen und nachsehen. Ist das größer als das? Ist das größer als das? Ist das größer als das? Also, wenn es
zum Beispiel komplett sortiert wurde , sagen
wir, wir haben diesen hier. Was wir da reinkommen, war,
okay, Zeit, das zu sortieren. Ist das großartig darin? Nein. Nein, nein,
nein, nein, nein. Ok, es ist sortiert. Das ist drin. Es muss immer noch die gesamte Länge des Arrays mindestens einmal berühren, also ist das in. Das bedeutet also, dass unser Best-Case-Szenario O bis zum Ende ist eigentlich Ah, das ist der beste Fall. Wir wollen also die richtige Notation dafür verwenden, nämlich das Sigma oder das Omega. Also, was wir hier haben, ist dies die Laufzeit der Blase stieg wegen seiner Natur,
wo es in der Anzahl der Zahlen in der Anzahl der Male vergleichen muss, bekommen
wir uns in quadratischen Beziehung, und im Durchschnitt ist
es gehen, um es zu vergleichen. Also, wenn wir hier nicht durchschnittlich sind, können
wir das wirklich schnell berechnen. Der Durchschnitt liegt in mehr als zwei Mal in über zwei, was im Quadrat über vier gleich ist. Wir ignorieren die exponentielle, und es kommt immer noch in Quadrat nur eine kurze kleine Mathematik dort. Wenn du es nicht tust, ist
das in Ordnung. Verstehen Sie einfach, dass das durchschnittliche und das schlimmste Szenario im Quadrat sind und der beste Fall in ist. Und so ist dies einer unserer schlimmsten Algorithmen. jedoch sehr einfach, Es istjedoch sehr einfach,in Code zu implementieren,
alles, was Sie tun müssen, ist eine Art größer als Lassen Sie mich Ihnen einfach ein kleines
Code-Snippet davon direkt hier zeigen . Es hat tatsächlich den Code geschrieben, und Sie können sehen, es ist nur wie fünf oder sechs Zeilen hier. Grundsätzlich geht
es das gesamte Element hoch. Und wenn die linken Elemente des ausgewählten, größer als das rechte ist, tauscht
es ihren Platz und dann bewegt es ihn und es macht das immer und immer wieder. Es ist also sehr, sehr einfacher Code, um sehr,
sehr einfach zu implementieren . Aber deswegen haben wir hier irgendwie über Komplexität und Zeit gesprochen. Wegen seiner Einfachheit läuft
es tatsächlich in einer der schlimmsten Algorithmen hier. Also, das ist Blasen-Sortierung. Wir werden anfangen, zu den verschiedenen Arten zu gehen, während wir nach unten gehen, und ich werde Ihnen mehr und effizientere Sortierungen zeigen. Sie könnten ein wenig komplexer werden, aber ihre Effizienz wird definitiv steigen.
32. 5-3 Selection: Also der nächste Gedanke, den wir decken werden, ist die Auswahl sortieren. Also, was genau ist Auswahl sortieren? Also lasst uns die Intuition davon durchgehen. Und dann werden wir auch über die Laufzeiten sprechen und dann auch individuelle
Repräsentation aussehen . So Selektion Schwert ist etwas anders als Blasen Sortierung. Es ist eigentlich ziemlich ähnlich, aber es ist definitiv anders. Nehmen wir an, wir haben hier ein Array. Also haben wir uns in einen Strahl geraten wie normal, und es hat vier Zahlen drin. Und diese vier Zahlen sind, sagen
wir, 17 18 2 und dann vier. Was also Auswahlen oder tut, ist, dass es einen unsortierten Teil und einen sordigen Teil hat. Also lasst uns voran gehen und einen unsortierten und sortierten Teil zeichnen. Und im Grunde, was wir tun werden, ist, dass wir diesen Teil hier verschieben , wie er, wählen Sie ihn aus, wir werden ihn überziehen. Also alles links davon, alles links ist sortiert. Alles rechts ist unsortiert. Und was wir tun, ist, dass wir durch diese Liste gehen und wir suchen nach dem Mindestwert. Sobald wir den Minimalwert gefunden
haben, tauschen wir ihn in das erste Leerzeichen, das sich rechts davon befindet. Und dann bewegen wir das weiter und machen das immer und immer wieder. Also lasst uns hier ein Beispiel durchgehen. Also gehen wir zum 17. Wir sagen Nein. 17 Augen sind jetzt unsere Mindestzahl. Es ist jetzt die kleinste Zahl, die wir haben, weil wir sie mit nichts anderem verglichen haben. Also nehmen wir, dass 17 wir es mit dem nächsten vergleichen können 18 kleiner als 17. Nein, vergleichen Sie es mit dem nächsten ist kleiner als 17. Ja, das ist es. So ist jetzt auch unsere kleinste Zahl. Und so jetzt vergleichen wir zwei mit allem anderen ist zu kleiner als vier. Es ist nicht so, dass bedeutet, ist unsere kleinste Zahl. Also, jetzt, was wir tun, ist, dass wir diese Zahl nehmen und wir tauschen sie mit der Nummer oder der Position , die rechts von unserem sordigen Teil ist. Also nehmen wir das und tauschen es mit dem, was rechts ist, was unsere 1. 1 ist, also das heißt, wir nehmen die 17 und die beiden würden
sie tauschen . Also die beiden gehen hier und die 17 geht hierher, also was wir jetzt tun können, ist, dass wir das nehmen können und wir werden uns bewegen, sind Teil über sortiert, richtig? So wie so. Und du weißt,
alles, was übrig ist, ist sortiert. Wir haben die 1. 1, die wir herausgefunden haben, dass es am meisten ist. Es ist die Mindestzahl in dieser Liste. Also geht es in unsere erste Position. Also, jetzt machen wir es wieder. 18 ist jetzt eine Mindestzahl. Wir hören 17. Eine kleinere 17 ist jetzt eine minimale Zahl. Wir hören auf eine kleinere Kraft in unserer minimalen Zahl und es gibt nichts anderes zu vergleichen. Also jetzt nehmen wir unsere minimale Zahl, die sich als vier herausstellte, und wir tauschen sie mit der 18 hier drüben, weil es die 18 ist die Position rechts vom Startplatz ist. Also nehmen wir es und tauschen es aus. Also jetzt verzichtet hier 18 geht hier und dann nehmen wir unsere sordide Portion und wir bewegen
es hier rüber . Jetzt haben wir nur noch zwei Nummern zu Dio übrig. Wir nehmen 17 wir bewegen es, wir sagen, ist 17 kleiner als 18. Ja, das ist es. Dann nehmen wir das. Wir bewegen es über 18 ihrer letzten Zahl. Also nehmen wir das und bewegen es über, und jetzt sind wir bestätigt, dass es sortiert wurde. Also funktioniert es einfach so. Es scannt nach der minimalen Anzahl. Dann tauscht es es in den ersten verfügbaren Platz, und dann bewegt sich der sordide Teil über, und es tut das so lange, bis er abgeschlossen ist. Dann gehen wir weiter und schauen uns eine visuelle Darstellung davon an und Sie können sehen,
wie es in schneller Bewegung geht, also haben wir das genau hier. Es ist wieder ein visuelles
Geo-Punkt-Netz, weil ich wirklich gutes Material hier habe, und wir werden einfach auf den Play-Button klicken und wir können dieses Ding beobachten, es
tun seine Sache. Also, drei, sehen
Sie, es ist das Minimum, das es findet, ist ein Minimum, das in die erste Position getauscht wird. Dies oben auf der linken Seite ist jetzt die unsortierte Position. Wir könnten es etwas verlangsamen, wenn du willst, und du könntest die vier sehen. Jetzt vergleicht es eins nach einer Zeit. Vier ist das Minimum, tauscht es ein. Alle gelben sind in der Art von Position, und es beginnt von vorne. Es beginnt bei fünf, ist das Minimum, und jetzt vergleicht es es mit jedem einzelnen von ihnen. Im Laufe der Zeit fünf am Ende das Minimum. Nichts ändert sich verglichen, es fand. 15 ist nicht das Minimum, mit dem verglichen wird, und es wird weitergehen. 15 ist der kleinste in diesem weniger Linken. So wird es mit der nächsten verfügbaren Position und Markt wie sortiert tauschen. Und es wird das im Laufe der Zeit weiter tun, bis es die Produktion hier beendet ist , was es jetzt beschleunigt, damit wir diese Art von Bewegung in schneller Bewegung sehen können, und Sie werden sehen dass es hält es immer tauschen, wie so, das Minimum zu
finden es rechts von der Art von Position zu
tauschen, bis das gesamte Ding sortiert ist. Und da gehen wir. Jetzt ist es sortiert. Also, wie genau, was ist die Laufzeit von so etwas? Also lasst uns die Laufzeit hier durchgehen. Lassen Sie uns über diese Art von intuitiv nachdenken, versuchen Sie herauszufinden, was die Laufzeit ist, indem
Sie sich dies ansehen. Also haben wir uns eine hier und sagen wir, wir haben uns das und lassen Sie uns Drawling genau so
sortieren und dann ein paar Zahlen hier zu einem Wein 17 für unsortierte Sache hier. Und was haben wir zu dio? Wir müssen das für jede einzelne Zahl hier durchlaufen. Wir müssen das höchstens n mal durchlaufen, zumindest in minus den Ruhezeiten. Das bedeutet also, dass wir das im Durchschnitt nicht
in mehr als zweiMalendurchlaufen müssen Malen . Und wie kommen wir auch zu Ende? Nun, das muss es bis dahin tun. Dies muss es am Ende minus eins tun. Dies muss es in minus zwei in minus drei tun. M minus vier. Und was Sie sehen können, ist, dass
wir auf der linken Seite hier Dinge haben werden, die in und auf der rechten Sandseite gewichtet sind. Wir haben Dinge, die auf eine Art gewichtet sind. Und das bedeutet, dass in der Mitte hier die durchschnittliche Zeit, die all diese beiden Lauf dauern wird, wird in über zwei sein. Es ist der Durchschnitt all dieser kombinierten Art, wie Durchschnitt funktioniert und Also im Grunde, wie das herauskommt, ist, dass die Laufzeit davon für jeden einzelnen Punkt
hier sein wird . Es wird in über zwei sein. Und da wir in Zahlen haben, die wir tun müssen, multiplizieren
wir sie zusammen. Also werden sie hier in der Anzahl der Werte sein, multipliziert mit in über zwei, und das bedeutet, wird wie in Quadrat herauskommen. Die durchschnittliche Laufzeit hier liegt also in Quadrat, was auch die schlimmste Laufzeit ist. Aber du musst über etwas anderes nachdenken. Dies ist etwas anders in der Blasenart, in dem Sinne, dass es nicht tut. Es gibt keine Chance, dass es tatsächlich nur überprüfen und bestätigen kann, dass die Gesamtheit des Arrays sortiert wurde. Es muss diese Art von Bewegung über die es nehmen muss, wissen
Sie, den unsortierten Teil, und es muss ihn bewegen und für jede einzelne Zahl überprüfen. Selbst wenn wir in eine komplett sortierte Zahl kommen, Ah, Array hier. Wenn wir also haben, wenn das sortiert herauskommt, zum Beispiel, wenn wir 1 bis 8 haben, lassen Sie mich das hier reinlegen. Lassen Sie uns hier ein kleines Beispiel machen. Lassen Sie uns hier ein komplett sortiertes Array erstellen. 12345 Wir haben uns also ein völlig sortiertes Recht. Woher wissen wir, dass es komplett sortiert ist? Nun, unser Programm,
alles, was es tun kann, ist durchlaufen und überprüfen. Dies ist die Mindestzahl ist eine kleinere Ja, Ja, ja, ja. Ok. Es ist kleiner als alle. Das bedeutet, dass es an seiner Stelle sagen kann, dass es sich über die Art der Klasse bewegt. Ist das kleiner? Ja. Ja, ja, ja. Okay, wir bewegen es rüber. Ja, ja, ja. Okay, wir bewegen es rüber. Ja, ja, ja. Okay, wir bewegen es rüber. Ja. Ok. Wir bewegen es rüber. Und so bewegen wir es weiter, egal wie viele. Egal wie sortiert, es fängt tatsächlich an zu sein. Und das ist wichtig. Denn das bedeutet, dass
es selbst im besten Fall Szenario, selbst im besten Fall Szenario, selbst im besten Fall Szenario,immer noch im Quadrat sein wird. Im Gegensatz zu Blasensortierung, die dies durchlaufen kann und sofort überprüfen kann, ob es sortiert
ist, indem man sagt: Ist das kleiner als das? Nein. Ist das klein drin? Nein. Nein. Nein. Sobald es die bekommt und es ist wie, Oh, wir sind schon sortiert. Es beendet das Programm. Es kann das nicht tun. Es muss dieses sortierte Gitter verschieben. Und so ist das Problem mit der Auswahl Sortierung, dass wir in alle drei Werte in Quadrat bekommen . Also unser Best-Case-Szenario, unser Best-Case-Szenario , wird immer noch im Quadrat sein, die durchschnittliche Laufzeit wird immer noch im Quadrat sein, und dann wird die schlechteste Laufzeit in Quadrat oder Big O-Notation ist auch in Quadrat. Also ist dieses Programm eigentlich sehr, sehr ineffizient. Es ist das ineffizienteste Startalbum, mit dem wir uns beschäftigen werden, und Sie können sehen, dass die Intuition dahinter eigentlich ziemlich ordentlich ist. Sie erstellen einen sortierten Teil. Du bewegst Zahlen hin und her. Es ist, weißt
du, es klingt so, als hätte es wirklich gut funktioniert. Das Problem
ist, wegen dieser schmutzigen Teil wurden mit diesem Fall, wo es immer im
Quadrat sein wird . Und so am Ende von all dem, bekommen
wir eine andere, die in Quadrat,
Quadrat und Quadrat ist , einfach wie Blasen-Sorten. Die beiden sind ziemlich schlecht. Auswahl sind ziemlich schlechte Sortieralgorithmen und das sind Sie wissen, dass sie gut zu lernen sind weil sie Ihnen intuitive Art von Möglichkeiten zeigen, dies zu tun. Wissen Sie,
Wege, wie Sie können, ähm, wie das sinnvoll ist, aber sie sind nicht die besten Wege, es zu tun. Das sind also die schlechten Aussortierungsrhythmen, und als nächstes werden
wir in ein paar bessere Sortieralgorithmen übergehen, die tatsächlich schnellere
Laufzeiten haben . Und es wird komplizierter, denn so funktioniert die Programmierung. So können Sie das nicht einfach haben, wissen
Sie, tauschen Sie ab, wo Sie einfach schnellere Laufzeiten bekommen und es ist einfacher. Normalerweise wird es etwas komplexer, aber sie machen immer noch ziemlich viel Sinn, wenn wir ihn ein paar Mal durchlaufen . Also, ja, das ist Auswahl sortieren. Und lasst uns in einige schnellere Sortieralgorithmen springen.
33. 5-4 Insertion: Der letzte Vortrag, den wir darüber gesprochen haben, wie wir in einige Algorithmen gehen, die
ein wenig schneller waren und ich habe nur ein wenig gelogen, weil wir immer noch über Insertion
Sort gehen müssen , was immer noch ziemlich langsame Aufständische ist. Oder es ist der logische nächste Schritt, weil es irgendwie von Blase Short und Auswahl
Art zusammen in dieser neuen Art von Startalgorithmus aufbaut . Das hört sich ein bisschen eher an, als ob es getan werden sollte. Aber es hat immer noch diese langsamen Tendenzen. Und so werden wir das hier durchgehen. Wir werden darüber nachdenken, wie es funktioniert, als die Visualisierung zu zeigen und dann die
Laufzeiten wie der Rest von ihnen zu machen . Also lasst uns damit anfangen. Das erste, was wir tun werden, ist,
dass wir uns hier ein wenig Ray wachsen werden, damit wir das intuitiv so betrachten können. Also habe ich dieses Array hier und jetzt lasst uns ein paar Zahlen hier reinlegen. Acht für 17 wie so Und was Aufständische oder tut, ist, wie ich sagte, es funktioniert irgendwie von der Auswahl, wo wir diesen sortierten und unsortierten Teil haben. Außer im Gegensatz zur Auswahl. Was wir tun, ist, dass wir die Nummer herausnehmen und sie dann wieder in den sordigen
Abschnitt einfügen . Wir suchen hier nicht nach dem Minimum. Wir haben gerade die 1. 1 geschnappt und in der Sortierung wieder über. Also lasst uns genau das machen. Zuerst werden
wir unseren sortierten Abschnitt nehmen. Wir werden es überlegen. Eigentlich sollten
wir unsere Nummer zuerst herausnehmen, also speichern wir sie wie eine Variable oder so. Wir bringen es raus und dann nehmen wir das und wir bewegen es. Also, jetzt ist alles hier drüben der schmutzige Abschnitt. Also dann fügen wir das wieder ein, aber wir fügen es in einen Punkt ein, an den es gehen sollte. Was wir also tun, ist, dass wir es wieder in diesen neuen leeren Raum einfügen. Ähm, technisch gesehen, wie in der Theorie, nehmen
wir es raus und legen es zurück. Aber in aller Wirklichkeit, wenn du gesehen hast, was dort passiert ist, bewegt
es sich nicht wirklich. Also bewegen wir nur diesen Teil und weil immer rechts von der schmutzigen Portion,
alles, was wir tun müssen, ist das zu bewegen, dann greifen Sie das und es ist bereits in der Position, dass es sein sollte Also was wir tun ist, nehmen wir das und jetzt vergleichen wir es und machen Sie eine Blase rückwärts sortieren, um herauszufinden, wohin es gehen
sollte. So gut, sagen wir, geht es? Ist das kleiner als das? Warum? Gestern? Also nehmen wir das und tauschen es mit dem aus, und dann schieben wir es einfach wieder so zurück? Und dann tun wir genau das Gleiche. Wir greifen das, bewegen es über und wir zitieren unquote, wir nehmen das heraus und dann haben wir wieder in dieses sordige Array eingefügt. Aber im Code behalten
wir es einfach hier, und wir tauschen es runter, bis wir die Stelle gefunden haben, die es gehen muss. Also nehmen wir das und waren wie diese, um so zu tauschen, ist das noch weniger? Ja. Also nehmen wir das wieder runter, tauschen das und tauschen dann das hier rüber, und dann tun wir genau dasselbe, um es zu beenden. Schnappen Sie sich die, bewegen Sie sie rüber. Also, nein, alles ist in unserer verdorbenen Portion. Schnappen. Das ist diese Lektion. Das ist es. Also legen wir es ab und dann nehmen wir diesen Tausch. Es und das ist nicht weniger als das. Also sind wir mit unserem Sortieralgorithmus fertig. Lassen Sie uns also einen kleinen Blick auf eine Visualisierung werfen, wie dies auf ein wenig größerem Maßstab gemacht wird . Klicken Sie also einfach auf die Schaltfläche „Go“ und Sie werden sehen, dass es es packt, es
herausnimmt, und dann fügt es es im Grunde in den sordiden Teil ein. Es sucht also, wohin es gehen soll. Eingefügt in nimmt es heraus. Wenn es genau ist, dass es bereits an den richtigen Stellen ist, sortieren Sie es einfach zurück und es sagt, dass wir nicht sortiert sind, und dann tauscht es sie aus, bis es zu dem Punkt kommt, wo es sortiert ist. Und so tut es das den ganzen Weg, bis es fertig ist. Ich nehme die 1. 1 jedes Mal und mache dann irgendwie wie eine umgekehrte Blasen-Sortierung um sie an die richtige Stelle zu bringen und so kannst du sehen, dass es irgendwie kombiniert, wie ich sagte,
Auswahlsortierung, weil wir einen sortierten und unsortierten Teil und Blasensortierung haben, weil Blase ist, wie wir es in diese Orte hier drüben bringen. Und so haben wir es. Jetzt haben wir einen gemischten Algorithmus hier. Gehen wir über die Laufzeit. Wie lange dauert das? Wie verhält es sich mit den anderen? Nun, im Grunde wird
das ungefähr das gleiche wie Bubble Sort sein. Und Sie können irgendwie denken, warum? Weil es von Blase Sortieren läuft. Aber wir werden nur einen entscheidenden Unterschied durchgehen
, der es tatsächlich so macht. Also, was wir hier haben, ist, haben wir verschiedene Teil und erinnern Sie sich, mit Auswahl sortieren, es wurde aus allen in Quadrat und der Grund, warum es kam zu allen in Quadraten, weil Sie das Minimum zu finden
hatte. Sie mussten den Minimalwert hier auf der rechten Seite finden,
und das zu tun, nahm Zitat unquote in der Menge der Zeit, Durchschnitt, etwa in über zwei, die kommt heraus, um die Endzeit. Also mussten wir nach dem Minimum suchen. Und dann würden wir es in den sortierten Ort überlegen, ohne
ihn durchsuchen zu müssen . Weil wir erst einmal das Minimum finden, wissen
wir, dass es der nächste logische Schritt ist. Aber das hier drüben machte es so, dass, egal ob es sortiert wurde oder nicht, wir kamen immer heraus, um Quadrat zu beenden. Aber jetzt, wenn wir hier einige Zahlen haben, was das tut, ist es uns erlaubt, tatsächlich in,
ah,
etwas schneller,
Best Case-Szenario zu kommen ah,
etwas schneller, etwas schneller, . Also, wenn Sie darüber nachdenken, müssen
wir in Menge an Daten nehmen. Also mussten wir Menge an Daten in der Menge der Daten nehmen, und wir müssen sie in der Menge der Male vergleichen. Weil wir es hier drüben einfügen müssen. Das Maximum könnte es tun müssen, ist die Menge der Male zu tauschen. Und das tatsächlich wie in den anderen Beispielen
kommt heraus, um über zwei zu enden. Aber die beiden werden entfernt und wir haben gerade hier im Quadrat. Und so kommt das über den schlimmsten Fall. Und der durchschnittliche Fall hier ist, dass der Durchschnitt im schlimmsten Fall, der schlimmste Fall ist, dass er vollständig umgekehrt ist. Und es muss das Maximum aus tun, was dieses Ende in über zwei ist. Und die Art von Durchschnittsfall ist, dass es vielleicht weniger tun muss. Ach, Arbeit. Es muss nicht immer auf die entfernteste Menge an Swaps gehen. Vielleicht hat es ein paar Mal Glück und platziert sie genau dann ist es etwas weniger als in Quadrat, aber es ist immer noch in der Reihenfolge der in Quadrat, so können wir die beiden in unserem Diagramm direkt hier. Der Durchschnitt liegt also im Quadrat und das schlimmste Szenario ist im Quadrat. Allerdings ist es ein wenig besser auf seinem besten Fall. Und schauen wir uns das hier an. Lasst uns löschen. Dies zeichnet hier nicht. Lassen Sie uns das löschen. Dies und das und lassen Sie uns das sortieren. Also haben wir diesen Algorithmus bekommen und er kam schon sortiert. Es kam sortiert. Also, was wir tun, ist, dass wir die 1. 1 greifen und wir in hier eingefügt haben. Nun, es gibt nichts zu tun. Wir machen keine Tausch. Wie lange hat das gedauert? Nun, es dauerte diese Operation, um es zu bewegen, und diese Operation, um zu überprüfen, ob diese beiden größer als diese
ist. Also kam es zu zwei Operationen würde genau das gleiche tun wieder. Wir bewegen das, wir greifen das und wir bewegen es. Schnappen Sie sich das und wir bewegen es über und wir überprüfen Notizen noch sortiert. Schnappen Sie sich das und bewegen Sie es über und wir überprüfen notiz, immer noch sortiert. Jedes dieser Male dauerte es nur zwei, ähm,
um eine Art Zyklen. Alles, was wir tun mussten, war, dass wir den Cursor bewegen. Also haben wir den Cursor bewegt und dann überprüfen wir, ob größer als und so jedes Mal. Das sind nur zwei Operationen. Was bedeutet, dass es immer in Operationen läuft. Egal, wie viele Enden es gibt, es wird 222222 sein. Es wird nie basierend auf Enden skalieren, also bedeutet das, dass es technisch konstant Zeit ist. Also jetzt haben wir in Höhe von Überweisungen genau hier haben wir in Höhe von Übertragungen, ähm, oder in der Menge der Daten. Ich denke, Sie könnten sie mit der Menge der Daten multipliziert mit konstanter
Zeit aufrufen . In seinem besten Fall Szenario, was bedeutet, dass unser Best-Case-Szenario tatsächlich in genau wie Blasen-Sorte sein wird. Wir werden dieses Best Case-Szenario von in bekommen, und das kommt darauf an, dass
wir, wenn es sortiert ist, nur konstante Operationen durchführen müssen. Um dies über diese hier zu ändern wird konstant, wobei Auswahl sortieren. Dies war immer in über zwei, was bedeutet, dass es immer kommen würde quadratisch zu Ende. Und so ist das Einfügen sortieren auf den Punkt gebracht. Ähm, wie ich schon sagte, es kombiniert Theus Flecken von Blasensortierung und Selektionssortierung, hat das unsortierte und sortierte und dann die minimale Zahl hochsprengt. Und dann kombiniert es zu dieser Art von neuer namens Insertion Sort. Und es kommt zu diesen Laufzeiten genau hier heraus, die identisch mit der Blasensortierung ist. Ähm, also ist es immer noch ziemlich langsam. Das sind also allein die Basissechziger Jahre. Jeder Informatiker hat im Grunde drei Arten von der Oberseite ihres Kopfes, und dann kommen wir in die schnelleren hier drüben. Und das sind, wo einige, wie, wirklich intuitiv wirklich mag, Art von cleveren Ideen kommen und wir beginnen tatsächlich, die Vergleichssortieralgorithmen
zu verbessern , um sie wirklich schnell zu schnell zu machen, assed schnell, wie in der Anmeldung, und Dinge wie
34. 5-5 kurze Sort: Okay, also lasst uns über den ersten Algorithmus reden, der schneller sein wird als die anderen Alben, über die wir gesprochen haben. Wenn wir uns die Laufzeiten dieser anderen Algorithmen ansehen, haben wir festgestellt, dass
sie im schlimmsten Fall alle im Quadrat sind. Und selbst im durchschnittlichen Fallszenario sind
sie alle im Quadrat, und einer von ihnen ist in der besten Laufzeit etwas schneller. Aber das ist, wenn es schon angefangen hat. Das zählt also nicht einmal wirklich, denn das ist einer von unendlichen Fällen. Also alles, was wir wirklich sehen wollen, ist hier drüben, und wir sehen, dass sie alle ziemlich schlecht sind. Und was wir tun werden, wird sich den nächsten Schritt in der Art der
Sortieralgorithmus-Evolution ansehen . Wir werden einen viel schnelleren Weg verstehen, mit der durchschnittlichen Zeit zu beginnen. Sie werden feststellen, dass ein paar der anderen Teile immer noch gleich sind. Aber unsere durchschnittliche Zeit wird sich verbessern, und dann kommen wir zu verschmelzen, sortieren. Damit werden wir alles verbessern können. Also, was wir in diesem Vortrag übergehen werden, ist eine schnelle Sortierung. Wir werden über die Intuition hinter Quick Sort sprechen. Wie es tatsächlich funktioniert und funktioniert. Und ich werde ein Beispiel tun, um Ihnen Schritt für Schritt zeigen, wie Sie wissen, genau schnelle Sortierung funktioniert. Dann machen wir ein wenig visuell, und dann wird die nächste Lektion über die Laufzeit gehen, weil beide Teile ein
wenig komplex und in ihren eigenen Rechten sind . Und ich will dich nicht wissen lassen, wie ein 40-Minuten-Video auf dieser Pause, so dass wir jeden Teil
einzeln verstehen können . Lassen Sie uns also hinter die Intuition gehen, um schnell zu sortieren. Also lasst uns voran gehen und uns einen schönen kleinen Strahl hier oben erschaffen. Wir werden es zu einem etwas größeren A machen. Es ist etwas zu nah an der Spitze. Bringen wir es hier ein bisschen runter. Also haben wir uns in einen Strahl gesteckt und machen ihn, ähm, acht groß. Also werden wir es einfach weiter in der Mitte hier aufteilen und jetzt haben wir acht verschiedene Spots und füllen wir das hier mit diesen Zahlen aus. Sagen wir 15 22 13 27 12 10 20 und dann 25. Gehen wir weiter und reparieren Sie diese 10 genau hier, damit es spürbar ist. Und so haben wir jetzt unser Array. Und was schnelle Sortierung tut, ist, dass es auf dieser Idee von etwas funktioniert, das als Drehpunkt bezeichnet wird. Also, was genau ist ein Drehpunkt? Ein Drehpunkt wird der Ort sein, wie es sich trennen wird. Was wir also tun, ist, dass wir Sub A Raise aus diesem Array erstellen. Also wenden wir den Schnellsortieralgorithmus auf verschiedene kleine Sub-Arrays an, und dann werden wir ihn weiter unten anwenden, bis wir nur ein oder zwei,
ähm,
Daten in unserer Raise haben ,
ähm, , und dann werden wir alles aufbringen . Was dies tut, ist es schafft einen Dividen- und Eroberungsansatz für das Programm, das die Gesamtlaufzeit
beschleunigen wird . Und das wird alles Sinn machen, wenn wir das ein bisschen mehr übergehen und Sie anfangen zu verstehen, wie genau das funktioniert. Und dann erklärt die Laufzeit, warum es schneller ist. Also lassen Sie uns einfach mit diesem gehen, denn jetzt und dann ist es hoffentlich sinnvoll, wenn wir es
durchmachen . Also, was wir hier haben, ist, dass wir einen Drehpunkt wählen. Alles, was weniger als der Drehpunkt ist, wird in das linke Sub-Array gehen. Alles weniger wird auf der linken Seite gehen und alles, was größer ist, als nach
rechts gehen wird. Also, was ist unser Drehpunkt? Welche Zahl werden wir als Drehpunkt wählen? Nun, wir müssen denken, dass das für uns völlig, ähm, ähm,
irgendwie verborgen ist. Wir wissen nicht, was diese Zahlen sind. Wir können keine Durchschnittswerte oder Mediane oder so etwas finden, weil es unsortiert ist. Und wir könnten , versuchen,die mittlere Zahl zu finden. Aber wie ich schon sagte, es ist unsortiert, also müssten wir viel mehr Informationen wissen und wir müssen sie sortieren, um die mittlere
Zahl zu finden , damit es keinen Sinn ergibt. Was wir also tun können, ist geschwächt. Wählen Sie einfach den Pivot basierend auf der linken Seite, Most Element. Also in dieser Situation, was wir tun werden, ist, dass wir einfach den Drehpunkt hier greifen werden. Wir werden sagen, es ist das linke, meiste Element. Und jetzt werden wir alle Zahlen setzen, die kleiner sind als unser Drehpunkt nach links,
alle Zahlen, die größer sind als unser Drehpunkt nach rechts,
also was wir tun, ist, dass wir unseren Drehpunkt nehmen und so nach unten ziehen. jetzt ist es in der Mitte . Nun, dieser Drehpunkt ist in der Mitte, und per Definition wird er sortiert werden, weil alles links kleiner sein wird als und alles rechts wird größer sein als es. Also sind wir mit dieser Nummer fertig. Was wir jetzt tun müssen, ist getrennt, so dass wir das linke Sub-Array haben und wir die richtige Zusammenfassung haben. Lassen Sie uns voran gehen und ziehen sind Sub-Arrays in und lassen Sie uns suchen, für welche Zahlen größer oder
kleiner sind als so, Was wir hier drüben haben, ist, dass wir die Zahlen 10 13 und dann 12 in die linke hier drüben setzen weil diese alle sind , die weniger sind als sie. Also haben wir 10 13 12 und es gibt eine Reihe von verschiedenen Algorithmen, um dies zu finden und herauszufinden, was weniger ist, Sie könnten einfach von links nach rechts gehen und nach den Zahlen
suchen, die kleiner sind als es. In dieser Situation könnte
dies auf 13 12 10 kommen. Oder Sie könnten von rechts nach links oder vom Drehpunkt nach links gehen. Und dann von dem Drehpunkt nach rechts, Es gibt wirklich eine Reihe von verschiedenen Möglichkeiten, dies zu tun. Ähm, wohin geht es mit dem, was auch immer dieser Algorithmus herauskommt? Und das ist nur, weil es ein paar Dinge beweisen wird, während wir durchmachen, wird
es am meisten Sinn machen. Also, jetzt haben wir auf der linken Seite. Hier haben wir die 20 zu 27 20 und dann 25. Also alle diese Zahlen auf der rechten Seite sind größer. Alle diese Zahlen auf der linken Seite sind weniger als. Und jetzt, was wir tun, ist, dass wir diesen Algorithmus wieder auf beide anwenden. Also finden wir den Drehpunkt und in diesem Fall wird diese Nummer auf der linken Seite wieder sein. Es wird diese Nummer hier und hier drüben sein. Es wird diese Nummer hier sein. Lassen Sie uns zuerst den linken Unterbaum hinuntergehen, und das ist die Idee eines rekursiven Algorithmus. Es wird zuerst die linken Unterbäume angehen. Dann kommt es wieder hoch wird diese den ganzen Weg nach unten in Angriff nehmen. Dann kommt es wieder hoch und es wird als nächstes den rechten Unterbaum angehen. Und eine Abhandlung bedeutet, dass es die separate Zusammenfassung ist, eine Zusammenfassung. Also, was wir tun werden, ist, dass wir uns einen Drehpunkt finden. Es sind die 10, die wir gerade ausgesucht haben. Also, jetzt wird das runterkommen und wir werden hier eine 10 haben. Und dann werden wir alle Zahlen größer als sie nach links setzen. Alle Zahlen weniger als es auf der rechten Seite und Ihre Buchstaben, dass 10 ist eigentlich das Minimum hier. Wunde linke Unterbaum hat nichts technisch, in ihm. Das bedeutet also, dass dies 10 in dieser Situation unsere linke Nummer sein wird, und dann im rechten Unterbaum, wo wir am Ende haben werden, sind die anderen zwei Zahlen, die anderen zwei Zahlen. Also werden wir eine 13 und 12 hier drüben haben, und dann hier drüben, werden
wir es noch einmal aufteilen, mit 22 sind im Zentrum. Also ziehen wir, wenn unten und 22 wird unsere neue Nummer sein. Und bis das links ist, werden
wir 20 und 25 haben. Oder eigentlich, meine schlechte 25 ist größer, dass wir nur 20 haben werden 20 hier drüben haben, und dann wird rechts der Rest der Zahlen auf der rechten Seite sein wird 27 und 25 und dann werden Sie feststellen, dass wir immer noch eine Stelle, die in beiden offen ist. Also zwanziger Jahre 27 25. Und wir haben noch zu einem Raid Arrays, die größer als eins sind. Wir werden also einen anderen Drehpunkt für beide hier und hier wählen. Und was wir haben werden, wird uns eine 13 haben, die untergeht und dann die 12 Geister übrig sind. Es gibt nichts auf dem linken Sub-Array. Also haben wir die 12 hier, und dann machen wir genau das Gleiche auf der rechten Seite. Hier haben wir die 27, die geht runter die 27, die hier geht, und dann werden die 25 auf der linken Seite sein hier drüben, die 27. 25 wird hier drüben sein und dann wird das technisch sein eigenes Sub-Array sein. So Und dann, was wir jetzt haben, ist eigentlich ein sortiertes Array. Es sieht nicht so aus. Aber wir haben eine Art Strahl, denn jetzt, was wir getan haben, ist, dass all diese Art von findet innerhalb des Arrays hier oben statt. Also, wenn wir dies verfolgen, haben
wir das Array vom kleinsten vom größten sortiert. Wir haben die 10. Dann gehen wir runter und wir haben 12. 13 wenn wir wieder nach oben kommen, und dann haben wir die 15 2022 25 27. Und so sind Ray durch diese Methode direkt hier erstellt. Und so teilen wir es in die ursprüngliche Acht auf, die wir hatten. Und so lassen Sie uns diese Spur nur noch ein Mal machen. Also gehen wir hier runter auf der linken Seite, und was wir tun werden, ist ein rekursiver Algorithmus. Also teilen wir es in zwei Hälften, und dann teilen wir das in zwei Hälften und wir überprüfen es. Da ist nichts auf der linken Seite. Wir haben es überprüft. Es gibt nur ein Element hier, also greifen wir das drauf, schreiben es auf und wir überprüfen die rechte Seite. Es sind noch zwei Elemente übrig, also machen wir es wieder, wir überprüfen die linke Seite. Nun, da ist jetzt ein Element, damit wir das aufschreiben können. Wir haben die Mitte überprüft. Da ist ein Element, damit wir das aufschreiben können. Und jetzt gibt es nichts anderes zu überprüfen. Es gibt keine Schritte mehr. Also dann geht es zurück nach oben und dann haben wir die Mitte Jetzt überprüft, so dass wir den linken
Unterbaum überprüft haben . Jetzt überprüfen wir die Mitte und wir haben uns eine 15 und dann gehen wir voran und wir überprüfen die rechte Seite. Und das erste, was wir hier sind, ist, dass wir immer zuerst nach links schauen. Also gehen wir hier runter und es gibt eine 20 für sich. Also schnappen wir uns die Nummer eins und sie ist in unserem Strahl. Wir gehen, wenn wir die Mitte überprüfen, gibt es eine 22 für sich und dann überprüfen wir das richtige Sub-Array und es gibt immer noch Zeug hier. Also wenden wir den Algorithmus an, wir gehen nach links und wir sehen, dass dies alles von selbst ist. So haben wir eine 25 und in der Mitte ist auch von selbst 27. Und ganz am Ende hier drüben ist nichts mehr übrig. Das ist also das Ende. Und wir haben ein sortiertes Array. All dies funktioniert also ganz am Anfang von diesem Drehpunkt, weil wir dieses
Problem in Unterprobleme aufteilen . Und mit diesen Unterproblemen teilen
wir es in mehr Sub-Probleme und mehr Sub-Probleme auf, bis wir zu Einheiten von
eins kommen . Und dann, wenn wir das tun, weil der Algorithmus als Ganzes funktioniert, werden
sie alle sortiert werden. Und dann müssen wir nur diesen neuen Baum verfolgen, den wir erschaffen haben, und wir werden ein wenig später wie Baumspuren übergehen . Aber stellen Sie sich vor, dass all dies an Ort und Stelle geschieht,
was bedeutet, dass es nicht hineingeht. Erstellen dieser U-Bahnen macht es tatsächlich nur innerhalb dieses Arrays. Hier oben werden
Sie feststellen, dass es, sobald es alles getan hat, sie an der richtigen Stelle platziert, wenn es nach unten geht. Also wird es beginnen, diese ganze linke eine solche Sache zu tun. Dann wird es diese ganze richtige sortieren, die diese Art von Sache macht, und am Ende wird
es so aussehen als eine endgültige sortierte Version. Werfen wir einen Blick auf das visuell, und ich denke, es wird ein wenig mehr machen,
so dass diese großartigen Leute bei Visual go dot net diese Sortieralben erstellt haben, die wir verwendet
haben . Wenn Sie etwas davon auschecken möchten, stellen Sie
sicher, auf ihre Website zu gehen, weil sie all dies kostenlos zur Verfügung stellen. Also haben wir erstellt sind sortieren. Beginnen wir jetzt mit der Sortierung direkt hier, und Sie werden feststellen, dass es ein Sub-Array zuweist. Also wählte es die äh drei hier drüben als Drehpunkt. Und was es jetzt tut, ist es geht und es sortiert das rechte Sub-Array und dann das
Sortieren der linken Zusammenfassung dieser neuen Drehpunkte wird durch dies gewinnen und es fand einen Drehpunkt. Und dann sortiert es die linke Seite, sortiert die rechte Seite der kleinen Kiste, die kreative Linke findet, dass der gelbe Drehpunkt sie sortiert. Jetzt sortieren wir die rechte Seite, also sind wir irgendwie links. Jetzt gehen wir auf die rechte Seite und sortieren sie hier drüben, und, weißt
du, das ist ein bisschen komplexer. In dem Beispiel ging
ich über, und das liegt daran, wenn Sie es tatsächlich in Code implementieren, muss
es so sein, dass Onley tauscht, weil Onley Swapping sehr,
sehr wichtig ist . Wenn wir all diese kleinen Zusammenfassungen erstellen, wird mehr Platz,
zusätzliche Zeit nehmen und dann müssen wir tatsächlich wie Spuren tun, die in die endgültige Zeit hinzufügen. Also, was es hier macht und wir können das noch einmal spielen. Wir können hier eine neue erstellen, und wir können tatsächlich in die Zahlen eingeben, mit denen wir genau hier gegangen sind, wenn wir wollen. Also gib mir eine Sekunde und ich werde das tun. Es war 15 als 22 13 27 als 12 10 2025 10 2025. Und dann können wir klicken. Geh hier. Und jetzt ist dies das Array, das wir ursprünglich hatten, also lasst uns sehen, wie es geht. Wir sind auf den Sprung klicken und dann gehen, um zu sortieren und klicken. Gehen Sie auf diese Art, und so werden Sie sehen. Was es tut, ist, dass es die 15 als Drehpunkt ausgewählt hat, und es greift alle Zahlen, die kleiner sind als und Sie werden sehen, dass es mit
diesen 10 13 12 auch kommt , weil es tauscht, so dass es nur alle Zahlen . Lass uns das noch ein Mal machen. Du siehst die 15. Es erfasst alle Zahlen, die kleiner sind als und tauscht sie in den nächsten verfügbaren Speicherplatz. Also packt es die 13 1. und tauscht sie dann in den Raum. Das ist rechts von den 15. Es packt die 12. Als nächstes tauscht es in den Raum ein, der als nächstes an diesem schmutzigen Ort ist
, der 12 ist. Und dann schnappt es die 10 und es tauscht sie in diesen Ort und dann schnappt es das und tauscht es an die Vorderseite der Liste. Also, wie ich schon sagte, ein bisschen komplexer und wie der Code es tatsächlich implementiert. Aber es tut genau das, was wir getan haben. Es hat diesen linken Unterbaum erstellt diese 10 13 12 und es hat diesen rechten Unterbaum erstellt diese 22 27 20 und 25 und der Drehpunkt ist unten in der Mitte und Sie werden feststellen, dass das Papier orange wurde ,
was bedeutet, dass es komplett sortiert ist. Und jetzt, was es angeht, ist die linke Sub-Baum-Rate hier, und Sie werden feststellen, dass es genau das, was es dort getan hat, dass es geschaffen wurde, der Unterbaum verlassen hat und nichts tatsächlich passiert ist. Die 13 oder 12 sagen an der gleichen Stelle. Also ging es runter und es hat noch eine Variation gemacht. Und dann wurden die 12 und 13 getauscht, um sie an die richtige Stelle zu bringen. Und jetzt geht es um den richtigen Unterbaum hier drüben, also werden Sie feststellen, dass es genau die gleichen Schritte macht wie wir. Es teilt es hier in diese Variantenrate, tauscht die Positionen und stellt sicher, dass sie sortiert ist. Und dann jetzt werden Sie sehen, dass die gesamte Grafik sortiert. Das ist also im Grunde, wie schnell Sortieren funktioniert. Es funktioniert von der Aufteilung in kleinere und kleinere Probleme. Es gibt Ihnen einen schnelleren Weg, es zu tun, und wir werden genau sehen, warum das in der nächsten Vorlesung schneller ist, wo wir über Laufzeiten sprechen werden.
35. 5-6 kurze kurze Laufzeiten: Lassen Sie uns nun über die Laufzeit dieses Algorithmus gehen, den wir gerade über den schnellen
Sortieralgorithmus gesprochen haben . Wie schnell ist dieser Algorithmus? Was? Wir müssen es so denken, und das wird die gleiche Intuition für die nächste
sein wo wir Merge Sort diskutieren. Und was wir tun werden, ist, dass wir das auseinanderbrechen, und das wird so sein, wie ich gesagt habe, der nächste, wir verschmelzen, sortieren. Es wird irgendwie dieselbe Intuition sein. Aber ich habe das Gefühl, wenn wir das zweimal hintereinander durchgehen, wird
das wirklich eine Art Zement sein, und es wird einen Sinn ergeben. Also was, das ist, dass wir backen, im Grunde nehmen wir dieses Problem, und wir brechen es in eine Reihe von Art von U-Boot auf. Siris Art von Problemen. Und die Art und Weise, wie dies hilft, ist, dass es es in diese Ebenen genau hier zerlegt. Und Sie werden sehen, dass in dieser Ebene, wenn wir es aufschlüsseln und wir müssen Vergleiche machen, höchstens in Elementen berühren, und ich glaube, es kommt zu Vergleichen. Aber wir werden es einfach auf n. so nimmt diese Ebene in dieser Ebene genau hier wird auch in nehmen. Und du wirst das bemerken,
weil die
Art , und Weise,wie das hier funktioniert, ist, dass es sich berühren muss. Und es ist etwas weniger als in, wenn wir hier runtergehen. Und dann wird diese Ebene hier unten auch aufnehmen. Und was wir hier haben, ist, dass wir ein Programm haben, das drei gut einnimmt, was wir uns ansehen müssen. Was wir untersuchen müssen, ist, wie das im Laufe der Zeit wächst? Wie funktioniert diese Zahl, die Anzahl der Enden, die wir sogar dieses X nennen könnten? Wie wächst X von in? Denn sobald wir die Antwort darauf finden, wenn wir verstehen, wie diese Zahl wächst, dann wird die Laufzeit für diesen Algorithmus verstehen. Und was wir tun können, ist, dass wir das logisch denken können. Wie viele haben wir hier? Wir hatten hier acht verschiedene Varianten. Also, was wir getan haben, war im besten Fall, wir hatten uns acht an der Spitze. Also, wie acht verschiedene Teile dazu, oder wir können tatsächlich diese umgekehrte Art machen, wie das funktioniert. Wir begannen mit acht und dann, was wir taten, ist, dass
wir es in zwei Gruppen von vier teilen und das in zwei Gruppen von zwei. Und dann hast du das in Einsen zerbrochen und du wirst bemerken, dass das hier
genau nachahmt ist, dass wir die Acht hatten. Wir haben es in etwa zwei Gruppen von vier. Und dann, weil der Drehpunkt beteiligt ist, es etwas weniger auf der linken Seite, und es geht irgendwie von dort nach unten. Aber es behält diese allgemeine Form, die allgemeine Art von Form, wo es auf diese verschiedenen Ebenen geht. Und so, wie viele Ebenen hatten wir? Was? Wir hatten ein zu drei Levels, bevor wir zu allen kamen und das Programm beendet wurde. Das bedeutet also, dass wir mit acht uns drei haben. , Wie viele werden wir haben,wenn wir zum Beispiel mit 16 angefangen haben? Damit wir hier tatsächlich tun können, können wir diese hervorheben und lassen Sie uns voran und entfernen Sie sie. Und dann lassen Sie uns das hier duplizieren. Also lasst uns die ganze Sache hier schnappen. Kontrollieren Sie CND. Wir werden das packen. Wir werden es nach rechts bewegen. , Bewegen Sie es hier runter,und wir greifen das und schieben es auch nach unten. Einfach alle auswählen und
versuchen, hier nur ein wenig Zeit zu sparen. Und was wir haben, ist, dass wir diese zwei kleinen Teilmengen von acht haben. Und so ist das nur eine 16. Das hat hinzugefügt. Also alles, was getan hat, war, dass wir gerade ein zusätzliches Level hinzugefügt haben. Wir haben es nach all der Arbeit dort des Kopierens und Einfügens verkauft. Und alles, was wir wirklich getan haben, war ein weiteres Level hinzuzufügen. Und das ist die Stufe von acht. Also haben wir in, in auch. Und was wir hier haben, ist, wir haben, wenn wir 16 haben wir vier. Und stell dir vor, wir hätten das nochmal gemacht. Wenn wir kopieren und fügen Sie dies sowohl nach rechts und links und dann fügen Sie einfach die nächste Ebene von 32 gut, das würde uns 32 gleich fünf und 64 würde gleich sechs. Und 128 würde gleich 12 oder meine Mathe 12 mit gleich sieben und so weiter und so weiter und so weiter und so weiter. Also was das bedeutet, ist, dass die Anzahl der Ebenen erinnern, Das ist, was wir versuchen, diese X Rate hier zu finden, die Anzahl der Ebenen tatsächlich wächst. einer gewissen Geschwindigkeit wächst
es, wenn sich dies jedes Mal verdoppelt. So wächst es mit einer umgekehrten exponentiellen Rate,
was bedeutet, dass der Abstand zwischen diesen beiden der Abstand zwischen dem, wie Maney-Zahlen wir haben langsam größer und größer werden
wird. Zum Beispiel, hier hat es acht hier oben gedauert. Es dauerte acht Dittemore-Nummern, bis wir hier ein weiteres Level haben. Es dauerte 16, um ein Level 32 zu bekommen, um auf diese Stufe 64 zu kommen, um in ein Level 128 zu bekommen, um ein anderes Level zu bekommen, und das wird in die Unendlichkeit gehen. Was wir also haben, ist, dass wir eine Art Diagramm haben, das so aussieht. Ein Diagramm, das im Laufe der Zeit so aussieht. Und darüber haben wir schon mal gesprochen. Wir werden darüber in Merge-Sortierung sprechen. Dieses Diagramm ist eingeloggt, so dass die Anzahl der Stufen, die wir uns bewerben müssen, ist einloggen. Das bedeutet, dass unsere Gleichung sich daran erinnern, dass unsere Gleichung X war, was ist, wie viele Ebenen von in wir haben. Das ist die X Times. Wie oft wir in tun müssen, ist eigentlich nur gehen, um sich von n oder besser
einloggen . Es ist normalerweise so gestellt. Es wird normalerweise geschrieben, die Standardnotation dafür ist wieder in Gesetz oder loggen lineare Zeit. Also haben wir log-lineare Zeit. Und so war das für den besten Fall. Wir dachten, wenn es mitten in der Mitte geteilt wurde, haben
wir diese loglineare Zeit, und genau so kommt das heraus, ist, dass wir für die beste Laufzeit haben, die wir im Login haben. Und dann lassen Sie uns jetzt über die durchschnittliche Laufzeit nachdenken. Nun, die durchschnittliche Laufzeit wird davon ausgehen, dass wir im
Durchschnitt einen Drehpunkt wählen werden, der irgendwo in der Nähe des Zentrums liegt. Also im Durchschnitt, wenn wir die ganze Mathematik machen, wird
es genau das Gleiche kommen, was es in der Anmeldung kommen wird. Aber was ist mit dem schlimmsten Fall Szenario? Was wäre das schlimmste Szenario? Nun, das schlimmste Szenario wäre, dass wir dieses Diagramm direkt hier erstellen, außer dass es sich nicht gleichmäßig aufteilt, jedes Mal, wenn es 15 ist, was bedeutet, dass dies zum Beispiel,
Ah eins ist und es hier drüben ist. Wir müssen es wieder aufteilen. Also lasst uns einfach versuchen, das anzuschauen. Sehen Sie sich hier den schlimmsten Fall ein bisschen an. Schauen wir uns den schlimmsten Fall hier an. Also haben wir eine 16 und wir teilen es falsch. Wir haben einen Drehpunkt gewählt, an dem alles größer war als der Drehpunkt oder alles war kleiner als der Drehpunkt. Also haben wir uns dafür entschieden. Und anstatt diese Zusammenfassung hier drüben zu haben, haben
wir hier nichts. Also haben wir nur und in minus eins haben
wir genau das gleiche Array akzeptiert nur eine letzte. Ich habe uns überhaupt nicht geholfen. Also, wenn wir das weiterhin tun, wenn wir weiterhin die niedrigste oder die meiste Menge der Sub-Arrays wählen, würden
diese Beziehung nicht bekommen , wo wir dieses Problem in diese kleinen Sub-Komponenten aufteilen und es auf das Minimum Anzahl der Endstufen. Und lassen Sie uns etwas überlegen, was genau das bedeutet. Also wählten wir einen Drehpunkt, an dem 15 von ihnen weniger waren und nur einer größer war als gut, dieser kann sich nicht mehr teilen. Also müssen wir hier ein Level hinzufügen. Und so haben wir einen Drehpunkt gewählt, wo 14 auf der linken Seite oder weniger. Und einer hier drüben war es. Und 13 und eins und 12 und eins. Und wir können das weitermachen. Wir könnten 11 und,
ähm,
11 und eins,
10 und eins gehen ähm, 11 und eins, . Und ich mache das so erschöpfend hier, um dir etwas zu zeigen. Acht und 17654321 Und wie viele Ebenen endete das, als wir es auf diese
schreckliche Weise abspalteten ? Was wir bekommen haben, war
rein, rein, rein, rein, rein und einfach weitermachen. Wir haben all diese Enden jedes Mal, weil es nicht so ist. diesem Grund ging es schneller. Es muss immer noch alle diese Elemente berühren. Also, was wir hier kamen, war 123456789 10 11 12 13 14 15 oder ungefähr wegen der ersten 1 16 Enden. Also in dieser Situation kommen
wir tatsächlich zwischen in minus eins und in Ebenen, weil wir irgendwie einfach das N minus einen Teil vergessen können. Das bedeutet also, dass wir in dieser Situation, wenn wir im schlimmsten Fall gehen, im schlimmsten Fall gehen. Also das hier oben ist der beste und der durchschnittliche Fall, das schlimmste Szenario wird ah, ganz anders sein. Im schlimmsten Fall Szenario sind x die Anzahl der Ebenen gleich in. Und jetzt fängst du an zu sehen, was wir hier vor sich gehen. Wenn X und in sind die Beziehung hier und unsere Ex-Adler in,
das bedeutet, dass wir in Zeiten in haben wir in Zeiten in unserem schlimmsten Fall. Und das bedeutet, dass wir im Quadrat einsteigen. Im schlimmsten Fall haben
wir einen Drehpunkt gewählt, an dem jedes Mal, wenn es nicht gleichmäßig oder sogar nahe
gleichmäßig aufbrach , denn in unserem durchschnittlichen Fall könnte
dies eine Sechs sein, und dies könnte eine 10 sein . Weißt du, das könnte anstelle von Vieren sein, es könnte zwei und sechs sein oder so. Du könntest ziemlich nah aufbrechen, und wir könnten einfach ein oder zwei Enden hinzufügen. Es ist immer noch im Grunde wie ein Login, aber im schlimmsten Fall Szenario und Dinge neben dem Worst-Case-Szenario ist es grundsätzlich in . Es ist im Grunde diese Endzeiten und Beziehung, und das bedeutet, dass
wir im schlimmsten Fall in Quadrat einsteigen. Und so werden
Sie am Ende hier feststellen, dass sich unser schlimmster Fall nicht verbessert hat. Unser schlechter Fall ist immer noch im Quadrat. Wir haben viel besser von einem durchschnittlichen Fall, und das ist irgendwie sehr wichtig. Dieser
sieht langsamer
aus, aus, was ich schätze, technisch gesehen ist. Wenn das Array
jedochbereits sortiert ist, jedoch beschäftigen
wir uns nicht mit einer Erhöhung, die bereits sortiert sind. Es gibt einen Grund, warum es in den Sortieralgorithmus kam. Normalerweise ist das Onley, denn wenn es bereits sortiert war, würde
es immer noch so funktionieren. Oder wenn Sie den perfekten Drehpunkt gewählt haben, denke
ich, ist in dieser Situation. Und das ist die Wahl eine Art nahe am Drehpunkt,
so dass das schlimmer aussehen könnte, aber es ist immer noch völlig in Ordnung im Gesetz wieder. Das ist immer noch perfekt, und diese beiden machen keinen Sinn, wo sie beide perfekt sortiert sind. Aber unsere durchschnittliche Zeit ist hier viel schneller. Dies ist ein großer Unterschied hier im Quadrat ein Ende Also, wenn Sie auf lange Sicht
,
wenn Sie das , beschäftigen, würden
Sie sparen, wie ich sagte, eine Tonne Zeit, weil der durchschnittliche Fall wäre, was
herauskommen würde am häufigsten. Manchmal springt man hier hinein, manchmal springt man hier hinein, aber es ist alles mitten in die Mitte, so dass man sehen kann, dass dies eine schnellere
Laufzeit ist . Aber wir wollen nicht, dass dieser Zeh passiert, denn selbst einmal, wo es im Quadrat passieren könnte, könnte
es ausreichen, um unser Programm abzustürzen. Es könnte zu groß für unser Programm sein. Ein Handle wird in dieser Situation vielleicht auf einem Speicher laufen. Vielleicht würde die Rechenleistung 100 treffen würde nicht in der Lage sein, auszuführen. Was wir also tun wollen, ist, dass wir garantieren wollen, dass dies einloggen wird, und das ist, wo wir in merge,
sort springen , was uns erlauben wird, diese Garantie zu haben. Und ich werde erklären, dass, wenn wir in die nächste Vorlesung
36. 5-7 Merge Sege Sege: Lassen Sie uns nun einen Algorithmus übergehen, der noch schneller ist als die anderen Algorithmen, die wir abgedeckt
haben. Und das ist Zusammenführen, Sortieren und Merge Sort macht eine Art intuitiven Ryker Zhen Algorithmus, um es schneller zu machen. Wir gehen genau über, wie es das macht. Wir werden dieses in zwei Videos aufteilen, eines über die Intuition dahinter, weil es ein bisschen komplexer ist und eines auf die Laufzeiten, denn auch das ist ein bisschen komplexer und braucht seine eigene Art von Erklärung. Also lasst uns anfangen. Gehen wir einfach zur Intuition, und dann schauen wir uns ein visuelles Modell an, das auch läuft. Die Art und Weise, die zusammengeführt oder funktioniert, ist, dass es die Daten nimmt, so dass es das Array und es dann in kleine Sub-Arrays aufteilt. Also, zum Beispiel, was wir tun, ist, dass wir diesen Ray hier oben nehmen und sagen wir, dass es nur vier Elemente von 7
10 9 und 8 gibt , und was wir tun ist, dass wir diese in eine linke und eine rechte Spalte trennen. Also, was wir hier haben, ist, dass wir eine Sieben und es 10 haben, außer dass die Farbe
hier konsistent bleibt . Und lasst uns so gehen. Also haben wir 1/7 ein 10 und dann auf der rechten Seite hier haben wir ein anderes Sub-Array. Sie werden feststellen, dass wir nichts tun, ohne in diesem Schritt sortieren zu müssen. Wir teilen es nur in seine kleinen Sub-Arrays auf. Und dann, was wir tun, ist, dass wir es wieder aufteilen, bis sie nur an Boxen sind, die völlig und völlig unabhängig voneinander sind. Also sieben, 10 98 Und dann, was wir damit machen, ist, dass wir es wieder kombinieren. Wir kombinieren diese beiden wieder in ein neues Array von zwei, und wir haben diese beiden wieder zu einem Array von zwei kombiniert. Und du denkst vielleicht, was? Wir teilen sie einfach auf. Was werden wir tun, wenn wir sie miteinander kombinieren? Hier findet die Sortierung tatsächlich statt. Also bleib bei mir. Hier, wir werden uns einen Cursor auf der linken Seite und einen Cursor auf der
rechten Seite erstellen . Und in diesem Schritt macht es nicht viel Sinn. Aber wenn wir in größere kommen, wird
es Sinn ergeben. Also haben wir einen Fluch auf der linken Seite. Wir haben einen Cursor auf der rechten Seite, und was wir tun werden, ist, dass wir die nehmen und diese
Zahlen vergleichen werden. Moment zeigt
der Cursor auf der linken Seite auf eine Sieben, und der Cursor auf der rechten Seite zeigt auf eine 10. Also, welche von denen ist kleiner? Nun, die Sieben sind kleiner, also geht es zuerst, und dann ist die 10 größer als das. Also geht es als Nächstes. Wir stehen genau dasselbe auf der rechten Seite. Hier drüben, die Acht geht zuerst oder dann die oder in dieser Situation, die Acht war auf der rechten Seite. Also ist es eigentlich blau. Die Acht geht zuerst, und dann geht die Neun gleich danach. Acht geht 1. 9 geht direkt danach. Und ich weiß, dass das nicht viel Sinn ergibt. Also lassen Sie es uns tatsächlich Sinn machen. Es macht mehr Sinn, wenn wir tatsächlich Mawr-Elemente haben, um hier eine Art Spur zu verfolgen. Also, was wir jetzt haben, ist, dass wir es wieder in seinem endgültigen Array kombinieren. Also werden wir weitermachen und diese Cursor noch einmal erstellen. Wir haben eine, die nach links zeigt und eine nach rechts . Und was wir tun, ist, dass wir diese Zahlen nehmen und die beiden Cursor vergleichen. So zeigt der erste Cursor im aktuellen Moment auf sieben. Es zeigt also auf eine Sieben, und der nächste Cursor zeigt auf eine Acht. Wir nehmen diese beiden und vergleichen sie gut. Diese sieben sind die kleinste, also haben wir das in die erste Stelle des Arrays gesetzt. Nun, was wir tun, ist, dass wir diese Zahl auskreuzen. Wir benutzen es nicht mehr. Wir nehmen den Cursor und wir bewegen ihn zum nächsten Element des Arrays, das gerade verwendet wurde. Also, da er gegangen ist, wurde
Array benutzt, nahm den roten Cursor, und wir bewegen ihn nach rechts. Und wenn wir es nach rechts bewegen, setzen
wir dann die neue Nummer ein. Also in dieser Situation ist es eine 10. Also haben wir es in die neue Nummer gesetzt. Wir greifen beide Zahlen und wir überprüfen nochmals. Welcher? Kleiner? Nun, jetzt ist es die rechte Seite. Also gehen wir voran und wir rechts auf der rechten Seite. Wir haben diese Zahl überschritten, wir bewegen den Cursor über und dann wiederholen wir die Vergleiche. Jetzt ist die rechte Seite eine Neun. Also setzen wir in eine neun und dann setzen wir in das letzte Element der 10 auf der linken Seite hier drüben und Sie werden während dieses Schritts bemerken wir liefen. Wie oft in Zeiten und während dieser Zeit, die wir auf Lee in der Zeit liefen, sind wir nicht in Quadrat oder so etwas gerannt,
weil alles, was wir getan haben, war, dass wir nur den Cursor bewegt haben. Wir berührten die Sieben einmal, die Acht einmal, die Neun einmal und die 10 einmal. Und dann berühren wir sie wieder. Es waren also nur zwei dieser Enden, und das wird später in die Laufzeitumgebung einfließen. Aber behalte das einfach in deinem Verstand, denn es wird, wie ich später sagte, wenn wir
das tun, wird die Laufzeit von all dem ein bisschen mehr Sinn machen. Aber lassen Sie uns ein größeres Beispiel machen. Nehmen wir an, dass wir bis zum letzten Schritt von 24 mal vier Arrays gekommen sind, also müssen wir hier vier mal vier erhöhen und wir sind in den letzten Schritt gekommen, was bedeutet, dass diese alle an dieser Stelle sortiert sind, genau wie hier. Diese sind vom kleinsten bis zum größten sortiert, aber sie sind nicht besonders vollständig sortiert. Also, was wir tun werden, ist, dass wir diese Zahlen eingeben werden. Sagen wir, das ist ein 13 15 16 auf, sagen wir, dieser ist 10 11 14 17 wie so und was wir tun werden, ist, dass wir genau dasselbe tun, was wir vorher getan haben. Das kam also rein. Wir mussten Sub-Arrays in diesem zusammenfassen, und jetzt müssen wir eine Erhöhung sortieren. Und so werden wir tun, ist, dass wir sie hier kombinieren, und wir werden ein letztes Array erstellen. Das ist den ganzen Weg groß. So ist es die ursprüngliche Größe hier, die 19 insgesamt war, oder die Nacht in der 19 die acht insgesamt 123456, die wir brauchten, um diese wieder zu kaufen. Und was wir jetzt tun werden, ist, dass wir genau die gleiche Methode haben wie zuvor. Wir greifen einen linken Cursor, wir greifen einen rechten Cursor, und diese analysieren nur die Arrays, und wir vergleichen, was auch immer der kleinste ist. Also haben wir genau hier haben wir die eine und die 10, die mit dem aktuellen Moment verglichen werden. Und so lassen Sie uns das nach oben ziehen. Also haben wir etwas Platz, wenn diese verschwinden. Aber das, genau hier. Also vergleichen wir den von 10. Nun, offensichtlich ist einer kleiner. Also geht der hier rein in den ersten Platz. Wir gehen voran und kreuzen den einen aus und dann bewegen wir den Cursor um eins. Und dann vergleichen wir jetzt die drei wir vergleichen die drei und die 10. sind Dreisindnoch kleiner, also habe ich die drei da reingesteckt. Wir kreuzen es aus und wir bewegen den Cursor über die 15. So und jetzt könnten wir wieder einen Vergleich machen. Nun, jetzt ist die rechte Seite kleiner. Die 10 ist die kleinste, also gehen wir weiter. Wir setzen die 10 hier rein, durchkreuzen und bewegen uns. Die 11 ist jetzt die kleinste, weil die nächste Zahl hier drüben 11 ist. 11 ist jetzt kleinster. Also habe ich die 11 da reingesteckt. Wir werden diesen Prozess immer und immer weiter machen, bis wir das Ende erreichen. Aber ich möchte irgendwie das ganze Beispiel durchlaufen. Also verstehst du, was genau wir hier machen? Es wird Ihnen wirklich helfen, die Intuition zu bekommen, die Ihnen hilft, die Laufzeit ein
wenig später zu verstehen . Also, jetzt haben wir 14. 14 und wieder die kleinste. Also gehen wir voran und machen genau die gleichen Prozesse wie zuvor, kreuzen aus bewegen den Cursor über. Und dann haben wir jetzt eine 17 hier drüben. Und so machen wir dann einen Vergleich auf der linken Seite. Nun, die 15 ist jetzt die kleinste der 15 geht hier rein. Überqueren, bewegen Sie sich. Jetzt haben wir 16 Vers 17. Die 16 ist die kleinste, so dass die 16 hier platziert werden. Es wird durchgestrichen, es wird durchgestrichen, und dann bewegt sich der Cursor weiter. Aber es gibt einen besonderen Fall hier, dass, wenn der Cursor vorbeifährt und er versteht , dass er am Ende des Strahls ist, es im vergangenen Jahr nichts gibt, weißt
du, es gibt nichts, was er hier rüber greifen kann, sobald es bis zu diesem Punkt. Was es tut, ist, dass es nur den Rest von dem kopiert, was hier drüben ist. In dieser Situation haben wir also nur ein Element. Es kopiert nur die 17 über. jedoch In manchen Situationen wird esjedochnicht so einfach sein. Vielleicht ein 17 18 1920 hier drüben. Und so vergleichen wir es nicht weiter. Sobald wir von einer der Seiten ausgehen, weil es nichts mehr zu vergleichen gibt. Die Rate ist fertig, also was wir tun werden, ist, dass wir tatsächlich nach unten gehen und wir werden nur den Rest von der anderen Rate kopieren weil bereits sortiert. Wir wissen also, dass der Rest auf dieser Seite größer sein wird als jede der Zahlen
hier drüben . Und so ist etwas zu beachten ist, dass Sie irgendwann auf einem Array ausgehen, aber auf anderen Seite
immer noch drei oder vier Elemente haben. Und das bedeutet nur, die Elemente in das endgültige Recht zu kopieren. Und jetzt haben wir unser sortiertes Array. Das ist also die Intuition hinter Hausverschmelzung Sortierarbeiten. Du nimmst eine Nummer und spaltest sie nach unten und du bist kursiv. Lee. Teilen Sie es, bis Sie zu einem Punkt kommen, an dem Sie nur an einem hier unten sind und der Algorithmus selbst es normalerweise nicht teilt, so dass er versteht, dass 012 und drei alle separate Entitäten sein werden, aber die menschliche Art, es zu tun, ist müssen diese Splits zu tun. Der Computer hat einen etwas schnelleren Weg, all das zu erraten, aber das ist nicht wirklich wichtig. Das ist etwas, das sehr einfach Code zu implementieren ist, wenn Sie den Code für emerge sort nachschlagen. Aber so funktioniert es und die, die wir zu unserem letzten Zusammenführungsschritt bekommen. Wir erstellen unsere kleinen Cursor, und dann vergleichen sie einfach hin und her und Sie werden feststellen, dass selbst in diesem, wo sie gegessen werden, es nur acht verschiedene Versuche dauerte, weil alles, was wir getan haben, war, dass wir eins gingen, als wir drei. So wird es nicht 13 10 11 15 16 17 Es hat nur alles in einer Reihe von Malen berührt. Also auch bei diesem Schritt war es in. Und wie ich
schon sagte, das wird ein bisschen später kommen, wenn wir uns die
Laufzeit ansehen . Aber schauen wir uns nun eine Visualisierung an, wie das von einem Computer funktionieren könnte. Lassen Sie uns also voran gehen und uns ein unsortiertes Array hier erstellen und starten Sie es. Und das verwendet Merge-Sortierung, und wir werden fortfahren und auf die Sortierschaltfläche klicken und dann gehen und dann sehen Sie, was es tut. Ist es zuerst trennt dieses Bild. Diese Seiten und was es tut, ist, dass es sich tatsächlich trennt. Lasst uns das eine Sekunde verlangsamen. Was es tut, ist, dass es sich in zwei
teilt, sie sortiert
, sich in das nächste zu sortieren und dann vier. Und dann machen wir genau das Gleiche beim nächsten. Also zu zwei machen es in vier genau hier. Und dann wird es die Acht hier sortieren. Also das ist rekursiv Lee, der reingeht. Also, was es tut, begann
es tatsächlich, indem es das in zwei Hälften spaltete, und dann ging es den ganzen Weg runter, bis es zu diesen beiden hier kam, irgendwie wie in diesem Beispiel. Es kam den ganzen Weg bis hier. Dann begann es, es nach oben zu sortieren, und das ist es, was es gerade tut. Jetzt sortiert es die linke Hälfte davon, und es macht alles sortiert. Und dann beginnt es die rechte Hälfte. Es dauert also die 1. 2 Zahlen. Es sortiert sie. Dann dauert es die nächsten zwei Zahlen und es sortiert sie. Und dann hat es jetzt zwei Sätze von zwei. Jetzt können sie diese einstellen, weil sie jetzt genau gleich sind. Also vergleicht es sie und speichert sie wieder, indem man
nur das kleinste auf jeder Seite packt, bringt es wieder auf, und jetzt hat es vier, die so sortiert sind, dass es sich in den nächsten Punkt bewegt. Und obwohl es drei gibt, muss
es nicht immer perfekt symmetrisch sein. Sie können eine ungerade Zahl haben und immer noch diese Arbeit haben. Es geht voran und es trennt thes es es Arten von zurück nach unten, und dann wählt es die geringste Menge und erstellt sortierte Website auf der rechten Seite. Und dann tut es das. Ein Finale, nachdem dies getan ist, setzt diese alle zurück und dann haben wir jetzt zwei Sätze von acht mit dieser 17, aber das ist so nahe an acht, wie wir bekommen können. Und dann beginnt es, dies für die endgültige Sortierung zu sortieren, und jetzt werden Sie feststellen, dass es den geringsten Betrag von jeder Seite erfasst. Gehen Sie und beschleunigen Sie das. Wenn ich wirklich auf diese klicken kann, werden
Sie genau da und dann geht es einfach einen Kopf und setzt alles wieder zusammen. Das ist also die Intuition. So funktioniert die Merge-Sortierung. Springen wir in die nächste Vorlesung. Wir reden über die Laufzeit und warum genau? Das ist schneller als die anderen.
37. 5-8 Merge Sort: In der letzten Vorlesung
haben wir also über die Intuition hinter Merge Sort gesprochen. Bei dieser Wahl werden
wir über die Laufzeit gehen. Was ist die Laufzeit dieser Art und warum ist sie schneller als andere Arten? Nun, um das zu tun, müssen
wir verstehen, worüber ich in der letzten Vorlesung gesprochen habe, die bei jedem dieser Schritte war. Wie oft oder wie viele Operationen müssen nicht ausgeführt werden? Wie viele Vergleiche machen wir? Und das kommt immer zu Ende, denn diese Cursor, die an zwei verschiedenen Orten hier arbeiten werden nur 1234 gehen und dann gehen wir genau den gleichen Weg, wer die sieben als die acht packte als die neun. Die 10 wird in jeder dieser Zeiten sein, also wissen wir, dass die Grundlage unserer Laufzeit hier sein wird. Aber wie oft tun wir in dem, was in wird multipliziert werden? Und das ist der Schlüssel zu dieser Laufzeit. Also werfen wir einen Blick auf die, die wir hier hatten, und wir können nur sehen, dass in vier mit vier mit vier. Es dauerte zwei getrennte Ende, um zu diesem Punkt zu kommen. Also, wie viele Enden gab es? Wird es? Vier. Es gab zwei, und wie viele würden mit acht sein? Lasst uns das machen. Sagen wir, dass wir es haben. Wir kommen zu dem Teil, wo es kombiniert, der acht verschiedene Kleinen ist. Mal sehen. Ist das 812345678 Und dann werden wir die zu einem Haufen Zweier zusammenfassen und
diese dann in Kraft bringen und dann zu einer Acht zusammenführen. Jeder dieser Schritte ist also dieser Schritt hier drüben nur mit acht statt vier. Es kommt also auf etwas an, das so aussieht, und dann können wir sehen, dass es hier drin sein wird, wird hier ein Ende sein,
hier und dann hier für die endgültige Kombination. Mit acht haben
wir drei Enden, die wir benutzen müssen. Nun, wie viele würden es für 16 geben? Nun, wenn Sie darüber nachdenken 16 alles, was tun wird, wird es eine separate Ebene hinzufügen . Also statt so viele, die wir haben werden. Anstatt so viele, werden
wir ein Duplikat davon haben. Mal sehen, ob wir das nicht duplizieren können. Lasst uns so und lasst uns das aus dem Weg ziehen und schnappen wir uns. Eigentlich könnten
wir die ganze Sache packen. Lasst uns das Ganze packen und duplizieren und dann nach rechts hier drüben bewegen. Also, jetzt sind es 16. Jetzt haben wir zwei Sätze von acht, und dann kommen wir runter und alles, was wir tun müssen, ist eine weitere Berechnung hier, um die
ursprüngliche 16 zu bekommen . Also, was hat uns die Verdoppelung der Größe gebracht? Nun, es hat uns nur noch einen eingeklemmt und uns nur noch einen eingebracht. Und diese Intuition erstreckt sich über den gesamten Prozess. Wenn Sie das noch einmal verdoppeln, wird
die 32, die es nur 5 64 nehmen wird, nur ein zusätzliches in nehmen, was bedeutet, 128 wird nur sieben nehmen. 2 56 wird nur acht nehmen, 5 12 wird nur nehmen 9024 wird nur nehmen 10 und so weiter und so weiter und so weiter und so weiter. Und was Sie sehen, ist, dass es diesen Unterschied hier gibt. Dieser entscheidende Unterschied besteht darin, dass je größer
die Zahl, desto weniger Schritte in einer tatsächlichen, vorhersehbaren Weise durchgeführt werden. Es wird sein Erinnern Sie sich an das umgekehrte Exponential, über das wir früher gesprochen haben? Das Protokoll von gut, das ist genau das, was die Laufzeit erweist, ist, dass im Laufe der Zeit, wie in wird immer größer und größer die Menge der Male, die wir haben, um dies in
Betrieb Menge von Malen zu tun . Wir müssen dies tun, weil wir es in zwei Hälften aufteilen auf Lee geht um einen kleinen Rand, so dass wir zu einem Punkt kommen können, wo wir das verdoppeln und Sie können sehen, dass es 512
zusätzliche Zahlen geben muss , die eine weitere hinzufügen. Das bedeutet also, dass die Anzahl der Enden, die wir verwenden, nicht mit
Fragezeichen,
sondern mit dem Login multipliziert Fragezeichen, wird. So dass alles summiert sich auf die Tatsache, dass wir ein Endergebnis
in Zeiten haben werden einloggen. Und das bedeutet, dass, egal wie groß oder klein dieses Array ist, ob es sortiert oder unsortiert ist, wir immer genau die gleiche Operation durchführen werden. Das könnte kommen. Kommen Sie zu uns komplett sortiert oder so unsortiert wie möglich, und es wäre egal. Wir würden immer noch genau die gleichen Operationen machen, die immer noch bei jedem dieser Schritte sind. Und das bedeutet, dass nicht nur der beste Fall Login Login ist der durchschnittliche Fall in der Anmeldung. Der schlimmste Fall ist, dass man sich einloggen kann, weil ,
wie ich schon sagte ,
es komplett und völlig
unsortiert sein könnte ,
wie ich schon sagte,
es komplett und völlig
unsortiert sein könnte. Und es spielt keine Rolle, denn wir gehen jedes Mal genau zu den gleichen Schritten. Das könnte bei 789 10 zu uns kommen und wir würden es immer noch aufbrechen und die kleinen
Vergleiche machen . Dies könnte uns als 10 987 kommen und wir würden es immer noch in die genaue Anzahl der
Vergleiche aufteilen . Es wird keine Änderung geben, abhängig von den Zahlen, was bedeutet, dass alle drei von ihnen werden identisch sein werden, und deshalb macht es das schnellste Algorithmus, denn jetzt ist nicht nur unser schnellster und loggen Sie sich in ist unser Durchschnitt in Login, Aber zum ersten Mal, unser schlimmster Fall ist in Login. Wir sind jetzt in der Lage, dies zu überprüfen und zu verstehen, dass
es auch im schlimmsten Fall immer eingeloggt sein wird, was wesentlich schneller ist als diese hier drüben. Erinnerst du dich an die Grafik, die wir am Anfang gezeigt haben? Dieses Ding Kurs ist, dass in Quadrat wird bis zu einer geraden Linie gehen, wird in Login wird der Winkel zwischen diesen beiden immer weniger bekommen. Und so haben wir 1.000.000 in diese eine von 1.000.000 in diese eingebracht, die Ergebnisse werden Tag und Nacht sein. Dieser wird Wochen dauern, während dieser ein paar Minuten bis vielleicht eine Stunde dauern könnte. Und das ist die Kraft, nur darüber nachzudenken. Denn jetzt können wir diese anderen Sortieralgorithmen verwenden. Warum sollten wir diese jemals implementieren, wenn wir einen Sortieralgorithmus implementieren können? Das ist noch schnellere Rate hier,
eine, die garantiert einloggen. Und so können
wir mit diesen Vergleichsquellen tatsächlich eine letzte Art von Information von all dem und dem finden. Ist das das schnellste, das Sie jemals in der Lage sein werden, einen Vergleich zu sortieren, was bedeutet, dass Sie tatsächlich die beiden Zahlen miteinander vergleichen, sortieren , dass der schnellste, den Sie jemals in der Lage sein werden, es tatsächlich wieder in Gesetz ist. Es gibt keinen schnelleren Vergleich sortieren und im Vergleich, sortieren ich meine, wissen
Sie, Sie haben 2468 Und um das zu sortieren, vergleichen Sie Thies diese Zahl mit dieser Zahl oder dieser Zahl mit dieser Zahl oder dieser Zahl oder dieser Zahl mit diesem Holz, Sie vergleichen sie in sich selbst. Und so ist der schnellste, den Sie jemals in der Lage sein werden, dies zu tun, in der Anmeldung. Dies wird also zum schnellsten dieser Algorithmen. Es gibt andere schnellere Sortierungsrhythmus, aber sie nehmen viel mehr Intuition und sie gehen in eine Art der Analyse der Zahl selbst, um herauszufinden, wohin es geht, ohne sie tatsächlich mit anderen Zahlen zu vergleichen. Es ist ein wenig komplex, und das können wir später noch etwas anfassen. Wie ich schon sagte,
es ist immer noch ziemlich komplex. Wie ich schon sagte, Alles, was wir für die Basis der Informatik wirklich verstehen müssen, ist Vergleichssorte und wir müssen verstehen, dass das schnellste, was wir jemals bekommen können, ist Login und Merge. SORT bekommt uns, dass, indem wir diese Intuition verwenden, alles in zwei Hälften zu brechen, so dass
unser Programm nur nach Enden skaliert, mal Evans protokolliert und das uns diese schnelle Art von Algorithmus von in log in, der
Merge-Sort wirklich ist , wirklich Art Spaß, sortieren durch und etwas, das wirklich mächtig in der Informatik-Runde ist.
38. 5-9 Stable vs Nonstable: Lassen Sie uns also eine letzte Sache mit Sortieralgorithmen besprechen, und das ist, ob ein Algorithmus stabil oder nicht stabil ist. Also, was genau bedeutet das? Nun, was es bedeutet, ist, wenn wir einen Algorithmus gestartet haben, der so aussah, sagen wir, dass wir ein Array haben, das so aussieht. Sagen wir, wir hatten eins zu fünf dazu. Es würde immer passieren, dass dies dazu. Diese beiden auf der linken Seite würden
auch davor kommen . So könnten wir es so denken. Wir könnten sagen, dass dies zu a ist und das sein soll Und so muss es immer passieren, dass,
wenn das endgültige Array gebaut wird, wenn das endgültige Array gebaut wird, dass es sich herausstellt, dass es eins zu a ist, um fünf so in keiner anderen Weise, wenn es herauskommt, dass es zu sein kommt und dann zu einer, die eine instabile Sortierung ist, bedeutet das, dass die beiden identischen Werte nicht an der gleichen Stelle gehalten werden, so dass wir die ursprüngliche Art der Bedeutung der Position verlieren würden, aber relativ zu einer einem anderen. Und das könnte wichtig sein. Zum Beispiel
könnten es vielleicht Leute sein, die in einer Zeile oder so etwas warten und eine Person vor,
die andere Person sprang , nur weil sie den gleichen Vornamen haben, macht nicht viel Sinn . Und, weißt
du, es könnte auch in wichtigere Dinge geraten. Aber das ist eine Art Beispiel, das mir in den Sinn kam. So ist es oft, oder zumindest manchmal, Stabilität wichtig. Also schauen wir uns unsere Algorithmen an, welche stabil sind? Nun, das kommt eigentlich darauf an. Die Blasensortierung ist stabil,
da immer wenn wir tauschen , Werte nur Werte relativ zueinander ausgetauscht wurden, die zwei nie mit anderen zwei tauschen werden, und es kann nicht hinter die anderen beiden oder die anderen fallen identischen Wert in irgendeiner Weise. So Bubble Sortierung kommt heraus, um stabil zu sein. Einfüge-Shop kommt heraus, stabil zu sein und zusammenzuführen. Sortierung kommt heraus, um stabil zu sein. Und ich werde nicht genau darüber nachgehen, warum das sind. Diese drei sind stabil, verstehen
aber nur, dass in ihrer Art von Implementierung
es funktioniert, dass sie stabil sind. Was wir übergehen werden, ist das zu, das nicht stabil ist. Diese beiden hier sind nicht stabil. Und der Grund
dafür, denn die Art der Erklärung dafür bedeutet, dass diese beiden werden Sie wissen, sie können Ordnung entfernen. Sie können das zerstören. Wo zu sein wird kommen, bevor zu einem Jetzt, in dieser Art von Grafikeinheit sagte 1225 Es spielt keine Rolle, welche Luft es ist. Es ist immer noch Zitat unquote sortiert. jedoch eins ist, Wenn esjedoch eins ist,um eine Fünf zu sein, dann ist es nicht stabilisiert sortiert. Lassen Sie uns also unser erstes Beispiel hier durchgehen. Lassen Sie uns über Auswahl sortieren gehen. Denken Sie daran, wie die Auswahlsortierung die niedrigste Zahl erfasst und sie dann mit dem ersten
verfügbaren Speicherplatz austauscht . Also lassen Sie uns über einen Zähler gehen Beispiel ein Beispiel, das den Mangel an Stabilität zeigt. Und alles, was wir dafür brauchen, sind hier nur drei Array-Spalten. Und was wir hier haben, ist, dass wir mit zwei gehen und das kleine A hier nach B und dann
eins hier setzen . Und was wir tun, ist, dass wir danach suchen. Die mit der mindestens Zahl, das Minimum. Also gehen wir runter. Wir gehen runter. 01 Wir tauschen es mit dem 1. 1 Also dann erstellen wir dieses Array wie so neu, und was wir bekommen, ist ein Array, das so aussieht, wo das eine am Anfang kommt. Und dann soll es noch hier sein. Aber derjenige in der zu einem getauscht. Also, jetzt ist es sortiert. Aber wenn Sie aufgrund von Auswahlsorten bemerken, die Art und Weise, wie es Daten verarbeitet, haben
wir ein Problem hier, dass das zu sein vor dem zu A kommt und das mit beliebigen Zahlen passieren kann, die identisch sind, wenn sie in einem bestimmten Muster. Was bedeutet, dass
wir die Stabilität der Selektionssortierung insgesamt nicht garantieren können. So ist die Auswahlsortierung nicht stabil. Werfen wir einen Blick auf eine andere wirklich schnell als auch, die andere, die nicht stabil ist. Und das ist eine schnelle Sortierung. Also schauen wir uns an, warum Quick Store nicht stabil ist, und das kommt auf genau die gleiche Sache. Also denken Sie daran, mit schnellen Sortierung waren die Wahl eines Drehpunkts. Also mit dem Drehpunkt im Kopf, was wir tun werden, ist, dass wir alles links vom Drehpunkt setzen, der weniger ist und alles rechts vom Drehpunkt. Das ist mehr, wenn wir das gleiche Beispiel hier hätten. Und sagen wir, dass unser Drehpunkt
auch gewählt wird . Also lassen Sie uns genau das gleiche Beispiel verwenden. Also haben wir uns ein zu A nach B und dann eine auf der rechten Seite hier drüben. Was, wenn wir uns dafür entschieden haben? Stell es aus oder lass uns mit diesem Drehpunkt gleich hier gehen. Nehmen wir an, wir haben uns entschieden, als Drehpunkt zu sein. Also, was wir tun, ist, dass wir das herunterbringen, ist, und das heißt, sind in Drehpunkt gesperrt. Und dann prahlen wir alles, was links ist, um hier drüben zu sein. Es ist also alles, was weniger ist, als wir hier eine und dann alles, was größer oder gleich auf der rechten Seite ist. Und Sie werden hier ein Problem bemerken. Wann immer wir das tun, wann immer wir greifen und nach rechts gehen hier drüben, was wir bekommen, ist zu a größer als gleich zu sein, so zu a geht nach rechts, und jetzt sind wir auf alle niedrigsten möglichen Werte hinunter. Unser erster Schritt. Es ist ein Endschritt, und was wir tun, ist, dass wir einfach voran gehen und es packen und wir schreiben unser letztes Array
hier unten aus . Und wie wir erwartet haben, weil es nicht stabil ist. Was wir bekommen, ist die zu A und die zu tauschen Plätze wegen des Drehpunkts, der gewählt wurde. Daher können
wir in diesem Fall auch keine Stabilität garantieren. Das ist also nur eine schnelle Berührung auf Stabilität. Ob ein Algorithmus stabil ist oder nicht, es ist wichtig, wenn die Position der Zahlen wichtig ist. bedeutet also, dass das A kommen sollte, bevor das B vor den Augen kommen sollte. Dass die Links-Rechts-Assoziation wichtig ist und nur etwas anderes, das wir an
diese Algorithmen binden könnten , ist, dass wir studieren können, dass wir, wenn wir Merge oder Einfügen oder
Blasensortierung verwenden , unsere Stabilität behalten werden. Allerdings, wenn wir Auswahl verwenden oder wenn wir schnelle Sortierung verwenden, verlieren
wir unsere Stabilität. Wir könnten potenzielle Namen haben, die Luft potenzielle Werte tauscht, die ausgetauscht werden nicht ausgetauscht werden
sollten, und das ist Stabilität
39. 5-10 Algorithmen in echte Welt: Nun, da wir ein gutes Verständnis der Sortieralgorithmen haben und wir viele
verschiedene Startalgorithmen gesehen haben , lassen Sie uns voran und schauen uns einige reale Beispiele für Sortieralgorithmen an. So gibt es viele verschiedene Verwendungen zum Sortieren. Algorithmen sind wahrscheinlich die am häufigsten verwendete Sache, über die wir in diesem
Kurs sprechen werden . Und das ist nur, weil alles, was wir heute tun, in irgendeiner Weise sortiert werden muss, Form oder Form, nur weil, wie viel Daten beteiligt sind. Das einfachste Beispiel ist, tatsächlich ein Excel Dokument zu betrachten. Du siehst also, dass wir es haben. Im Moment ist es hier links sortiert. 123456789 Was wollen wir nach den Zahlen auf der rechten Seite sortieren? Nehmen wir an, sie sind alle, zum Beispiel Geld, und wir wollen es nach dem Geld sortieren. Sehen Sie, welche Transaktion das meiste Geld hatte. Nun, wir können all dies hervorheben und, wissen
Sie, gehen Sie
einfach nach oben, um zu sortieren und zu filtern, machen Sie eine benutzerdefinierte Sortierung und sagen, Lassen Sie uns nach Spalte D sortieren, die diese Spalte hier ist, und wir werden vom kleinsten zum größten gehen, und du wirst sehen, dass es so sortiert wird. Nun musste
ein Startalgorithmus involviert sein, um herauszufinden, wohin diese Zahlen gehen sollten, und dann musste er eine Liste geben. Und dann wird diese Liste wieder in das Excel Dokument dargestellt. Jetzt können Sie sehen, dass es am kleinsten am höchsten ist. Und Sie können auch sehen, ob wir gehen zurück nur eine Sekunde, dass es eine drei mit $7 ein sieben mit $7. Und wenn wir vorwärts gehen, werden
Sie feststellen, dass dies eine stabile Sorte ist, da es die drei und die sieben dort
relative Position hält , die sie in diesem Sinne nicht entfernt oder unorganisiert. Das ist also ein kleiner Nebeneffekt dieses Sortieralgorithmus hier. Aber Excel dokumentiert Sie Story-Algorithmen die ganze Zeit. Ein weiteres Beispiel ist, wenn Sie eine Google-Suche durchführen , werden
Sie feststellen,
dass es wenn Sie eine Google-Suche durchführen,werden
Sie feststellen,
dass es
diese Sortierschaltflächen in der letzten Stunde gibt,
sortiert nach Relevanz. diese Sortierschaltflächen in der letzten Stunde gibt, Es sagt sogar, dass Sortierung nach Relevanz der Sortierung nach Datum, alle Ergebnisse. Sie können im Grunde Feinabstimmung Ihren Filter, und es wird danach sortieren und es geht nicht um unsere als durch eine Art wie
Punktzahl für jeden Link kommen , dann sortieren Sie es einfach nach der höchsten Punktzahl auf die niedrigste Punktzahl. Und die Punktzahl wird berechnet, basierend auf dem, was du hier
reinstellst, du weißt schon, es rangiert. Es ist extrem fortschrittliches Zeug, und ich glaube,
es verwendet sogar , Graphen und Zeug,um dies zu erstellen. Aber die Grundlagen sind hier, der Anfang unseres Zimmers. So zum Beispiel könnten
wir
zum Beispieljederzeit und es Ressourcen in eine andere Liste setzen. Wenn wir zu den Einstellungen oder zu den Sucheinstellungen zurückkehren,
gibt es verschiedene Einstellungen, die Sie hier einfügen können, dass es durchläuft, wenn Sie zu
den Tools gehen. Wenn wir zu den Einstellungen oder zu den Sucheinstellungen zurückkehren, gibt es verschiedene Einstellungen, die Sie hier einfügen können, dass es durchläuft, wenn Sie zu
den Tools gehen Es sind verschiedene Einstellungen hier, ähm, die
wichtigsten sind wie die Zeit. Und ich glaube, du gehst zu einer erweiterten Suche und suchst irgendwie nach verschiedenen Sachen darin . Aber jedes Mal, wenn Sie dies ändern, verstehen Sie
einfach, dass, wenn Sie einen Sortieralgorithmus in irgendeiner Weise,
Form oder Form verwenden , um dies zu sortieren, so dass es weiß, wie man es hier für Sie auch, Ein weiteres gutes Beispiel ist mit jedem wie Kauf Website Amazon besonders wie diese Flug-Websites oder grundsätzlich jede Website, die Sie Geld auf Ihren E-Commerce-Websites transagieren. Sie werden immer diese Sortierung hier drüben haben. Zum Beispiel, auf dieser Spot-Reise von Baltimore nach Minneapolis, wo, wissen
Sie, manchmal wollen Sie nach dem niedrigsten Preis suchen. Manchmal wollen Sie nach dem Abreisedatum oder dem Ankunftsdatum oder der Dauer suchen, zum Beispiel, wer am kürzesten war. Es wird neu berechnen und eine neue Liste erstellen. Nehmen wir an, wir wollen den höchsten Preis. Was sind die höchsten Kosten? Dio schwächen und du kannst sehen, dass es dieser United-Flug ist. Es verändert es komplett herum. Also der Sortieralgorithmus hier, es wird jeden dieser Einträge nehmen. Und wie ich schon sagte, der andere. Es berechnet wahrscheinlich eine Punktzahl oder verwendet einen bestimmten Parameter in diesem Fall mit dem Preis, und es sortiert nach, dann gibt diese Art von Liste zurück und zeigt dann diese Art von Liste für Sie an. So ist der Start wirklich wichtig auf dieser Website als auch es gibt. Es ermöglicht dem Benutzer, die gewünschten Informationen zu finden, und mit so vielen Informationen gibt Sortierung, unsere Zimmer werden immer wichtiger, um die Informationen, die wir als Benutzer wollen, schneller und
schneller zu bekommen , ohne graben durch Dinge, die nie verwenden würden oder dass wir, die nicht relevant für uns ist. So Sortierung Algorithmen, sie sind überall, und sie sind weit verbreitet in der Informatik und der realen Welt verwendet.
40. 6-1 Grundlagen von Bäumen: Also lassen Sie uns über ein Konzept sprechen. Eine Datenstruktur, die wir noch nicht angefasst haben. Und das ist der Baum. Also, was genau ist ein Baum? Wie verwenden wir es? Und warum ist es uns hilfreich? sind einige der Fragen, die während dieser Vorlesung beantwortet werden, wie wir Ernährung in eine Einführung in das, was Bäume sind und wie sie funktionieren. Also, was genau sind Bäume? Was? Wir haben uns tatsächlich mit ein paar Bäumen beschäftigt, zum Beispiel mit Merge-Sortierung und Schnellsortierung. Erinnerst du dich, als wir uns die Laufzeit von ihnen angesehen haben und wir sie getrennt haben? So, wo wir jedes Level der Laufzeit getrennt haben und diesen kleinen Baum
hier gemacht haben . Nun, das hier ist eigentlich ein Baum. Es hat einen Wurzelknoten
, der genau hier der Anfang ist. Und dann hat es Niveaus. Also haben wir zum Beispiel Level 12 und dann drei hier, und jede Ebene wird eine bestimmte Anzahl von Schritten haben und dann, um zum nächsten Level zu gelangen, werden
wir voran gehen und Kinder von unseren Knoten hier erstellen, um runter auf die nächste Ebene, wie so und so was? Das ist, das ist ein Baum. Und dies kann auch eine Datenstruktur sein,
was bedeutet, dass schwächen Speicher so etwas. Und wir können es verwenden, um uns zu helfen, entweder nur die Daten zu speichern, damit wir sie schneller finden können, oder wir können sie für die Suche verwenden. Oder wir können es nur für die allgemeine Speicherung im Allgemeinen verwenden. Was das also tut und wie das funktioniert, ist eigentlich durch das, was wir vorher gelernt haben, was ein Knoten ist. Du wirst also ein Nein nach oben haben. Nehmen wir an, dass diese acht ist und es muss Sub-Knoten von vier und vier, und das zeigt auf diese Weise und dann haben wir Knoten hier unten und es geht so weiter. Und was wir haben, ist, dass wir diesen organisierten Baum aus unseren Daten gebaut haben. Also denken Sie daran, wenn wir über Knoten sprechen und wir sagten, dass in einer verknüpften Liste zum Beispiel, wir hatten die vorherige und dann die nächste und eine von denen auf diese Weise, einer von denen wies auf diese Weise, und dann hatten wir uns im Grunde diese verlinkte Liste, die aus diesem Zeug aufgebaut wurde. Nun, ich sagte, dass du das hier mit allem füllen kannst, und wenn man sich Bäume anschaut, ist
das genau das, was du tust. Sie werden diese Zeiger mit anderen Informationen als der als nur dem
vorherigen und dem nächsten füllen . Also, was können wir hier tun? Was wir zu Dio gehen, ist, dass wir voran gehen und zeigen, wie ein Beispiel hier, wie Sie dieses Ding bauen könnten. wir zum Beispiel an, Nehmenwir
zum Beispiel an,wir haben einen riesigen Knoten hier oben, und er muss nicht wirklich riesig sein, aber er braucht genug Platz, den ich hier schreiben kann. Statt eines vorherigen und dann des nächsten, werden
wir uns auf der linken Seite haben. Ah, links und dann im mittleren Elternteil und unten,
rechts,
wie so und jetzt, worauf rechts, wird die Linke zeigen? Es wird hier drüben zeigen. Das Recht wird hier drüben zeigen und dann auf die Spitze. Hier sind unsere Daten. Was auch immer wir vergleichen oder sortieren oder so etwas. Und lasst uns das einfärben. Lassen Sie uns das Elternteil hier eine andere Farbe färben. Lassen Sie uns voran und färben Sie es rot, dies wird Sinn in einer kleinen Weile. Also, was wir tun werden, ist, dass wir diese genaue
Strukturrate hier duplizieren , und dann werden wir sie hier drüben kleben. Wir gehen wieder
genau das Gleiche und bringen es hierher. Und was wir hier bekommen, ist diese Liste. Und anstatt es eine Liste ist, die wie diese ist die verknüpfte Liste, es ist eine Knotenliste, die tatsächlich in verschiedene Richtungen zeigt. Es gibt keinen Anfang, und es gibt kein Ende hier unten. Die übergeordneten Zeiger, die in Rot
sind, zeigen zurück auf, woher sie kam, so dass es eine doppelt verknüpfte Liste erstellt. In gewissem Sinne jedoch macht
es
jedochnicht allzu viel Sinn, warum es anders ist als das. Also lassen Sie uns eine weitere Ebene hinzufügen. Lassen Sie uns eine weitere links und rechts hier hinzufügen. Also werden wir einen Knoten hier haben, eine Notiz hier drüben, eine genau da, eine genau dort und dann darauf zeigen, und Sie werden etwas bemerken, dass dies
nicht mehr ein doppelt verknüpftes Live sein kann , genau wie wir in die Vergangenheit, denn man kann nicht von hier rüber nach hier gehen, in irgendeiner Weise, die Sinn macht. Zum Beispiel müsste
ich hierher gehen, als das einmal anzufassen. Gehen Sie runter, als berühren Sie das zwei Mal, gehen Sie hoch, gehen Sie runter, berühren Sie das zwei Mal und kommen Sie runter. Es ist keine gerade Linie mehr. Jetzt kommt es in diese andere Form, und das ist die Form eines Baumes auf. Dies ermöglicht es uns, Entscheidungen innerhalb unserer Programme zu treffen und Daten basierend
auf diesen Entscheidungen zu sortieren . Und es gibt tatsächlich etwas, das den Entscheidungsbaum genannt wird, wo, wenn Sie zu diesem Punkt kommen, wird
es sagen, OK, wenn Sie,wissen
Sie,
X größer als drei haben wissen
Sie, , gehen Sie zum jetzt, wenn warum weniger ist, als nach links zu gehen und Sie tatsächlich mit Entscheidungen kommen können, die auf einem Baum basieren und es so einrichten? Also, was uns dies erlaubt, und lassen Sie uns ein Beispiel dafür zeigen, ist es uns erlaubt,
Daten zu klassifizieren und Daten viel schneller zu bekommen. Also, zum Beispiel, in einer verknüpften Liste, wenn Sie zum achten Element kommen wollten, sagen
wir, das Element ist hier drüben, Sie müssten acht Schritte in der
weniger gehen . So wird das hier gehen, hier, hier. Und dann müssen Sie nicht weiter zur verknüpften Liste gehen, um sie zu finden. Das dauert sehr lange mit einem Baum. jedoch Wenn Siejedochdie richtigen Ideen kennen, dann wissen Sie das. Nehmen wir an, dass Ihr Element zwei Rechte hat, oder? Richtig. Wir sind hier in zwei Zügen waren hier in. Wir haben schon viel darüber geredet. Wir sind hier in log of n bewegt statt hier oben, was in die Suche nimmt. Nehmen wir also an, dass zum Beispiel wir
zum BeispielTiere klassifizieren. Sagen wir mal hier oben, wir haben ein Tier und dann werden wir ihn in drei verschiedene Gruppen einordnen. Wir sind in einem klassifizieren diese Tiere in drei verschiedene Gruppen. Also, was könnten diese drei Gruppen sein? Nun, ich meine, wir können uns wirklich alles einfallen lassen, was wir wollen. Sagen wir hier drüben,
wir haben Säugetier,
und dann in der Mitte haben wir so etwas wie Fleischfresser. Säugetier, Und dann hier rechts haben
wir so etwas wie Primaten. Und jetzt, was wir tun können, ist, dass wir tatsächlich diese Liste erstellen können, die diese
verschiedenen Tiere finden wird . Also, zum Beispiel, hier
unten, Katze vielleicht ein Hund. Ich weiß es nicht. Vielleicht. Ah, Hai. Es ist ein Tier, das nicht ist. Und dann, Säugetier, hier
drüben könnten wir
Eichhörnchen haben Säugetier,hier
drüben könnten wir
Eichhörnchen habenund dann vielleicht wie eine Ratte. Und Sie könnten sehen, dass es hier einige Ähnlichkeiten geben könnte, also müssten wir duplizieren. Aber wir denken nur an diesen Primaten-Gorilla und dann vielleicht wie ein Mensch. Aber Sie können sehen, dass es sich nicht mehr um eine Liste von Daten handelt. Dies ist eigentlich eine Klassifizierung von Daten, so können wir bei Tier beginnen und sagen, ich möchte alle Fleischfresser greifen und so müssen wir nur berühren. Wir müssen nur anfassen, wenn wir alle Fleischfresser wollen, diesen Baum hier. Das heißt, wir müssen es nicht. Auch wenn das hier über 3000 Elemente verfügt und hier über 2000 Elemente verfügt. Wir können immer noch alle Säugetiere in nur einloggen Zeit finden. Es dauert nur einen Schritt und dann zwei Schritte, um alle Tiere hier unten zu finden. Also, was das tut, ist, wie ich sagte, es erlaubt uns, Daten zu klassifizieren, erlaubt uns, Daten aufzuteilen und ermöglicht es uns, Daten viel schneller zu erfassen. Das ist eine Art wie die Grundlagen dessen, was Bäume sind. So funktionieren sie. So gehen sie bei der nächsten Wahl, sprechen
wirklich über einen sehr Standard-Baum,
etwas, das ziemlich viel verwendet wird. Und das nennt man einen binären Suchbaum. Also, die machen wirklich Spaß, weiter zu machen. Ich sehe euch in der nächsten Vorlesung.
41. 6-2 Suchbaum: Lassen Sie uns darüber reden, was, auf den wichtigsten Bäumen der Informatik, und das ist der binäre Suchbaum und die Initialen für diesen RbST, die Sie hier sehen können und alles, wofür sie stehen, ist nur das. Welches ist der binäre Suchbaum. Also, was ist ein binärer Suchbaum? Nun, lassen Sie es uns zusammenbrechen. Lasst es uns durch die Worte brechen. Wir wissen, dass es binär sein wird, was bedeutet, dass Sie zwei Optionen haben werden. Binäre Zahlen erinnern? Null in einem. Also was? Der Baum. Du wirst zwei Möglichkeiten haben. Es wird nicht ein Baum mit mehreren Optionen sein, so dass es nur eine einfache zwei Optionen haben wird, so links und die rechte setzt die binären Teile. Das ist der binäre Teil. Und dann wird es ein Suchbaum sein. Die Suchmethode ist also nur eine Art der Aussage, wie dieser Baum verwendet werden soll. Also werden wir in der Lage sein, eine Reihe von diesen Knoten hier und durch die Verwendung dieses
Baumes zu haben , Suche zu
schwächen und bestimmte Knoten wirklich,
wirklich schnell zu erreichen , und ich werde Ihnen später ein bisschen mehr davon zeigen. Und dann es
natürlich wird
es
natürlichein Baum sein. Es wird also sein, worüber wir in der letzten Vorlesung gesprochen haben. Es wird von den Baumeigenschaften gehen, also ist es ein binärer Suchbaum. Also, wie genau funktioniert es? Nun, was es tut, ist jeder Knoten hier hat zwei Optionen. Gehen Sie nach links oder nach rechts. Und dann hat jeder dieser Knoten auch zwei Optionen. Bis zu zwei Optionen, die Sie nur haben können. Sie könnten eine Option oder Null Optionen haben, aber bis zu zwei Optionen und alles auf der rechten Seite. Nehmen wir an, dass diese Note X ist. Alles rechts von X wird größer sein als und alles links von X
wird kleiner sein als so. Was das bedeutet, ist, dass
dieser Unterbaum , die linke Seite hier, kleiner sein wird als Zahlen, die kleiner als X sind. Und das rechts wird Zahlen sein, die größer als X sind. tatsächlich einen Baum gerade daraus bauen. Also gehen wir weiter und sagen wir, wir hatten eine Reihe von Zahlen hier. Lasst uns, wer 15 27 10 11 und acht hier hatte. Und daraus können wir einen Baum bauen. Also, was wir tun, ist, dass wir
unsere erste Notiz erstellen, unseren Wurzelknoten gleich hier am Anfang, und wir setzen unsere erste Nummer der 15. Dann greifen wir die zweite Zahl, die eine Zwei ist. Nun, zwei ist weniger als 15. Also gehen wir nach links und stecken die beiden hier rein. Und dann haben wir eine Sieben. Und so sind die Sieben weniger als 15, aber größer als zwei. Also wird es genau hier gehen. Nun, Nun, stellen Sie die Sieben dort hin. Lass es uns in rote Sieben setzen. Und dann haben wir eine 10. Das ist also weniger als größer als und dann 11. Lassen Sie uns tatsächlich diese Zahlen in der Rückseite ändern. Nur damit wir einen ausgeglicheneren Baum hier haben. Sagen wir 18 18 und 25. Also haben wir die 10 in, und jetzt haben wir eine 18, die größer ist als so setzen wir es nach rechts hier drüben, und dann haben wir eine 25, die auch größer ist als so. Jetzt haben wir unseren binären Suchbaum erstellt und wie Sie sehen, sieht er nicht so voll aus wie ein normaler Baum. Wir haben diese Knoten, die leere Notizen haben. Die Linke. Hier, da sind die. Keiner von ihnen weiß, dass dieser keine Kinder hat. Dieser hat uns nicht mehr übrig. Es hat nur Rechte, aber wir haben hier erstellt ist ein Baum, den wir leicht suchen können. Also schauen wir uns das an. Schauen wir uns die Ebenen hier an. Dies ist also die Hauptebene an der Spitze. Und dann haben wir Ebene eins, Ebene zwei und dann auf der unteren Ebene drei. Das ist also die technische Ebene 012 und drei, und so können wir sehen, dass die längste, die es dauern wird, um zu einem Knoten zu gelangen, drei
Ebenen sein wird, obwohl wir 123456 verschiedene Informationen hier drin haben. Und hier kommen binäre Suchbäume wirklich ins Spiel. Weil, wie wir in vielen verschiedenen Aspekten dieses Kurses gesprochen haben, wenn Sie Dinge in einen Baum stecken oder Dinge in zwei Hälften brechen könnten, können
wir eine Login-Beziehung von ihm bekommen. Nehmen wir an, dass wir nach einer Zahl suchen wollten oder keine Zahlen sein müssen, sie könnten Eigenschaften sein, nach denen wir irgendwie suchen könnten, die größer sind als der letzte Cent. Aber sagen wir, wir wollen nach dem Eigentum von sieben suchen. Nun, wie finden wir es? Alles, was wir tun müssen, ist, dass wir den Baum verfolgen müssen. Wir begannen die Note und wir schauen uns sieben und wir gehen ist sieben größer oder weniger als 15 Will sieben ist weniger als 15. Also gehen wir zu dieser Notiz. Ist sieben größer als oder kleiner als eins? Sieben ist größer als unsere 27 ist größer als zwei. Also gehen wir hierher. Wir haben sieben gefunden. Wir brauchten 12 Züge, um dorthin zu gelangen. Also, obwohl es diese ganze Art dieser ganzen Nummernfolge
gibt, gab es hier sechs Zahlen. Wir mussten nur zwei der Zahlen berühren, um unsere Nummer zu finden. Und wir können genauso einfach suchen. Sagen wir mal, gibt es eine Sechs-Industrie? Nun, wir gehen, wir ziehen hierher. Dann zogen wir zu hören sechs ist weniger als sechs ist größer als sechs ist weniger als es nichts
hier ist , was bedeutet, dass sechs nicht in diesem Baum ist. Wir brauchten höchstens drei Züge, um dorthin zu gelangen. Das gibt uns also die Fähigkeit, unsere Informationen während der Suche aufzuschlüsseln , denn jedes einzelne Mal, wenn wir diese Entscheidung treffen, jedes Mal, wenn wir die Entscheidung von weniger als oder größer treffen, als wir die Baum in zwei Hälften. Theoretisch schneiden
wir den Baum in zwei Hälften, was
bedeutet, dass wir nicht alles nach rechts oder alles nach links berühren . Und wenn unser Baum normal genug ist, dann haben wir diesen Fall, in dem wir alles in zwei Hälften schneiden und du wirst diesen umgekehrten exponentiellen Graphen
bekommen. Und das natürlich wird
natürlichLogbuch sein. So werden viele Ihrer Operationen als Blick herauskommen, vor allem Ihre Suchoperation. Aber wir werden in der nächsten Vorlesung mehr über die Laufzeit sprechen. Und so funktioniert im Grunde ein binärer Suchbaum. Sie können diese Dinge einfügen,
und dann sind Sie in der Lage, sie sehr,
sehr schnell zu suchen , um herauszufinden, ob Sie eine in Ihrem Diagramm haben oder nicht, die Sie auch in
ziemlich konstanter Zeit löschen können . Delicious ist ein bisschen eher ein komplexes Thema, also werden wir das nicht anfassen. Aber wenn Sie
zum Beispiel nur
die sieben löschen, zum Beispiel nur
die sieben löschen, könnten Sie diese 10 einfach bringen und es wird die binären Sucheigenschaften beibehalten. Aber zu welchen Zeiten? Wenn Sie diese 15 hier oben löschen möchten, müssten
Sie das dann in die oberste Stelle drehen, damit es so sein könnte, dass die binären Sucheigenschaften immer noch,
ähm,
behalten werden ähm, . Sie könnten diese auch nach oben drehen, aber Sie müssen mehr Rotationen machen. Also, wie ich schon sagte, es ist ein bisschen komplexer. Wir gehen einfach mit einfügen, und wir werden nur auf die Laufzeit von Löschen schauen. Schauen wir uns hier ein anderes Beispiel an. Nehmen wir an, wir haben Schauen wir uns ein schlechtes Beispiel an. Dies ist also, wo binäre Suchbäume nur ein wenig fehlgeschlagen sind. Und das ist der schlimmste Fall. Dies ist nicht der durchschnittliche Fall, also ist dies irgendwie der schlimmste Fall, aber ich möchte das zeigen, und dann wird der nächste Vortrag über die Laufzeit dahinter sprechen, aber Sie können sehen, dass ein Baum nicht immer herauskommt komplett gefüllt. Dies kommt tatsächlich zu einer verlinkten Liste heraus. Wenn wir also Levels hier bohren, lassen Sie mich sehen, ob ich das nicht richtig kriege. Also haben wir 012345 und dann sechs hier unten und Sie werden feststellen, dass das im Grunde drin ist. Wenn wir damit angefangen haben, dass einer der oben hier drüben
, der nur etwas von dir entfernt ist, lass mich diese über Berührung ziehen. Also, wenn wir mit diesem Top eins nach eins anfangen würden, hätten
wir ein Problem hier oben, denn hier oben ist es immer ein Problem. Es wird immer auf sieben rauskommen und du wirst bemerken, dass das bedeutet, dass das drin ist . Wenn wir also eine sortierte Liste haben, die wir in einen binären Suchbaum eingeben wollen und wir keine zusätzlichen Sachen darauf anwenden, werden
wir tatsächlich Sergeant in Betrieb nehmen, weil wir jetzt Teoh haben. Jetzt ist es nur eine verknüpfte Liste jetzt nur eine Liste von Zahlen, die miteinander verknüpft wurden und es gibt keine besonderen Eigenschaften. Es gibt keinen Sinn, wo es abzweigen wird, und wir werden in der Lage sein, Dinge in zwei Hälften zu schneiden, die tatsächlich nur die Liste von
links nach rechts durchsuchen , und so wird das zu einem Problem, und wir werden darüber in der nächsten Vorlesung sprechen wo es auch für unsere Laufzeit zu einem großen Problem
wird.
42. 6-3 BST Laufzeiten: Lassen Sie uns jetzt über die Laufzeiten eines binären Suchbaums sprechen, und es gibt ein paar Laufzeiten, die wichtig sind, um Algorithmen zu suchen. Ich denke, Sie könnten sie unsere Suchdatenstrukturen nennen, und das wird Suchen, Einfügen und Löschen sein. Und wir kümmern uns wirklich um den durchschnittlichen und schlimmsten Fall, weil der Durchschnitt und der beste Fall hier
in der Regel kombiniert werden . Werfen wir einen Blick auf diese. Beginnen wir mit dem Suchalgorithmus. Also, als wir unseren binären Baum hier hatten und im Durchschnitt, wird
es wie ein normaler Baum aussehen. Es könnte, weißt
du, ein bisschen so
haben. Aber im Allgemeinen wird es wie ein normaler Baum aussehen. Und deshalb bei jeder Entscheidung werden
wir
bei jeder Entscheidungden Baum in zwei Hälften schneiden. Das sind also wie kleine Unterbäume
hier, rechts. Aziz. Nun, und mit jeder Entscheidung schneiden
wir einen der Unterbäume aus. Also schneiden wir alle Daten und die Hälfte. Wenn wir also mit acht danach angefangen haben, wäre
eins bis vier, dass Donna dazu, wir haben unsere Antwort unten auf die erste, und wir haben dieses Beispiel ein paar Mal durchgegangen und das kommt immer aus dem Protokoll heraus nur weil von dieser ganzen Natur, alles in zwei Hälften zu schneiden. Und so, mit der Suche, werden
Sie genau die Zeit bekommen. Die durchschnittliche Zeit wird am Ende für die durchschnittliche Zeit hier sein, die durchschnittliche Zeit wird enden, oh, log of end. Und das ist nur wieder wegen der Art, wie wir dieses Ding durchsuchen. Und wir gehen die Liste runter. Wir treffen Entscheidungen. Ist es weniger, als ist es weniger als ein größer als in jedem Mal, wenn wir es in zwei Hälften schneiden. Also im Durchschnitt sollte
es etwas aussehen. Dieser Baum sollte in etwa so aussehen. Und wir bekommen das Protokoll in einer Art Beziehung, wo wir 16 Elemente hier haben könnten, aber nur vier Ebenen im Baum. Das Maximum, das wir gehen müssten, ist vier Levels. Nun, schauen wir uns den schlimmsten Fall an und wir sind rüber gegangen. Der schlimmste Fall ist ein wenig in der letzten Vorlesung, und das ist, wenn Sie eine gerade Linie haben. Wenn Sie also etwas einfügen, das bereits sortiert ist und Sie diese gerade Linie erhalten, könnten
Sie hier sogar eine haben. Kämpfen. Die Mehrheit davon geht einfach weiter. Und es ist wie eine verlinkte Liste. Es ist, als ob Sie gerade die verlinkte Liste hinunter gehen und jede Entscheidung entfernen Sie nur eine, die Sie nicht entfernen die Hälfte der möglichen weiß, dass Sie berühren können. Du entfernst nur eins. Und so jedes Mal, wenn Sie nur einen bewegen, bedeutet
das, dass Sie nur meine in minus eins in minus eins in minus eins in minus eins runtergehen. Wissen Sie, ständig, was bedeutet, dass es Zeit brauchen wird, um dieses Ding zu durchqueren,
weil wir
anstelle dieser vier Ebenen 1234567 Levels haben. Also ist es sehr nah an in. Und das bedeutet, dass das unser schlimmster Fall sein wird. Denken Sie daran, dass dies ist, wenn unsere Daten bereits so sortiert waren wie 1 bis 5 für sechs 789 Also haben wir etwas, das meist sortiert wurde. Jedes Haar geht von Let's right, wir bekommen uns eine gerade Linie, und das gibt uns unsere schlechte oder unsere schlimmste Zeit von oh bis zum Ende. Jetzt kann das verbessert werden. Da draußen gibt es etwas, das ein A V l und einen roten schwarzen Baum genannt wird. Und was diese tun, ist, dass sie die Knoten tatsächlich färben, und jedes Mal, wenn Sie an einen bestimmten Punkt kommen, an dem Sie etwas haben, das sehr schwer
gewichtet ist , wird
es dauern. Und es wird es tatsächlich nach oben drehen und dann diese Notizen nehmen und nach links legen,
um sicherzustellen, dass Sie diesen Baum haben. Aber das sind eigentlich sehr komplexe Verfahren, weil es viele verschiedene
Variablen und Malerei und solche Sachen braucht , um ihn im Auge zu behalten. Also weiß nur, dass sie da draußen sind, und vielleicht gehen wir in einem fortgeschritteneren Kurs so etwas durch. Also der nächste ist einfügen, und Sie müssen sich den Einsatz genau so vorstellen wie dieser hier. Und lassen Sie uns einige dieser Zeilen aufräumen. Es ist ein paar dieser Zeilen hier aufzuräumen, und was einfügen tut, ist Einfügen. Alles, was es tut, ist, den Ort zu finden, an dem ein Knoten gehen sollte. Also, zum Beispiel, wenn wir uns selbst einen Knoten, der sein wollte, sagen
wir, sein endgültiges Ziel war genau hier, es war genau hier drüben. Nun, das wird alles sein, was es dauern wird, wird sein sein, dass Sie die
Zahl einfügen werden größer als größer als weniger als als weniger ist. Es dauerte also nur drei Operationen, um hierher zu kommen, obwohl wir so etwas wie neun Zahlen hier haben. Und so wie die Suche, wird
es genau der gleiche Algorithmus sein, um zu finden, wohin es gehen sollte. Du wirst jedes Mal alles in zwei Hälften schneiden, da wir
dir einen besten Fall oder einen durchschnittlichen Fall von O bis zum Ende besorgen, oder dich in meinem Rücken einloggen Oh, zum Login. Und genau wie im schlimmsten Fall, wenn wir eine gerade Linie haben und wir einfügen müssen, sind Einsätze, die in einem Protokoll
von N oder zu einem nur regelmäßigen in einer linearen Zeit kommen werden ? Weil unsere schlimmsten Fälle, die an das Ende dieser Liste eingefügt wurden, hier ständig und wir machen nur eine längere und längere gerade Linie. Also wird unser schlimmster Fall auch bis zum Ende raus sein, und wenn Sie es erraten können, wird
das Löschen genau gleich sein, weil die einzige nicht konstante Operation darin besteht,
das Wissen zu finden , das wir löschen möchten und die Notiz zu finden, die wir löschen wollen, wenn wir uns einen durchschnittlichen Baum hier genau wie die anderen beiden Operationen kleiner als größer
als okay, fanden
wir die Notiz zu löschen. Die eigentliche Löschoperation ist ein wenig komplex, aber es ist konstant Zeit, weil sie jedes einzelne Mal genau gleich ist und im Grunde, in was sie zusammenbricht. Hat die Note Null Children? Hat es ein Kind oder zu hacken Kinder? Sie haben also nur drei Entscheidungen, und es führt nur jeden Algorithmus basierend darauf aus, wie viele Kinder haben, so dass es dauern könnte. Weißt du, vielleicht macht dieser hier acht Schritte zu diesem,
macht vier Schritte, macht vier Schritte, und dieser macht Nullschritte oder was auch immer. Aber das spielt keine Rolle, denn das sind konstante Zeit. Es wird immer 84 und Null dauern, oder was auch immer diese Zahlen herauskommen. Was zählt, ist, wie lange es dauert. Eigentlich kommen Sie zu der Notiz, die wir löschen möchten, und das wird immer in einem durchschnittlichen Fall im durchschnittlichen Fall einloggen. Und dann können Sie sich das gerade Linienbeispiel wieder vorstellen. Wenn wir einen Knoten löschen wollten. Es könnte ganz am Ende dieser Liste hier drüben sein. Und so kommt der Fall als ein Log von Ende oder linear heraus. Ich sage ständig Logbuch, aber ich meine linear. Es wird nur reinkommen, weil du diesen ganzen Baum durchqueren musst, um hierher zu kommen. Sie schneiden nichts und 1/2 Sie gehen buchstäblich nur so, als wäre es eine verlinkte Liste. Und so ist unsere letzte Laufzeit hier drüben nicht drin, und so ist das, was ein binärer Suchbaum uns gibt. Sie können sehen, dass es im schlimmsten Fall einige Schwächen hat, aber es ist, aber es ist der durchschnittliche Fall ist eigentlich ziemlich gut. Wir beschränkt einfügen löschen in Gesetz gegebene Zeit, das ist eine der besten Zeiten, die wir berühren können. Log ist im Grunde konstant, weil Konstante irgendwo genau hier sein würde ,
und dann wird Ihr Protokoll auftauchen, also wird es kommen und dann wird es absteigen. Es wird im Laufe der Zeit fast konstant werden, also wirst du einfach diese kleine Lücke haben. Aber für den Rest bis ins Unendliche werden
diese beiden im Grunde parallel sein, also ist es fast konstante Zeit, die großartig ist, besonders du versuchst, Zahlen einzugeben und dann, weißt
du, sie zu
durchsuchen ständig. Sie möchten einen Algorithmus wie diesen, damit Sie ständig suchen und diese
Zeiten einloggen können. Und dann könnten Sie
natürlich natürlich einige dieser fortschrittlicheren binären Suchbäume wie die Aviall und den roten schwarzen
Baum
implementieren Baum und diese unten auf die Zehe einloggen. Aber das ist die Laufzeit des binären Suchbaums.
43. 6-4 Tree: Lassen Sie uns nun über Baumtraverse ALS sprechen. Also, wenn Sie einen Baum haben, gibt es eine Reihe von verschiedenen Möglichkeiten, wie Sie die Straße durchqueren können, um es in eine
Vier auszudrucken . Wenn wir
zum Beispieldiesen Baum hier unten hätten,
wenn wir diesen Baum hätten,
wie könnten wir ihn als Schnur ausdrucken? zum Beispiel Wenn wir
zum Beispieldiesen Baum hier unten hätten, wenn wir diesen Baum hätten, Nun, wir könnten es ausdrucken. Vielleicht nach Level. Das nennt man Level-Orders. Wo du hingehst. 2010 15 5 13 23 7 24 sechs und acht. Wir gehen einfach in jede einzelne Ebene auf diesem Baum. Wir könnten es ausdrucken, indem wir zuerst den linken Unterbaum betrachten und dann die mittlere unterirdische den rechten Unterbaum betrachten. Wir könnten nach unten gehen. Es gibt eine Reihe von verschiedenen Möglichkeiten, dies auszudrucken, und es gibt tatsächlich eine Reihe unterschiedlicher Terminologie, um dies zu tun, und das ist die Behandlungsterminologie der Umkehrung. Also, was wir haben, ist, dass wir eine um ah Preorder Traverse weg zu verkaufen, und dann eine Post Order Traverse ALS und was die sind verschiedene Möglichkeiten, um einen Baum zu durchqueren ,
so dass man ihn in einen Stream ausdrucken kann. Und wie diese funktionieren. Die in der Reihenfolge ist etwas namens links, dann Route und dann rechts, während die Vorreihenfolge Route ist. Dann links und rechts? Und dann ist die Postbestellung links rechts Route. Also weiß ich, dass das keinen Sinn ergibt, direkt aus dem Schläger. Aber im Grunde, was das sagt, ist, wenn wir einen Knoten hier unten hätten, wenn wir einen kleinen Baum haben, der genau hier geht, was wir tun, um den linken Baum zuerst zu nehmen und dann die Route und dann die rechte. Also nehmen wir das wäre unsere erste Nummer und dann würden wir in die Wurzel gehen. Also gehen wir wieder hoch, nehmen diese Nummer und dann nehmen wir diese Nummer und dann gehen wir den ganzen Weg zurück. Wir nehmen diese Nummer und dann gehen wir in diesen Unterbaum. Gehen Sie nach links zurück, um wieder nach unten zu hören, richtig? Und dann würden wir diese Nummer nehmen und dann gehen wir hierher, nehmen diese Nummer und dann gehen wir hierher, nehmen
wir diese Nummer, und dann würden wir den rechten Unterbaum nehmen, damit wir nach rechts gehen und so lasst uns tatsächlich ein Beispiel tun, weil ich das Gefühl habe, dass dies ein wenig mehr machen wird, da wir also beginnen mit einem, um umzukehren. ALS durchqueren. Also was? Das ist, was ein, um zu überverkaufen ist, ist es links Weg, richtig? So ist es. Wir können hier einfach etwas setzen, wir gehen links und rechts. Also, was wir tun wollen, ist, dass wir zuerst zum linken Unterbaum gehen
und dann gehen wir den ganzen Weg, bis er nicht mehr mehr übrig ist, ein paar Bäume. Dann gehen wir zur Wurzel, und dann gehen wir nach rechts, also gehen wir nach links. Also fangen wir hier an einer Wurzel an und gehen nach links. Irgendein Baum. Nun, hat das ein linkes Land? Das tut es. Also gehen wir zu diesem linken Unterbaum. Hat das ein letztes Jahrhundert? Tut es nicht. Also gibt es hier keinen Baum mehr. Das bedeutet, dass wir hier links abkreuzen können. Wir gehen hierher, und jetzt greifen wir die Wurzel davon. Also werden wir eine Fünf aufschreiben, und dann gehen wir zum rechten Unterbaum und wir werden den Algorithmus
wieder anwenden . Wir gehen nach links, und es gibt nichts in der linken, rechten oder Route. Also, was wir tun, ist, dass wir einfach den Weg nehmen, das ist das Sechs Jahr, und wir schreiben das auf. Wir könnten ein Komma zwischen die Knie legen. Also, jetzt haben wir das erledigt. Nun, wir werden wieder in den Algorithmus gehen. Und da wir uns bereits den linken Unterbaum angesehen
haben, können wir nun die Wurzel betrachten, die diese sieben sein wird. Also schreiben wir die sieben auf, und dann können wir zum rechten Sohn Baum gehen. Welches sind die acht da drüben? Was wir also tun, ist, dass wir diesen Algorithmus bei jedem Schritt anwenden, bis wir ihn nicht anwenden können . Und dann sammeln wir nur die Daten an diesem Punkt, so dass wir den richtigen
Unterbaum erkundet haben , den Sie zuletzt eine der Art der Liste haben. Hier gehen wir wieder hoch, und wir haben bereits die Route erkundet. Also gehen wir wieder nach oben, und jetzt ist die rechte Seite dieser fünf fertig. Also gehen wir zurück nach oben, denn jetzt bedeutet das 10 der linke Unterbaum von 10 ist jetzt vollendet. Also jetzt können wir uns die Wurzel für dieses anschauen, so dass wir eine 10 nach unten setzen können und dann werden Sie feststellen , dass die nächste Zahl, die wir tun müssen, so haben wir den linken Unterbaum fertig. Wir haben die Route erledigt. Also jetzt müssen wir das richtige Thema zu tun, das ist eine 13. Und wenn du hier drüben ein Muster siehst, siehst
du hier drüben ein Muster. Das ist es, was das ist. Und deshalb heißt es in Ordnung. Wir werden in einer Sekunde darüber reden. Also lasst uns wieder nach oben gehen. Das Ganze ist erledigt. Die rechte linke und die Route sind fertig. Also jetzt bewegen wir uns zurück 20 jetzt hat der gesamte linke Unterbaum fertig, so dass es jetzt seine eigene
Nummer in seine Routennummer setzen kann und dann haben wir den richtigen Unterbaum. Also jetzt springen wir hier runter in den rechten Unterbaum und der rechte Sohn Baum
hat ein linkes Element, das 23 ist. Also holen wir uns die 23 Rate hier, und wir gehen tatsächlich zu Yeah, schnappen Sie sich die 23 hier. Und so war das Wir erforschten den unsichtbaren linken Unterbaum. Da war nichts. Dann gingen wir auf die Route. Wir greifen die 23 dann gingen wir nach rechts zum 24. Nichts in der linken. Also packten wir die Wurzel der 24 Hier, erforschen sie. Geh nach rechts. Da ist nichts. Also, jetzt ist dies vollendet Wir kommen, dieser rechte Unterbaum ist jetzt vollendet. Also kommen wir hoch. Dieser linke Unterbaum ist nun vollendet. Jetzt können wir die Route nehmen und wir haben 25. Und wenn Sie etwas bemerken, wenn Sie hier etwas bemerken, das, was wir bekommen haben, ist, dass wir die um eine Liebe zu durchqueren diesen Baum und es auch die um eine Menge von diesem der
Zahlen zu durchqueren . Also, was das war hier drüben Das ist ein binärer Suchbaum. Wenn Sie bemerken, dass alles links weniger übrig ist. Alles nach rechts ist mehr Aber deshalb, wenn wir uns bewerben, um es umzukehren, bekommen
wir tatsächlich die in Ordnung dargestellte Darstellung des Baumes heraus, die zum 56789 10 herauskommt . Es kommt in aufsteigender Reihenfolge heraus. Und das liegt nur daran, wie es funktioniert. Wurden die weniger als erste erkunden. Und dann nehmen wir die mittleren
und dann gehen wir zum Größeren als Nächsten. So sind die Erforschung weniger als Mitte größer als und das macht es zu diesem insgesamt kommen. Nun, das ist nicht die einzige Durchquerung, von der wir gesprochen haben. Wir haben auch eine vorbestellte Umkehr. Also lasst uns das jetzt machen. Also hatten wir uns einen Vorauftrag und der Vorauftrag wird nach links verlaufen, oder? Also wird es gut links sein, richtig? Das bedeutet also, was wir tun werden, ist, dass wir genau dasselbe tun werden, außer es
etwas anders machen . Also packten wir den Weg, um direkt von der Fledermaus. Wir greifen einfach die Route, schreiben sie auf 20. Jetzt erkunden wir den linken Unterbaum. Also sind wir jetzt im linken Land und dann wenden wir diesen Algorithmus wieder an. Also erkunden wir die Route rechts die Wurzel nach unten und gehen dann in den linken Unterbaum. Wir erkunden die Route, schreiben das auf und erforschen dann den linken Unterbaum. Da ist nichts. Dann erforschen wir dann das richtige Jahrhundert. Wir schreiben die Route auf und erkunden dann die linke und dann die rechte. Die Linke wird also unsere Sechs sein. Das Recht wird eine Acht sein, und dann sind wir jetzt mit Leichtigkeit fertig. Also bewegen wir uns nach oben, was bedeutet, dass wir mit dem Recht fertig sind. Also sind wir damit fertig. Wir ziehen nach oben, wir sind fertig, desto weniger Bäume. Und ich würde zum rechten Unterbaum gehen, der
die 13 hier drüben ist. Und jetzt sind wir damit fertig. Es hat die Route, links und rechts erkundet. Also gehen wir wieder hoch. Dies hat nun die Wurzel und die Linke erkundet. Also gehen wir nach rechts, schreiben
wir diese Nummer auf, und dann gehen wir nach links, das ist diese 23. Aber es ist auch eine Route, also werden wir das aufschreiben. Und jetzt sind wir hier. Wir haben die Route erkundet. Es ist nichts mehr übrig. Wir erforschen das nächste, das ist die 24. Und dann erforschen wir die 25. Endlich sind
wir Nein, nein, wir erkunden können Sie. Also haben wir das Recht erforscht. Los geht's. Zurück nach oben. Wir haben die Route bereits erkundet. Wir kommen wieder hoch. Das haben wir schon erforscht. Wir kommen wieder hoch. Das haben wir schon erforscht. Das ist also unsere letzte Pre-Order Traverse weg, so dass Sie feststellen können, dass das Traversable anders
herauskam und dass es bei einer binären Operation kein wirkliches Muster darin
gibt. Aber das ist ein anderer Weg, es zu durchqueren. Und Sie können Traverse als kombinieren. So in der Reihenfolge und eine Vorreihenfolge, könnten
Sie sie kombinieren, um einen Baum in der Regel mindestens zwei neu zu erstellen. Aber das ist nur eine andere
Art, um den Baum zu durchqueren, und Sie können sehen, dass sich die Zahlen nicht ganz unterscheiden können. Dieser kam in Ordnung, und dieser kam heraus. Ähm, im Grunde fast identisch, , völlig anders. Und das ist der Impfstoff, den wir untersuchen können, ist die Post Order. So Post-Reihenfolge ist links, rechts und dann Route. Also ist es links dann rechts? Und dann Route. Also was? Wir tun es die Nachbestellung, wie wir gehen nach links, links, erkundet, rechts und dann links. Also sechs wird unsere erste Nummer sein, und dann werden wir es tun. Also haben wir die Linke erkundet. Wir haben die Linke erkundet. Und dann werden wir jetzt das Recht erforschen. Also die Acht, und dann werden wir die Route erkunden, die die Sieben ist. Also gingen wir nach links, richtig? Und dann die Wurzel und eine Stunde zurück, und wir haben die Linke erkundet. Wir haben das Recht erforscht. Und jetzt können wir die fünf hier niederschreiben, wir kommen wieder auf die 10 und jetzt haben wir
die Linke erkundet . Also lasst uns das Recht erkunden, das ist die 13 hier drüben. Und das ist alles, was hier drüben ist. Und dann werden wir die Route erkunden, die Ted ist. Und so haben wir die 10 erforscht. Also gehen wir zurück zu den 20, die wir den linken Unterbaum erkundet haben. Jetzt erforschen wir den richtigen Unterbaum. Gehen Sie zu diesem Knoten. Wir erkunden die linke, kommen zu dieser Notiz. Wir erforschen zuerst das Richtige und wir haben alles erforscht. Hier kommen wir wieder hoch. Wir haben die Linke erkundet. Wir haben das Recht erforscht. Also, jetzt können wir die 23. Kommen Sie zurück auf die 25 oder die 23. Also haben wir links erforscht. Wir haben erkundet, richtig, Wir haben die Route erkundet. Also, jetzt ist es fertig. Wir kommen wieder hoch,
die 25, die wir erforscht haben, links haben wir erforscht, richtig. Hier ist nichts. Also jetzt greifen wir die Route, die ist die 25 wir gehen an die Spitze, die 20 ist. Wir haben die Linke erkundet. Wir haben die gerade jetzt erkundet, die wir die Route nehmen und wir haben uns selbst eine 20 genau hier als auch. Und dann können Sie sehen, dass dies auch wieder anders ist als dieses. Es gibt keine echte Art von Muster zu diesen beiden, die zumindest ein Muster, das so
auffällig ist wie das in der Reihenfolge Muster mit einem binären Suchbaum. jedoch Sie sindjedochverschiedene Umkehrungen gibt es verschiedene Möglichkeiten, dieses Diagramm auf ihre verschiedenen
Arten zu betrachten , um sie als String auszuschreiben. Also, das ist behandeln Umkehrungen. Dies sind nur einige der Traverse-ALS. Noch eine Traverse. Alles, was man schnell dio konnte,
ist, was wir als ein Beispiel für den Anfang getan haben, und das nennt man Level Order. Es wird Level-Reihenfolge genannt, und alle Level-Reihenfolge ist nur buchstäblich die Ebenen von der Ich meine, lasst uns das tun. Lass uns gehen. Wenn wir nur zu einer ebenen Ordnung zu diesem hier wollten. Könnten wir. Nehmen wir also an, wir trennen dieses Ende seiner Levels so und das wird ein wenig knifflig. Sie müssen sicherstellen, dass sie hier alle auf der richtigen Ebene sind, so. Okay, so dass diese so sind, dann gehen Sie einfach entweder von oben nach unten oder von unten nach oben,
je nachdem, wie Sie es tun möchten. Aber normalerweise ist es von oben nach unten. Also haben wir unsere erste Stufe bei 20. Dann haben wir 10 25 dann 5 13 23 und dann sieben, 24 sechs und acht. Und so können Sie sehen, dass, obwohl sie sich hier auf verschiedenen Seiten des Baumes befinden, sie immer noch auf der gleichen Ebene sind. Und so gibt Ihnen das die Ebenenreihenfolge, durchqueren Sie einen Großteil des Baumes. Aber wenn Sie bemerken, dass es schwer ist, herauszufinden, was dieser Baum war, sobald Sie ihn hier
reingesteckt haben, weil wir nicht wissen, wie viele. Wenn es ein voller Baum wäre,
was bedeutet, dass es immer zu, nachdem es immer zwei Kinder gab, wäre
dies leicht, in einen Baum umzubauen. Aber wenn Sie nicht wissen, dass Sie nicht wissen, welche Ebenen sind, und es wird ein wenig schwierig. Deshalb,
in der Regel, um diese zu kombinieren, um einen Baum wieder aufzubauen. Aber das sind die Traverse als eines Baumes, nur verschiedene Möglichkeiten, einen Baum zu betrachten und ihn als String aufzuschreiben. Verschiedene Wege zur Vielfalt haben unterschiedliche Eigenschaften.
44. 6-5 Beispiele aus der realen Welt: Nun, da wir ein gutes Verständnis von Bäumen haben, lassen Sie uns tun, was wir in allen anderen Abschnitten getan haben, und gehen Sie über einige
Beispiele der realen Welt , wo wir Bäume und Aktionen gesehen haben könnten. Das erste Beispiel ist ein gemeinsames Beispiel, und das ist ein Verzeichnis. Also jedes Betriebssystem, das Sie betrachten, hatte eine Art Dateisystem, um durch die Dateien
in der,
ähm,
Computer selbst oder auf der Festplatte zu gehen in der, ähm, . Also im Grunde, wie das funktioniert, ist, dass Sie ein Root-Verzeichnis haben, dann hat es Unterverzeichnisse mehr Unterverzeichnisse, und irgendwann gelangen Sie zu Dateien und verknüpfen alle diese zusammen. Sie können Programme erstellen, und Sie können Bilder und solche Sachen öffnen. Aber es ist alles wie ein Baum miteinander verbunden. Sie haben die 1. 1 Immer wenn Sie auf den nächsten klicken, geht
es weiter und weiter. So zum Beispiel können
Sie
zum Beispielauf dieser Instanz von Android Studio sehen, die ich auf meinem Computer habe. Ich kann in diese Datei gehen und in eine andere Datei gehen. Gehen Sie weiter in die Liste, bis ich eine tatsächliche Datei finde, die irgendwo hier
unten ausgeführt werden könnte , und Sie werden feststellen, dass der Baum hier oben gehalten wird und ich dann rückwärts gehen könnte, indem ich den Baum wieder
aufwärts gehe . Also, wenn ich auf die Zurück-Taste klicke, sprang
ich zurück in ein Verzeichnis. Es listet sie alle auf und ich gehe zurück ins Verzeichnis hier drüben. Ein Baum ermöglicht es uns, den Zugriff auf diese Daten wirklich,
wirklich schnell zu erstellen und in der Lage zu sein, sie in einem Format zu haben, in dem wir sie leicht verstehen können, die nächste Verwendung ist mit der Datenbank-Indizierung. Nun, das ist ein bisschen mehr eine fortgeschrittene Seite der Dinge. Das ist eigentlich ein B Baum hier. Und im Grunde, wie das funktioniert, ist, dass es einen sehr flachen Baum erstellt, so dass er nicht wirklich mehr Schichten in drei oder vier hat. Aber es trennt die gesamte Datenbank in diese Art von diesem kondensierten Baum, und es ermöglicht nur eine anständig schnelle Zugriffszeit für einen der Einträge. Die sonst müsste eine ganze Liste durchlaufen, um zu versuchen, sie zu finden. Und Sie können kein Array erstellen, das Millionen und Millionen und Millionen Zeilen lang ist. Es funktioniert einfach nicht, weil Sie wahrscheinlich mehrere Festplatten benötigen,
was bedeutet, dass Sie sich treffen werden, um an mehrere Orte zu gehen, um all diese Daten zu speichern. Aus diesem Grund,
weil wir aufgrund der gegebenen gigantischen Größe kein Array verwenden können, endet
es normalerweise eine Form einer verknüpften Liste, die dann in eine Form eines Baumes kommt, so dass wir alles zusammenhalten können und dass wir Zugriff auf die Informationen wirklich schnell in der gesamten Datenbank und Sie werden feststellen, dass ein Baum, wie ich in diesem Abschnitt gesprochen habe, es ist ein sehr schnelles Element weil höchstens durch vielleicht vier gehen müssen. Und dann, aber viele von ihnen sind so, zum Beispiel, wäre 12 und dann höchstens zwei weitere Züge hier durch. Also, selbst mit 55 Einträgen oder das ist wahrscheinlich näher an 20 Einträgen, wir müssen nur drei oder vier gehen, um an einen beliebigen Punkt innerhalb der Datenbank zu gelangen. Es beschleunigt sich nur zu der Zeit. Das ist es, worauf wir in nahezu Echtzeit zugreifen können. Eine andere ist, ah, eine
Art Interessantes, und das ist mit Entscheidungsbäumen. Also Entscheidungsbäume sind Dinge, die im Grunde das Programm leiten,
je nachdem, welche Eingabe gegeben wurde, so dass viel maschinelles Lernen tatsächlich
Entscheidungsbäume verwenden wird und die Tatsache, dass es etwas über wiederholte Versuch und Fehler lernen und dann sortieren bauen Sie einen Baum dessen, was es als nächstes tun sollte. Und Sie könnten sehen, dass einige dieser Sachen hier drüben nur Zufallszahlen sind und, wie wenn und deins und hin und her gehen und so versuchen, es zu finden. Aber zum Beispiel könnte
ein Videospiel etwas Ähnliches tun. Nehmen wir an, dass Sie, ah, es gibt Videospiele als mehrere Endungen am Ende. Je nachdem, was Sie während des Spiels getan haben, könnte
es eine Entscheidungsbaum, die Art von fügen Sie einige Dinge zusammen und herauszufinden, welche Endung es Ihnen geben sollte. Das könnte man dort benutzen. Dies ist ein Beispiel für Tick Tack Toe hier drüben, nur ein Entscheidungsbaum, wie man ah, Computer könnte Tick Tack spielen, Zehe es, Entscheidung nach unten, ähm, Schachspiele haben oft, wenn Sie eine Brust wie Computer, der versucht, andere Leute wie es zu schlagen. Ah,
Computer, der Schach spielt. Gewöhnlich hat es eine Entscheidung. Der Baum davon berechnet entweder einen, von wo er gerade steht. Sagen wir mal, es ist in Bewegung 12. Es wird die Züge 13 14 und 15 berechnen und dann die beste Entscheidung für sich selbst treffen, um
zu einer wirklich guten Position in Bewegung 15 Dinge zu bekommen . Zeug, wie Sie bemerken, geht, irgendwie wie exponentiell. Also, wenn wir eine weitere Ebene nach unten gehen wollten, würde
es länger und größer, vor allem mit einem Programm wie Schach. So erstellt es irgendwie einen verdichteten Baum und dann den Baum jedes Mal neu auszurichten. Aber Entscheidungsbäume werden oft in einer Menge von Gewinnen und vielen realen
Anwendungen verwendet , wo das Programm selbst an sich denken muss. Das ist also eine Art von der Verwendung von Bäumen. Sie werden überall verwendet,
und sie eignen sich hervorragend für den schnellen Zugriff auf Daten und die Organisation von Daten, die sie Programmen geben, um Entscheidungen zu treffen. Sie sind eine große Datenstruktur, und sie sind weit verbreitet
45. Timing – Projektvorbereitung: Hier ist ein lustiges kleines Problem, das ich beim Beschichten begegnet bin, das Ihnen wirklich zeigt, Snippets zu codieren, die perfekt gute Code-Snippets sind, die Sie einen tatsächlichen Code und
die Auswirkungen finden könnten , wenn Sie die falsche einmal weise verwenden, dass ISS. Hier ist also das Problem genau hier. Was wir versuchen zu tun, ist nur den maximalen Wert eines Arrays zu finden. Also haben wir ein Array, weißt
du, vielleicht hat es Tausende von Elementen drin, und was wir versuchen zu tun, ist, dass wir versuchen, die maximalen Werte zu finden Vielleicht fünf sind unsere Max Werte, die in diesem ganzen Array sehen wollten? Was ist die größte Zahl hier? Und es ist auch das gleiche Problem. Wenn wir versuchen, die Männer hier zu finden, haben
wir diese Idee auf der linken Seite, die ziemlich gut klingt. Es ist ein sehr, wissen
Sie, kurz ins Punkt-Code-Snippet. Es ist Far Max gleich Array, also nehmen wir unsere ray dot sortieren, so dass wir es dot pop sortieren. Also nehmen wir das erste Element von der Vorderseite des Arrays. Nun, wenn es sortiert ist und wir gehen davon aus, dass Sortierung vom größten zum kleinsten geht, dann haben wir die Wenn wir gerade das vordere Element wie, sagen
wir dieses kleine Ding hier Wir gingen Kopf und sortierten es und es ging so , Punkt, Punkt, Punkt, Punkt, Punkt Null. Und jetzt alles, was wir tun, ist, dass wir einfach das erste Element hier abknallen, und das wird unser Maximum sein, wirklich kurz, süß auf den Punkt. Dann haben wir hier einen etwas umständlicheren Ansatz, wo wir eine Variable namens Max erstellen. Wir laufen dann durch das Array, und jedes Mal, wenn ein Wert größer als Max ist, setzen
wir Max auf diesen größeren Wert. Und so, am Ende des Arrays, wenn wir zum Ende des Strahls kommen
, der zum gesamten geht, möchte ich jedes einzelne Element berühren, werden
wir dann den Maximalwert haben, denn wann immer etwas war größer, wir gingen voran und berührten es, und daher würde das dies auch Max gleich fünf zurückgeben, so dass beide das gleiche Problem erreichen. Nun, aber, was sind die zeitlichen Auswirkungen von beiden? Welche Code-Snippets schneller und warum? Wenn Sie nicht wissen, ob es wie eine interessante Problempositivität aussieht. Man Denk mal kurz darüber nach. Welches davon wird am Ende schneller sein? Denken Sie an all das Wissen, das wir alle verschiedenen Algorithmen gelernt haben, und versuchen
Sie eine Antwort dafür zu finden. Ich hoffe, Sie pausieren das Video und Sie haben es auf eigene Faust herausgefunden. Aber wenn nicht, bin
ich hier, um zu helfen. Hier ist die Sache, die dieses Problem wirklich bekommt. Es ist die Sorte genau hier. Dieses Problem. Erinnerst du dich, als wir über Sortieralgorithmen sprachen? Sortieralgorithmen haben das Minimum auf ihnen, das sie nicht im Login-Minimum für
Vergleichssortierung haben. Dies bedeutet, dass dies die minimale Timing-Signatur für diesen Vorgang ist. Hier drüben. Wir müssen zuerst das Array sortieren und dann das Element abspringen. Der Pop ist mit einem vorbei, weil es eine Konstante ist, er greift nur auf das erste Element der rechten. Also müssen wir uns das nicht einmal wirklich ansehen. Was wir uns ansehen, ist dies im Login, wir verleihen. Schauen Sie hier rüber. Und was ist die Timing-Signatur dieses Testens. Alles, was wir tun müssen, ist jedes einzelne Element zu berühren. Einmal müssen wir uns nur alles ansehen. Und wenn es größer ist, führen
wir nur eine konstante Operation durch, um unsere max Variable auf dieses größere Array zu setzen. Daher ist
diese Seite der Gleichung nur in, und jetzt können wir den Unterschied hier sehen. Dies wird in größeren Szenarien wesentlich schneller sein. Und ich sage wesentlich schneller. Sie werden in einer Sekunde sehen, wenn wir über den Zeitpunkt gehen, dies zu einem realen Beispiel zu setzen, das ist nicht, wissen
Sie, ist schlecht ist wie in Quadrat oder oder in die dritte oder faktorielle oder so etwas. Es wird nicht eine dieser Situationen sein, in denen man weiß, dass die Sonne ausbrennt oder
so etwas . Aber es wird eine Ineffizienz sein, die sich im Laufe der Zeit aufbauen und sicherstellen kann, dass Programm, Ah, ganz viel weniger skalierbar ist. Werfen wir einen Blick auf das. Also auf der linken Seite hier drüben haben wir unsere Schwiegerschaft wieder am Laufen, und wir sagen in dieser Situation, dass in wird etwas völlig
vernünftiges 100.000 wieder gleich sein , wenn wir Facebook benutzen oder die Seiten auf zum Beispiel, CNN, wie die verschiedenen Artikel gibt es 100.000 ist nicht so schlecht 100.000 ist ziemlich typisch heutige Welt, und so sind hier drin ist gleich 100.000. Was ist, wenn jede einzelne Operation 0,1 Millisekunden dauerte, was
sehr, sehr schnell ist und für eine Menge Timing richtig klingt? Ah, viele Operationen, die ungefähr richtig wären, wie lange es dauern sollte. Nun, in diesem hier drüben, was wir haben, ist, dass wir einen Raid-Out-Sort-Dot-Pop haben, also wird es ein Log-In sein, was bedeutet, dass es 100.000 Mal Log-basiert sein wird. Und denken Sie daran, wenn sie in diesem Kurs sind, wenn das Protokoll keine Basis hat, ist
es auch, denn so funktionieren Computer. Also, das ist Gesetz basiert auf zwei von 100.000, die uns 100.000 Log basierend zwei von 100.000 auf 16,6. Wenn Sie dies sehen möchten, nur Google Log-Basis zu Rechner und Sie können diese Zahl in und Sie werden sehen, dass 16.6 das Ergebnis davon
ist. Und was wir bekommen, wenn wir diese beiden zusammen multiplizieren, ist, dass wir 1,66 Millionen Operationen bekommen. Jetzt bewerben wir uns. Unser Timing ist eine Waffe, 2,1 Millisekunden. Jede dieser Operationen erhalten
wir 16.600 Millisekunden, was 16,6 Sekunden entspricht. Stellen Sie sich vor, Sie sind auf einem mobilen Gerät und diese Operation, was wir versuchen zu tun, ist, dass wir, wie, eine Suchanfrage, und wir wollen die größte in einer Suchanfrage finden. Warum sollte das hineingehen? Dürfen wir einen Algorithmus haben, der eine Punktzahl zuweist, wie relevant es für unsere Suche ist. Also haben wir jetzt eine Reihe von 100.000 Artikeln, und wir müssen nur den besten auswählen, um unseren Benutzer auf unserer App zu zeigen. Nun, um das zu tun, brauchen
wir ein Maximum. Wir müssen herausfinden, welcher Wert Welcher Artikel mit der maximalen Punktzahl für die Abfrage zurückkam. Also machen wir einfach einen Max, um dorthin zu gelangen. Nun, in dieser Situation, wenn Sie auf die Schaltfläche klicken, wird
es 16,6 Sekunden dauern, um die Abfrage zurück zu bekommen. Stellen Sie sich vor, Sie warten 16,6 Sekunden lang auf eine App. Stellen Sie sich vor, Sie gehen zu Google und suchen etwas und warten Sie 16 Sekunden, um es zu tun. Ich meine, ein Mississippi, zwei Mississippi,
drei, drei, Mississippi, den
ganzen Weg bis zu 16, nur um deine Suchanfrage jetzt auf der rechten Seite hier drüben zu bekommen, weil wir diese Version benutzt haben von Max haben wir jetzt gerade in gleich 100.000, was es keine Operation gibt, also entspricht 100.000. Das entspricht 100.000. Einfach, einfach, einfach. Dann nehmen wir die 100.000 und wir multiplizieren es wieder mit 0,1 Millisekunden und wir erhalten 1000 Millisekunden, das ist nur eine Sekunde. Das ist völlig vernünftig. Das ist eigentlich ziemlich schnell für viele heutige Bedingungen. Du gehst jetzt zu Google und suchst etwas. Es wird wahrscheinlich ungefähr ein oder zwei Sekunden dauern, bis
all diese Informationen angezeigt werden, und jetzt können Sie die Skalierbarkeit sehen. Dieser skaliert viel mehr als dieser. Dieser sieht aus wie ein gutes Stück Code. Wenn es kondensiert ist, kann
ich es lesen und herausfinden, was genau passiert. Aber in dieser Situation ist
dies tatsächlich eine Ineffizienz, die uns auf lange Sicht viel Zeit kosten wird. Also nur ein lustiges kleines Beispiel hier, das Ihnen zeigt, dass Sie Snippets codieren und wie eine einfache Änderung Ihr Programm tatsächlich beschleunigen
kann. Zu wissen, was? Die Timing-Signatur von etwas wie Punkt-Sortierung ist,
Ihr Programm zu beschleunigen es viel effizienter zu machen und den Endbenutzer Ah, ganz viel glücklicher zu machen.