DAVID MALAN: In Ordnung.
Das ist also CS50, und dies ist jetzt der Beginn der dritten Woche.
>> Also bis jetzt, haben wir wurde in C-Programme schreiben
dass schauen ein wenig so etwas wie dies hier.
Also haben wir ein paar bekam scharfe enthält an der Spitze.
Wir haben int, Haupt, nichtig und dann etwas zu tun, in der Mitte,
einige Stück Code innerhalb dieser Funktion.
Aber Schlüssel war die Tatsache, dass wir haben für nichtig zu sagen hier.
So nichtig, alle dieser Zeit legt fest, , dass dieses Programm, bei der Ausführung,
kann nur über ihren Namen laufen.
Sie können keine andere Wörter oder Zahlen nach den Namen des Programms, wenn
es läuft.
So zum Beispiel, wenn das Programm waren in einer Datei namens hallo zusammengestellt,
Sie tun können, ./hello, aber das ist es.
>> Der einzige Weg, dass man Input für dieses Programm
ist durch den Aufruf einer Funktion.
Zum Beispiel, was Funktions haben wir mit bisher gewesen
auf eine Eingabe von dem Benutzer zu erhalten?
>> ZIELGRUPPE: Get String.
DAVID MALAN: Um String zu erhalten, oder int erhalten, oder Sie andere gesehen haben,
auch wenn Sie sie noch nicht genutzt haben, wie bekommen lange, lange und dergleichen.
Aber nehmen wir an, dass wir tatsächlich starten wollen
Schreiben von Programmen, die wenig mehr sind vielseitig, und, ehrlich gesagt, ein wenig mehr
wie die Befehle, die Sie haben wurde immer, hoffentlich,
ein wenig daran gewöhnt,.
Wie cd Raum Dropbox.
Dies ist natürlich Änderungen Ihr Verzeichnis, unter der Annahme,
Sie John Harvard Hause sind Verzeichnis, um Ihren Dropbox-Ordner.
Unterdessen wird ein Befehl wie diesen erstellt ein neues Verzeichnis mit dem Namen pset2,
wie Sie vielleicht schon oder wird bald zum Problem stellte zwei.
Machen hallo, natürlich, ist ein Befehl dass baut ein Programm namens hallo
aus einer Datei namens hallo Punkt c.
Und in jeder von diesen Fälle, jetzt mussten wir
bieten ein Argument auf der so genannten Befehlszeile, die blinkende Eingabeaufforderung
so dass Make weiß, was zu bauen, und so dass mkdir weiß, was Ordner zu erstellen, zu
und so, dass CD kennt wo man hin will.
Aber bis jetzt halten wir sagen dass die Haupt, Ihr Standard-Funktion,
ein Hohlraum Ausdruck innerhalb dieser Klammern,
was bedeutet, dass es kann nicht alle Argumente.
>> Also ab heute, das, was wir tun werden
ist, werden wir beginnen Dinge wie diese Unterstützung auch.
In der Tat, in diesem Fall, der Sie in der Regel nicht manuell eingeben,
Eben ist das getan, für uns gibt es nicht
eine, sondern eine, zwei, drei zusätzliche Saiten nach dem Programm benannt
Klappern.
So, wie wir das erreichen?
>> Nun, ab heute, in den Fällen, wo wir wollen
die Eingabe über das liefern so genannte Befehlszeile
wir werden das Hinzufügen zu starten hier, was in yellow--
Ersetzen Leere mit int argc Komma String argv Klammer auf Klammer zu.
Jetzt ist das interessant für eine Reihe von Gründen.
Eins, es geht um uns zu schreiben Programme, die ein wenig mehr dynamisch sind.
Aber mehr zwingend, es wird sich zu öffnen
jetzt ein Gespräch, um Welche Arrays kann wirklich
verwendet werden, was eine Zeichenfolge ist wirklich unter der Haube,
bis nächste Woche, wenn wir anfangen Tauchen in noch tiefer, wie die Maschine
so dass alle von diesem Zeug Arbeit.
Aber jetzt wollen wir ziehen, vielleicht ein Bild.
>> Wenn Sie ein Programm schreiben mit Haupt erklärt
auf diese Weise, so dass Haupt zwei Argumente, ein int
und-- welche Datentyp ist das zweite Argument?
>> ZIELGRUPPE: Array.
DAVID MALAN: Array.
So sieht es aus auf den ersten Blick, wie es ein String, aber beachten Sie die eckigen Klammern.
Daran erinnern wir zuletzt eingeführt der Begriff eines Arrays.
Und Arrays eckige Klammern in einigen Kontexten.
Sie könnten den Platz nutzen Klammern in ein Array gehen
und erhalten ein bestimmtes Element, wie Halterung 0 oder 1 oder Halter Halterung 2.
Aber wir sahen, wenn auch nur kurz, letzte Woche, dass Sie auch
nutzen diese eckigen Klammern erklären die Größe eines Arrays,
wenn Sie im Voraus wissen, wie viele ints oder wie viele Strings oder was auch immer Sie
eigentlich wollen.
So stellt sich heraus, es gibt ein dritter Kontext hier
dass keine Zahl in der eckigen Klammern.
Wenn Sie angeben, wie ich hier, der Name so etwas wie argv,
Das ist nur eine andere Art von sagen Argument Vektor, der
ist eine andere andere Art zu sagen eine Reihe von Argumenten,
Klammer auf Klammer zu einfach bedeutet, dass Sie nicht unbedingt tun
im Voraus wissen, wie groß das Array sein wird,
aber Sie wissen, es geht um ein Array sein.
Also, wenn Sie nicht wissen, die Anzahl Sie legte es nicht gibt,
für offene Klammer Klammer zu bedeutet, dass argv ist kein String,
sondern ein Array von Strings.
So syntaktisch, wenn Sie zurück denke letzte Woche,
Es ist sehr ähnlich zu sagen so etwas wie int Alter offene Klammer,
und dann etwas später.
Was bedeutet dies aussehen?
Lassen Sie uns ein Bild tatsächlich zu zeichnen.
Also, wenn Sie dieses Programm mit Hauptlauf mit zwei Argumenten innerhalb definiert
dieser Klammern, die Sie im wesentlichen mindestens zwei Stücke
Speicher, Sie übergeben unter der Haube.
Eine, wie ich werde zieht wie dieses Rechtecks, wird sich arge aufgerufen werden.
Und so wie eine kurze Zusammenfassung, was ist der Datentyp der arge?
Es ist also ein int.
So eine Zahl wird in argc-- Umdrehungen gehen
heraus, die für die Zählung Argument steht.
Inzwischen habe ich argv als Array erstellt.
Und ich weiß wirklich nicht, wie lange es sein wird,
so für die heutigen Zwecke Punkt Punkt Punkt.
Es könnte von einiger Länge zu bekommen.
Aber ich habe hier abgebildete mindestens vier Rechtecke.
So argv ein Stück Erinnerung, dass Geschäfte String String String Punkt Punkt Punkt,
und argc ist nur ein Stück der Speicher für eine ganze Zahl ist.
>> So, jetzt lassen Sie uns ein wenig genauer.
Wenn, wenn ich Strings In diesem Array aufgerufen
argv, ich will bei ihnen zu bekommen individuell, genau wie letzte Woche,
wir werden Notation wie argv Halterung 0
das erste, was zu einer Reihe.
Argv Winkel 1 Um mit dem zweite Sache, und so weiter.
Der Schlüssel hier als wir sind immer noch 0 indexed-- wir sind immer noch das Zählen von 0.
So, jetzt wollen wir eigentlich etwas in diese.
Wenn ich ein Programm namens kompilieren Hallo von einer Datei namens hallo Punkt c,
und dann laufe ich dieses Programm mit Punkt Schrägstrich hallo,
was macht mein Computer, mein Laptop, aussehen wie unter der Haube
sobald ich laufen dot Schrägstrich hallo und drücken Sie Enter?
Nun, das ist vielleicht was wir beschreiben könnten
wie der Inhalt Ihrer Computer Speicher oder RAM-- Random Access Memory.
Mit anderen Worten, der Computer, irgendwie magisch für Sie,
stellt die Nummer 1 in arge, AKA argcount, und es setzt buchstäblich die Zeichenfolge
./hello in argv Halterung 0.
Ich habe keine Ahnung, ehrlich gesagt, was ist in argv Winkel 1 oder 2 oder 3,
weil, wenn der Benutzer nicht eingegeben nichts außer ./hello,
wir gehen davon aus, dass diese sind am ehesten Müll Werte,
so zu sprechen.
Diese Stücke von Speicher existiert, aber es ist nicht an uns,
, sie zu betrachten, weil die argcount nur einer ist.
>> Nun, mittlerweile, wenn ich Schreiben Sie ein anderes Programm laufen,
cd, die mehr richtig ist ein Befehl, in Ihrer blinkt prompt-- cd Raum
Dropbox--, wenn ich, dass effektiv, wenn das CD-Programm ausgeführt wird, arge,
innerhalb des Speichers meines Computers, ist für die kürzeste zweite die Nummer 2.
Und dann argv Halterung o hat cd, argv Winkel 1 hat Dropbox,
und dann natürlich die Befehls abgeschlossen ist, so dass alle von diesem Speicher
Wesentlichen geht weg und wird für etwas anderes verwendet.
Und das ist, warum ich sage, nur ein Bruchteil einer Sekunde.
>> Inzwischen, wenn wir tun, mkdir pset2, sieht das Bild fast das gleiche,
aber mit verschiedenen Saiten im Inneren argv.
Wenn ich das tue Klang Strich hallo hallo Punkt c, gleiche Idee.
Mehr Zeug in für gefüllte argv und argc, natürlich, ist 4.
In anderen Worten, auch wenn dieses Array
könnte dot dot dot werden, von denen einige variabler Länge, sozusagen
Sie wissen immer, wo das Ende davon ist, weil arge wird Ihnen sagen,
An welchem ​​Punkt haben Sie zu stoppen Blick auf Elemente in argv.
Sie können nur an vier aussehen insgesamt in diesem Fall.
>> Also lassen Sie uns nun einen Blick auf, vielleicht ein einfaches Programm.
Eine, die nur sagt hallo , jemanden wie Zamyla.
Also ich behaupte, werde ich ein Programm schreiben in nur einem Augenblick, über die ich tun könnte,
./hello Raum Zamyla, und dann will ich mein Programm zu drucken etwas
super-einfache wie "hallo, Zamyla."
Jetzt in der Vergangenheit haben wir getstring benutzt habe.
Dies in der Vergangenheit, selbst wenn Sie sind neu in die Programmierung,
Chancen könnten Sie schüren ein Programm, das verwendet getstring
und verwendet dann printf um hallo zu sagen Zamyla.
Aber wir wollen nicht zu verwenden getstring diese Zeit.
Lassen Sie mich stattdessen in die Appliant gehen und beinhalten Standard-I O h dot.
Lassen Sie mich auch CS50 dot h.
Jetzt int main, und jetzt bin ich nicht heute tun nichtig.
Stattdessen werde ich int argc tun String argv Klammer auf Klammer zu,
nicht eine Zahl angeben.
Und jetzt ist mein sogenanntes zu tun.
Was ich jetzt tun ist, ich bin Gehen, ein bisschen wie ein Sprung des Glaubens zu tun,
Ich gehe davon aus, dass die Benutzer- werde dieses Programm richtig zu verwenden,
und ich bin einfach da, um tun printf hallo, sn%.
Also nichts Neues.
Aber ich möchte jetzt setzen, was das Wort Benutzertypen nach den Namen des Programms.
Also, wenn ich ./hello Raum Zamyla, ich wollen irgendwie programmatisch Zugang
zitieren unquote "Zamyla." so dass ich kann in mein Argument-Vektor zu gehen,
mein Array von Strings, und wenn der Befehl, wieder war ./hello Raum Zamyla,
welche Zahl will ich mich in argv hier setzen?
ZIELGRUPPE: 1.
DAVID MALAN: 1, weil Halterung 0 stellt sich heraus,
wird den sein Programmnamen, wie wir sahen.
So Winkel 1 ist das erste Wort daß ich, der Nutzer, getippt.
Ich werde weitermachen und speichern Sie diese.
Ich werde in meinen Ordner gehen wo ich diese Datei platziert.
Ich werde tun, machen hallo 3.
Comp IO ist OK.
./hello Zamyla ein.
Was habe ich falsch gemacht?
Ich war überrascht mich für einen Moment da.
Was habe ich falsch gemacht?
>> ZIELGRUPPE: Name.
>> DAVID MALAN: Die Datei tatsächlich aufgerufen hello3.c.
Und das tat ich, dass gerade für Konsistenz, denn wir haben
hatte hello.c in der Vergangenheit in der Online-Code.
Also lassen Sie dieses Problem beheben ./hello Halterung Strich 3 Zamyla.
Eingeben.
Und jetzt haben wir hallo, Zamyla.
Inzwischen kann ich das ändern Rob sein, oder wirklich ein anderer Begriff.
>> Aber betrachten wir eine Ecke Fall.
Was können Sie erwarten, wird passieren, wenn Ich glaube nicht, jemand Name Typ überhaupt?
>> ZIELGRUPPE: Fehler.
>> DAVID MALAN: Ein Fehler von einer Art, vielleicht.
Mal sehen.
Eingeben.
NULL.
So printf ist tatsächlich in der ein wenig Schutz von uns
hier, und buchstäblich Druck geöffnet paren null, aber noch schlimmer Dinge passieren können.
Und nur um zu zeigen, etwas, das Sie unbedingt
sollte es nicht tun, gehen wir in hier und starten Sie stochern.
Oder?
Wenn ich weiß, dass das Bild in Speicher ist im Wesentlichen dazu
argv Winkel 1 hat Zamyla, argv Halterung 0 hat ./hello oder ./hello-3.
Was ist in der Halterung 2?
So kann ich das beantworten Frage mich, oder?
Ich kann einfach ändern Sie die 1 bis 2.
Ich kann jetzt neu kompilieren hallo 3, ./hello3 wir vergrößern und drücken Sie Enter.
Whoops.
Keine Anführungszeichen.
Interessant.
Also das ist ganz cool, sehen, was sonst noch in hier.
>> So was ist im Inneren von meinem Laptop?
Retten wir es mit Halterung 3.
Machen hello3, ./hello-3.
Neugierig.
Und nun lassen Sie uns wirklich bold-- 50.
Also das ist wirklich tief tauchen in den Speicher meines Computers.
50 Indizes in.
So machen hallo 3 ./hello-3.
Neugierig.
Alles klar, jetzt bin ich nur gehen leichtsinnig zu werden.
Lassen Sie uns bis 5000 zu gehen.
In Ordnung.
Also lassen Sie mich neu zu kompilieren.
Machen hello3, ./hello-3.
Ok.
Nun, einige von euch, es könnte sein eine Glühbirne geht aus.
Wie viele von euch haben Diese Nachricht schon mal gesehen?
Ok.
Ja, warum?
>> Quoten sind-- und es gibt verschiedene Dinge, die diese verursachen können,
und klar sind Sie in guter company-- wir haben eindeutig
verursacht, was heißt einen Segmentation Fault.
Und lange Geschichte kurz für heute, ich haben ein Speichersegment berührt
dass ich nicht zu haben.
Wo ein Segment bedeutet nur ein Stück des Speichers, sollte ich nicht zu haben.
Jetzt ist der Computer garantiert, dass, wenn ich laufen ./helloZamyla dass ich argv berühren
sein Halterung 0 und argv Winkel 1.
Aber argc ist der Wert 2, bedeutet, dass ich nur allowed-- Es ist eine Art der Ehre
system-- zu berühren Halterung 0 und 1 Halterung.
Wenn ich etwas weiter gehen, gibt es absolut gehen zu Speicher da sein.
Meine RAM körperlich vorhanden im Computer.
Aber wer weiß, was da ist?
In der Tat, ich bin mit mehreren Programme auf einmal.
Ich hätte seen--, wenn ich nicht tun dies auf der Appliant
aber auf meinem Mac oder PC-- ich vielleicht gesehen den Inhalt einer E-Mail.
Ich könnte einen Augenblick gesehen haben Nachricht Ich habe vor kurzem gesendet.
Alles, was sein könnte anhalt um im Speicher
konnte durch die zugegriffen wurde, Diese willkürliche eckige Klammer-Notation.
Oder, schlimmer noch, haben Sie vielleicht gefunden eines meiner Passwörter
dass ich vor kurzem in, getippt, dass ein Programm hatte im Speicher abgelegt, so dass
zu mir zu authentifizieren und dann nur irgendwie ließ es
im RAM, bis ich das Programm beenden.
>> Und tatsächlich ist dies einer der die Gefahr und die Befugnisse eines
der Verwendung einer Sprache wie C Sie haben uneingeschränkten Zugang
auf den gesamten Inhalt Arbeitsspeicher eines Programms,
und welche bösen Jungs in diesen cases-- auch tun
vor allem, wenn wir bekommen, um Web-Programmierung
gegen Ende des Semesters, werden wir besuchen Sie diese topic-- wird herumzustochern,
möglicherweise ist jemand Computers Speicher und finden Sie so kuriosen Dingen
wie wir sahen es.
Oder noch schlimmer, Passwörter, dass er oder sie können dann, schlechte Dinge zu tun.
>> So klar, ich sollte das nicht getan haben, weil seltsame Dinge geschehen.
In der Tat, das ist ein Programm abstürzt.
Dies wäre das Äquivalent sein von Mac OS oder Windows
ein Programmfenster einfach verschwinden.
Ein unerwarteter Fehler ist aufgetreten.
In der Kommandozeilenumgebung sehen wir so etwas wie dieses.
Aber das ist, warum, ist, ich bin einfach nur zu berühren Speicher, der nicht zu mir gehört.
>> Also lassen Sie uns zu verteidigen gegen diese ein etwas in einer anderen Weise
Dazu suchen Sie in diesem Programm hier.
So wiederum das Skelett dass wir earlier-- sah
und ich habe diese Zeit int hervorgehoben.
Und die ganze Zeit hat Haupt tatsächlich zurück Wert.
Auch wenn in den meisten unserer Vorlesung Beispiele, die wir noch nie einmal verwendet
alles in Haupt zurückzukehren.
Wir schreiben nur printf Nähe geschweifte Klammer und das ist es.
Aber kostenlos, was die Compiler getan für Sie,
effektiv, kehrt zurück 0 für Sie.
Schaltet out-- und es ist ein wenig counterintuitive-- dass 0 ist gut.
Es bedeutet nicht per se falsch.
0 ist gut, und alle nicht-0 Wert, die Welt hat sich entschieden,
einen Fehler zu bedeuten.
Also, wenn Sie jemals durcheinander haben etwas auf Ihrem Computer,
oder ein Programm gerade gestorben ist von Ihnen und Sie einige fehlerhafte Fenster bekommen haben
auf dem Bildschirm, sagen Fehler 49 oder negativen Fehler 23--
einige, die scheinbar willkürliche value-- ist weil ein Programmierer hartcodierte
ein Wert wie negativ oder positiv 49 23, jede Zahl darstellen, wage zu behaupten,
von 4 Milliarden möglichen Dinge das gehen könnte falsch in einem Programm.
>> Also, wie kann ich nehmen Vorteil dieser selbst?
Nun, lassen Sie mich öffnen, ein Programm dass ich im Voraus geschrieben,
und stoßen rund um Online genannt hallo 4.
Und es ist fast identisch, nur dass seine bekam ein wenig Fehlerprüfung.
In diesem Fall habe ich wieder erklärt Haupt wie man zwei Argumente,
aber dieses Mal, auf der Linie 17, Bekanntmachung Ich mache ein bisschen eine Plausibilitätsprüfung.
Ich mache Sie darauf, dass argc gleich gleich 2.
Denn wenn es, dass bedeutet, ich kann sicher
berühren nicht nur Klammer 0, aber Winkel 1.
Und ich voran gehen und ausdrucken, in diesem Fall Zamyla oder Rob
oder was auch immer Wort, das ich getippt.
Und jetzt, nur um ein wenig mehr richtig,
Ich werde ausdrücklich zurück 0 zu bedeuten, alles ist gut.
Nichts Schlimmes passiert.
>> Aber durch Konvention, ich bin zu gehen 1 zurückzukehren, oder ehrlich gesagt alle nicht-0-Wert,
wenn etwas schief ging.
Nun wird der Benutzer nicht zu gehen wirklich merken, was los ist.
In der Tat, wenn ich in dieses Verzeichnis zu gehen, wir vergrößern und dies machen hallo 4,
./hello-4 Zamyla verhält sich, als ich erwarte.
Aber wenn ich stattdessen nicht eingeben nichts, nichts scheint zu geschehen,
aber es stürzt nicht ab.
Und wenn ich statt etwas zu tun wie Rob ist ein Proctor
in Thayer-- Sharing beliebige Informationen.
Aber beachten Sie, argv 1, 2, 3, 4, und 5 sollte jetzt im Speicher vorhanden sind.
Auch das ist nicht das, was mein Programm erwartet,
denn ich habe überprüft, ob argc gleich gleich 2 ist oder nicht.
Also ich bin jetzt der Verteidigung gegen diese.
>> Jetzt, da eine Seite, die wir programmer-- oder vielmehr wir die users--
nie sehen, dass 0 oder 1, aber mit ein Tool namens Debugger oder andere Werkzeuge,
wie wir sehen, bevor lang, Sie der Programmierer
kann tatsächlich sehen, was sein könnte falsch läuft innerhalb des Programms.
>> Also, irgendwelche Fragen zu arge?
Ja.
>> ZIELGRUPPE: Ich habe gesehen, wo sie haben nicht den Charakter gehabt, [unverständlich]
sagte nur String-Sterne-d, wie Charakter Sternchen Komma.
Sind sie gleichwertig hier?
>> DAVID MALAN: Sie sind.
Die Frage ist also, haben Sie gelegentlich gesehen Programme
wie diese, die das nicht tun sagen String argv Halterung
sondern etwas zu sagen wie char argv Sterne-Halterung.
Und es gibt noch weitere Varianten, die man zu sehen bekommt.
Sie sind in der Tat gleichwertig.
Denn jetzt haben wir diese Art Stützräder
auf in Form von String in der CS50 Bibliothek, aber in etwas mehr als einer Woche
oder so werden wir, dass entfernen Behinderung und eigentlich ganz
schauen, was der char und der Stern sind, und wie jene betreffen Speicher
Darstellung im allgemeinen.
Also werden wir darauf zurückkommen.
>> Weitere Fragen zu unseren argv oder arge?
Ja.
ZIELGRUPPE: Warum hat es zurück Ein Fehler [unverständlich]?
DAVID MALAN: Warum hat es einen Fehler zurück only-- oh!
In dem vorherigen Fall, wenn wir wurden rund um futzing mit Memory,
warum hat es nur einen Fehler zurück wenn ich wirklich eine große Zahl eingetippt?
Kurze Antwort ist, dass wir einfach nur Glück.
Allgemein gesagt wird ein Computer reserviert Speicher in Blöcken,
und es gab mir einen ausreichend großen Teil, dass Ich weg, ohne bemerkt zu werden,
der Berührung Winkel 2, Halterung 3, Klammer 50, aber sobald ich geschoben
mein Glück, über das ich ging Grenzen der Teil des Speichers
das Betriebssystem mir gegeben hatte.
Und das ist, wenn es geklemmt nach unten und sagte, nein.
Segmentierung Fehler.
Ja.
>> ZIELGRUPPE: Wie funktioniert der Computer kennen den Wert der arge?
>> DAVID MALAN: Wie funktioniert der Computer kennen den Wert der arge?
Wenn Sie ein Programm ausführen, das Programm, von der Natur der blinkenden Eingabeaufforderung
wird das Array von geben Worte, die eingegeben wurden
an der Eingabeaufforderung, war, dass an der Eingabeaufforderung eingegeben.
Und so ist es Ihr Betriebs System, das im Wesentlichen
füllt Haupt Argumente für Sie.
Also das ist eine der Dienstleistungen, dass Sie, irgendwie heimlich
unter der Motorhaube ein Betriebssystem.
Weitere Fragen?
Ja.
>> ZIELGRUPPE: Was Core-Dump das?
DAVID MALAN: Was Core-Dump das?
Also das ist eine gute Frage.
Und lassen Sie mich wieder in dieses Verzeichnis hier.
Und Sie werden feststellen, dass Ich habe eine neue Datei gibt.
Es ist in der Tat genannten Kern, und es ist tatsächlich in der Regel eine anständige Größe Datei.
Das ist im wesentlichen ein Schnappschuss der Inhalt des Arbeitsspeichers mein Programm
oder RAM, wenn es abgestürzt ist.
Und das wird nützlich sein, möglicherweise, diagnostisch,
wenn wir in einer zukünftigen Vortrag sprechen und Abschnitt über Debugging,
da kann man eigentlich tun, die Äquivalent eines digitalen Autopsie
auf diese Datei, um zu helfen herauszufinden, was Sie falsch gemacht haben in Ihrem Programm.
Ja.
>> ZIELGRUPPE: Ist arge einen Befehl in selbst, oder kann man es etwas nennen?
>> DAVID MALAN: Gute Frage.
Ist argc einen Befehl in sich selbst, oder kann man es nennen, was?
Es ist definitiv nicht ein Befehl.
Es ist einfach eine Variable Namen oder den Namen eines Arguments,
und so absolut wir könnte diese foo nennen,
wir diese Bar, die dazu neigen, rufen auf die Go-to Worten, dass ein Computer sein
Wissenschaftler geht.
Aber durch Konvention, verwenden wir argc und argv.
Aber das ist nur ein Mensch Konvention, nichts mehr.
In Ordnung.
So stellt sich heraus, ich habe erzählt ein bisschen von einem weißen lie--
und ehrlich gesagt, in der Zukunft, werden Sie sehen, wir haben erzählt, andere weiße Lügen.
Aber für jetzt, wir gehen zu schälen zurück eine davon.
In diesem Fall hier, wenn ich vorher lief ein Programm wie ./hello oder ./hello-3
Zamyla, die Inhalte hatten wir meinen Speicher Computer sucht etwa wie
Diese.
Aber daran erinnern, was ein String ist.
Was haben wir vor einer Woche sagen, was für ein String ist eigentlich unter der Haube?
ZIELGRUPPE: Array von Zeichen.
DAVID MALAN: Es ist eine Array von Zeichen, oder?
So könnten wir haben eine Reihe von Saiten, aber wiederum eine Zeichenfolge
ein Array von Zeichen.
Also, wenn ich sein wollen wirklich anal, als ich dieses Bild zu zeichnen,
Ich sollte wirklich werden Zeichnung es ein wenig mehr wie diese,
wobei in jeder von diesen Indizes meiner argv Array,
es ist selbst eine ganze Reihe daß selbst in einem Array.
Und nun die Notlüge wir erzählen heute
ist, dass das Bild nicht sieht ganz so aus.
In der Tat, sind die kleinen Quadrate typischerweise außerhalb der großen Rechtecke
da.
Aber wir werden darauf zurückkommen, bevor lang.
Aber das ist ./hello Backslash 0, nämlich die, dass Sonderzeichen
grenzt das Ende einer Zeichenkette, und wir haben ein anderes nach erhielt
Name des Zamyla.
Also, was bedeutet das?
>> Nun, lassen Sie mich gehen Sie vor und eröffnen zwei weitere Beispiele
die online verfügbar sind.
Eines heißt argv1.c und das andere ist argv2.
Es ist ein super-einfaches Programm, das unterscheidet sich von früheren Programmen
, dass ich jetzt mit argc und argv hier oben.
Und jetzt bin ich die Integration mit einer for-Schleife in Zeile 18, von i = 0 auf bis zu argc.
Und was soll ich tun mit dieser Zeile Code hier?
Auf Englisch.
Dies zeigt offensichtlich Verwendung von argc.
Aber in Englisch, was macht es tun, wenn ich dieses Programm?
Ja?
>> ZIELGRUPPE: Es wird drucken Sie Ihre Bildschirm so oft wie Sie wollen.
DAVID MALAN: Genau.
Also was auch immer Worte, die ich Geben Sie bei der Eingabeaufforderung, es ist
gehen zu erbrechen sie mich an eine pro Zeile.
Also lassen Sie uns gehen Sie vor und tun dies.
Lassen Sie mich in meinem Verzeichnis gehen und tun, machen argv1 ./argv1.
Und nun lassen Sie uns es einfach halten.
Lassen Sie uns zunächst nichts.
Es tat ausdrucken eine Sache, und Das ist in der Tat der Name des Programms,
denn das ist in der Halterung 0.
Wenn ich jetzt sagen, foo, wird es zu tun die beiden, und wenn ich sage foo bar,
es geht um diese drei Dinge zu sagen.
Nun, das ist ein wenig interessant, vielleicht.
Aber erinnern daran, dass argv ist ein Array von Zeichenketten,
aber ein String ist ein Array von Zeichen, so können wir die Dinge nehmen eine Kerbe
und anzuwenden, die Grund Logik und machen Code,
sieht ein wenig mehr kryptisch, zugegebenermaßen.
Sondern mit einer verschachtelten Schleife, so etwas wie
zu dem, was Sie vielleicht von Mario erinnern, Zum Beispiel, wenn Sie tat es auf diese Weise.
>> So, jetzt auf der Linie 19 bemerkt, ich bin wieder Iteration über meine Argumente,
von 0 auf bis zu argc.
Und jetzt im Einklang 21-- Ich bin Kreditaufnahme einen Trick von den letzten week--
Ich bin Überprüfung, was ist der Länge von argv Halterung i.
Ich Speicherung dieser Antwort in n.
Und dann bin ich auf die Integration von j bis n, wobei j auf 0 initialisiert.
Also, Konvention zum Zählen.
Sobald Sie die ich benutzt habe, wenn Sie ein Nested Loop, die Sie nicht verwenden kann ich wieder,
sonst wirst du Klamotten, potentiell, der Wert außerhalb der inneren Schleife.
Also ich bin mit j durch Konvention.
Wir könnten k verwenden.
Wenn Sie mehr als k, werden Sie wahrscheinlich haben zu viel Verschachtelung, in der Regel.
Aber jetzt, bemerkt mein printf Linie ist etwas anders.
Ich bin nicht Druck% s, ich bin Druck% C, was natürlich
ist ein Platzhalter für ein Zeichen.
>> Und nun bemerken diese Syntax.
Neu.
Wir haben es nicht gesehen.
Aber logisch, nur bedeutet dies, bekommen die i-te Zeichenfolge in argv
und nutzen Sie die j-te, was?
ZIELGRUPPE: Charakter.
DAVID MALAN: Zeichen in dieser Zeichenkette.
So durch eckige Klammern gefolgt von eckigen Klammern,
das ist Tauchen ersten in Strings argv ist,
und dann die zweite eckigen Klammern mit j
ist das Tauchen in die Charaktere der dass bestimmte Zeichenfolge in argv.
Und dann, nur für eine gute Maßnahme, Ich drucke eine neue Linie hier.
So, jetzt lassen Sie mich gehen Sie vor und öffnen bis ein etwas größeres Fenster
so können wir dies in Aktion zu sehen.
Lassen Sie mich in diesem Ordner zu gehen.
Und jetzt tun machen argv-2-- whoops-- argv-2 zu machen, ./argv 2.
Eingeben.
Und es ist ein wenig schwer vertikal zu lesen,
aber das ist in der Tat der Name des Programm, gefolgt von einer Leerzeile.
Nun lassen Sie mich gehen Sie vor und tun foo.
Ähnlich schwer zu lesen, aber es ist Tat Druck ein Zeichen pro Zeile.
Und wenn ich bar zu tun, ist es jetzt drucken Sie diese Zeile für Zeile.
Also das Essen zum Mitnehmen ist hier nicht so sehr dass, wow, an diesem neuen Trick ordentlich aussehen
wo Sie die Inhalte bekommen können der eines Arrays bestimmte Zeichen,
sondern vielmehr, wie wir nehmen diese Grund Ideen wie die Indizierung in ein Array,
und dann in einem Indizierungs Array, das in diesem Array war,
und nur die Anwendung der gleichen Ideen etwas anspruchsvollere Beispiele.
Aber die Grundlagen wirklich nicht geändert, auch seit letzter Woche.
>> Jetzt ist diese Art von zeitnahen, in, dass, sich erinnern, in Woche Null
Wir spielten mit einem Telefonbuch wie dieses.
Und obwohl dies offensichtlich physische Stücke von Papier,
Sie können Art denken ein Telefonbuch als Array.
Sicher, wenn Sie waren neu zu implementieren Diese Stücke sind diese Stücke von Papier
in einem Computer, wahrscheinlich Sie etwas verwenden würden
wie ein Array an alle, die zu speichern Namen und Nummern von einer ganzen Weg
bis Z. Das ist schön, weil es ermöglicht uns die Möglichkeit,
vielleicht zu überlegen, wie Sie vielleicht tatsächlich so etwas umzusetzen.
Wie bei einer Reihe von Türen hier.
Also, wenn ich could-- wir brauchen eine freiwillig auf bis zu kommen.
Mal sehen.
Ein unbekanntes Gesicht vielleicht, unbekanntes Gesicht vielleicht.
Wie wäre es in orange?
Hier.
Orange Hemd, kommen Sie auf.
>> Lassen Sie uns jetzt voran gehen und sich bewegen Diese Türen zur Seite,
bewegen diese aus dem Weg für einen Moment.
Wie heißen Sie?
>> AJAY:
>> DAVID MALAN: Ajay.
David.
Freut mich, dich kennenzulernen.
In Ordnung.
So hinter diesen sechs haben wir Türen digital auf der screen--
oder vielmehr sieben Türen auf der screen-- eine ganze Reihe von Zahlen.
Und ich habe ihr nichts gesagt in advance-- vereinbart?
AJAY: Nichts im Voraus.
DAVID MALAN: Alles was ich will, was Sie tun Jetzt ist es für mich zu finden, und für uns,
wirklich, die Zahl 50, einen Schritt zu einer Zeit.
>> AJAY: Zahl 50?
>> DAVID MALAN: Die Zahl 50.
Und man kann zeigen, was Hinter jeder dieser Türen
durch einfaches Berühren mit dem Finger.
Verdammt. [Gelächter]
>> [Applaus]
>> Sehr gut gemacht.
Ok.
Wir haben ein schönes Geschenk Preis für Sie hier.
Ihre Auswahl der Filme, die wir letzte Woche diskutiert.
>> AJAY: Oh, Mann.
Oh, ich habe noch nie gesehen, Spaceballs.
>> DAVID MALAN: Spaceballs.
In Ordnung.
So halten nur auf einen Augenblick.
How-- machen wir diese ein lehrbar moment--
Wie haben Sie von gehen Suche nach der Nummer 50?
AJAY: Ich habe zufällig.
DAVID MALAN: Sie wählten zufällig und hatte Glück.
AJAY: Ja.
DAVID MALAN: OK.
Ausgezeichnet.
So, jetzt musste man nicht Glück bekommen, was sonst
könnte hinter diesen Türen geschehen?
Also, wenn ich weitermachen und zeigen diese Zahlen hier
sie tatsächlich sind in zufälliger Reihenfolge.
Und das Beste, das Sie haben könnten, getan, ehrlich gesagt, ist von letztlich
im schlimmsten Fall, Prüfen sie alle.
Also du hast super-glücklich, die ist nicht, was wir hätten einen Algorithmus nennen.
Ja, Glückwunsch.
Aber jetzt let's-- Humor mich, wenn Sie.
Lassen Sie uns auf dieser Registerkarte finden Sie hier.
Und hier sind die Zahlen in klar was scheint, eine zufällige Ordnung,
und sie waren.
Aber jetzt, wenn ich stattdessen Anspruch dass hinter diesen Türen
sind Zahlen, die sortiert werden.
Das Ziel ist es nun, auch finden Sie uns die Nummer 50.
Aber tun Sie es algorithmisch und sagen uns, wie Sie darüber gehst.
Und wenn Sie es finden, halten Sie den Film.
Sie finden es nicht, es wird Ihnen zurück.
AJAY: So werde ich, um die Enden zu überprüfen erstens, wenn bestimmen there's--
[Lachen und Beifall]
DAVID MALAN: Hier gehen Sie.
Werfen wir einen Blick auf eine von Ajay Vorgänger,
Sean, der nicht ganz so glücklich war.
OK, also Ihre Aufgabe hier, Sean, ist die folgende.
Ich habe hinter diesen versteckt Türen die Zahl sieben,
aber versteckt in einige dieser Türen ebenso sind andere nicht-negative Zahlen.
Und Ihr Ziel ist es, daran zu denken obere Reihe von Zahlen nur als ein Array.
Wir sind nur eine Folge von Stücken Papier mit Zahlen hinter ihnen.
Und Ihr Ziel ist, nur mit der Spitze Array hier finden mir die Nummer sieben.
Und wir werden dann werde Kritik wie Sie es tun.
Finden Sie uns die Nummer sieben, bitte.
Nein.
5, 19, 13.
Es ist nicht eine Fangfrage.
1.
An dieser Stelle Ihre Punktzahl ist nicht sehr gut, so könnte man genauso gut weitermachen.
3.
Weitergehen.
Ehrlich gesagt, kann ich nicht helfen, aber frage mich, was du auch nur darüber nachzudenken.
>> Sean: Ich kann nur aus der obersten Reihe zu nehmen.
DAVID MALAN: Nur der oberen Reihe.
Sie haben also drei links bekam.
So finden Sie mich 7.
>> [PUBLIKUM SCHREIT Vorschläge]
Also diese beiden waren erstaunlich aus sehr unterschiedlichen Gründen.
Also das ist, wo wir vor einem Augenblick aufgehört,
und der Schlüssel hier Einblick wurde diese Türen hatte Nummern
hinter ihnen, die sortiert wurden, die ideale Mitnehmen, für die ist, dass Sie tun können
bei grundsätzlich besser Diese zweite example--
und in der Tat war, dass Seans ersten Versuch mit Zufallszahlen
ebenso before-- aber sobald da diese Zahlen geordnet,
ähnlich wie das Telefonbuch, was kann man natürlich tun?
Oder wie kann man dieses Wissen nutzen?
Ja.
>> ZIELGRUPPE: Sie gehen auf halbem Weg [unverständlich].
DAVID MALAN: Ja.
Genau.
So Ajay anfängliche Impuls war , um die Enden zu überprüfen, soweit ich mich erinnere,
und dann werden wir eine Art Fertig das Beispiel schnell.
Aber wenn wir begonnen, diese mehr zu tun methodisch in diese Richtung,
jedoch ausgehend etwa in der Mitte, weil sie sortiert sind,
sobald wir zeigen die Nummer 16 haben wir daher wissen--
und lassen Sie uns genau das tun wir dass-- daher wissen, dass 50, in der heutigen Fall
hat zu nach rechts sein.
So wie in Woche null, wenn wir riss das Telefonbuch in der Hälfte
und warf die Hälfte der Problem weg, dieselbe Idee hier.
Wir können diesen Halb werfen des Problems entfernt.
Und wahrscheinlich das, was Sie könnte algorithmisch zu tun,
wenn Sie wissen, dass 50 sein muss auf der rechten Seite, wenn es überall
ist zu versuchen, dort, in der Mitte der verbleibenden Türen.
Natürlich 50 höher als 42, so können wir
werfen diese Rest Quartal des Problems entfernt,
und schließlich zu identifizieren so etwas wie 50.
Aber so, wie mit der Telefonbuch, diese Zahlen
wurden uns bereits gegeben sortierter Reihenfolge, die uns verlässt
mit der Frage, wie wollen Sie Dinge in Ordnung sortiert?
Und, ehrlich gesagt, zu welchem ​​Preis?
Es ist eine Sache zu sein übergab das Telefonbuch
und dann beeindrucken Sie Ihre Freunde von der Suche nach eine Telefonnummer wirklich schnell, oder?
Reißen 32 Seiten aus, um eine zu finden Person von 4 Milliarden Seiten,
wir sagten, war eine extreme Beispiel.
Aber wie viel Zeit hat es gedauert, Verizon, dass Telefonbuch sortieren?
Wie viel Zeit hat es gedauert, uns , diese sieben Zahlen sortieren?
Das ist eine Frage, die wir bisher völlig ignoriert.
>> Also lassen Sie uns die Antwort auf diese Frage ist jetzt.
Und wir jetzt sind alle aus Filmen, aber wir haben einige Stress-Bälle.
Wenn, sagen wir, acht Freiwilligen hätte nichts dagegen, bei uns hier oben?
Lassen Sie uns weitermachen und tun, wie etwa die vier von euch, drei von Ihnen hier?
Holen Sie sich ein paar neue Gesichter.
Und die vier von euch dort?
Und now-- uns nicht Bias lassen hier-- und Nummer acht hier am Ende.
Komm auf.
In Ordnung.
Also, was wir hier für haben jeder von euch ist eine Zahl.
Wenn Sie möchten, zu gehen vor, nehmen Sie diese Nummer.
Wie heißen Sie?
>> ARTIE: Artie.
>> DAVID MALAN: Artie, okay.
Sie sind die Nummer 1 ist.
>> AMIN: Amin.
DAVID MALAN: Amin.
David.
Sie sind die Nummer 2 ist.
Und gehen Sie vor, wie ich die Hand Sie die Papierblätter,
Linie selbst sich vor der Musik steht in der gleichen Reihenfolge wie oben.
>> ANDY: Hallo, Andy.
>> DAVID MALAN: Andy, es ist schön, dich zu sehen.
Zahl 3 ist.
>> JACOB: Jacob.
>> DAVID MALAN: Jacob, Nummer 4.
Willkommen an Bord.
GRANT: Grant.
DAVID MALAN: Grant.
Number 5.
>> ALANNA: Alanna.
>> DAVID MALAN: Alanna, Zahl 6.
>> FRANCES: Frances.
DAVID MALAN: Frances, Zahl 7.
Und?
>> Rachel: Rachel.
>> DAVID MALAN: Rachel, Nummer 8.
In Ordnung.
Gehen Sie weiter und lassen Sie sich in dieser Reihenfolge.
Lassen Sie mich einen verbleibenden Musik stehen an Ort und Stelle.
Wo sehen Sie einen Stand?
Ok.
Gehen Sie voran und setzen Sie Ihre Zahlen wo das Publikum sie sehen werden,
den Notenständer nach außen zeigt.
Und hoffentlich unseren ersten Plausibilitätsprüfung hier-- 4, 2, 6.
Oh-oh.
Warten Sie eine Minute.
Wir haben nicht eine 8.
Ich muss dich aus zu vertreiben das Beispiel irgendwie.
Nein.
Nein, das ist OK.
Mal sehen.
Wir können dies tun.
Stehen zu.
Dort gehen wir.
Richtig.
In Ordnung.
So, jetzt haben wir 8, 1, 3 7, 5.
Ok.
Ausgezeichnet.
>> So ist die Frage bei der Hand ist, bei welche Kosten und über welche Methode,
können wir diese Zahlen tatsächlich hier zu sortieren so dass wir nach hinten arbeiten Art,
schließlich und decide-- ist es wirklich beeindruckend, ist es wirklich effizient,
dass ich teilen kann und erobern ein Telefonbuch?
Ist es wirklich effizient, dass Ich kann teilen und erobern
diese digitalen Stücke Papier auf dem Brett,
wenn es vielleicht wird uns kosten Vermögen in der Zeit oder Energie oder CPU-Zyklen
tatsächlich unsere Daten bekommen in etwas sortierter Reihenfolge?
Also lassen Sie uns diese Frage stellen.
>> Also zunächst einmal, sind diese Zahlen in so ziemlich zufälliger Reihenfolge,
und ich werde vorschlagen einen Algorithmus oder Verfahren
durch die wir diese Leute zu sortieren.
Ich werde zu nähern Diese hübsche naiv.
Und ich werde, zu erkennen, dass es eine Art viel für mich
meiner Meinung nach um die Umwicklung gesamten Daten auf einmal setzen.
Aber wissen Sie was?
Ich werde einige machen sehr einfache Grenzkorrekturen.
4 und 2 sind nicht in Ordnung, wenn die Ziel ist es, vom 1. auf bis zu 8 gehen.
Damit Sie wissen, was?
Ich werde Sie Jungs tauschen, und wenn du
physikalisch-Positionen und Ihre Stücke Papier.
Jetzt 4 und 6 sind in dieser Reihenfolge.
Ich werde verlassen diejenigen sein.
6 und 8, die sind in Ordnung.
Gehen zu lassen sie sein.
8 AND1, nicht in Ordnung.
Wenn Sie zwei hätte nichts dagegen tauschen.
Jetzt 8 und 3, wenn euch könnte tauschen.
8 und 7, wenn euch könnte tauschen.
Und 8 und 5, wenn euch könnte tauschen.
>> Jetzt bin ich getan?
Nein, offensichtlich nicht.
Aber ich gemacht habe die Situation besser, oder?
Was war wieder Ihren Namen, Ihre Nummer 8?
>> Rachel: Rachel.
DAVID MALAN: So hat Rachel effektiv bis ziemlich weit sprudelte,
den ganzen Weg bis zum Ende des mein Array von Zahlen hier.
Und so, dass Problem ist eine Art gelöst.
Nun, klar, muss noch 2 bewegen ein bisschen, und 4 und 6 und 1.
Aber ich scheine eine bekommen haben etwas näher auf die Lösung.
Also lassen Sie uns gelten diese gleiche naiv Heuristik erneut.
2 und 4, OK.
4 und 6, OK.
6 und 1 mm mm.
Lassen Sie uns tauschen.
6 und 3 mm mm.
Lassen Sie uns tauschen.
6 und 7 ist OK.
7 und 5, nee.
Lassen Sie uns tauschen.
Und nun 7 und 8.
Und was ist Ihr Name?
FRANCES: Frances.
DAVID MALAN: Frances.
Jetzt so Frances ist in auch eine bessere Position, denn jetzt 7 und 8
richtig bis an die Spitze geleitet.
SO 2 und 4, OK.
4 und 1, Lassen Sie uns tauschen.
4 und 3, Lassen Sie uns tauschen.
4 und 6, sind Sie auf OK.
6 und 5, Lassen Sie uns tauschen.
Und jetzt die Jungs sind gut.
Wir sind fast da.
2 und 1, nicht in Ordnung, so zu tauschen.
Und jetzt lassen Sie mich eine Plausibilitätsprüfung zu tun.
2 und 3, 3 und 4, 4 und 5, 5 und 6, 6 und 7, 8.
OK, so sind wir fertig.
>> Aber zu welchem ​​Preis habe ich sortieren diese hier?
Nun, wie viele Schritte habe ich möglicherweise zu nehmen, wenn diese Leute Sortier?
Nun, wir werden wieder auf diese Frage kommen.
Aber, ehrlich gesagt, wenn du ein wenig gelangweilt, das ist
Art enthüllt, dass dies nicht vielleicht die effizienteste Algorithmus.
Und in der Tat, ehrlich gesagt, ich schwitze umso mehr zu Fuß hin und her.
Das fühlte sich nicht besonders effizient.
Lassen Sie uns also etwas anderes versuchen.
Wenn euch könnte zurückgesetzt euch diesen acht Werte.
Gut gemacht.
>> Lassen Sie uns einen Blick digital, für nur ein Moment, bevor wir versuchen, etwas anderes,
auf das, was gerade passiert ist.
Hier oben, über ein zu sehen sind Sie Visualisierung dieser acht Menschen
wobei blau und rot Balken repräsentieren Zahlen.
Der größere der Bar, Je größer die Zahl.
Je kürzer der Balken, je kleiner die Zahl ist.
Und was wirst du sehen, ist in zufälliger Reihenfolge mehr als acht von ihnen.
Du wirst sehen, diese Bars immer von dem gleichen Algorithmus sortiert,
oder eine Reihe von Anweisungen, die wir werden von nun an Bubble-Sort nennen.
So bemerken, jede Sekunde oder so, zwei Bars aufleuchten in rot,
werden von dem Computer verglichen.
Und dann, wenn die große Bar und die kleine Bar sind in Ordnung,
sie werden für mich getauscht.
>> Nun, das ist unglaublich langweilig Um dies zu sehen, natürlich,
für sehr lange, aber feststellen, dass die takeaway-- großen Bars nach rechts bewegt,
kleine Balken nach links bewegt.
Lassen Sie uns diesen Prozess abbrechen und das beschleunigen
zu sein, viel schneller, so können wir erhalten Sie einen High-Level-Sinn, was,
In der Tat ist Bubble Sort tun.
In der Tat, es brodelt bis zu der rechten Seite der Liste,
oder die Anordnung, die größeren Bars.
Und umgekehrt, sind die kleinen Bars sprudelnden ihren Weg nach unten links,
wenn auch in einem schnelleren Tempo als wir bisher getan haben.
Also, härter, mit Menschen zu sehen, aber das ist in der Tat optisch was
geschah.
>> Aber lassen Sie uns versuchen, ein grundlegend anderen Ansatz jetzt.
Lassen Sie uns versuchen eine andere Algorithmus, wobei wir Sie
Jungs starten in diesen ursprünglichen Positionen, die diese Ordnung hier war.
Und lassen Sie uns jetzt voran gehen.
Und ich werde, etwas zu tun noch einfacher, oder?
Im Nachhinein tauschen paarweise wieder und wieder, fast ein wenig clever.
Lassen Sie uns die Dinge tun, noch mehr naiv, wo, wenn ich diese Leute zu sortieren,
lassen Sie mich nur weiter suchen für das kleinste Element.
So jetzt, 4 ist die kleinste Zahl, die ich gesehen habe.
Ich werde daran erinnern.
Nein, 2 ist besser, und daran erinnern.
1 ist noch kleiner.
3, 7, 5.
Ok.
One-- was ist Ihr Name?
>> ARTIE: Artie.
>> DAVID MALAN: Artie.
Also, Artie, nur zu.
Ich werde Ihnen aus der Leitung zu ziehen.
Wenn Sie wieder hierher kommen.
Und ich brauche, um Platz für ihn zu machen.
Wir haben eine Entscheidung Punkt hier.
Wie könnten wir Platz machen für Artie hier am Anfang, wo die Nummer 1 gehört?
>> ZIELGRUPPE: Verschiebung.
>> DAVID MALAN: OK, wir konnte jeder verschieben.
Aber schlagen eine Optimierung.
Das fühlt sich ein wenig ärgerlich für mich vier Leute zu fragen,
bis ganz nach unten zu bewegen.
Was könnte ich tun?
>> ZIELGRUPPE: Schalten sie.
>> DAVID MALAN: Schalten sie.
Und was ist Ihr Name?
>> JACOB: Jacob.
DAVID MALAN: Jacob, zu bewegen.
Viel effizienter, nur um Jacob Swap-Standorte mit Artie,
im Gegensatz zu zwingen Alle vier dieser Leute,
ich danke Ihnen sehr, zu ihre richtige Position.
Das Schöne an Artie jetzt, Er ist in seinem richtigen Position.
Das machen wir wieder.
2, das ist die kleinste Zahl, die ich gesehen habe.
3, 7, 5.
Ok.
2 ist definitiv die kleinste.
Sie haben noch keine, jede Arbeit tun.
Lassen Sie es wieder tun.
6.
Kleinste?
8.
Nope.
4?
Ooh.
Lassen Sie mich daran erinnern, 4.
3.
Lassen Sie mich daran erinnern, 3.
7, 5.
Kleinste Zahl, die ich habe auf diesem Pass gesehen ist 3.
Wenn Sie möchten auf herauszukommen.
Wohin gehen wir an Sie stellen?
Und was ist Ihr Name?
>> ALANNA: Alanna.
>> DAVID MALAN: Alanna, wir sind euch vertreiben zu lassen.
Aber das ist effizienter, nur tauschen zwei Personen,
als mehrere Menschen tatsächlich umgehen vorbei.
Nun wollen wir wieder tun.
Ich werde wählen Sie 4, so kommen auf Sie.
Und wer wird sich zu bewegen?
Nummer 8, natürlich.
Wenn ich jetzt zu finden Nummer 5, komm heraus.
Nummer 8 ist los, wieder vertrieben zu werden.
Ich gehe jetzt auf Platz 6 in Ort finden.
7 statt.
8 statt.
>> Was wir gerade jetzt getan hat, ist so genannte Auswahl Art,
und wenn wir dies zu visualisieren, ist es sich fühlen, ein wenig anders.
Lassen Sie uns weiter und von diesem gehen Speisekarte, diese visualization--
Ändern wir diese zu-- komm, Firefox.
Lassen Sie uns auf die Auswahl Art dies ändern.
Und lassen Sie es beschleunigen wie vor, und starten Sie jetzt die Visualisierung.
Und dieser Algorithmus hat ein anderes Gefühl.
Bei jeder Iteration, ehrlich gesagt, es ist sogar noch einfacher.
Ich bin nur die Auswahl der kleinste Element.
Nun, ehrlich gesagt, habe ich ein wenig das Glück, dass Zeit, daß sie superschnellen sortiert.
Die Elemente wurden zufällig.
Es ist nicht, wie wir schließlich sehen, grundsätzlich schneller.
Aber mal sehen, eine dritte und letzte nähern, was hier los ist.
Also lassen Sie uns gehen Sie vor und zurückgesetzt euch ein letztes Mal in dieser Reihenfolge hier zu sein.
>> Und jetzt bin ich zu gehen ein wenig klüger,
nur zur Abrundung unserer Algorithmen.
Ich werde das tun.
Ich werde nicht gehen hin und her, so viel.
Ehrlich gesagt, ich bin müde von all dies Verfahrweg.
Ich werde einfach zu nehmen, was ich bin am Anfang der Liste gegeben,
und ich werde zu sortieren dass dann und dort.
So, hier sind wir.
Nummer 4.
Ich werde die Nummer einfügen 4 in eine sortierte Liste.
Fertig.
Ich behaupte jetzt, und nur um diese mehr machen Klar, dieser Teil meiner Liste ist sortiert.
Es ist eine Art von einem dummen Anspruch, aber in der Tat 4 ist in einer Liste der Größe eines sortiert.
Nun, ich werde auf Nummer 2 zu nehmen.
Nummer 2 Ich gehe jetzt zu Einsatz in der richtigen Stelle.
Also, wo 2 gehören?
Offensichtlich hier.
So gehen Sie vor und zurück bewegen, wenn Sie.
Und warum habt ihr einfach nicht nehmen Ihre Musik steht mit Ihnen diese Zeit.
Und lassen Sie uns gewaltsam fügen Sie in den Anfang der Liste.
Also ein wenig mehr Arbeit.
Ich musste Jacob bewegen, und was ist dein Name?
>> AMIN: Amin.
>> DAVID MALAN: Amin.
Aber zumindest habe ich nicht hin und her gehen.
Ich bin einfach nur die Dinge, wie ich gehen.
Ich bin einfach nur Einstecken an der richtigen Stelle.
6, das ist eigentlich recht einfach.
Lassen Sie fügen Sie dort, wenn Sie wollte nur über etwas zu bewegen.
Nummer 8, auch recht einfach.
Gleich da drüben.
Verdammt.
Nummer 1 können wir nicht einfach tauschen mit Amin hier,
denn das wird zu vermasseln den Auftrag.
Also müssen wir ein wenig schlauer sein.
Also, Artie, wenn Sie könnten Sichern Sie sich für einen Moment.
Lassen Sie uns gehen Sie vor und verschieben jetzt, im Gegensatz zu unseren bisherigen Algorithmen
um Platz für Artie machen hier am Anfang.
So dass am Ende des Tages, ich bin Art von zu tun, was ich wollte, bevor zu vermeiden.
Und so meine Art ist Algorithmus der umgekehrt, intellektuell,
was es ursprünglich war.
Ich bin gerade dabei den Schalt an einer anderen Stelle.
Jetzt bin ich bei 3.
Oh, verdammt.
Wir müssen mehr Arbeit wieder tun.
Lassen Sie uns also drücken Sie aus.
Gehen wir 8, 6, 4-- oh OH-und 3 wird zu Recht dorthin zu gehen.
So zumindest leichte Einsparungen dieser Zeit.
7, nicht zu viel zu tun.
Also, wenn Sie wollen, um Pop- zurück, lassen Sie einfügen.
Und schließlich, 5, wenn Sie will wieder knallen, wir
müssen Sie verschieben, du, Sie, bis fünf vorhanden ist.
>> So, jetzt, dies auf eine zu sehen hohe grafisch,
machen wir diesen Algorithmus Visualisierung ein weiteres Mal.
So soll das nennen wir insertion sort.
Wir werden es genau so laufen schnell, und starten Sie es hier.
Und es hat auch ein anderes Gefühl.
Es ist eine Art immer besser und besser, aber es ist nie perfekt
bis ich in und glatt in diese Lücken.
Denn wieder, ich bin nur zu nehmen, was Ich werde von links nach rechts gegeben.
So dass ich nicht so viel Glück zu bekommen , dass alles perfekt war.
Das ist, warum wir diese kleinen mispositions, die wir im Laufe der Zeit festgelegt.
>> Also alle diese Algorithmen scheinen laufen bei leicht unterschiedlichen Gangarten.
In der Tat, das würden Sie sagen, ist die beste oder die schnellste bisher?
Bubble-Sort, der erste?
Auswahl Art, die zweite?
Insertion Sort, der dritte?
Ich habe gehört, einige Arten Auswahl.
Andere Gedanken?
>> So stellt sich heraus, dass Alle diese Algorithmen
sind grundsätzlich nur so effizient wie Jede other-- oder umgekehrt, wie
ineffizient voneinander weil wir grundsätzlich tun können
besser als alle drei dieser Algorithmen.
Und das ist ein bisschen eine Notlüge auch.
wenn ich so effizient sagen oder als ineffizient,
das ist zumindest für super-große Werte von n.
Wenn wir hier haben nur acht Personen, oder vielleicht 50 oder so Balken auf dem Bildschirm,
Sie werden feststellen, absolut Unterschiede unter diesen drei Algorithmen.
Sondern als n, die Zahl der Menschen, oder die Anzahl der Nummern,
oder die Anzahl der Personen in der Telefon Buch oder die Zahl der Webseiten
in der Datenbank von Google wird größer und größer,
wir werden sehen, dass alle drei von diesen Algorithmen sind eigentlich ziemlich schlecht.
Und wir grundsätzlich tun können besser.
>> Lassen Sie uns einen Blick schließlich auf das, was diese Algorithmen könnte
klingen wie in der Zusammenhang mit einigen anderen
sowie durch diese Visualisierung hier
das wird uns die Einführung eine Anzahl von Algorithmen.
Lassen Sie uns gehen Sie vor und gratulieren unsere Teilnehmer hier, von denen alle
sortiert sich sehr gut.
Wenn Sie möchten, um ein Abschiedsgeschenk zu nehmen.
Sie können Ihre Zahlen als auch zu halten.
Und was Sie sehen werden, oder vielmehr zu hören, jetzt,
ist, dass, wie wir Töne setzen jeder dieser Stäbe
und verbinden sie mit der Software, unterschiedliche Frequenz von Ton,
Sie können Ihre Meinung mehr audioly wickeln um das, was jedes dieser Dinge
aussehen.
Die erste ist Insertion Sort
>> [TÖNE]
>> Dies ist Bubble-Sort.
>> [TÖNE]
>> Auswahl sortieren.
>> [TÖNE]
>> So genannte Merge-Sort.
>> [TÖNE]
>> Gnome Sorte.
>> [TÖNE]
>> Das ist es für CS50.
Wir werden Sie am Mittwoch sehen.
>> SPRECHER: Und jetzt, "Deep Gedanken, "von Daven Farnham.
Warum ist es eine for-Schleife?
Warum nicht machen es besser?
Ich würde eine fünf Schleife machen.
>> [Gelächter]