1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID MALAN: In Ordnung. 3 00:00:11,940 --> 00:00:16,470 Das ist also CS50, und dies ist jetzt der Beginn der dritten Woche. 4 00:00:16,470 --> 00:00:19,960 >> Also bis jetzt, haben wir wurde in C-Programme schreiben 5 00:00:19,960 --> 00:00:23,210 dass schauen ein wenig so etwas wie dies hier. 6 00:00:23,210 --> 00:00:25,470 Also haben wir ein paar bekam scharfe enthält an der Spitze. 7 00:00:25,470 --> 00:00:28,490 Wir haben int, Haupt, nichtig und dann etwas zu tun, in der Mitte, 8 00:00:28,490 --> 00:00:30,590 einige Stück Code innerhalb dieser Funktion. 9 00:00:30,590 --> 00:00:34,170 Aber Schlüssel war die Tatsache, dass wir haben für nichtig zu sagen hier. 10 00:00:34,170 --> 00:00:39,320 So nichtig, alle dieser Zeit legt fest, , dass dieses Programm, bei der Ausführung, 11 00:00:39,320 --> 00:00:41,300 kann nur über ihren Namen laufen. 12 00:00:41,300 --> 00:00:46,330 Sie können keine andere Wörter oder Zahlen nach den Namen des Programms, wenn 13 00:00:46,330 --> 00:00:46,830 es läuft. 14 00:00:46,830 --> 00:00:51,200 So zum Beispiel, wenn das Programm waren in einer Datei namens hallo zusammengestellt, 15 00:00:51,200 --> 00:00:53,480 Sie tun können, ./hello, aber das ist es. 16 00:00:53,480 --> 00:00:56,750 >> Der einzige Weg, dass man Input für dieses Programm 17 00:00:56,750 --> 00:00:57,960 ist durch den Aufruf einer Funktion. 18 00:00:57,960 --> 00:00:59,790 Zum Beispiel, was Funktions haben wir mit bisher gewesen 19 00:00:59,790 --> 00:01:00,950 auf eine Eingabe von dem Benutzer zu erhalten? 20 00:01:00,950 --> 00:01:02,117 >> ZIELGRUPPE: Get String. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: Um String zu erhalten, oder int erhalten, oder Sie andere gesehen haben, 22 00:01:04,700 --> 00:01:07,630 auch wenn Sie sie noch nicht genutzt haben, wie bekommen lange, lange und dergleichen. 23 00:01:07,630 --> 00:01:09,380 Aber nehmen wir an, dass wir tatsächlich starten wollen 24 00:01:09,380 --> 00:01:12,760 Schreiben von Programmen, die wenig mehr sind vielseitig, und, ehrlich gesagt, ein wenig mehr 25 00:01:12,760 --> 00:01:15,090 wie die Befehle, die Sie haben wurde immer, hoffentlich, 26 00:01:15,090 --> 00:01:16,550 ein wenig daran gewöhnt,. 27 00:01:16,550 --> 00:01:18,560 Wie cd Raum Dropbox. 28 00:01:18,560 --> 00:01:20,800 Dies ist natürlich Änderungen Ihr Verzeichnis, unter der Annahme, 29 00:01:20,800 --> 00:01:23,590 Sie John Harvard Hause sind Verzeichnis, um Ihren Dropbox-Ordner. 30 00:01:23,590 --> 00:01:27,380 Unterdessen wird ein Befehl wie diesen erstellt ein neues Verzeichnis mit dem Namen pset2, 31 00:01:27,380 --> 00:01:30,290 wie Sie vielleicht schon oder wird bald zum Problem stellte zwei. 32 00:01:30,290 --> 00:01:33,970 Machen hallo, natürlich, ist ein Befehl dass baut ein Programm namens hallo 33 00:01:33,970 --> 00:01:35,770 aus einer Datei namens hallo Punkt c. 34 00:01:35,770 --> 00:01:39,140 Und in jeder von diesen Fälle, jetzt mussten wir 35 00:01:39,140 --> 00:01:43,620 bieten ein Argument auf der so genannten Befehlszeile, die blinkende Eingabeaufforderung 36 00:01:43,620 --> 00:01:48,540 so dass Make weiß, was zu bauen, und so dass mkdir weiß, was Ordner zu erstellen, zu 37 00:01:48,540 --> 00:01:51,110 und so, dass CD kennt wo man hin will. 38 00:01:51,110 --> 00:01:54,720 Aber bis jetzt halten wir sagen dass die Haupt, Ihr Standard-Funktion, 39 00:01:54,720 --> 00:01:58,500 ein Hohlraum Ausdruck innerhalb dieser Klammern, 40 00:01:58,500 --> 00:02:01,250 was bedeutet, dass es kann nicht alle Argumente. 41 00:02:01,250 --> 00:02:03,240 >> Also ab heute, das, was wir tun werden 42 00:02:03,240 --> 00:02:06,270 ist, werden wir beginnen Dinge wie diese Unterstützung auch. 43 00:02:06,270 --> 00:02:08,990 In der Tat, in diesem Fall, der Sie in der Regel nicht manuell eingeben, 44 00:02:08,990 --> 00:02:11,130 Eben ist das getan, für uns gibt es nicht 45 00:02:11,130 --> 00:02:15,840 eine, sondern eine, zwei, drei zusätzliche Saiten nach dem Programm benannt 46 00:02:15,840 --> 00:02:16,850 Klappern. 47 00:02:16,850 --> 00:02:18,240 So, wie wir das erreichen? 48 00:02:18,240 --> 00:02:20,260 >> Nun, ab heute, in den Fällen, wo wir wollen 49 00:02:20,260 --> 00:02:22,855 die Eingabe über das liefern so genannte Befehlszeile 50 00:02:22,855 --> 00:02:24,980 wir werden das Hinzufügen zu starten hier, was in yellow-- 51 00:02:24,980 --> 00:02:30,520 Ersetzen Leere mit int argc Komma String argv Klammer auf Klammer zu. 52 00:02:30,520 --> 00:02:32,520 Jetzt ist das interessant für eine Reihe von Gründen. 53 00:02:32,520 --> 00:02:35,690 Eins, es geht um uns zu schreiben Programme, die ein wenig mehr dynamisch sind. 54 00:02:35,690 --> 00:02:37,570 Aber mehr zwingend, es wird sich zu öffnen 55 00:02:37,570 --> 00:02:40,340 jetzt ein Gespräch, um Welche Arrays kann wirklich 56 00:02:40,340 --> 00:02:43,300 verwendet werden, was eine Zeichenfolge ist wirklich unter der Haube, 57 00:02:43,300 --> 00:02:47,320 bis nächste Woche, wenn wir anfangen Tauchen in noch tiefer, wie die Maschine 58 00:02:47,320 --> 00:02:48,590 so dass alle von diesem Zeug Arbeit. 59 00:02:48,590 --> 00:02:51,920 Aber jetzt wollen wir ziehen, vielleicht ein Bild. 60 00:02:51,920 --> 00:02:54,950 >> Wenn Sie ein Programm schreiben mit Haupt erklärt 61 00:02:54,950 --> 00:02:58,810 auf diese Weise, so dass Haupt zwei Argumente, ein int 62 00:02:58,810 --> 00:03:03,233 und-- welche Datentyp ist das zweite Argument? 63 00:03:03,233 --> 00:03:04,529 >> ZIELGRUPPE: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 So sieht es aus auf den ersten Blick, wie es ein String, aber beachten Sie die eckigen Klammern. 66 00:03:09,170 --> 00:03:12,760 Daran erinnern wir zuletzt eingeführt der Begriff eines Arrays. 67 00:03:12,760 --> 00:03:16,210 Und Arrays eckige Klammern in einigen Kontexten. 68 00:03:16,210 --> 00:03:19,160 Sie könnten den Platz nutzen Klammern in ein Array gehen 69 00:03:19,160 --> 00:03:22,710 und erhalten ein bestimmtes Element, wie Halterung 0 oder 1 oder Halter Halterung 2. 70 00:03:22,710 --> 00:03:25,500 Aber wir sahen, wenn auch nur kurz, letzte Woche, dass Sie auch 71 00:03:25,500 --> 00:03:28,790 nutzen diese eckigen Klammern erklären die Größe eines Arrays, 72 00:03:28,790 --> 00:03:31,790 wenn Sie im Voraus wissen, wie viele ints oder wie viele Strings oder was auch immer Sie 73 00:03:31,790 --> 00:03:32,630 eigentlich wollen. 74 00:03:32,630 --> 00:03:34,790 So stellt sich heraus, es gibt ein dritter Kontext hier 75 00:03:34,790 --> 00:03:37,890 dass keine Zahl in der eckigen Klammern. 76 00:03:37,890 --> 00:03:41,920 Wenn Sie angeben, wie ich hier, der Name so etwas wie argv, 77 00:03:41,920 --> 00:03:44,550 Das ist nur eine andere Art von sagen Argument Vektor, der 78 00:03:44,550 --> 00:03:47,750 ist eine andere andere Art zu sagen eine Reihe von Argumenten, 79 00:03:47,750 --> 00:03:50,870 Klammer auf Klammer zu einfach bedeutet, dass Sie nicht unbedingt tun 80 00:03:50,870 --> 00:03:52,960 im Voraus wissen, wie groß das Array sein wird, 81 00:03:52,960 --> 00:03:55,070 aber Sie wissen, es geht um ein Array sein. 82 00:03:55,070 --> 00:03:57,320 Also, wenn Sie nicht wissen, die Anzahl Sie legte es nicht gibt, 83 00:03:57,320 --> 00:04:01,160 für offene Klammer Klammer zu bedeutet, dass argv ist kein String, 84 00:04:01,160 --> 00:04:03,124 sondern ein Array von Strings. 85 00:04:03,124 --> 00:04:05,040 So syntaktisch, wenn Sie zurück denke letzte Woche, 86 00:04:05,040 --> 00:04:09,460 Es ist sehr ähnlich zu sagen so etwas wie int Alter offene Klammer, 87 00:04:09,460 --> 00:04:10,984 und dann etwas später. 88 00:04:10,984 --> 00:04:12,150 Was bedeutet dies aussehen? 89 00:04:12,150 --> 00:04:13,399 Lassen Sie uns ein Bild tatsächlich zu zeichnen. 90 00:04:13,399 --> 00:04:18,756 Also, wenn Sie dieses Programm mit Hauptlauf mit zwei Argumenten innerhalb definiert 91 00:04:18,756 --> 00:04:21,339 dieser Klammern, die Sie im wesentlichen mindestens zwei Stücke 92 00:04:21,339 --> 00:04:23,560 Speicher, Sie übergeben unter der Haube. 93 00:04:23,560 --> 00:04:26,550 Eine, wie ich werde zieht wie dieses Rechtecks, wird sich arge aufgerufen werden. 94 00:04:26,550 --> 00:04:30,645 Und so wie eine kurze Zusammenfassung, was ist der Datentyp der arge? 95 00:04:30,645 --> 00:04:31,270 Es ist also ein int. 96 00:04:31,270 --> 00:04:33,480 So eine Zahl wird in argc-- Umdrehungen gehen 97 00:04:33,480 --> 00:04:35,660 heraus, die für die Zählung Argument steht. 98 00:04:35,660 --> 00:04:38,887 Inzwischen habe ich argv als Array erstellt. 99 00:04:38,887 --> 00:04:40,970 Und ich weiß wirklich nicht, wie lange es sein wird, 100 00:04:40,970 --> 00:04:42,470 so für die heutigen Zwecke Punkt Punkt Punkt. 101 00:04:42,470 --> 00:04:43,636 Es könnte von einiger Länge zu bekommen. 102 00:04:43,636 --> 00:04:45,640 Aber ich habe hier abgebildete mindestens vier Rechtecke. 103 00:04:45,640 --> 00:04:50,970 So argv ein Stück Erinnerung, dass Geschäfte String String String Punkt Punkt Punkt, 104 00:04:50,970 --> 00:04:53,950 und argc ist nur ein Stück der Speicher für eine ganze Zahl ist. 105 00:04:53,950 --> 00:04:55,710 >> So, jetzt lassen Sie uns ein wenig genauer. 106 00:04:55,710 --> 00:04:59,200 Wenn, wenn ich Strings In diesem Array aufgerufen 107 00:04:59,200 --> 00:05:03,290 argv, ich will bei ihnen zu bekommen individuell, genau wie letzte Woche, 108 00:05:03,290 --> 00:05:05,670 wir werden Notation wie argv Halterung 0 109 00:05:05,670 --> 00:05:07,650 das erste, was zu einer Reihe. 110 00:05:07,650 --> 00:05:10,440 Argv Winkel 1 Um mit dem zweite Sache, und so weiter. 111 00:05:10,440 --> 00:05:14,597 Der Schlüssel hier als wir sind immer noch 0 indexed-- wir sind immer noch das Zählen von 0. 112 00:05:14,597 --> 00:05:16,430 So, jetzt wollen wir eigentlich etwas in diese. 113 00:05:16,430 --> 00:05:21,670 Wenn ich ein Programm namens kompilieren Hallo von einer Datei namens hallo Punkt c, 114 00:05:21,670 --> 00:05:24,340 und dann laufe ich dieses Programm mit Punkt Schrägstrich hallo, 115 00:05:24,340 --> 00:05:28,380 was macht mein Computer, mein Laptop, aussehen wie unter der Haube 116 00:05:28,380 --> 00:05:31,300 sobald ich laufen dot Schrägstrich hallo und drücken Sie Enter? 117 00:05:31,300 --> 00:05:33,500 Nun, das ist vielleicht was wir beschreiben könnten 118 00:05:33,500 --> 00:05:37,010 wie der Inhalt Ihrer Computer Speicher oder RAM-- Random Access Memory. 119 00:05:37,010 --> 00:05:40,330 Mit anderen Worten, der Computer, irgendwie magisch für Sie, 120 00:05:40,330 --> 00:05:45,360 stellt die Nummer 1 in arge, AKA argcount, und es setzt buchstäblich die Zeichenfolge 121 00:05:45,360 --> 00:05:48,200 ./hello in argv Halterung 0. 122 00:05:48,200 --> 00:05:51,750 Ich habe keine Ahnung, ehrlich gesagt, was ist in argv Winkel 1 oder 2 oder 3, 123 00:05:51,750 --> 00:05:55,550 weil, wenn der Benutzer nicht eingegeben nichts außer ./hello, 124 00:05:55,550 --> 00:05:58,550 wir gehen davon aus, dass diese sind am ehesten Müll Werte, 125 00:05:58,550 --> 00:05:59,700 so zu sprechen. 126 00:05:59,700 --> 00:06:02,650 Diese Stücke von Speicher existiert, aber es ist nicht an uns, 127 00:06:02,650 --> 00:06:05,710 , sie zu betrachten, weil die argcount nur einer ist. 128 00:06:05,710 --> 00:06:07,870 >> Nun, mittlerweile, wenn ich Schreiben Sie ein anderes Programm laufen, 129 00:06:07,870 --> 00:06:12,250 cd, die mehr richtig ist ein Befehl, in Ihrer blinkt prompt-- cd Raum 130 00:06:12,250 --> 00:06:17,200 Dropbox--, wenn ich, dass effektiv, wenn das CD-Programm ausgeführt wird, arge, 131 00:06:17,200 --> 00:06:22,270 innerhalb des Speichers meines Computers, ist für die kürzeste zweite die Nummer 2. 132 00:06:22,270 --> 00:06:25,936 Und dann argv Halterung o hat cd, argv Winkel 1 hat Dropbox, 133 00:06:25,936 --> 00:06:28,560 und dann natürlich die Befehls abgeschlossen ist, so dass alle von diesem Speicher 134 00:06:28,560 --> 00:06:30,420 Wesentlichen geht weg und wird für etwas anderes verwendet. 135 00:06:30,420 --> 00:06:32,270 Und das ist, warum ich sage, nur ein Bruchteil einer Sekunde. 136 00:06:32,270 --> 00:06:35,720 >> Inzwischen, wenn wir tun, mkdir pset2, sieht das Bild fast das gleiche, 137 00:06:35,720 --> 00:06:37,900 aber mit verschiedenen Saiten im Inneren argv. 138 00:06:37,900 --> 00:06:42,570 Wenn ich das tue Klang Strich hallo hallo Punkt c, gleiche Idee. 139 00:06:42,570 --> 00:06:47,060 Mehr Zeug in für gefüllte argv und argc, natürlich, ist 4. 140 00:06:47,060 --> 00:06:49,150 In anderen Worten, auch wenn dieses Array 141 00:06:49,150 --> 00:06:52,950 könnte dot dot dot werden, von denen einige variabler Länge, sozusagen 142 00:06:52,950 --> 00:06:56,720 Sie wissen immer, wo das Ende davon ist, weil arge wird Ihnen sagen, 143 00:06:56,720 --> 00:07:00,120 An welchem ​​Punkt haben Sie zu stoppen Blick auf Elemente in argv. 144 00:07:00,120 --> 00:07:03,660 Sie können nur an vier aussehen insgesamt in diesem Fall. 145 00:07:03,660 --> 00:07:06,600 >> Also lassen Sie uns nun einen Blick auf, vielleicht ein einfaches Programm. 146 00:07:06,600 --> 00:07:09,070 Eine, die nur sagt hallo , jemanden wie Zamyla. 147 00:07:09,070 --> 00:07:12,620 Also ich behaupte, werde ich ein Programm schreiben in nur einem Augenblick, über die ich tun könnte, 148 00:07:12,620 --> 00:07:16,670 ./hello Raum Zamyla, und dann will ich mein Programm zu drucken etwas 149 00:07:16,670 --> 00:07:18,520 super-einfache wie "hallo, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Jetzt in der Vergangenheit haben wir getstring benutzt habe. 151 00:07:20,100 --> 00:07:22,850 Dies in der Vergangenheit, selbst wenn Sie sind neu in die Programmierung, 152 00:07:22,850 --> 00:07:27,180 Chancen könnten Sie schüren ein Programm, das verwendet getstring 153 00:07:27,180 --> 00:07:29,390 und verwendet dann printf um hallo zu sagen Zamyla. 154 00:07:29,390 --> 00:07:31,290 Aber wir wollen nicht zu verwenden getstring diese Zeit. 155 00:07:31,290 --> 00:07:37,510 Lassen Sie mich stattdessen in die Appliant gehen und beinhalten Standard-I O h dot. 156 00:07:37,510 --> 00:07:41,160 Lassen Sie mich auch CS50 dot h. 157 00:07:41,160 --> 00:07:44,730 Jetzt int main, und jetzt bin ich nicht heute tun nichtig. 158 00:07:44,730 --> 00:07:51,200 Stattdessen werde ich int argc tun String argv Klammer auf Klammer zu, 159 00:07:51,200 --> 00:07:52,640 nicht eine Zahl angeben. 160 00:07:52,640 --> 00:07:54,644 Und jetzt ist mein sogenanntes zu tun. 161 00:07:54,644 --> 00:07:57,560 Was ich jetzt tun ist, ich bin Gehen, ein bisschen wie ein Sprung des Glaubens zu tun, 162 00:07:57,560 --> 00:08:00,560 Ich gehe davon aus, dass die Benutzer- werde dieses Programm richtig zu verwenden, 163 00:08:00,560 --> 00:08:04,980 und ich bin einfach da, um tun printf hallo, sn%. 164 00:08:04,980 --> 00:08:06,630 Also nichts Neues. 165 00:08:06,630 --> 00:08:11,470 Aber ich möchte jetzt setzen, was das Wort Benutzertypen nach den Namen des Programms. 166 00:08:11,470 --> 00:08:16,970 Also, wenn ich ./hello Raum Zamyla, ich wollen irgendwie programmatisch Zugang 167 00:08:16,970 --> 00:08:20,870 zitieren unquote "Zamyla." so dass ich kann in mein Argument-Vektor zu gehen, 168 00:08:20,870 --> 00:08:25,980 mein Array von Strings, und wenn der Befehl, wieder war ./hello Raum Zamyla, 169 00:08:25,980 --> 00:08:29,340 welche Zahl will ich mich in argv hier setzen? 170 00:08:29,340 --> 00:08:29,840 ZIELGRUPPE: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, weil Halterung 0 stellt sich heraus, 172 00:08:32,355 --> 00:08:34,230 wird den sein Programmnamen, wie wir sahen. 173 00:08:34,230 --> 00:08:37,789 So Winkel 1 ist das erste Wort daß ich, der Nutzer, getippt. 174 00:08:37,789 --> 00:08:39,559 Ich werde weitermachen und speichern Sie diese. 175 00:08:39,559 --> 00:08:42,830 Ich werde in meinen Ordner gehen wo ich diese Datei platziert. 176 00:08:42,830 --> 00:08:44,920 Ich werde tun, machen hallo 3. 177 00:08:44,920 --> 00:08:46,230 Comp IO ist OK. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla ein. 179 00:08:51,380 --> 00:08:54,480 Was habe ich falsch gemacht? 180 00:08:54,480 --> 00:08:57,270 Ich war überrascht mich für einen Moment da. 181 00:08:57,270 --> 00:08:58,230 Was habe ich falsch gemacht? 182 00:08:58,230 --> 00:08:59,220 >> ZIELGRUPPE: Name. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: Die Datei tatsächlich aufgerufen hello3.c. 184 00:09:01,767 --> 00:09:03,850 Und das tat ich, dass gerade für Konsistenz, denn wir haben 185 00:09:03,850 --> 00:09:06,550 hatte hello.c in der Vergangenheit in der Online-Code. 186 00:09:06,550 --> 00:09:11,550 Also lassen Sie dieses Problem beheben ./hello Halterung Strich 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Eingeben. 188 00:09:12,370 --> 00:09:14,030 Und jetzt haben wir hallo, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Inzwischen kann ich das ändern Rob sein, oder wirklich ein anderer Begriff. 190 00:09:17,650 --> 00:09:19,230 >> Aber betrachten wir eine Ecke Fall. 191 00:09:19,230 --> 00:09:24,360 Was können Sie erwarten, wird passieren, wenn Ich glaube nicht, jemand Name Typ überhaupt? 192 00:09:24,360 --> 00:09:25,270 >> ZIELGRUPPE: Fehler. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: Ein Fehler von einer Art, vielleicht. 194 00:09:27,300 --> 00:09:28,200 Mal sehen. 195 00:09:28,200 --> 00:09:29,440 Eingeben. 196 00:09:29,440 --> 00:09:30,210 NULL. 197 00:09:30,210 --> 00:09:33,870 So printf ist tatsächlich in der ein wenig Schutz von uns 198 00:09:33,870 --> 00:09:38,131 hier, und buchstäblich Druck geöffnet paren null, aber noch schlimmer Dinge passieren können. 199 00:09:38,131 --> 00:09:40,130 Und nur um zu zeigen, etwas, das Sie unbedingt 200 00:09:40,130 --> 00:09:42,800 sollte es nicht tun, gehen wir in hier und starten Sie stochern. 201 00:09:42,800 --> 00:09:43,300 Oder? 202 00:09:43,300 --> 00:09:46,410 Wenn ich weiß, dass das Bild in Speicher ist im Wesentlichen dazu 203 00:09:46,410 --> 00:09:52,660 argv Winkel 1 hat Zamyla, argv Halterung 0 hat ./hello oder ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Was ist in der Halterung 2? 205 00:09:55,400 --> 00:09:58,210 So kann ich das beantworten Frage mich, oder? 206 00:09:58,210 --> 00:10:00,460 Ich kann einfach ändern Sie die 1 bis 2. 207 00:10:00,460 --> 00:10:07,270 Ich kann jetzt neu kompilieren hallo 3, ./hello3 wir vergrößern und drücken Sie Enter. 208 00:10:07,270 --> 00:10:08,270 Whoops. 209 00:10:08,270 --> 00:10:10,660 Keine Anführungszeichen. 210 00:10:10,660 --> 00:10:12,540 Interessant. 211 00:10:12,540 --> 00:10:15,530 Also das ist ganz cool, sehen, was sonst noch in hier. 212 00:10:15,530 --> 00:10:17,130 >> So was ist im Inneren von meinem Laptop? 213 00:10:17,130 --> 00:10:20,390 Retten wir es mit Halterung 3. 214 00:10:20,390 --> 00:10:25,190 Machen hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Neugierig. 216 00:10:26,500 --> 00:10:30,560 Und nun lassen Sie uns wirklich bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Also das ist wirklich tief tauchen in den Speicher meines Computers. 218 00:10:34,340 --> 00:10:35,930 50 Indizes in. 219 00:10:35,930 --> 00:10:41,950 So machen hallo 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Neugierig. 221 00:10:42,680 --> 00:10:44,660 Alles klar, jetzt bin ich nur gehen leichtsinnig zu werden. 222 00:10:44,660 --> 00:10:47,331 Lassen Sie uns bis 5000 zu gehen. 223 00:10:47,331 --> 00:10:47,830 In Ordnung. 224 00:10:47,830 --> 00:10:49,520 Also lassen Sie mich neu zu kompilieren. 225 00:10:49,520 --> 00:10:51,460 Machen hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 Ok. 228 00:10:56,460 --> 00:10:59,250 Nun, einige von euch, es könnte sein eine Glühbirne geht aus. 229 00:10:59,250 --> 00:11:01,900 Wie viele von euch haben Diese Nachricht schon mal gesehen? 230 00:11:01,900 --> 00:11:03,440 Ok. 231 00:11:03,440 --> 00:11:04,420 Ja, warum? 232 00:11:04,420 --> 00:11:07,250 >> Quoten sind-- und es gibt verschiedene Dinge, die diese verursachen können, 233 00:11:07,250 --> 00:11:09,730 und klar sind Sie in guter company-- wir haben eindeutig 234 00:11:09,730 --> 00:11:11,900 verursacht, was heißt einen Segmentation Fault. 235 00:11:11,900 --> 00:11:15,890 Und lange Geschichte kurz für heute, ich haben ein Speichersegment berührt 236 00:11:15,890 --> 00:11:17,060 dass ich nicht zu haben. 237 00:11:17,060 --> 00:11:19,970 Wo ein Segment bedeutet nur ein Stück des Speichers, sollte ich nicht zu haben. 238 00:11:19,970 --> 00:11:25,530 Jetzt ist der Computer garantiert, dass, wenn ich laufen ./helloZamyla dass ich argv berühren 239 00:11:25,530 --> 00:11:27,760 sein Halterung 0 und argv Winkel 1. 240 00:11:27,760 --> 00:11:32,730 Aber argc ist der Wert 2, bedeutet, dass ich nur allowed-- Es ist eine Art der Ehre 241 00:11:32,730 --> 00:11:35,180 system-- zu berühren Halterung 0 und 1 Halterung. 242 00:11:35,180 --> 00:11:37,990 Wenn ich etwas weiter gehen, gibt es absolut gehen zu Speicher da sein. 243 00:11:37,990 --> 00:11:40,660 Meine RAM körperlich vorhanden im Computer. 244 00:11:40,660 --> 00:11:42,080 Aber wer weiß, was da ist? 245 00:11:42,080 --> 00:11:44,450 In der Tat, ich bin mit mehreren Programme auf einmal. 246 00:11:44,450 --> 00:11:46,910 Ich hätte seen--, wenn ich nicht tun dies auf der Appliant 247 00:11:46,910 --> 00:11:49,937 aber auf meinem Mac oder PC-- ich vielleicht gesehen den Inhalt einer E-Mail. 248 00:11:49,937 --> 00:11:52,270 Ich könnte einen Augenblick gesehen haben Nachricht Ich habe vor kurzem gesendet. 249 00:11:52,270 --> 00:11:55,390 Alles, was sein könnte anhalt um im Speicher 250 00:11:55,390 --> 00:11:59,180 konnte durch die zugegriffen wurde, Diese willkürliche eckige Klammer-Notation. 251 00:11:59,180 --> 00:12:02,850 Oder, schlimmer noch, haben Sie vielleicht gefunden eines meiner Passwörter 252 00:12:02,850 --> 00:12:05,859 dass ich vor kurzem in, getippt, dass ein Programm hatte im Speicher abgelegt, so dass 253 00:12:05,859 --> 00:12:07,900 zu mir zu authentifizieren und dann nur irgendwie ließ es 254 00:12:07,900 --> 00:12:09,910 im RAM, bis ich das Programm beenden. 255 00:12:09,910 --> 00:12:12,860 >> Und tatsächlich ist dies einer der die Gefahr und die Befugnisse eines 256 00:12:12,860 --> 00:12:15,980 der Verwendung einer Sprache wie C Sie haben uneingeschränkten Zugang 257 00:12:15,980 --> 00:12:18,860 auf den gesamten Inhalt Arbeitsspeicher eines Programms, 258 00:12:18,860 --> 00:12:21,340 und welche bösen Jungs in diesen cases-- auch tun 259 00:12:21,340 --> 00:12:23,807 vor allem, wenn wir bekommen, um Web-Programmierung 260 00:12:23,807 --> 00:12:26,890 gegen Ende des Semesters, werden wir besuchen Sie diese topic-- wird herumzustochern, 261 00:12:26,890 --> 00:12:31,660 möglicherweise ist jemand Computers Speicher und finden Sie so kuriosen Dingen 262 00:12:31,660 --> 00:12:32,570 wie wir sahen es. 263 00:12:32,570 --> 00:12:36,900 Oder noch schlimmer, Passwörter, dass er oder sie können dann, schlechte Dinge zu tun. 264 00:12:36,900 --> 00:12:40,240 >> So klar, ich sollte das nicht getan haben, weil seltsame Dinge geschehen. 265 00:12:40,240 --> 00:12:42,310 In der Tat, das ist ein Programm abstürzt. 266 00:12:42,310 --> 00:12:44,580 Dies wäre das Äquivalent sein von Mac OS oder Windows 267 00:12:44,580 --> 00:12:46,770 ein Programmfenster einfach verschwinden. 268 00:12:46,770 --> 00:12:48,300 Ein unerwarteter Fehler ist aufgetreten. 269 00:12:48,300 --> 00:12:50,840 In der Kommandozeilenumgebung sehen wir so etwas wie dieses. 270 00:12:50,840 --> 00:12:54,480 Aber das ist, warum, ist, ich bin einfach nur zu berühren Speicher, der nicht zu mir gehört. 271 00:12:54,480 --> 00:12:57,090 >> Also lassen Sie uns zu verteidigen gegen diese ein etwas in einer anderen Weise 272 00:12:57,090 --> 00:12:59,010 Dazu suchen Sie in diesem Programm hier. 273 00:12:59,010 --> 00:13:01,000 So wiederum das Skelett dass wir earlier-- sah 274 00:13:01,000 --> 00:13:02,480 und ich habe diese Zeit int hervorgehoben. 275 00:13:02,480 --> 00:13:05,900 Und die ganze Zeit hat Haupt tatsächlich zurück Wert. 276 00:13:05,900 --> 00:13:09,120 Auch wenn in den meisten unserer Vorlesung Beispiele, die wir noch nie einmal verwendet 277 00:13:09,120 --> 00:13:10,990 alles in Haupt zurückzukehren. 278 00:13:10,990 --> 00:13:13,710 Wir schreiben nur printf Nähe geschweifte Klammer und das ist es. 279 00:13:13,710 --> 00:13:16,500 Aber kostenlos, was die Compiler getan für Sie, 280 00:13:16,500 --> 00:13:19,510 effektiv, kehrt zurück 0 für Sie. 281 00:13:19,510 --> 00:13:22,950 Schaltet out-- und es ist ein wenig counterintuitive-- dass 0 ist gut. 282 00:13:22,950 --> 00:13:24,690 Es bedeutet nicht per se falsch. 283 00:13:24,690 --> 00:13:29,080 0 ist gut, und alle nicht-0 Wert, die Welt hat sich entschieden, 284 00:13:29,080 --> 00:13:30,619 einen Fehler zu bedeuten. 285 00:13:30,619 --> 00:13:32,910 Also, wenn Sie jemals durcheinander haben etwas auf Ihrem Computer, 286 00:13:32,910 --> 00:13:36,600 oder ein Programm gerade gestorben ist von Ihnen und Sie einige fehlerhafte Fenster bekommen haben 287 00:13:36,600 --> 00:13:40,360 auf dem Bildschirm, sagen Fehler 49 oder negativen Fehler 23-- 288 00:13:40,360 --> 00:13:44,170 einige, die scheinbar willkürliche value-- ist weil ein Programmierer hartcodierte 289 00:13:44,170 --> 00:13:49,370 ein Wert wie negativ oder positiv 49 23, jede Zahl darstellen, wage zu behaupten, 290 00:13:49,370 --> 00:13:53,340 von 4 Milliarden möglichen Dinge das gehen könnte falsch in einem Programm. 291 00:13:53,340 --> 00:13:55,700 >> Also, wie kann ich nehmen Vorteil dieser selbst? 292 00:13:55,700 --> 00:13:58,970 Nun, lassen Sie mich öffnen, ein Programm dass ich im Voraus geschrieben, 293 00:13:58,970 --> 00:14:01,450 und stoßen rund um Online genannt hallo 4. 294 00:14:01,450 --> 00:14:05,650 Und es ist fast identisch, nur dass seine bekam ein wenig Fehlerprüfung. 295 00:14:05,650 --> 00:14:09,660 In diesem Fall habe ich wieder erklärt Haupt wie man zwei Argumente, 296 00:14:09,660 --> 00:14:13,180 aber dieses Mal, auf der Linie 17, Bekanntmachung Ich mache ein bisschen eine Plausibilitätsprüfung. 297 00:14:13,180 --> 00:14:17,100 Ich mache Sie darauf, dass argc gleich gleich 2. 298 00:14:17,100 --> 00:14:18,960 Denn wenn es, dass bedeutet, ich kann sicher 299 00:14:18,960 --> 00:14:21,420 berühren nicht nur Klammer 0, aber Winkel 1. 300 00:14:21,420 --> 00:14:24,330 Und ich voran gehen und ausdrucken, in diesem Fall Zamyla oder Rob 301 00:14:24,330 --> 00:14:26,020 oder was auch immer Wort, das ich getippt. 302 00:14:26,020 --> 00:14:28,020 Und jetzt, nur um ein wenig mehr richtig, 303 00:14:28,020 --> 00:14:31,910 Ich werde ausdrücklich zurück 0 zu bedeuten, alles ist gut. 304 00:14:31,910 --> 00:14:33,300 Nichts Schlimmes passiert. 305 00:14:33,300 --> 00:14:38,590 >> Aber durch Konvention, ich bin zu gehen 1 zurückzukehren, oder ehrlich gesagt alle nicht-0-Wert, 306 00:14:38,590 --> 00:14:40,160 wenn etwas schief ging. 307 00:14:40,160 --> 00:14:43,270 Nun wird der Benutzer nicht zu gehen wirklich merken, was los ist. 308 00:14:43,270 --> 00:14:50,410 In der Tat, wenn ich in dieses Verzeichnis zu gehen, wir vergrößern und dies machen hallo 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla verhält sich, als ich erwarte. 310 00:14:54,210 --> 00:14:58,570 Aber wenn ich stattdessen nicht eingeben nichts, nichts scheint zu geschehen, 311 00:14:58,570 --> 00:14:59,680 aber es stürzt nicht ab. 312 00:14:59,680 --> 00:15:04,660 Und wenn ich statt etwas zu tun wie Rob ist ein Proctor 313 00:15:04,660 --> 00:15:07,550 in Thayer-- Sharing beliebige Informationen. 314 00:15:07,550 --> 00:15:13,680 Aber beachten Sie, argv 1, 2, 3, 4, und 5 sollte jetzt im Speicher vorhanden sind. 315 00:15:13,680 --> 00:15:16,540 Auch das ist nicht das, was mein Programm erwartet, 316 00:15:16,540 --> 00:15:20,300 denn ich habe überprüft, ob argc gleich gleich 2 ist oder nicht. 317 00:15:20,300 --> 00:15:22,140 Also ich bin jetzt der Verteidigung gegen diese. 318 00:15:22,140 --> 00:15:25,290 >> Jetzt, da eine Seite, die wir programmer-- oder vielmehr wir die users-- 319 00:15:25,290 --> 00:15:29,670 nie sehen, dass 0 oder 1, aber mit ein Tool namens Debugger oder andere Werkzeuge, 320 00:15:29,670 --> 00:15:32,250 wie wir sehen, bevor lang, Sie der Programmierer 321 00:15:32,250 --> 00:15:36,590 kann tatsächlich sehen, was sein könnte falsch läuft innerhalb des Programms. 322 00:15:36,590 --> 00:15:39,170 >> Also, irgendwelche Fragen zu arge? 323 00:15:39,170 --> 00:15:40,873 Ja. 324 00:15:40,873 --> 00:15:45,292 >> ZIELGRUPPE: Ich habe gesehen, wo sie haben nicht den Charakter gehabt, [unverständlich] 325 00:15:45,292 --> 00:15:49,669 sagte nur String-Sterne-d, wie Charakter Sternchen Komma. 326 00:15:49,669 --> 00:15:50,710 Sind sie gleichwertig hier? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: Sie sind. 328 00:15:51,626 --> 00:15:55,080 Die Frage ist also, haben Sie gelegentlich gesehen Programme 329 00:15:55,080 --> 00:15:57,270 wie diese, die das nicht tun sagen String argv Halterung 330 00:15:57,270 --> 00:16:01,015 sondern etwas zu sagen wie char argv Sterne-Halterung. 331 00:16:01,015 --> 00:16:03,140 Und es gibt noch weitere Varianten, die man zu sehen bekommt. 332 00:16:03,140 --> 00:16:04,264 Sie sind in der Tat gleichwertig. 333 00:16:04,264 --> 00:16:06,240 Denn jetzt haben wir diese Art Stützräder 334 00:16:06,240 --> 00:16:09,737 auf in Form von String in der CS50 Bibliothek, aber in etwas mehr als einer Woche 335 00:16:09,737 --> 00:16:12,570 oder so werden wir, dass entfernen Behinderung und eigentlich ganz 336 00:16:12,570 --> 00:16:16,820 schauen, was der char und der Stern sind, und wie jene betreffen Speicher 337 00:16:16,820 --> 00:16:18,140 Darstellung im allgemeinen. 338 00:16:18,140 --> 00:16:19,540 Also werden wir darauf zurückkommen. 339 00:16:19,540 --> 00:16:21,540 >> Weitere Fragen zu unseren argv oder arge? 340 00:16:21,540 --> 00:16:22,397 Ja. 341 00:16:22,397 --> 00:16:24,438 ZIELGRUPPE: Warum hat es zurück Ein Fehler [unverständlich]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: Warum hat es einen Fehler zurück only-- oh! 344 00:16:29,230 --> 00:16:31,813 In dem vorherigen Fall, wenn wir wurden rund um futzing mit Memory, 345 00:16:31,813 --> 00:16:35,110 warum hat es nur einen Fehler zurück wenn ich wirklich eine große Zahl eingetippt? 346 00:16:35,110 --> 00:16:36,620 Kurze Antwort ist, dass wir einfach nur Glück. 347 00:16:36,620 --> 00:16:39,240 Allgemein gesagt wird ein Computer reserviert Speicher in Blöcken, 348 00:16:39,240 --> 00:16:42,900 und es gab mir einen ausreichend großen Teil, dass Ich weg, ohne bemerkt zu werden, 349 00:16:42,900 --> 00:16:46,280 der Berührung Winkel 2, Halterung 3, Klammer 50, aber sobald ich geschoben 350 00:16:46,280 --> 00:16:49,080 mein Glück, über das ich ging Grenzen der Teil des Speichers 351 00:16:49,080 --> 00:16:50,520 das Betriebssystem mir gegeben hatte. 352 00:16:50,520 --> 00:16:52,720 Und das ist, wenn es geklemmt nach unten und sagte, nein. 353 00:16:52,720 --> 00:16:54,580 Segmentierung Fehler. 354 00:16:54,580 --> 00:16:55,692 Ja. 355 00:16:55,692 --> 00:16:58,890 >> ZIELGRUPPE: Wie funktioniert der Computer kennen den Wert der arge? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: Wie funktioniert der Computer kennen den Wert der arge? 357 00:17:02,390 --> 00:17:07,920 Wenn Sie ein Programm ausführen, das Programm, von der Natur der blinkenden Eingabeaufforderung 358 00:17:07,920 --> 00:17:11,359 wird das Array von geben Worte, die eingegeben wurden 359 00:17:11,359 --> 00:17:13,300 an der Eingabeaufforderung, war, dass an der Eingabeaufforderung eingegeben. 360 00:17:13,300 --> 00:17:16,569 Und so ist es Ihr Betriebs System, das im Wesentlichen 361 00:17:16,569 --> 00:17:20,329 füllt Haupt Argumente für Sie. 362 00:17:20,329 --> 00:17:22,829 Also das ist eine der Dienstleistungen, dass Sie, irgendwie heimlich 363 00:17:22,829 --> 00:17:24,869 unter der Motorhaube ein Betriebssystem. 364 00:17:24,869 --> 00:17:27,118 Weitere Fragen? 365 00:17:27,118 --> 00:17:27,618 Ja. 366 00:17:27,618 --> 00:17:29,787 >> ZIELGRUPPE: Was Core-Dump das? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: Was Core-Dump das? 368 00:17:31,370 --> 00:17:32,950 Also das ist eine gute Frage. 369 00:17:32,950 --> 00:17:35,312 Und lassen Sie mich wieder in dieses Verzeichnis hier. 370 00:17:35,312 --> 00:17:37,270 Und Sie werden feststellen, dass Ich habe eine neue Datei gibt. 371 00:17:37,270 --> 00:17:41,670 Es ist in der Tat genannten Kern, und es ist tatsächlich in der Regel eine anständige Größe Datei. 372 00:17:41,670 --> 00:17:45,300 Das ist im wesentlichen ein Schnappschuss der Inhalt des Arbeitsspeichers mein Programm 373 00:17:45,300 --> 00:17:46,902 oder RAM, wenn es abgestürzt ist. 374 00:17:46,902 --> 00:17:49,110 Und das wird nützlich sein, möglicherweise, diagnostisch, 375 00:17:49,110 --> 00:17:52,850 wenn wir in einer zukünftigen Vortrag sprechen und Abschnitt über Debugging, 376 00:17:52,850 --> 00:17:55,730 da kann man eigentlich tun, die Äquivalent eines digitalen Autopsie 377 00:17:55,730 --> 00:18:00,300 auf diese Datei, um zu helfen herauszufinden, was Sie falsch gemacht haben in Ihrem Programm. 378 00:18:00,300 --> 00:18:01,220 Ja. 379 00:18:01,220 --> 00:18:04,450 >> ZIELGRUPPE: Ist arge einen Befehl in selbst, oder kann man es etwas nennen? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Gute Frage. 381 00:18:05,575 --> 00:18:08,040 Ist argc einen Befehl in sich selbst, oder kann man es nennen, was? 382 00:18:08,040 --> 00:18:09,290 Es ist definitiv nicht ein Befehl. 383 00:18:09,290 --> 00:18:13,500 Es ist einfach eine Variable Namen oder den Namen eines Arguments, 384 00:18:13,500 --> 00:18:15,481 und so absolut wir könnte diese foo nennen, 385 00:18:15,481 --> 00:18:18,480 wir diese Bar, die dazu neigen, rufen auf die Go-to Worten, dass ein Computer sein 386 00:18:18,480 --> 00:18:19,860 Wissenschaftler geht. 387 00:18:19,860 --> 00:18:22,820 Aber durch Konvention, verwenden wir argc und argv. 388 00:18:22,820 --> 00:18:25,360 Aber das ist nur ein Mensch Konvention, nichts mehr. 389 00:18:25,360 --> 00:18:25,860 In Ordnung. 390 00:18:25,860 --> 00:18:28,140 So stellt sich heraus, ich habe erzählt ein bisschen von einem weißen lie-- 391 00:18:28,140 --> 00:18:31,264 und ehrlich gesagt, in der Zukunft, werden Sie sehen, wir haben erzählt, andere weiße Lügen. 392 00:18:31,264 --> 00:18:33,510 Aber für jetzt, wir gehen zu schälen zurück eine davon. 393 00:18:33,510 --> 00:18:37,310 In diesem Fall hier, wenn ich vorher lief ein Programm wie ./hello oder ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, die Inhalte hatten wir meinen Speicher Computer sucht etwa wie 395 00:18:42,780 --> 00:18:43,280 Diese. 396 00:18:43,280 --> 00:18:45,070 Aber daran erinnern, was ein String ist. 397 00:18:45,070 --> 00:18:49,279 Was haben wir vor einer Woche sagen, was für ein String ist eigentlich unter der Haube? 398 00:18:49,279 --> 00:18:50,320 ZIELGRUPPE: Array von Zeichen. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: Es ist eine Array von Zeichen, oder? 400 00:18:52,111 --> 00:18:55,760 So könnten wir haben eine Reihe von Saiten, aber wiederum eine Zeichenfolge 401 00:18:55,760 --> 00:18:57,150 ein Array von Zeichen. 402 00:18:57,150 --> 00:19:00,010 Also, wenn ich sein wollen wirklich anal, als ich dieses Bild zu zeichnen, 403 00:19:00,010 --> 00:19:03,290 Ich sollte wirklich werden Zeichnung es ein wenig mehr wie diese, 404 00:19:03,290 --> 00:19:08,000 wobei in jeder von diesen Indizes meiner argv Array, 405 00:19:08,000 --> 00:19:11,432 es ist selbst eine ganze Reihe daß selbst in einem Array. 406 00:19:11,432 --> 00:19:13,140 Und nun die Notlüge wir erzählen heute 407 00:19:13,140 --> 00:19:15,181 ist, dass das Bild nicht sieht ganz so aus. 408 00:19:15,181 --> 00:19:19,110 In der Tat, sind die kleinen Quadrate typischerweise außerhalb der großen Rechtecke 409 00:19:19,110 --> 00:19:19,610 da. 410 00:19:19,610 --> 00:19:21,280 Aber wir werden darauf zurückkommen, bevor lang. 411 00:19:21,280 --> 00:19:25,440 Aber das ist ./hello Backslash 0, nämlich die, dass Sonderzeichen 412 00:19:25,440 --> 00:19:28,310 grenzt das Ende einer Zeichenkette, und wir haben ein anderes nach erhielt 413 00:19:28,310 --> 00:19:29,360 Name des Zamyla. 414 00:19:29,360 --> 00:19:30,900 Also, was bedeutet das? 415 00:19:30,900 --> 00:19:33,410 >> Nun, lassen Sie mich gehen Sie vor und eröffnen zwei weitere Beispiele 416 00:19:33,410 --> 00:19:35,220 die online verfügbar sind. 417 00:19:35,220 --> 00:19:40,590 Eines heißt argv1.c und das andere ist argv2. 418 00:19:40,590 --> 00:19:44,260 Es ist ein super-einfaches Programm, das unterscheidet sich von früheren Programmen 419 00:19:44,260 --> 00:19:47,260 , dass ich jetzt mit argc und argv hier oben. 420 00:19:47,260 --> 00:19:54,300 Und jetzt bin ich die Integration mit einer for-Schleife in Zeile 18, von i = 0 auf bis zu argc. 421 00:19:54,300 --> 00:19:56,850 Und was soll ich tun mit dieser Zeile Code hier? 422 00:19:56,850 --> 00:19:58,270 Auf Englisch. 423 00:19:58,270 --> 00:20:00,510 Dies zeigt offensichtlich Verwendung von argc. 424 00:20:00,510 --> 00:20:03,670 Aber in Englisch, was macht es tun, wenn ich dieses Programm? 425 00:20:03,670 --> 00:20:04,366 Ja? 426 00:20:04,366 --> 00:20:07,386 >> ZIELGRUPPE: Es wird drucken Sie Ihre Bildschirm so oft wie Sie wollen. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Genau. 428 00:20:08,260 --> 00:20:10,480 Also was auch immer Worte, die ich Geben Sie bei der Eingabeaufforderung, es ist 429 00:20:10,480 --> 00:20:13,120 gehen zu erbrechen sie mich an eine pro Zeile. 430 00:20:13,120 --> 00:20:14,370 Also lassen Sie uns gehen Sie vor und tun dies. 431 00:20:14,370 --> 00:20:17,862 Lassen Sie mich in meinem Verzeichnis gehen und tun, machen argv1 ./argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 Und nun lassen Sie uns es einfach halten. 434 00:20:21,770 --> 00:20:23,834 Lassen Sie uns zunächst nichts. 435 00:20:23,834 --> 00:20:26,750 Es tat ausdrucken eine Sache, und Das ist in der Tat der Name des Programms, 436 00:20:26,750 --> 00:20:28,240 denn das ist in der Halterung 0. 437 00:20:28,240 --> 00:20:33,290 Wenn ich jetzt sagen, foo, wird es zu tun die beiden, und wenn ich sage foo bar, 438 00:20:33,290 --> 00:20:35,580 es geht um diese drei Dinge zu sagen. 439 00:20:35,580 --> 00:20:37,740 Nun, das ist ein wenig interessant, vielleicht. 440 00:20:37,740 --> 00:20:41,450 Aber erinnern daran, dass argv ist ein Array von Zeichenketten, 441 00:20:41,450 --> 00:20:45,960 aber ein String ist ein Array von Zeichen, so können wir die Dinge nehmen eine Kerbe 442 00:20:45,960 --> 00:20:48,560 und anzuwenden, die Grund Logik und machen Code, 443 00:20:48,560 --> 00:20:51,160 sieht ein wenig mehr kryptisch, zugegebenermaßen. 444 00:20:51,160 --> 00:20:53,540 Sondern mit einer verschachtelten Schleife, so etwas wie 445 00:20:53,540 --> 00:20:57,030 zu dem, was Sie vielleicht von Mario erinnern, Zum Beispiel, wenn Sie tat es auf diese Weise. 446 00:20:57,030 --> 00:21:00,380 >> So, jetzt auf der Linie 19 bemerkt, ich bin wieder Iteration über meine Argumente, 447 00:21:00,380 --> 00:21:02,410 von 0 auf bis zu argc. 448 00:21:02,410 --> 00:21:05,510 Und jetzt im Einklang 21-- Ich bin Kreditaufnahme einen Trick von den letzten week-- 449 00:21:05,510 --> 00:21:11,090 Ich bin Überprüfung, was ist der Länge von argv Halterung i. 450 00:21:11,090 --> 00:21:12,920 Ich Speicherung dieser Antwort in n. 451 00:21:12,920 --> 00:21:18,230 Und dann bin ich auf die Integration von j bis n, wobei j auf 0 initialisiert. 452 00:21:18,230 --> 00:21:19,460 Also, Konvention zum Zählen. 453 00:21:19,460 --> 00:21:22,335 Sobald Sie die ich benutzt habe, wenn Sie ein Nested Loop, die Sie nicht verwenden kann ich wieder, 454 00:21:22,335 --> 00:21:25,770 sonst wirst du Klamotten, potentiell, der Wert außerhalb der inneren Schleife. 455 00:21:25,770 --> 00:21:27,200 Also ich bin mit j durch Konvention. 456 00:21:27,200 --> 00:21:28,020 Wir könnten k verwenden. 457 00:21:28,020 --> 00:21:31,080 Wenn Sie mehr als k, werden Sie wahrscheinlich haben zu viel Verschachtelung, in der Regel. 458 00:21:31,080 --> 00:21:33,800 Aber jetzt, bemerkt mein printf Linie ist etwas anders. 459 00:21:33,800 --> 00:21:37,520 Ich bin nicht Druck% s, ich bin Druck% C, was natürlich 460 00:21:37,520 --> 00:21:39,460 ist ein Platzhalter für ein Zeichen. 461 00:21:39,460 --> 00:21:40,770 >> Und nun bemerken diese Syntax. 462 00:21:40,770 --> 00:21:41,270 Neu. 463 00:21:41,270 --> 00:21:42,630 Wir haben es nicht gesehen. 464 00:21:42,630 --> 00:21:47,290 Aber logisch, nur bedeutet dies, bekommen die i-te Zeichenfolge in argv 465 00:21:47,290 --> 00:21:50,067 und nutzen Sie die j-te, was? 466 00:21:50,067 --> 00:21:50,900 ZIELGRUPPE: Charakter. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: Zeichen in dieser Zeichenkette. 468 00:21:52,800 --> 00:21:57,100 So durch eckige Klammern gefolgt von eckigen Klammern, 469 00:21:57,100 --> 00:22:00,390 das ist Tauchen ersten in Strings argv ist, 470 00:22:00,390 --> 00:22:02,225 und dann die zweite eckigen Klammern mit j 471 00:22:02,225 --> 00:22:06,580 ist das Tauchen in die Charaktere der dass bestimmte Zeichenfolge in argv. 472 00:22:06,580 --> 00:22:09,562 Und dann, nur für eine gute Maßnahme, Ich drucke eine neue Linie hier. 473 00:22:09,562 --> 00:22:12,020 So, jetzt lassen Sie mich gehen Sie vor und öffnen bis ein etwas größeres Fenster 474 00:22:12,020 --> 00:22:13,600 so können wir dies in Aktion zu sehen. 475 00:22:13,600 --> 00:22:15,700 Lassen Sie mich in diesem Ordner zu gehen. 476 00:22:15,700 --> 00:22:22,550 Und jetzt tun machen argv-2-- whoops-- argv-2 zu machen, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Eingeben. 478 00:22:23,110 --> 00:22:24,860 Und es ist ein wenig schwer vertikal zu lesen, 479 00:22:24,860 --> 00:22:27,920 aber das ist in der Tat der Name des Programm, gefolgt von einer Leerzeile. 480 00:22:27,920 --> 00:22:30,210 Nun lassen Sie mich gehen Sie vor und tun foo. 481 00:22:30,210 --> 00:22:33,210 Ähnlich schwer zu lesen, aber es ist Tat Druck ein Zeichen pro Zeile. 482 00:22:33,210 --> 00:22:36,780 Und wenn ich bar zu tun, ist es jetzt drucken Sie diese Zeile für Zeile. 483 00:22:36,780 --> 00:22:40,140 Also das Essen zum Mitnehmen ist hier nicht so sehr dass, wow, an diesem neuen Trick ordentlich aussehen 484 00:22:40,140 --> 00:22:44,750 wo Sie die Inhalte bekommen können der eines Arrays bestimmte Zeichen, 485 00:22:44,750 --> 00:22:48,380 sondern vielmehr, wie wir nehmen diese Grund Ideen wie die Indizierung in ein Array, 486 00:22:48,380 --> 00:22:51,620 und dann in einem Indizierungs Array, das in diesem Array war, 487 00:22:51,620 --> 00:22:56,180 und nur die Anwendung der gleichen Ideen etwas anspruchsvollere Beispiele. 488 00:22:56,180 --> 00:22:59,560 Aber die Grundlagen wirklich nicht geändert, auch seit letzter Woche. 489 00:22:59,560 --> 00:23:02,350 >> Jetzt ist diese Art von zeitnahen, in, dass, sich erinnern, in Woche Null 490 00:23:02,350 --> 00:23:04,110 Wir spielten mit einem Telefonbuch wie dieses. 491 00:23:04,110 --> 00:23:06,670 Und obwohl dies offensichtlich physische Stücke von Papier, 492 00:23:06,670 --> 00:23:09,150 Sie können Art denken ein Telefonbuch als Array. 493 00:23:09,150 --> 00:23:12,770 Sicher, wenn Sie waren neu zu implementieren Diese Stücke sind diese Stücke von Papier 494 00:23:12,770 --> 00:23:15,260 in einem Computer, wahrscheinlich Sie etwas verwenden würden 495 00:23:15,260 --> 00:23:20,270 wie ein Array an alle, die zu speichern Namen und Nummern von einer ganzen Weg 496 00:23:20,270 --> 00:23:23,800 bis Z. Das ist schön, weil es ermöglicht uns die Möglichkeit, 497 00:23:23,800 --> 00:23:28,310 vielleicht zu überlegen, wie Sie vielleicht tatsächlich so etwas umzusetzen. 498 00:23:28,310 --> 00:23:31,250 Wie bei einer Reihe von Türen hier. 499 00:23:31,250 --> 00:23:36,380 Also, wenn ich could-- wir brauchen eine freiwillig auf bis zu kommen. 500 00:23:36,380 --> 00:23:36,980 Mal sehen. 501 00:23:36,980 --> 00:23:40,650 Ein unbekanntes Gesicht vielleicht, unbekanntes Gesicht vielleicht. 502 00:23:40,650 --> 00:23:42,090 Wie wäre es in orange? 503 00:23:42,090 --> 00:23:42,680 Hier. 504 00:23:42,680 --> 00:23:45,870 Orange Hemd, kommen Sie auf. 505 00:23:45,870 --> 00:23:52,230 >> Lassen Sie uns jetzt voran gehen und sich bewegen Diese Türen zur Seite, 506 00:23:52,230 --> 00:23:54,020 bewegen diese aus dem Weg für einen Moment. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Wie heißen Sie? 509 00:23:57,760 --> 00:23:58,580 >> AJAY: 510 00:23:58,580 --> 00:23:58,655 >> DAVID MALAN: Ajay. 511 00:23:58,655 --> 00:23:58,680 David. 512 00:23:58,680 --> 00:23:59,451 Freut mich, dich kennenzulernen. 513 00:23:59,451 --> 00:23:59,950 In Ordnung. 514 00:23:59,950 --> 00:24:04,500 So hinter diesen sechs haben wir Türen digital auf der screen-- 515 00:24:04,500 --> 00:24:07,810 oder vielmehr sieben Türen auf der screen-- eine ganze Reihe von Zahlen. 516 00:24:07,810 --> 00:24:10,099 Und ich habe ihr nichts gesagt in advance-- vereinbart? 517 00:24:10,099 --> 00:24:11,140 AJAY: Nichts im Voraus. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Alles was ich will, was Sie tun Jetzt ist es für mich zu finden, und für uns, 519 00:24:14,730 --> 00:24:20,920 wirklich, die Zahl 50, einen Schritt zu einer Zeit. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Zahl 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: Die Zahl 50. 522 00:24:22,580 --> 00:24:24,746 Und man kann zeigen, was Hinter jeder dieser Türen 523 00:24:24,746 --> 00:24:27,930 durch einfaches Berühren mit dem Finger. 524 00:24:27,930 --> 00:24:31,364 Verdammt. [Gelächter] 525 00:24:31,364 --> 00:24:34,560 >> [Applaus] 526 00:24:34,560 --> 00:24:39,540 >> Sehr gut gemacht. 527 00:24:39,540 --> 00:24:40,400 Ok. 528 00:24:40,400 --> 00:24:44,090 Wir haben ein schönes Geschenk Preis für Sie hier. 529 00:24:44,090 --> 00:24:46,520 Ihre Auswahl der Filme, die wir letzte Woche diskutiert. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, Mann. 531 00:24:47,362 --> 00:24:49,050 Oh, ich habe noch nie gesehen, Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID MALAN: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 In Ordnung. 534 00:24:50,140 --> 00:24:53,790 So halten nur auf einen Augenblick. 535 00:24:53,790 --> 00:24:57,430 How-- machen wir diese ein lehrbar moment-- 536 00:24:57,430 --> 00:25:00,412 Wie haben Sie von gehen Suche nach der Nummer 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: Ich habe zufällig. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Sie wählten zufällig und hatte Glück. 539 00:25:03,420 --> 00:25:03,790 AJAY: Ja. 540 00:25:03,790 --> 00:25:04,456 DAVID MALAN: OK. 541 00:25:04,456 --> 00:25:05,050 Ausgezeichnet. 542 00:25:05,050 --> 00:25:08,470 So, jetzt musste man nicht Glück bekommen, was sonst 543 00:25:08,470 --> 00:25:10,210 könnte hinter diesen Türen geschehen? 544 00:25:10,210 --> 00:25:12,930 Also, wenn ich weitermachen und zeigen diese Zahlen hier 545 00:25:12,930 --> 00:25:15,180 sie tatsächlich sind in zufälliger Reihenfolge. 546 00:25:15,180 --> 00:25:17,750 Und das Beste, das Sie haben könnten, getan, ehrlich gesagt, ist von letztlich 547 00:25:17,750 --> 00:25:19,410 im schlimmsten Fall, Prüfen sie alle. 548 00:25:19,410 --> 00:25:23,000 Also du hast super-glücklich, die ist nicht, was wir hätten einen Algorithmus nennen. 549 00:25:23,000 --> 00:25:24,730 Ja, Glückwunsch. 550 00:25:24,730 --> 00:25:27,010 Aber jetzt let's-- Humor mich, wenn Sie. 551 00:25:27,010 --> 00:25:28,310 Lassen Sie uns auf dieser Registerkarte finden Sie hier. 552 00:25:28,310 --> 00:25:31,460 Und hier sind die Zahlen in klar was scheint, eine zufällige Ordnung, 553 00:25:31,460 --> 00:25:32,280 und sie waren. 554 00:25:32,280 --> 00:25:35,160 Aber jetzt, wenn ich stattdessen Anspruch dass hinter diesen Türen 555 00:25:35,160 --> 00:25:39,070 sind Zahlen, die sortiert werden. 556 00:25:39,070 --> 00:25:41,780 Das Ziel ist es nun, auch finden Sie uns die Nummer 50. 557 00:25:41,780 --> 00:25:45,910 Aber tun Sie es algorithmisch und sagen uns, wie Sie darüber gehst. 558 00:25:45,910 --> 00:25:48,020 Und wenn Sie es finden, halten Sie den Film. 559 00:25:48,020 --> 00:25:49,520 Sie finden es nicht, es wird Ihnen zurück. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: So werde ich, um die Enden zu überprüfen erstens, wenn bestimmen there's-- 562 00:25:58,112 --> 00:26:02,048 [Lachen und Beifall] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID MALAN: Hier gehen Sie. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Werfen wir einen Blick auf eine von Ajay Vorgänger, 567 00:26:21,700 --> 00:26:25,450 Sean, der nicht ganz so glücklich war. 568 00:26:25,450 --> 00:26:28,670 OK, also Ihre Aufgabe hier, Sean, ist die folgende. 569 00:26:28,670 --> 00:26:32,970 Ich habe hinter diesen versteckt Türen die Zahl sieben, 570 00:26:32,970 --> 00:26:37,200 aber versteckt in einige dieser Türen ebenso sind andere nicht-negative Zahlen. 571 00:26:37,200 --> 00:26:40,730 Und Ihr Ziel ist es, daran zu denken obere Reihe von Zahlen nur als ein Array. 572 00:26:40,730 --> 00:26:43,590 Wir sind nur eine Folge von Stücken Papier mit Zahlen hinter ihnen. 573 00:26:43,590 --> 00:26:47,640 Und Ihr Ziel ist, nur mit der Spitze Array hier finden mir die Nummer sieben. 574 00:26:47,640 --> 00:26:51,200 Und wir werden dann werde Kritik wie Sie es tun. 575 00:26:51,200 --> 00:26:52,920 Finden Sie uns die Nummer sieben, bitte. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Nein. 578 00:27:03,070 --> 00:27:06,760 579 00:27:06,760 --> 00:27:08,179 5, 19, 13. 580 00:27:08,179 --> 00:27:16,752 581 00:27:16,752 --> 00:27:17,835 Es ist nicht eine Fangfrage. 582 00:27:17,835 --> 00:27:21,420 583 00:27:21,420 --> 00:27:21,920 1. 584 00:27:21,920 --> 00:27:26,715 585 00:27:26,715 --> 00:27:29,840 An dieser Stelle Ihre Punktzahl ist nicht sehr gut, so könnte man genauso gut weitermachen. 586 00:27:29,840 --> 00:27:32,870 587 00:27:32,870 --> 00:27:33,370 3. 588 00:27:33,370 --> 00:27:38,570 589 00:27:38,570 --> 00:27:39,802 Weitergehen. 590 00:27:39,802 --> 00:27:42,510 Ehrlich gesagt, kann ich nicht helfen, aber frage mich, was du auch nur darüber nachzudenken. 591 00:27:42,510 --> 00:27:44,990 >> Sean: Ich kann nur aus der obersten Reihe zu nehmen. 592 00:27:44,990 --> 00:27:46,240 DAVID MALAN: Nur der oberen Reihe. 593 00:27:46,240 --> 00:27:47,281 Sie haben also drei links bekam. 594 00:27:47,281 --> 00:27:48,310 So finden Sie mich 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [PUBLIKUM SCHREIT Vorschläge] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Also diese beiden waren erstaunlich aus sehr unterschiedlichen Gründen. 599 00:28:26,130 --> 00:28:29,150 Also das ist, wo wir vor einem Augenblick aufgehört, 600 00:28:29,150 --> 00:28:32,530 und der Schlüssel hier Einblick wurde diese Türen hatte Nummern 601 00:28:32,530 --> 00:28:37,390 hinter ihnen, die sortiert wurden, die ideale Mitnehmen, für die ist, dass Sie tun können 602 00:28:37,390 --> 00:28:39,670 bei grundsätzlich besser Diese zweite example-- 603 00:28:39,670 --> 00:28:42,380 und in der Tat war, dass Seans ersten Versuch mit Zufallszahlen 604 00:28:42,380 --> 00:28:45,460 ebenso before-- aber sobald da diese Zahlen geordnet, 605 00:28:45,460 --> 00:28:47,980 ähnlich wie das Telefonbuch, was kann man natürlich tun? 606 00:28:47,980 --> 00:28:50,090 Oder wie kann man dieses Wissen nutzen? 607 00:28:50,090 --> 00:28:51,530 Ja. 608 00:28:51,530 --> 00:28:54,910 >> ZIELGRUPPE: Sie gehen auf halbem Weg [unverständlich]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Ja. 610 00:28:55,660 --> 00:28:56,160 Genau. 611 00:28:56,160 --> 00:28:59,680 So Ajay anfängliche Impuls war , um die Enden zu überprüfen, soweit ich mich erinnere, 612 00:28:59,680 --> 00:29:02,320 und dann werden wir eine Art Fertig das Beispiel schnell. 613 00:29:02,320 --> 00:29:05,220 Aber wenn wir begonnen, diese mehr zu tun methodisch in diese Richtung, 614 00:29:05,220 --> 00:29:07,860 jedoch ausgehend etwa in der Mitte, weil sie sortiert sind, 615 00:29:07,860 --> 00:29:10,900 sobald wir zeigen die Nummer 16 haben wir daher wissen-- 616 00:29:10,900 --> 00:29:14,850 und lassen Sie uns genau das tun wir dass-- daher wissen, dass 50, in der heutigen Fall 617 00:29:14,850 --> 00:29:16,080 hat zu nach rechts sein. 618 00:29:16,080 --> 00:29:18,735 So wie in Woche null, wenn wir riss das Telefonbuch in der Hälfte 619 00:29:18,735 --> 00:29:21,490 und warf die Hälfte der Problem weg, dieselbe Idee hier. 620 00:29:21,490 --> 00:29:23,680 Wir können diesen Halb werfen des Problems entfernt. 621 00:29:23,680 --> 00:29:25,730 Und wahrscheinlich das, was Sie könnte algorithmisch zu tun, 622 00:29:25,730 --> 00:29:28,710 wenn Sie wissen, dass 50 sein muss auf der rechten Seite, wenn es überall 623 00:29:28,710 --> 00:29:31,390 ist zu versuchen, dort, in der Mitte der verbleibenden Türen. 624 00:29:31,390 --> 00:29:33,450 Natürlich 50 höher als 42, so können wir 625 00:29:33,450 --> 00:29:36,060 werfen diese Rest Quartal des Problems entfernt, 626 00:29:36,060 --> 00:29:38,510 und schließlich zu identifizieren so etwas wie 50. 627 00:29:38,510 --> 00:29:41,050 Aber so, wie mit der Telefonbuch, diese Zahlen 628 00:29:41,050 --> 00:29:44,560 wurden uns bereits gegeben sortierter Reihenfolge, die uns verlässt 629 00:29:44,560 --> 00:29:47,450 mit der Frage, wie wollen Sie Dinge in Ordnung sortiert? 630 00:29:47,450 --> 00:29:49,640 Und, ehrlich gesagt, zu welchem ​​Preis? 631 00:29:49,640 --> 00:29:51,390 Es ist eine Sache zu sein übergab das Telefonbuch 632 00:29:51,390 --> 00:29:54,810 und dann beeindrucken Sie Ihre Freunde von der Suche nach eine Telefonnummer wirklich schnell, oder? 633 00:29:54,810 --> 00:29:58,520 Reißen 32 Seiten aus, um eine zu finden Person von 4 Milliarden Seiten, 634 00:29:58,520 --> 00:30:00,470 wir sagten, war eine extreme Beispiel. 635 00:30:00,470 --> 00:30:03,320 Aber wie viel Zeit hat es gedauert, Verizon, dass Telefonbuch sortieren? 636 00:30:03,320 --> 00:30:06,170 Wie viel Zeit hat es gedauert, uns , diese sieben Zahlen sortieren? 637 00:30:06,170 --> 00:30:10,110 Das ist eine Frage, die wir bisher völlig ignoriert. 638 00:30:10,110 --> 00:30:12,330 >> Also lassen Sie uns die Antwort auf diese Frage ist jetzt. 639 00:30:12,330 --> 00:30:15,920 Und wir jetzt sind alle aus Filmen, aber wir haben einige Stress-Bälle. 640 00:30:15,920 --> 00:30:19,480 Wenn, sagen wir, acht Freiwilligen hätte nichts dagegen, bei uns hier oben? 641 00:30:19,480 --> 00:30:24,100 Lassen Sie uns weitermachen und tun, wie etwa die vier von euch, drei von Ihnen hier? 642 00:30:24,100 --> 00:30:25,290 Holen Sie sich ein paar neue Gesichter. 643 00:30:25,290 --> 00:30:27,220 Und die vier von euch dort? 644 00:30:27,220 --> 00:30:30,760 Und now-- uns nicht Bias lassen hier-- und Nummer acht hier am Ende. 645 00:30:30,760 --> 00:30:32,060 Komm auf. 646 00:30:32,060 --> 00:30:32,560 In Ordnung. 647 00:30:32,560 --> 00:30:37,480 Also, was wir hier für haben jeder von euch ist eine Zahl. 648 00:30:37,480 --> 00:30:40,055 Wenn Sie möchten, zu gehen vor, nehmen Sie diese Nummer. 649 00:30:40,055 --> 00:30:40,763 Wie heißen Sie? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID MALAN: Artie, okay. 652 00:30:43,100 --> 00:30:44,297 Sie sind die Nummer 1 ist. 653 00:30:44,297 --> 00:30:45,310 >> AMIN: Amin. 654 00:30:45,310 --> 00:30:46,060 DAVID MALAN: Amin. 655 00:30:46,060 --> 00:30:46,820 David. 656 00:30:46,820 --> 00:30:47,530 Sie sind die Nummer 2 ist. 657 00:30:47,530 --> 00:30:49,100 Und gehen Sie vor, wie ich die Hand Sie die Papierblätter, 658 00:30:49,100 --> 00:30:52,130 Linie selbst sich vor der Musik steht in der gleichen Reihenfolge wie oben. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Hallo, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID MALAN: Andy, es ist schön, dich zu sehen. 661 00:30:53,970 --> 00:30:54,520 Zahl 3 ist. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Jacob, Nummer 4. 664 00:30:56,760 --> 00:30:57,549 Willkommen an Bord. 665 00:30:57,549 --> 00:30:58,090 GRANT: Grant. 666 00:30:58,090 --> 00:30:58,881 DAVID MALAN: Grant. 667 00:30:58,881 --> 00:31:00,348 Number 5. 668 00:31:00,348 --> 00:31:01,200 >> ALANNA: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, Zahl 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, Zahl 7. 672 00:31:04,880 --> 00:31:05,200 Und? 673 00:31:05,200 --> 00:31:05,830 >> Rachel: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, Nummer 8. 675 00:31:06,815 --> 00:31:07,100 In Ordnung. 676 00:31:07,100 --> 00:31:08,766 Gehen Sie weiter und lassen Sie sich in dieser Reihenfolge. 677 00:31:08,766 --> 00:31:11,440 Lassen Sie mich einen verbleibenden Musik stehen an Ort und Stelle. 678 00:31:11,440 --> 00:31:13,670 Wo sehen Sie einen Stand? 679 00:31:13,670 --> 00:31:14,170 Ok. 680 00:31:14,170 --> 00:31:18,710 Gehen Sie voran und setzen Sie Ihre Zahlen wo das Publikum sie sehen werden, 681 00:31:18,710 --> 00:31:20,340 den Notenständer nach außen zeigt. 682 00:31:20,340 --> 00:31:27,240 Und hoffentlich unseren ersten Plausibilitätsprüfung hier-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Warten Sie eine Minute. 685 00:31:29,070 --> 00:31:31,140 Wir haben nicht eine 8. 686 00:31:31,140 --> 00:31:35,180 Ich muss dich aus zu vertreiben das Beispiel irgendwie. 687 00:31:35,180 --> 00:31:35,680 Nein. 688 00:31:35,680 --> 00:31:36,940 Nein, das ist OK. 689 00:31:36,940 --> 00:31:37,890 Mal sehen. 690 00:31:37,890 --> 00:31:38,880 Wir können dies tun. 691 00:31:38,880 --> 00:31:39,440 Stehen zu. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Dort gehen wir. 694 00:31:45,740 --> 00:31:46,800 Richtig. 695 00:31:46,800 --> 00:31:47,360 In Ordnung. 696 00:31:47,360 --> 00:31:50,260 So, jetzt haben wir 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 Ok. 698 00:31:50,760 --> 00:31:51,360 Ausgezeichnet. 699 00:31:51,360 --> 00:31:54,400 >> So ist die Frage bei der Hand ist, bei welche Kosten und über welche Methode, 700 00:31:54,400 --> 00:31:58,580 können wir diese Zahlen tatsächlich hier zu sortieren so dass wir nach hinten arbeiten Art, 701 00:31:58,580 --> 00:32:02,759 schließlich und decide-- ist es wirklich beeindruckend, ist es wirklich effizient, 702 00:32:02,759 --> 00:32:04,550 dass ich teilen kann und erobern ein Telefonbuch? 703 00:32:04,550 --> 00:32:06,716 Ist es wirklich effizient, dass Ich kann teilen und erobern 704 00:32:06,716 --> 00:32:08,600 diese digitalen Stücke Papier auf dem Brett, 705 00:32:08,600 --> 00:32:14,500 wenn es vielleicht wird uns kosten Vermögen in der Zeit oder Energie oder CPU-Zyklen 706 00:32:14,500 --> 00:32:17,340 tatsächlich unsere Daten bekommen in etwas sortierter Reihenfolge? 707 00:32:17,340 --> 00:32:18,930 Also lassen Sie uns diese Frage stellen. 708 00:32:18,930 --> 00:32:22,077 >> Also zunächst einmal, sind diese Zahlen in so ziemlich zufälliger Reihenfolge, 709 00:32:22,077 --> 00:32:24,160 und ich werde vorschlagen einen Algorithmus oder Verfahren 710 00:32:24,160 --> 00:32:25,970 durch die wir diese Leute zu sortieren. 711 00:32:25,970 --> 00:32:28,100 Ich werde zu nähern Diese hübsche naiv. 712 00:32:28,100 --> 00:32:30,730 Und ich werde, zu erkennen, dass es eine Art viel für mich 713 00:32:30,730 --> 00:32:32,890 meiner Meinung nach um die Umwicklung gesamten Daten auf einmal setzen. 714 00:32:32,890 --> 00:32:33,640 Aber wissen Sie was? 715 00:32:33,640 --> 00:32:37,450 Ich werde einige machen sehr einfache Grenzkorrekturen. 716 00:32:37,450 --> 00:32:41,152 4 und 2 sind nicht in Ordnung, wenn die Ziel ist es, vom 1. auf bis zu 8 gehen. 717 00:32:41,152 --> 00:32:41,860 Damit Sie wissen, was? 718 00:32:41,860 --> 00:32:43,776 Ich werde Sie Jungs tauschen, und wenn du 719 00:32:43,776 --> 00:32:46,380 physikalisch-Positionen und Ihre Stücke Papier. 720 00:32:46,380 --> 00:32:47,894 Jetzt 4 und 6 sind in dieser Reihenfolge. 721 00:32:47,894 --> 00:32:49,060 Ich werde verlassen diejenigen sein. 722 00:32:49,060 --> 00:32:50,227 6 und 8, die sind in Ordnung. 723 00:32:50,227 --> 00:32:51,185 Gehen zu lassen sie sein. 724 00:32:51,185 --> 00:32:52,170 8 AND1, nicht in Ordnung. 725 00:32:52,170 --> 00:32:54,790 Wenn Sie zwei hätte nichts dagegen tauschen. 726 00:32:54,790 --> 00:32:57,300 Jetzt 8 und 3, wenn euch könnte tauschen. 727 00:32:57,300 --> 00:32:59,320 8 und 7, wenn euch könnte tauschen. 728 00:32:59,320 --> 00:33:01,790 Und 8 und 5, wenn euch könnte tauschen. 729 00:33:01,790 --> 00:33:03,980 >> Jetzt bin ich getan? 730 00:33:03,980 --> 00:33:05,200 Nein, offensichtlich nicht. 731 00:33:05,200 --> 00:33:07,880 Aber ich gemacht habe die Situation besser, oder? 732 00:33:07,880 --> 00:33:09,430 Was war wieder Ihren Namen, Ihre Nummer 8? 733 00:33:09,430 --> 00:33:10,055 >> Rachel: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: So hat Rachel effektiv bis ziemlich weit sprudelte, 735 00:33:12,850 --> 00:33:15,660 den ganzen Weg bis zum Ende des mein Array von Zahlen hier. 736 00:33:15,660 --> 00:33:17,310 Und so, dass Problem ist eine Art gelöst. 737 00:33:17,310 --> 00:33:21,670 Nun, klar, muss noch 2 bewegen ein bisschen, und 4 und 6 und 1. 738 00:33:21,670 --> 00:33:24,420 Aber ich scheine eine bekommen haben etwas näher auf die Lösung. 739 00:33:24,420 --> 00:33:26,790 Also lassen Sie uns gelten diese gleiche naiv Heuristik erneut. 740 00:33:26,790 --> 00:33:27,690 2 und 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 und 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 und 1 mm mm. 743 00:33:29,930 --> 00:33:32,230 Lassen Sie uns tauschen. 744 00:33:32,230 --> 00:33:33,200 6 und 3 mm mm. 745 00:33:33,200 --> 00:33:34,420 Lassen Sie uns tauschen. 746 00:33:34,420 --> 00:33:35,580 6 und 7 ist OK. 747 00:33:35,580 --> 00:33:36,590 7 und 5, nee. 748 00:33:36,590 --> 00:33:37,790 Lassen Sie uns tauschen. 749 00:33:37,790 --> 00:33:38,470 Und nun 7 und 8. 750 00:33:38,470 --> 00:33:39,862 Und was ist Ihr Name? 751 00:33:39,862 --> 00:33:40,570 FRANCES: Frances. 752 00:33:40,570 --> 00:33:41,445 DAVID MALAN: Frances. 753 00:33:41,445 --> 00:33:44,230 Jetzt so Frances ist in auch eine bessere Position, denn jetzt 7 und 8 754 00:33:44,230 --> 00:33:46,440 richtig bis an die Spitze geleitet. 755 00:33:46,440 --> 00:33:47,510 SO 2 und 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 und 1, Lassen Sie uns tauschen. 757 00:33:48,720 --> 00:33:50,410 4 und 3, Lassen Sie uns tauschen. 758 00:33:50,410 --> 00:33:51,550 4 und 6, sind Sie auf OK. 759 00:33:51,550 --> 00:33:53,340 6 und 5, Lassen Sie uns tauschen. 760 00:33:53,340 --> 00:33:54,590 Und jetzt die Jungs sind gut. 761 00:33:54,590 --> 00:33:55,780 Wir sind fast da. 762 00:33:55,780 --> 00:33:57,706 2 und 1, nicht in Ordnung, so zu tauschen. 763 00:33:57,706 --> 00:33:59,080 Und jetzt lassen Sie mich eine Plausibilitätsprüfung zu tun. 764 00:33:59,080 --> 00:34:03,080 2 und 3, 3 und 4, 4 und 5, 5 und 6, 6 und 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, so sind wir fertig. 766 00:34:05,060 --> 00:34:09,310 >> Aber zu welchem ​​Preis habe ich sortieren diese hier? 767 00:34:09,310 --> 00:34:13,960 Nun, wie viele Schritte habe ich möglicherweise zu nehmen, wenn diese Leute Sortier? 768 00:34:13,960 --> 00:34:15,710 Nun, wir werden wieder auf diese Frage kommen. 769 00:34:15,710 --> 00:34:18,030 Aber, ehrlich gesagt, wenn du ein wenig gelangweilt, das ist 770 00:34:18,030 --> 00:34:22,270 Art enthüllt, dass dies nicht vielleicht die effizienteste Algorithmus. 771 00:34:22,270 --> 00:34:25,230 Und in der Tat, ehrlich gesagt, ich schwitze umso mehr zu Fuß hin und her. 772 00:34:25,230 --> 00:34:26,639 Das fühlte sich nicht besonders effizient. 773 00:34:26,639 --> 00:34:27,805 Lassen Sie uns also etwas anderes versuchen. 774 00:34:27,805 --> 00:34:31,870 Wenn euch könnte zurückgesetzt euch diesen acht Werte. 775 00:34:31,870 --> 00:34:32,969 Gut gemacht. 776 00:34:32,969 --> 00:34:36,570 >> Lassen Sie uns einen Blick digital, für nur ein Moment, bevor wir versuchen, etwas anderes, 777 00:34:36,570 --> 00:34:38,179 auf das, was gerade passiert ist. 778 00:34:38,179 --> 00:34:41,330 Hier oben, über ein zu sehen sind Sie Visualisierung dieser acht Menschen 779 00:34:41,330 --> 00:34:44,719 wobei blau und rot Balken repräsentieren Zahlen. 780 00:34:44,719 --> 00:34:46,670 Der größere der Bar, Je größer die Zahl. 781 00:34:46,670 --> 00:34:48,510 Je kürzer der Balken, je kleiner die Zahl ist. 782 00:34:48,510 --> 00:34:51,560 Und was wirst du sehen, ist in zufälliger Reihenfolge mehr als acht von ihnen. 783 00:34:51,560 --> 00:34:55,830 Du wirst sehen, diese Bars immer von dem gleichen Algorithmus sortiert, 784 00:34:55,830 --> 00:34:59,890 oder eine Reihe von Anweisungen, die wir werden von nun an Bubble-Sort nennen. 785 00:34:59,890 --> 00:35:04,000 So bemerken, jede Sekunde oder so, zwei Bars aufleuchten in rot, 786 00:35:04,000 --> 00:35:05,590 werden von dem Computer verglichen. 787 00:35:05,590 --> 00:35:08,630 Und dann, wenn die große Bar und die kleine Bar sind in Ordnung, 788 00:35:08,630 --> 00:35:11,220 sie werden für mich getauscht. 789 00:35:11,220 --> 00:35:15,120 >> Nun, das ist unglaublich langweilig Um dies zu sehen, natürlich, 790 00:35:15,120 --> 00:35:18,630 für sehr lange, aber feststellen, dass die takeaway-- großen Bars nach rechts bewegt, 791 00:35:18,630 --> 00:35:20,460 kleine Balken nach links bewegt. 792 00:35:20,460 --> 00:35:23,380 Lassen Sie uns diesen Prozess abbrechen und das beschleunigen 793 00:35:23,380 --> 00:35:27,330 zu sein, viel schneller, so können wir erhalten Sie einen High-Level-Sinn, was, 794 00:35:27,330 --> 00:35:29,970 In der Tat ist Bubble Sort tun. 795 00:35:29,970 --> 00:35:33,150 In der Tat, es brodelt bis zu der rechten Seite der Liste, 796 00:35:33,150 --> 00:35:35,260 oder die Anordnung, die größeren Bars. 797 00:35:35,260 --> 00:35:40,020 Und umgekehrt, sind die kleinen Bars sprudelnden ihren Weg nach unten links, 798 00:35:40,020 --> 00:35:42,950 wenn auch in einem schnelleren Tempo als wir bisher getan haben. 799 00:35:42,950 --> 00:35:45,850 Also, härter, mit Menschen zu sehen, aber das ist in der Tat optisch was 800 00:35:45,850 --> 00:35:46,540 geschah. 801 00:35:46,540 --> 00:35:49,110 >> Aber lassen Sie uns versuchen, ein grundlegend anderen Ansatz jetzt. 802 00:35:49,110 --> 00:35:52,387 Lassen Sie uns versuchen eine andere Algorithmus, wobei wir Sie 803 00:35:52,387 --> 00:35:59,640 Jungs starten in diesen ursprünglichen Positionen, die diese Ordnung hier war. 804 00:35:59,640 --> 00:36:00,827 Und lassen Sie uns jetzt voran gehen. 805 00:36:00,827 --> 00:36:02,910 Und ich werde, etwas zu tun noch einfacher, oder? 806 00:36:02,910 --> 00:36:06,710 Im Nachhinein tauschen paarweise wieder und wieder, fast ein wenig clever. 807 00:36:06,710 --> 00:36:10,460 Lassen Sie uns die Dinge tun, noch mehr naiv, wo, wenn ich diese Leute zu sortieren, 808 00:36:10,460 --> 00:36:12,560 lassen Sie mich nur weiter suchen für das kleinste Element. 809 00:36:12,560 --> 00:36:14,570 So jetzt, 4 ist die kleinste Zahl, die ich gesehen habe. 810 00:36:14,570 --> 00:36:15,695 Ich werde daran erinnern. 811 00:36:15,695 --> 00:36:17,750 Nein, 2 ist besser, und daran erinnern. 812 00:36:17,750 --> 00:36:20,730 1 ist noch kleiner. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 Ok. 815 00:36:22,470 --> 00:36:23,750 One-- was ist Ihr Name? 816 00:36:23,750 --> 00:36:24,400 >> ARTIE: Artie. 817 00:36:24,400 --> 00:36:24,610 >> DAVID MALAN: Artie. 818 00:36:24,610 --> 00:36:25,460 Also, Artie, nur zu. 819 00:36:25,460 --> 00:36:27,043 Ich werde Ihnen aus der Leitung zu ziehen. 820 00:36:27,043 --> 00:36:28,400 Wenn Sie wieder hierher kommen. 821 00:36:28,400 --> 00:36:30,790 Und ich brauche, um Platz für ihn zu machen. 822 00:36:30,790 --> 00:36:32,040 Wir haben eine Entscheidung Punkt hier. 823 00:36:32,040 --> 00:36:36,000 Wie könnten wir Platz machen für Artie hier am Anfang, wo die Nummer 1 gehört? 824 00:36:36,000 --> 00:36:36,770 >> ZIELGRUPPE: Verschiebung. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, wir konnte jeder verschieben. 826 00:36:38,950 --> 00:36:40,860 Aber schlagen eine Optimierung. 827 00:36:40,860 --> 00:36:43,410 Das fühlt sich ein wenig ärgerlich für mich vier Leute zu fragen, 828 00:36:43,410 --> 00:36:44,620 bis ganz nach unten zu bewegen. 829 00:36:44,620 --> 00:36:45,520 Was könnte ich tun? 830 00:36:45,520 --> 00:36:46,360 >> ZIELGRUPPE: Schalten sie. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: Schalten sie. 832 00:36:46,850 --> 00:36:47,900 Und was ist Ihr Name? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Jacob, zu bewegen. 835 00:36:50,330 --> 00:36:54,440 Viel effizienter, nur um Jacob Swap-Standorte mit Artie, 836 00:36:54,440 --> 00:36:56,710 im Gegensatz zu zwingen Alle vier dieser Leute, 837 00:36:56,710 --> 00:36:58,734 ich danke Ihnen sehr, zu ihre richtige Position. 838 00:36:58,734 --> 00:37:01,150 Das Schöne an Artie jetzt, Er ist in seinem richtigen Position. 839 00:37:01,150 --> 00:37:02,060 Das machen wir wieder. 840 00:37:02,060 --> 00:37:03,730 2, das ist die kleinste Zahl, die ich gesehen habe. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 Ok. 843 00:37:06,190 --> 00:37:07,467 2 ist definitiv die kleinste. 844 00:37:07,467 --> 00:37:08,550 Sie haben noch keine, jede Arbeit tun. 845 00:37:08,550 --> 00:37:09,320 Lassen Sie es wieder tun. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Kleinste? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Nope. 850 00:37:11,590 --> 00:37:11,720 4? 851 00:37:11,720 --> 00:37:12,220 Ooh. 852 00:37:12,220 --> 00:37:13,420 Lassen Sie mich daran erinnern, 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Lassen Sie mich daran erinnern, 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Kleinste Zahl, die ich habe auf diesem Pass gesehen ist 3. 857 00:37:18,490 --> 00:37:20,340 Wenn Sie möchten auf herauszukommen. 858 00:37:20,340 --> 00:37:21,986 Wohin gehen wir an Sie stellen? 859 00:37:21,986 --> 00:37:22,860 Und was ist Ihr Name? 860 00:37:22,860 --> 00:37:23,530 >> ALANNA: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID MALAN: Alanna, wir sind euch vertreiben zu lassen. 862 00:37:25,780 --> 00:37:28,670 Aber das ist effizienter, nur tauschen zwei Personen, 863 00:37:28,670 --> 00:37:31,850 als mehrere Menschen tatsächlich umgehen vorbei. 864 00:37:31,850 --> 00:37:32,850 Nun wollen wir wieder tun. 865 00:37:32,850 --> 00:37:34,980 Ich werde wählen Sie 4, so kommen auf Sie. 866 00:37:34,980 --> 00:37:36,540 Und wer wird sich zu bewegen? 867 00:37:36,540 --> 00:37:37,750 Nummer 8, natürlich. 868 00:37:37,750 --> 00:37:40,260 Wenn ich jetzt zu finden Nummer 5, komm heraus. 869 00:37:40,260 --> 00:37:42,104 Nummer 8 ist los, wieder vertrieben zu werden. 870 00:37:42,104 --> 00:37:43,770 Ich gehe jetzt auf Platz 6 in Ort finden. 871 00:37:43,770 --> 00:37:44,410 7 statt. 872 00:37:44,410 --> 00:37:45,080 8 statt. 873 00:37:45,080 --> 00:37:48,590 >> Was wir gerade jetzt getan hat, ist so genannte Auswahl Art, 874 00:37:48,590 --> 00:37:52,560 und wenn wir dies zu visualisieren, ist es sich fühlen, ein wenig anders. 875 00:37:52,560 --> 00:37:56,800 Lassen Sie uns weiter und von diesem gehen Speisekarte, diese visualization-- 876 00:37:56,800 --> 00:38:02,920 Ändern wir diese zu-- komm, Firefox. 877 00:38:02,920 --> 00:38:07,610 Lassen Sie uns auf die Auswahl Art dies ändern. 878 00:38:07,610 --> 00:38:11,830 Und lassen Sie es beschleunigen wie vor, und starten Sie jetzt die Visualisierung. 879 00:38:11,830 --> 00:38:13,990 Und dieser Algorithmus hat ein anderes Gefühl. 880 00:38:13,990 --> 00:38:16,480 Bei jeder Iteration, ehrlich gesagt, es ist sogar noch einfacher. 881 00:38:16,480 --> 00:38:18,385 Ich bin nur die Auswahl der kleinste Element. 882 00:38:18,385 --> 00:38:21,510 Nun, ehrlich gesagt, habe ich ein wenig das Glück, dass Zeit, daß sie superschnellen sortiert. 883 00:38:21,510 --> 00:38:22,660 Die Elemente wurden zufällig. 884 00:38:22,660 --> 00:38:25,520 Es ist nicht, wie wir schließlich sehen, grundsätzlich schneller. 885 00:38:25,520 --> 00:38:29,400 Aber mal sehen, eine dritte und letzte nähern, was hier los ist. 886 00:38:29,400 --> 00:38:36,230 Also lassen Sie uns gehen Sie vor und zurückgesetzt euch ein letztes Mal in dieser Reihenfolge hier zu sein. 887 00:38:36,230 --> 00:38:38,450 >> Und jetzt bin ich zu gehen ein wenig klüger, 888 00:38:38,450 --> 00:38:40,220 nur zur Abrundung unserer Algorithmen. 889 00:38:40,220 --> 00:38:41,230 Ich werde das tun. 890 00:38:41,230 --> 00:38:43,140 Ich werde nicht gehen hin und her, so viel. 891 00:38:43,140 --> 00:38:44,900 Ehrlich gesagt, ich bin müde von all dies Verfahrweg. 892 00:38:44,900 --> 00:38:47,691 Ich werde einfach zu nehmen, was ich bin am Anfang der Liste gegeben, 893 00:38:47,691 --> 00:38:49,460 und ich werde zu sortieren dass dann und dort. 894 00:38:49,460 --> 00:38:50,140 So, hier sind wir. 895 00:38:50,140 --> 00:38:51,030 Nummer 4. 896 00:38:51,030 --> 00:38:53,680 Ich werde die Nummer einfügen 4 in eine sortierte Liste. 897 00:38:53,680 --> 00:38:54,180 Fertig. 898 00:38:54,180 --> 00:38:58,300 Ich behaupte jetzt, und nur um diese mehr machen Klar, dieser Teil meiner Liste ist sortiert. 899 00:38:58,300 --> 00:39:02,610 Es ist eine Art von einem dummen Anspruch, aber in der Tat 4 ist in einer Liste der Größe eines sortiert. 900 00:39:02,610 --> 00:39:04,210 Nun, ich werde auf Nummer 2 zu nehmen. 901 00:39:04,210 --> 00:39:07,670 Nummer 2 Ich gehe jetzt zu Einsatz in der richtigen Stelle. 902 00:39:07,670 --> 00:39:08,680 Also, wo 2 gehören? 903 00:39:08,680 --> 00:39:09,824 Offensichtlich hier. 904 00:39:09,824 --> 00:39:11,490 So gehen Sie vor und zurück bewegen, wenn Sie. 905 00:39:11,490 --> 00:39:14,406 Und warum habt ihr einfach nicht nehmen Ihre Musik steht mit Ihnen diese Zeit. 906 00:39:14,406 --> 00:39:17,020 Und lassen Sie uns gewaltsam fügen Sie in den Anfang der Liste. 907 00:39:17,020 --> 00:39:17,936 Also ein wenig mehr Arbeit. 908 00:39:17,936 --> 00:39:20,890 Ich musste Jacob bewegen, und was ist dein Name? 909 00:39:20,890 --> 00:39:21,420 >> AMIN: Amin. 910 00:39:21,420 --> 00:39:22,270 >> DAVID MALAN: Amin. 911 00:39:22,270 --> 00:39:24,350 Aber zumindest habe ich nicht hin und her gehen. 912 00:39:24,350 --> 00:39:25,739 Ich bin einfach nur die Dinge, wie ich gehen. 913 00:39:25,739 --> 00:39:27,530 Ich bin einfach nur Einstecken an der richtigen Stelle. 914 00:39:27,530 --> 00:39:29,220 6, das ist eigentlich recht einfach. 915 00:39:29,220 --> 00:39:31,510 Lassen Sie fügen Sie dort, wenn Sie wollte nur über etwas zu bewegen. 916 00:39:31,510 --> 00:39:32,870 Nummer 8, auch recht einfach. 917 00:39:32,870 --> 00:39:33,741 Gleich da drüben. 918 00:39:33,741 --> 00:39:34,240 Verdammt. 919 00:39:34,240 --> 00:39:37,590 Nummer 1 können wir nicht einfach tauschen mit Amin hier, 920 00:39:37,590 --> 00:39:39,340 denn das wird zu vermasseln den Auftrag. 921 00:39:39,340 --> 00:39:40,660 Also müssen wir ein wenig schlauer sein. 922 00:39:40,660 --> 00:39:42,770 Also, Artie, wenn Sie könnten Sichern Sie sich für einen Moment. 923 00:39:42,770 --> 00:39:46,550 Lassen Sie uns gehen Sie vor und verschieben jetzt, im Gegensatz zu unseren bisherigen Algorithmen 924 00:39:46,550 --> 00:39:50,910 um Platz für Artie machen hier am Anfang. 925 00:39:50,910 --> 00:39:54,690 So dass am Ende des Tages, ich bin Art von zu tun, was ich wollte, bevor zu vermeiden. 926 00:39:54,690 --> 00:39:57,770 Und so meine Art ist Algorithmus der umgekehrt, intellektuell, 927 00:39:57,770 --> 00:39:59,070 was es ursprünglich war. 928 00:39:59,070 --> 00:40:01,240 Ich bin gerade dabei den Schalt an einer anderen Stelle. 929 00:40:01,240 --> 00:40:02,291 Jetzt bin ich bei 3. 930 00:40:02,291 --> 00:40:02,790 Oh, verdammt. 931 00:40:02,790 --> 00:40:04,039 Wir müssen mehr Arbeit wieder tun. 932 00:40:04,039 --> 00:40:05,060 Lassen Sie uns also drücken Sie aus. 933 00:40:05,060 --> 00:40:09,360 Gehen wir 8, 6, 4-- oh OH-und 3 wird zu Recht dorthin zu gehen. 934 00:40:09,360 --> 00:40:11,490 So zumindest leichte Einsparungen dieser Zeit. 935 00:40:11,490 --> 00:40:13,100 7, nicht zu viel zu tun. 936 00:40:13,100 --> 00:40:15,370 Also, wenn Sie wollen, um Pop- zurück, lassen Sie einfügen. 937 00:40:15,370 --> 00:40:17,440 Und schließlich, 5, wenn Sie will wieder knallen, wir 938 00:40:17,440 --> 00:40:22,610 müssen Sie verschieben, du, Sie, bis fünf vorhanden ist. 939 00:40:22,610 --> 00:40:25,670 >> So, jetzt, dies auf eine zu sehen hohe grafisch, 940 00:40:25,670 --> 00:40:31,080 machen wir diesen Algorithmus Visualisierung ein weiteres Mal. 941 00:40:31,080 --> 00:40:33,580 So soll das nennen wir insertion sort. 942 00:40:33,580 --> 00:40:37,700 Wir werden es genau so laufen schnell, und starten Sie es hier. 943 00:40:37,700 --> 00:40:39,580 Und es hat auch ein anderes Gefühl. 944 00:40:39,580 --> 00:40:42,180 Es ist eine Art immer besser und besser, aber es ist nie perfekt 945 00:40:42,180 --> 00:40:44,630 bis ich in und glatt in diese Lücken. 946 00:40:44,630 --> 00:40:47,860 Denn wieder, ich bin nur zu nehmen, was Ich werde von links nach rechts gegeben. 947 00:40:47,860 --> 00:40:50,350 So dass ich nicht so viel Glück zu bekommen , dass alles perfekt war. 948 00:40:50,350 --> 00:40:54,190 Das ist, warum wir diese kleinen mispositions, die wir im Laufe der Zeit festgelegt. 949 00:40:54,190 --> 00:40:58,890 >> Also alle diese Algorithmen scheinen laufen bei leicht unterschiedlichen Gangarten. 950 00:40:58,890 --> 00:41:02,030 In der Tat, das würden Sie sagen, ist die beste oder die schnellste bisher? 951 00:41:02,030 --> 00:41:03,450 Bubble-Sort, der erste? 952 00:41:03,450 --> 00:41:05,000 Auswahl Art, die zweite? 953 00:41:05,000 --> 00:41:08,450 Insertion Sort, der dritte? 954 00:41:08,450 --> 00:41:10,710 Ich habe gehört, einige Arten Auswahl. 955 00:41:10,710 --> 00:41:13,280 Andere Gedanken? 956 00:41:13,280 --> 00:41:16,880 >> So stellt sich heraus, dass Alle diese Algorithmen 957 00:41:16,880 --> 00:41:22,400 sind grundsätzlich nur so effizient wie Jede other-- oder umgekehrt, wie 958 00:41:22,400 --> 00:41:25,980 ineffizient voneinander weil wir grundsätzlich tun können 959 00:41:25,980 --> 00:41:28,120 besser als alle drei dieser Algorithmen. 960 00:41:28,120 --> 00:41:29,990 Und das ist ein bisschen eine Notlüge auch. 961 00:41:29,990 --> 00:41:32,580 wenn ich so effizient sagen oder als ineffizient, 962 00:41:32,580 --> 00:41:35,040 das ist zumindest für super-große Werte von n. 963 00:41:35,040 --> 00:41:38,450 Wenn wir hier haben nur acht Personen, oder vielleicht 50 oder so Balken auf dem Bildschirm, 964 00:41:38,450 --> 00:41:41,645 Sie werden feststellen, absolut Unterschiede unter diesen drei Algorithmen. 965 00:41:41,645 --> 00:41:44,020 Sondern als n, die Zahl der Menschen, oder die Anzahl der Nummern, 966 00:41:44,020 --> 00:41:46,350 oder die Anzahl der Personen in der Telefon Buch oder die Zahl der Webseiten 967 00:41:46,350 --> 00:41:48,230 in der Datenbank von Google wird größer und größer, 968 00:41:48,230 --> 00:41:51,650 wir werden sehen, dass alle drei von diesen Algorithmen sind eigentlich ziemlich schlecht. 969 00:41:51,650 --> 00:41:54,060 Und wir grundsätzlich tun können besser. 970 00:41:54,060 --> 00:41:56,830 >> Lassen Sie uns einen Blick schließlich auf das, was diese Algorithmen könnte 971 00:41:56,830 --> 00:41:59,520 klingen wie in der Zusammenhang mit einigen anderen 972 00:41:59,520 --> 00:42:03,550 sowie durch diese Visualisierung hier 973 00:42:03,550 --> 00:42:06,860 das wird uns die Einführung eine Anzahl von Algorithmen. 974 00:42:06,860 --> 00:42:10,330 Lassen Sie uns gehen Sie vor und gratulieren unsere Teilnehmer hier, von denen alle 975 00:42:10,330 --> 00:42:11,690 sortiert sich sehr gut. 976 00:42:11,690 --> 00:42:15,124 Wenn Sie möchten, um ein Abschiedsgeschenk zu nehmen. 977 00:42:15,124 --> 00:42:16,540 Sie können Ihre Zahlen als auch zu halten. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 Und was Sie sehen werden, oder vielmehr zu hören, jetzt, 980 00:42:22,520 --> 00:42:25,710 ist, dass, wie wir Töne setzen jeder dieser Stäbe 981 00:42:25,710 --> 00:42:28,660 und verbinden sie mit der Software, unterschiedliche Frequenz von Ton, 982 00:42:28,660 --> 00:42:33,970 Sie können Ihre Meinung mehr audioly wickeln um das, was jedes dieser Dinge 983 00:42:33,970 --> 00:42:34,470 aussehen. 984 00:42:34,470 --> 00:42:39,325 Die erste ist Insertion Sort 985 00:42:39,325 --> 00:42:44,275 >> [TÖNE] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Dies ist Bubble-Sort. 988 00:42:49,720 --> 00:42:54,175 >> [TÖNE] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Auswahl sortieren. 991 00:43:18,222 --> 00:43:22,596 >> [TÖNE] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> So genannte Merge-Sort. 994 00:43:35,150 --> 00:43:38,140 >> [TÖNE] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Gnome Sorte. 997 00:43:51,278 --> 00:43:56,390 >> [TÖNE] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Das ist es für CS50. 1000 00:44:09,430 --> 00:44:13,360 Wir werden Sie am Mittwoch sehen. 1001 00:44:13,360 --> 00:44:16,671 >> SPRECHER: Und jetzt, "Deep Gedanken, "von Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Warum ist es eine for-Schleife? 1004 00:44:21,590 --> 00:44:23,200 Warum nicht machen es besser? 1005 00:44:23,200 --> 00:44:25,970 Ich würde eine fünf Schleife machen. 1006 00:44:25,970 --> 00:44:28,720 >> [Gelächter]