1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID Malan: Très bien. 3 00:00:11,940 --> 00:00:16,470 C'est donc CS50, et c'est maintenant le début de la troisième semaine. 4 00:00:16,470 --> 00:00:19,960 >> Donc, jusqu'à présent, nous avons été d'écrire des programmes en C 5 00:00:19,960 --> 00:00:23,210 qui ressemble un peu quelque chose comme ça ici. 6 00:00:23,210 --> 00:00:25,470 Donc, nous avons un couple de forte comprend au sommet. 7 00:00:25,470 --> 00:00:28,490 Nous avons int, principale, vide, et alors quelque chose à faire dans le milieu, 8 00:00:28,490 --> 00:00:30,590 certains peu de code à l'intérieur de cette fonction. 9 00:00:30,590 --> 00:00:34,170 Mais la clé a été le fait que nous disons depuis le vide ici. 10 00:00:34,170 --> 00:00:39,320 Donc vide, tout ce temps, précise que ce programme, lorsqu'il est exécuté, 11 00:00:39,320 --> 00:00:41,300 ne pouvant être exécutée via son nom. 12 00:00:41,300 --> 00:00:46,330 Vous ne pouvez pas saisir d'autres mots ou chiffres qui suivent le nom du programme quand 13 00:00:46,330 --> 00:00:46,830 l'exécuter. 14 00:00:46,830 --> 00:00:51,200 Ainsi, par exemple, si le programme était compilé dans un fichier appelé bonjour, 15 00:00:51,200 --> 00:00:53,480 vous pourriez faire ./hello, mais c'est tout. 16 00:00:53,480 --> 00:00:56,750 >> La seule façon que vous pourriez apporter une contribution à ce programme 17 00:00:56,750 --> 00:00:57,960 est en appelant une fonction. 18 00:00:57,960 --> 00:00:59,790 Par exemple, quelle est la fonction avons-nous eu recours jusqu'à présent 19 00:00:59,790 --> 00:01:00,950 d'obtenir les commentaires de l'utilisateur? 20 00:01:00,950 --> 00:01:02,117 >> PUBLIC: Obtenir chaîne. 21 00:01:02,117 --> 00:01:04,700 DAVID Malan: Pour obtenir une chaîne ou obtenir int, ou vous avez vu d'autres, 22 00:01:04,700 --> 00:01:07,630 même si vous ne les avez pas encore utilisé, comme être longue, longue, etc. 23 00:01:07,630 --> 00:01:09,380 Mais supposons que nous voulez réellement commencer 24 00:01:09,380 --> 00:01:12,760 l'écriture de programmes qui sont un peu plus polyvalent, et, franchement, un peu plus 25 00:01:12,760 --> 00:01:15,090 comme les commandes que vous avez été faire, nous l'espérons, 26 00:01:15,090 --> 00:01:16,550 un peu habitué. 27 00:01:16,550 --> 00:01:18,560 Comme cd espace Dropbox. 28 00:01:18,560 --> 00:01:20,800 Ceci, bien sûr, des changements votre répertoire, en supposant 29 00:01:20,800 --> 00:01:23,590 vous êtes dans la maison de John Harvard répertoire, dans votre dossier Dropbox. 30 00:01:23,590 --> 00:01:27,380 Pendant ce temps, une commande comme crée un nouveau répertoire nommé PSet2, 31 00:01:27,380 --> 00:01:30,290 que vous pourriez avoir déjà ou sera bientôt pour problème posé deux. 32 00:01:30,290 --> 00:01:33,970 Assurez Bonjour, bien sûr, est une commande qui construit un programme appelé bonjour 33 00:01:33,970 --> 00:01:35,770 à partir d'un fichier appelé bonjour point c. 34 00:01:35,770 --> 00:01:39,140 Et dans chacun de ces cas, maintenant, nous avons eu 35 00:01:39,140 --> 00:01:43,620 fournir un argument sur la soi-disant ligne de commande, l'invite à clignoter, 36 00:01:43,620 --> 00:01:48,540 de sorte que la marque sait ce qu'il faut construire, et ainsi de que mkdir sait ce dossier pour créer, 37 00:01:48,540 --> 00:01:51,110 et que sait cd où vous voulez aller. 38 00:01:51,110 --> 00:01:54,720 Mais jusqu'à présent, nous continuons à dire que, votre principale fonction par défaut, 39 00:01:54,720 --> 00:01:58,500 a une expression vide à l'intérieur de ces parenthèses, 40 00:01:58,500 --> 00:02:01,250 ce qui signifie qu'il ne peut pas prendre tous les arguments. 41 00:02:01,250 --> 00:02:03,240 >> Donc, à partir d'aujourd'hui, ce que nous allons faire 42 00:02:03,240 --> 00:02:06,270 est, nous allons commencer soutenir ce genre de choses même. 43 00:02:06,270 --> 00:02:08,990 En fait, dans ce cas, que vous ne pas généralement saisir manuellement, 44 00:02:08,990 --> 00:02:11,130 Faire a été de faire ce pour nous, il n'y a pas 45 00:02:11,130 --> 00:02:15,840 mais une une, deux, trois supplémentaire chaînes après le programme de nom 46 00:02:15,840 --> 00:02:16,850 clang. 47 00:02:16,850 --> 00:02:18,240 Alors, comment pouvons-nous atteindre ce? 48 00:02:18,240 --> 00:02:20,260 >> Eh bien, à partir d'aujourd'hui, dans les cas où nous voulons 49 00:02:20,260 --> 00:02:22,855 d'apporter une contribution par l'intermédiaire du soi-disant ligne de commande, 50 00:02:22,855 --> 00:02:24,980 nous allons commencer à ajouter ici ce qui est dans yellow-- 51 00:02:24,980 --> 00:02:30,520 remplacement vide avec int argc virgule chaîne argv parenthèse ouverte fermer la parenthèse. 52 00:02:30,520 --> 00:02:32,520 Maintenant, ce qui est intéressant pour un couple de raisons. 53 00:02:32,520 --> 00:02:35,690 Premièrement, il va nous écrivons programmes qui sont un peu plus dynamique. 54 00:02:35,690 --> 00:02:37,570 Mais, plus convaincante, il va ouvrir 55 00:02:37,570 --> 00:02:40,340 maintenant une conversation à ce qui peut vraiment réseaux 56 00:02:40,340 --> 00:02:43,300 être utilisé, pour quelle chaîne est vraiment sous le capot, 57 00:02:43,300 --> 00:02:47,320 jusqu'à la semaine prochaine lorsque nous commençons la plongée encore plus profondément dans la façon dont la machine est 58 00:02:47,320 --> 00:02:48,590 faire tout ce travail de trucs. 59 00:02:48,590 --> 00:02:51,920 Mais pour l'instant, nous allons dessiner, peut-être, une image. 60 00:02:51,920 --> 00:02:54,950 >> Lorsque vous écrivez un programme avec les principaux déclarée 61 00:02:54,950 --> 00:02:58,810 de cette manière, de telle sorte que principal prend deux arguments, un int 62 00:02:58,810 --> 00:03:03,233 et-- ce type de données est le deuxième argument? 63 00:03:03,233 --> 00:03:04,529 >> PUBLIC: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID Malan: Array. 65 00:03:05,320 --> 00:03:09,170 Ainsi, il semble à première vue que c'est un chaîne, mais il faut noter les crochets. 66 00:03:09,170 --> 00:03:12,760 Rappeler la dernière fois que nous avons introduit la notion d'un tableau. 67 00:03:12,760 --> 00:03:16,210 Et tableaux utilisent crochets dans quelques contextes. 68 00:03:16,210 --> 00:03:19,160 Vous pouvez utiliser la place supports d'aller dans un tableau 69 00:03:19,160 --> 00:03:22,710 et obtenir un élément particulier, comme 0 support ou un support ou une console 2. 70 00:03:22,710 --> 00:03:25,500 Mais nous avons vu, si brièvement, la semaine dernière, que vous avez également 71 00:03:25,500 --> 00:03:28,790 utiliser ces crochets à déclarer la taille d'un tableau, 72 00:03:28,790 --> 00:03:31,790 si vous savez à l'avance combien de ints ou le nombre de chaînes ou ce que vous 73 00:03:31,790 --> 00:03:32,630 voulez réellement. 74 00:03:32,630 --> 00:03:34,790 Ainsi, il s'avère qu'il ya un troisième contexte ici 75 00:03:34,790 --> 00:03:37,890 qui n'a pas de numéro à l'intérieur des crochets. 76 00:03:37,890 --> 00:03:41,920 Lorsque vous spécifiez, comme je l'ai ici, le nom de quelque chose comme argv, 77 00:03:41,920 --> 00:03:44,550 qui est juste une façon élégante de disant vecteur d'argument, qui 78 00:03:44,550 --> 00:03:47,750 est une autre façon de fantaisie dire un tableau d'arguments, 79 00:03:47,750 --> 00:03:50,870 parenthèse ouverte fermer la parenthèse juste signifie que vous n'avez pas nécessairement 80 00:03:50,870 --> 00:03:52,960 savoir à l'avance comment grand la matrice va être, 81 00:03:52,960 --> 00:03:55,070 mais vous savez que ça va être un tableau. 82 00:03:55,070 --> 00:03:57,320 Donc, si vous ne connaissez pas le nombre ne l'a pas mis là-dedans, 83 00:03:57,320 --> 00:04:01,160 pour fermer la parenthèse ouverte support signifie que argv n'est pas une chaîne, 84 00:04:01,160 --> 00:04:03,124 mais un tableau de chaînes. 85 00:04:03,124 --> 00:04:05,040 Donc, syntaxiquement, si vous repenser la semaine dernière, 86 00:04:05,040 --> 00:04:09,460 il est très similaire à dire quelque chose comme int âges de support ouvert, 87 00:04:09,460 --> 00:04:10,984 et puis quelque chose par la suite. 88 00:04:10,984 --> 00:04:12,150 Alors qu'est-ce que cela ressemble? 89 00:04:12,150 --> 00:04:13,399 Disons fait faire un dessin. 90 00:04:13,399 --> 00:04:18,756 Ainsi, lorsque vous exécutez ce programme avec principal ayant deux arguments définies à l'intérieur 91 00:04:18,756 --> 00:04:21,339 de ces parenthèses, vous essentiellement au moins deux morceaux 92 00:04:21,339 --> 00:04:23,560 de mémoire remis à vous sous la hotte. 93 00:04:23,560 --> 00:04:26,550 Un, que je vais attire comme ce rectangle, va être appelé argc. 94 00:04:26,550 --> 00:04:30,645 Et comme un résumé rapide, quel est le type de argc de données? 95 00:04:30,645 --> 00:04:31,270 C'est donc un int. 96 00:04:31,270 --> 00:04:33,480 Ainsi, un nombre va aller à tour de rôle argc-- 97 00:04:33,480 --> 00:04:35,660 que signifie un nombre d'arguments. 98 00:04:35,660 --> 00:04:38,887 Pendant ce temps, j'ai dessiné argv comme un tableau. 99 00:04:38,887 --> 00:04:40,970 Et je ne sais pas vraiment combien de temps il va être, 100 00:04:40,970 --> 00:04:42,470 si pour les besoins d'aujourd'hui Dot Dot Dot. 101 00:04:42,470 --> 00:04:43,636 Il pourrait obtenir d'une certaine longueur. 102 00:04:43,636 --> 00:04:45,640 Mais j'ai imaginé ici au moins quatre rectangles. 103 00:04:45,640 --> 00:04:50,970 Donc argv un bloc de mémoire qui stocke chaîne de chaîne de chaîne dot dot dot, 104 00:04:50,970 --> 00:04:53,950 et argc est juste un morceau de la mémoire pour un nombre entier. 105 00:04:53,950 --> 00:04:55,710 >> Alors maintenant, soyons un peu plus précis. 106 00:04:55,710 --> 00:04:59,200 Si, quand j'ai chaînes dans ce tableau, appelé 107 00:04:59,200 --> 00:05:03,290 argv, je tiens à les atteindre individuellement, comme la semaine dernière, 108 00:05:03,290 --> 00:05:05,670 nous allons utiliser la notation comme support argv 0 109 00:05:05,670 --> 00:05:07,650 pour obtenir la première chose un tableau. 110 00:05:07,650 --> 00:05:10,440 Argv 1 support pour obtenir le deuxième chose, et ainsi de suite. 111 00:05:10,440 --> 00:05:14,597 La clé ici est que nous sommes toujours 0 indexed-- nous sommes toujours en partant de 0. 112 00:05:14,597 --> 00:05:16,430 Alors maintenant, de laisser effectivement mettre quelque chose dans ce domaine. 113 00:05:16,430 --> 00:05:21,670 Si je devais établir un programme appelé bonjour à partir d'un fichier appelé bonjour point c, 114 00:05:21,670 --> 00:05:24,340 puis je lance ce programme avec un point slash bonjour, 115 00:05:24,340 --> 00:05:28,380 qu'est-ce que mon ordinateur, mon portable, ressembler sous le capot 116 00:05:28,380 --> 00:05:31,300 le moment je lance points réduire bonjour et appuyez sur Entrée? 117 00:05:31,300 --> 00:05:33,500 Eh bien, c'est peut-être ce que nous pourrions décrire 118 00:05:33,500 --> 00:05:37,010 que le contenu de votre ordinateur de la mémoire, ou mémoire à accès aléatoire RAM--. 119 00:05:37,010 --> 00:05:40,330 En d'autres termes, l'ordinateur, en quelque sorte pour vous comme par magie, 120 00:05:40,330 --> 00:05:45,360 met le numéro 1 en argc, Alias ​​ArgCount, et il met littéralement la chaîne 121 00:05:45,360 --> 00:05:48,200 ./hello dans argv support 0. 122 00:05:48,200 --> 00:05:51,750 Je n'ai aucune idée, franchement, ce qui est dans le support de argv 1 ou 2 ou 3, 123 00:05:51,750 --> 00:05:55,550 parce que si l'utilisateur n'a pas quoi que ce soit d'ailleurs tapé ./hello, 124 00:05:55,550 --> 00:05:58,550 nous allons supposer que ces sont des valeurs parasites les plus probables, 125 00:05:58,550 --> 00:05:59,700 pour ainsi dire. 126 00:05:59,700 --> 00:06:02,650 Ces blocs de mémoire existe, mais elle n'est pas à nous 127 00:06:02,650 --> 00:06:05,710 à les regarder, parce la ArgCount est seul. 128 00:06:05,710 --> 00:06:07,870 >> Maintenant, quant à lui, si je écrire exécuter un autre programme, 129 00:06:07,870 --> 00:06:12,250 cd, ce qui est plus correctement une commande, dans votre clignotant espace cd prompt-- 130 00:06:12,250 --> 00:06:17,200 Dropbox-- quand je lance que, effectivement, lorsque le programme est exécuté cd, argc, 131 00:06:17,200 --> 00:06:22,270 l'intérieur de la mémoire de mon ordinateur, est pour le plus bref deuxième le numéro 2. 132 00:06:22,270 --> 00:06:25,936 Et puis argv support o a cd, argv support 1 a Dropbox, 133 00:06:25,936 --> 00:06:28,560 et puis bien sûr la commande complète, de sorte que tous de cette mémoire 134 00:06:28,560 --> 00:06:30,420 essentiellement s'en va et est utilisé pour autre chose. 135 00:06:30,420 --> 00:06:32,270 Et c'est pourquoi je dis une fraction de seconde. 136 00:06:32,270 --> 00:06:35,720 >> En attendant, si nous faisons mkdir PSet2, l'image est presque la même, 137 00:06:35,720 --> 00:06:37,900 mais avec des cordes à l'intérieur argv. 138 00:06:37,900 --> 00:06:42,570 Si je fais clang tiret bonjour bonjour point c, même idée. 139 00:06:42,570 --> 00:06:47,060 Plus de choses est rempli pour argv et argc, bien sûr, est de 4. 140 00:06:47,060 --> 00:06:49,150 En d'autres termes, même si ce tableau 141 00:06:49,150 --> 00:06:52,950 pourraient être Dot Dot Dot, de certains longueur variable, pour ainsi dire, 142 00:06:52,950 --> 00:06:56,720 vous savez toujours où la fin de celui-ci c'est parce que argc va vous dire 143 00:06:56,720 --> 00:07:00,120 à quel moment vous devez vous arrêter regardant éléments dans argv. 144 00:07:00,120 --> 00:07:03,660 Vous ne pouvez regarder quatre au total dans ce cas. 145 00:07:03,660 --> 00:07:06,600 >> Prenons donc maintenant un oeil à, peut-être, un programme simple. 146 00:07:06,600 --> 00:07:09,070 Celui qui dit juste bonjour pour quelqu'un comme Zamyla. 147 00:07:09,070 --> 00:07:12,620 Donc, je prétends que je vais écrire un programme dans un instant par lequel je pouvais faire 148 00:07:12,620 --> 00:07:16,670 ./hello espace Zamyla, et puis je veux mon programme pour imprimer quelque chose 149 00:07:16,670 --> 00:07:18,520 super simple comme "bonjour, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Or, dans le passé, nous avons utilisé getString. 151 00:07:20,100 --> 00:07:22,850 Ainsi, dans le passé, même si vous êtes nouveau à la programmation, 152 00:07:22,850 --> 00:07:27,180 chances sont que vous pouvez concocter un programme qui utilise getString 153 00:07:27,180 --> 00:07:29,390 puis utilise printf pour dire salut à Zamyla. 154 00:07:29,390 --> 00:07:31,290 Mais il ne faut pas utiliser GETSTRING cette fois. 155 00:07:31,290 --> 00:07:37,510 Permettez-moi au lieu d'aller dans le Appliant et ne comprennent norme I O point h. 156 00:07:37,510 --> 00:07:41,160 Permettez-moi également inclure CS50 point h. 157 00:07:41,160 --> 00:07:44,730 Maintenant int main, et maintenant je suis ne va pas faire vide aujourd'hui. 158 00:07:44,730 --> 00:07:51,200 Au lieu de cela, je vais faire int argc chaîne argv parenthèse ouverte fermer la parenthèse, 159 00:07:51,200 --> 00:07:52,640 pas spécifier un numéro. 160 00:07:52,640 --> 00:07:54,644 Et maintenant, voici mon soi-disant à faire. 161 00:07:54,644 --> 00:07:57,560 Ce que je vais faire maintenant, je suis va faire un peu d'un acte de foi, 162 00:07:57,560 --> 00:08:00,560 Je vais supposer que l'utilisateur de va utiliser ce programme correctement, 163 00:08:00,560 --> 00:08:04,980 et je vais tout simplement faire printf bonjour,% sn. 164 00:08:04,980 --> 00:08:06,630 Donc rien de nouveau. 165 00:08:06,630 --> 00:08:11,470 Mais je veux maintenant mettre ce mot l' types d'utilisateurs après le nom du programme. 166 00:08:11,470 --> 00:08:16,970 Donc, si je fais ./hello espace Zamyla, je vouloir en quelque sorte l'accès par programme 167 00:08:16,970 --> 00:08:20,870 je cite "Zamyla." donc je peut aller dans mon argumentation vecteur, 168 00:08:20,870 --> 00:08:25,980 mon tableau de chaînes, et si la commande, encore une fois, était ./hello espace Zamyla, 169 00:08:25,980 --> 00:08:29,340 ce numéro que je veux de mettre en argv ici? 170 00:08:29,340 --> 00:08:29,840 PUBLIC: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID Malan: 1, parce 0 support s'avère 172 00:08:32,355 --> 00:08:34,230 va être l' le nom de programme, comme nous l'avons vu. 173 00:08:34,230 --> 00:08:37,789 Donc support 1 est le premier mot que moi, l'utilisateur, ont tapé. 174 00:08:37,789 --> 00:08:39,559 Je vais aller de l'avant et sauver ce. 175 00:08:39,559 --> 00:08:42,830 Je vais aller dans mon dossier où j'ai placé ce fichier. 176 00:08:42,830 --> 00:08:44,920 Je vais faire faire bonjour 3. 177 00:08:44,920 --> 00:08:46,230 Le OK de Comp IO. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Entrée. 179 00:08:51,380 --> 00:08:54,480 Qu'ai-je fait de mal? 180 00:08:54,480 --> 00:08:57,270 J'ai été pris par surprise moi-même pour un instant là. 181 00:08:57,270 --> 00:08:58,230 Qu'ai-je fait de mal? 182 00:08:58,230 --> 00:08:59,220 >> PUBLIC: Nom. 183 00:08:59,220 --> 00:09:01,767 >> DAVID Malan: Le fichier de en fait appelé hello3.c. 184 00:09:01,767 --> 00:09:03,850 Et je l'ai fait juste pour cohérence, parce que nous avons 185 00:09:03,850 --> 00:09:06,550 eu HELLO.c de dans le passé dans le code en ligne. 186 00:09:06,550 --> 00:09:11,550 Donc, nous allons fixer ce ./hello support tableau de bord 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Entrée. 188 00:09:12,370 --> 00:09:14,030 Et maintenant nous avons bonjour, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Pendant ce temps, je peux changer cela être Rob, ou vraiment d'autre mot. 190 00:09:17,650 --> 00:09:19,230 >> Mais nous allons examiner un cas d'angle. 191 00:09:19,230 --> 00:09:24,360 Qu'est-ce que vous attendez-vous qui va se passer si Je n'ai pas taper le nom de n'importe qui? 192 00:09:24,360 --> 00:09:25,270 >> PUBLIC: Erreur. 193 00:09:25,270 --> 00:09:27,300 >> DAVID Malan: Une erreur d'une certaine sorte, peut-être. 194 00:09:27,300 --> 00:09:28,200 Voyons. 195 00:09:28,200 --> 00:09:29,440 Entrée. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Donc printf est effectivement un peu de protection de nous 198 00:09:33,870 --> 00:09:38,131 ici, et l'impression de littéralement parenthèse ouverte nulle, mais les choses encore pire peut arriver. 199 00:09:38,131 --> 00:09:40,130 Et juste pour démontrer quelque chose que vous absolument 200 00:09:40,130 --> 00:09:42,800 ne doit pas faire, allons dans ici et commencez à fouiller. 201 00:09:42,800 --> 00:09:43,300 Droite? 202 00:09:43,300 --> 00:09:46,410 Si je sais que l'image dans cette mémoire est essentiellement, 203 00:09:46,410 --> 00:09:52,660 argv support 1 a Zamyla, argv support 0 a ./hello, ou ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Qu'est-ce que dans le support 2? 205 00:09:55,400 --> 00:09:58,210 Donc je ne peux répondre à cette m'interroger, non? 206 00:09:58,210 --> 00:10:00,460 Je peux juste changer le 1 en 2. 207 00:10:00,460 --> 00:10:07,270 Je peux maintenant recompiler bonjour 3, ./hello3 Voyons un zoom avant et appuyez sur Entrée. 208 00:10:07,270 --> 00:10:08,270 Oups. 209 00:10:08,270 --> 00:10:10,660 Aucune marque de devis. 210 00:10:10,660 --> 00:10:12,540 Intéressant. 211 00:10:12,540 --> 00:10:15,530 Donc, c'est plutôt cool à voir quoi d'autre est ici. 212 00:10:15,530 --> 00:10:17,130 >> Alors quoi d'autre est à l'intérieur de mon ordinateur portable? 213 00:10:17,130 --> 00:10:20,390 Sauvons avec support 3. 214 00:10:20,390 --> 00:10:25,190 Faire hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Curieux. 216 00:10:26,500 --> 00:10:30,560 Et maintenant, passons vraiment bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Donc, c'est vraiment plongée profonde dans la mémoire de mon ordinateur. 218 00:10:34,340 --> 00:10:35,930 50 indices dans. 219 00:10:35,930 --> 00:10:41,950 Donc, assurez-bonjour 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Curieux. 221 00:10:42,680 --> 00:10:44,660 Très bien, maintenant je suis juste allez obtenir téméraire. 222 00:10:44,660 --> 00:10:47,331 Allons à 5000. 223 00:10:47,331 --> 00:10:47,830 Bien. 224 00:10:47,830 --> 00:10:49,520 Alors permettez-moi recompile. 225 00:10:49,520 --> 00:10:51,460 Faire hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 Dáccord. 228 00:10:56,460 --> 00:10:59,250 Maintenant, certains d'entre vous, il pourrait une ampoule de s'éteindre. 229 00:10:59,250 --> 00:11:01,900 Combien d'entre vous avez vu ce message avant? 230 00:11:01,900 --> 00:11:03,440 Dáccord. 231 00:11:03,440 --> 00:11:04,420 Alors, pourquoi? 232 00:11:04,420 --> 00:11:07,250 >> Les chances soient: et il ya différents choses qui peuvent causer ce, 233 00:11:07,250 --> 00:11:09,730 et bien vous êtes en bonne company-- nous avons clairement 234 00:11:09,730 --> 00:11:11,900 provoqué ce qu'on appelle une erreur de segmentation. 235 00:11:11,900 --> 00:11:15,890 Et longue histoire courte pour aujourd'hui, je ont touché un segment de mémoire 236 00:11:15,890 --> 00:11:17,060 que je n'aurais pas dû. 237 00:11:17,060 --> 00:11:19,970 Où un segment signifie simplement un morceau de mémoire que je n'aurais pas dû. 238 00:11:19,970 --> 00:11:25,530 Maintenant, l'ordinateur garantit que si je exécuter ./helloZamyla que je peux toucher argv 239 00:11:25,530 --> 00:11:27,760 être support 0 et argv support 1. 240 00:11:27,760 --> 00:11:32,730 Mais argc est la valeur 2, cela signifie que je suis seulement accueillie c'est un peu de l'honneur 241 00:11:32,730 --> 00:11:35,180 system-- toucher 0 support et le support 1. 242 00:11:35,180 --> 00:11:37,990 Si je vais plus loin, il ya absolument va être la mémoire il. 243 00:11:37,990 --> 00:11:40,660 Mon RAM existe physiquement dans l'ordinateur. 244 00:11:40,660 --> 00:11:42,080 Mais qui sait ce qui est là? 245 00:11:42,080 --> 00:11:44,450 En effet, je suis en cours d'exécution multiples programmes en même temps. 246 00:11:44,450 --> 00:11:46,910 Je pourrais avoir seen-- si je n'étais pas faire sur la Appliant 247 00:11:46,910 --> 00:11:49,937 mais sur mon Mac ou PC-- je pourrais avoir vu le contenu d'un e-mail. 248 00:11:49,937 --> 00:11:52,270 J'aurais pu voir un instant message que je l'ai récemment envoyé. 249 00:11:52,270 --> 00:11:55,390 Tout ce qui peut être traînent autour de la mémoire 250 00:11:55,390 --> 00:11:59,180 auraient pu être consultée par voie de cette notation crochet arbitraire. 251 00:11:59,180 --> 00:12:02,850 Ou, pire encore, vous pourriez avoir trouvé un de mes mots de passe 252 00:12:02,850 --> 00:12:05,859 que j'avais récemment tapé, qu'une programme avait stocké dans la mémoire de manière 253 00:12:05,859 --> 00:12:07,900 me authentifier, et alors juste un peu laissé 254 00:12:07,900 --> 00:12:09,910 dans la RAM jusqu'à ce que je quitte ce programme. 255 00:12:09,910 --> 00:12:12,860 >> Et en effet, c'est l'un des le danger et l'un des pouvoirs 256 00:12:12,860 --> 00:12:15,980 d'utiliser un langage comme C Vous avez un accès illimité 257 00:12:15,980 --> 00:12:18,860 de la totalité du contenu de la mémoire de programme, 258 00:12:18,860 --> 00:12:21,340 et ce que les méchants peuvent même faire dans ces cases-- 259 00:12:21,340 --> 00:12:23,807 surtout quand on obtenir de la programmation web 260 00:12:23,807 --> 00:12:26,890 vers la fin du semestre, nous allons revoir cette topic-- est fouiner, 261 00:12:26,890 --> 00:12:31,660 potentiellement, quelqu'un est ordinateur de mémoire et trouver des choses curieuses 262 00:12:31,660 --> 00:12:32,570 comme nous l'avons vu là-bas. 263 00:12:32,570 --> 00:12:36,900 Ou même pire encore, les mots de passe qu'il ou elle peut ensuite utiliser pour faire de mauvaises choses. 264 00:12:36,900 --> 00:12:40,240 >> Il est donc clair que je n'aurais pas dû faire cela, parce que les choses étranges commencent à se produire. 265 00:12:40,240 --> 00:12:42,310 En effet, il s'agit d'un plantage du programme. 266 00:12:42,310 --> 00:12:44,580 Ce serait l'équivalent de Mac OS ou Windows 267 00:12:44,580 --> 00:12:46,770 une fenêtre de programme juste disparaître. 268 00:12:46,770 --> 00:12:48,300 Une erreur inattendue s'est produite. 269 00:12:48,300 --> 00:12:50,840 Dans l'environnement de ligne de commande nous voyons quelque chose comme ça. 270 00:12:50,840 --> 00:12:54,480 Mais c'est pourquoi, c'est que je suis simplement en touchant mémoire qui ne m'appartient pas. 271 00:12:54,480 --> 00:12:57,090 >> Donc, nous allons défendre contre ce une peu d'une manière différente 272 00:12:57,090 --> 00:12:59,010 en regardant ce programme ici. 273 00:12:59,010 --> 00:13:01,000 Donc, encore une fois, le squelette que nous avons vu l'heure, à 274 00:13:01,000 --> 00:13:02,480 et j'ai souligné ce temps int. 275 00:13:02,480 --> 00:13:05,900 Et pendant tout ce temps principal a en effet retourné une valeur. 276 00:13:05,900 --> 00:13:09,120 Même si dans la plupart de notre conférence exemples que nous avons jamais utilisés autrefois 277 00:13:09,120 --> 00:13:10,990 quoi que ce soit en principal retourner. 278 00:13:10,990 --> 00:13:13,710 Nous écrivons juste printf proximité accolade et c'est tout. 279 00:13:13,710 --> 00:13:16,500 Mais gratuitement, ce que la compilateur été fait pour vous, 280 00:13:16,500 --> 00:13:19,510 efficace, est de retour 0 pour vous. 281 00:13:19,510 --> 00:13:22,950 Active out-- et c'est un peu counterintuitive-- que 0 est bon. 282 00:13:22,950 --> 00:13:24,690 Cela ne signifie pas faux en soi. 283 00:13:24,690 --> 00:13:29,080 0 est bon, et tout non-0 valeur, le monde a décidé, 284 00:13:29,080 --> 00:13:30,619 peut signifier une erreur. 285 00:13:30,619 --> 00:13:32,910 Donc, si vous avez déjà raté quelque chose sur votre ordinateur, 286 00:13:32,910 --> 00:13:36,600 ou un programme vient de mourir sur vous et vous avez reçu une certaine fenêtre erronée 287 00:13:36,600 --> 00:13:40,360 sur votre écran, erreur disant négative 49 ou erreur 23-- 288 00:13:40,360 --> 00:13:44,170 certains value-- apparemment arbitraire qui est parce qu'un programmeur a codé en dur 289 00:13:44,170 --> 00:13:49,370 une valeur négative comme 49 ou positif 23 pour représenter n'importe quel nombre, osent dire, 290 00:13:49,370 --> 00:13:53,340 de 4 milliards d'choses possibles qui pourrait aller mal dans un programme. 291 00:13:53,340 --> 00:13:55,700 >> Alors, comment pourrais-je prendre avantage de moi-même? 292 00:13:55,700 --> 00:13:58,970 Eh bien, permettez-moi d'ouvrir un programme que j'ai écrit à l'avance, 293 00:13:58,970 --> 00:14:01,450 et fouiner en ligne appelé bonjour 4. 294 00:14:01,450 --> 00:14:05,650 Et c'est presque identique, sauf que sa obtenu un peu de vérification des erreurs. 295 00:14:05,650 --> 00:14:09,660 Dans ce cas, j'ai de nouveau déclaré principal que de prendre deux arguments, 296 00:14:09,660 --> 00:14:13,180 mais cette fois, sur la ligne 17, un avis Je fais un peu d'un test de cohérence. 297 00:14:13,180 --> 00:14:17,100 Je fais en sorte que argc est égal à égal à 2. 298 00:14:17,100 --> 00:14:18,960 Parce que si c'est le cas, que signifie que je peux en toute sécurité 299 00:14:18,960 --> 00:14:21,420 toucher non seulement le support 0, mais le support 1. 300 00:14:21,420 --> 00:14:24,330 Et je vais de l'avant et d'imprimer, dans ce cas, Zamyla ou Rob 301 00:14:24,330 --> 00:14:26,020 ou quel que soit le mot que j'ai tapé sur. 302 00:14:26,020 --> 00:14:28,020 Et maintenant, juste pour obtenir un peu plus propre, 303 00:14:28,020 --> 00:14:31,910 Je vais revenir explicitement 0 pour signifier que tout va bien. 304 00:14:31,910 --> 00:14:33,300 Rien de grave s'est passé. 305 00:14:33,300 --> 00:14:38,590 >> Mais par convention, je vais retourner 1, ou franchement tout-0 non valeur, 306 00:14:38,590 --> 00:14:40,160 si quelque chose n'allait pas. 307 00:14:40,160 --> 00:14:43,270 Maintenant, l'utilisateur ne va pas vraiment remarqué ce qui se passe. 308 00:14:43,270 --> 00:14:50,410 En effet, si je vais dans ce répertoire, on fait un zoom et ne faisons bonjour 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla se comporte comme je le pense. 310 00:14:54,210 --> 00:14:58,570 Mais si je ne tape pas la place rien, rien ne se passe, 311 00:14:58,570 --> 00:14:59,680 mais il ne plante pas. 312 00:14:59,680 --> 00:15:04,660 Et si je fais quelque chose à la place comme Rob est un surveillant 313 00:15:04,660 --> 00:15:07,550 dans le partage Thayer-- Informations arbitraire. 314 00:15:07,550 --> 00:15:13,680 Mais remarquez, argv 1, 2, 3, 4, et 5 devrait maintenant exister dans la mémoire. 315 00:15:13,680 --> 00:15:16,540 Cela aussi, ce n'est pas ce mon programme prévoit, 316 00:15:16,540 --> 00:15:20,300 parce que j'ai vérifié si argc est égal à 2 égaux ou non. 317 00:15:20,300 --> 00:15:22,140 Donc, je suis en train de défendre contre cela. 318 00:15:22,140 --> 00:15:25,290 >> Maintenant, en passant, nous le programmer-- ou plutôt nous le users-- 319 00:15:25,290 --> 00:15:29,670 jamais voir que 0 ou 1, mais en utilisant un outil appelé débogueur, ou d'autres outils, 320 00:15:29,670 --> 00:15:32,250 comme nous le verrons avant longtemps, vous le programmeur 321 00:15:32,250 --> 00:15:36,590 peut réellement voir ce qui pourrait être ne va pas à l'intérieur de votre programme. 322 00:15:36,590 --> 00:15:39,170 >> Ainsi, des questions sur argc? 323 00:15:39,170 --> 00:15:40,873 Ouais. 324 00:15:40,873 --> 00:15:45,292 >> PUBLIC: j'ai vu où ils n'ont pas eu le caractère, [inaudible] 325 00:15:45,292 --> 00:15:49,669 juste ladite chaîne d étoiles, comme caractère astérisque virgule. 326 00:15:49,669 --> 00:15:50,710 Sont-ils équivalent ici? 327 00:15:50,710 --> 00:15:51,626 >> DAVID Malan: Ils le sont. 328 00:15:51,626 --> 00:15:55,080 Donc la question est, vous avez programmes de temps en temps vu 329 00:15:55,080 --> 00:15:57,270 comme ce qui n'en ont pas dire support chaîne argv 330 00:15:57,270 --> 00:16:01,015 mais au lieu de dire quelque chose comme l'omble support argv étoiles. 331 00:16:01,015 --> 00:16:03,140 Et il ya même d'autres variantes que vous pourriez voir. 332 00:16:03,140 --> 00:16:04,264 Ils sont en effet équivalent. 333 00:16:04,264 --> 00:16:06,240 Pour l'instant, nous avons ces sorte de roues de formation 334 00:16:06,240 --> 00:16:09,737 dans la forme de chaîne de caractères dans le CS50 bibliothèque, mais en un peu plus d'une semaine 335 00:16:09,737 --> 00:16:12,570 ou si nous allons supprimer cette et en fait tout à fait obstruction 336 00:16:12,570 --> 00:16:16,820 regarder ce que le charbon et l'étoile sont, et comment ceux qui se rapportent à la mémoire 337 00:16:16,820 --> 00:16:18,140 représentation plus générale. 338 00:16:18,140 --> 00:16:19,540 Donc, nous allons revenir à cela. 339 00:16:19,540 --> 00:16:21,540 >> D'autres questions sur notre argv ou argc? 340 00:16:21,540 --> 00:16:22,397 Ouais. 341 00:16:22,397 --> 00:16:24,438 PUBLIC: Pourquoi at-il revenir une erreur [inaudible]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID Malan: Pourquoi il retourner une erreur terre que: oh! 344 00:16:29,230 --> 00:16:31,813 Dans le cas précédent, lorsque nous ont été futzing autour de la mémoire, 345 00:16:31,813 --> 00:16:35,110 pourquoi at-il seulement renvoyer une erreur quand j'ai vraiment tapé un grand nombre? 346 00:16:35,110 --> 00:16:36,620 Réponse courte est, nous avons juste eu de la chance. 347 00:16:36,620 --> 00:16:39,240 D'une manière générale, un ordinateur alloue de la mémoire en morceaux, 348 00:16:39,240 --> 00:16:42,900 et il m'a donné un assez gros morceau que Je suis parti, sans se faire remarquer, 349 00:16:42,900 --> 00:16:46,280 de support touchante 2, le support 3, support 50, mais dès que je poussais 350 00:16:46,280 --> 00:16:49,080 ma chance, je suis allé au-delà du limites de la portion de mémoire 351 00:16:49,080 --> 00:16:50,520 le système d'exploitation m'avait donné. 352 00:16:50,520 --> 00:16:52,720 Et c'est là que ça réprimé et a dit non. 353 00:16:52,720 --> 00:16:54,580 erreur de segmentation. 354 00:16:54,580 --> 00:16:55,692 Ouais. 355 00:16:55,692 --> 00:16:58,890 >> PUBLIC: Comment l'ordinateur connaître la valeur de argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID Malan: Comment le ordinateur d'une valeur de argc? 357 00:17:02,390 --> 00:17:07,920 Lorsque vous exécutez un programme, ce programme, par la nature du message clignotant, 358 00:17:07,920 --> 00:17:11,359 est remis le tableau de mots qui ont été tapés 359 00:17:11,359 --> 00:17:13,300 à l'invite, c'était tapé à l'invite. 360 00:17:13,300 --> 00:17:16,569 Et si c'est votre exploitation système essentiellement 361 00:17:16,569 --> 00:17:20,329 remplit les arguments principaux pour vous. 362 00:17:20,329 --> 00:17:22,829 C'est donc l'un des services que vous obtenez, sorte de secret 363 00:17:22,829 --> 00:17:24,869 sous le capot de un système d'exploitation. 364 00:17:24,869 --> 00:17:27,118 D'autres questions? 365 00:17:27,118 --> 00:17:27,618 Ouais. 366 00:17:27,618 --> 00:17:29,787 >> PUBLIC: Qu'est-ce core dump signifie? 367 00:17:29,787 --> 00:17:31,370 DAVID Malan: Qu'est-ce core dump signifie? 368 00:17:31,370 --> 00:17:32,950 Donc, c'est une bonne question. 369 00:17:32,950 --> 00:17:35,312 Et permettez-moi de revenir en ce répertoire ici. 370 00:17:35,312 --> 00:17:37,270 Et vous remarquerez que J'ai un nouveau fichier il. 371 00:17:37,270 --> 00:17:41,670 Il est en effet appelé noyau, et c'est en fait généralement un fichier d'une taille décente. 372 00:17:41,670 --> 00:17:45,300 C'est essentiellement un instantané de le contenu de la mémoire de mon programme 373 00:17:45,300 --> 00:17:46,902 ou RAM quand il s'est écrasé. 374 00:17:46,902 --> 00:17:49,110 Et ce sera utile, éventuellement, pour le diagnostic, 375 00:17:49,110 --> 00:17:52,850 une fois que nous parlons dans un avenir conférence et de l'article sur le débogage, 376 00:17:52,850 --> 00:17:55,730 parce que vous pouvez réellement faire la équivalent numérique d'une autopsie 377 00:17:55,730 --> 00:18:00,300 sur ce fichier pour aider à comprendre ce que vous avez fait de mal dans votre programme. 378 00:18:00,300 --> 00:18:01,220 Ouais. 379 00:18:01,220 --> 00:18:04,450 >> PUBLIC: Est argc une commande lui-même, ou pouvez-vous nommer quelque chose? 380 00:18:04,450 --> 00:18:05,575 >> DAVID Malan: Bonne question. 381 00:18:05,575 --> 00:18:08,040 Est argc une commande en elle-même, ou pouvez-vous nommer quelque chose? 382 00:18:08,040 --> 00:18:09,290 Ce n'est certainement pas une commande. 383 00:18:09,290 --> 00:18:13,500 C'est tout simplement une variable de nom ou le nom de l'argument, 384 00:18:13,500 --> 00:18:15,481 et si absolument nous pourrait appeler ce truc, 385 00:18:15,481 --> 00:18:18,480 nous pourrions appeler cette barre, qui tendent d'être le go-to mots qu'un ordinateur 386 00:18:18,480 --> 00:18:19,860 scientifique va. 387 00:18:19,860 --> 00:18:22,820 Mais par convention, nous utilisons argc et argv. 388 00:18:22,820 --> 00:18:25,360 Mais c'est juste un humain convention, rien de plus. 389 00:18:25,360 --> 00:18:25,860 Bien. 390 00:18:25,860 --> 00:18:28,140 Ainsi se révèle, j'ai été dire un peu lie-- blanc 391 00:18:28,140 --> 00:18:31,264 et franchement, à l'avenir, vous verrez nous avons dit à d'autres mensonges. 392 00:18:31,264 --> 00:18:33,510 Mais pour l'instant, nous allons à peler un d'eux. 393 00:18:33,510 --> 00:18:37,310 Dans ce cas là quand je l'ai déjà couru un programme comme ./hello ou ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, nous avons eu le contenu de mon la mémoire de l'ordinateur à la recherche à peu près comme 395 00:18:42,780 --> 00:18:43,280 ce. 396 00:18:43,280 --> 00:18:45,070 Mais rappelons ce qu'est une chaîne est. 397 00:18:45,070 --> 00:18:49,279 Qu'avons-nous dit il ya une semaine ce qu'un chaîne est en fait sous le capot? 398 00:18:49,279 --> 00:18:50,320 PUBLIC: Tableau de caractères. 399 00:18:50,320 --> 00:18:52,111 DAVID Malan: Il s'agit d'une tableau de caractères, non? 400 00:18:52,111 --> 00:18:55,760 Nous pourrions donc avoir un tableau de chaînes, mais, à leur tour, une chaîne 401 00:18:55,760 --> 00:18:57,150 est un tableau de caractères. 402 00:18:57,150 --> 00:19:00,010 Donc, si je veux vraiment être anal quand je dessine cette image, 403 00:19:00,010 --> 00:19:03,290 Je devrais vraiment dessine un peu plus comme ça, 404 00:19:03,290 --> 00:19:08,000 de sorte que dans chacune de celles-ci index de mon tableau argv, 405 00:19:08,000 --> 00:19:11,432 il est lui-même un ensemble de chaîne qui se trouve dans un tableau. 406 00:19:11,432 --> 00:19:13,140 Et maintenant, le mensonge nous disons aujourd'hui 407 00:19:13,140 --> 00:19:15,181 est que l'image ne regarder tout à fait comme ça. 408 00:19:15,181 --> 00:19:19,110 En fait, les petits carrés sont généralement en dehors des grands rectangles 409 00:19:19,110 --> 00:19:19,610 Là. 410 00:19:19,610 --> 00:19:21,280 Mais nous y reviendrons qu'avant longtemps. 411 00:19:21,280 --> 00:19:25,440 Mais ce n'est ./hello barre oblique inverse 0, qui est le caractère spécial 412 00:19:25,440 --> 00:19:28,310 délimite la fin d'une chaîne, et nous avons un autre après 413 00:19:28,310 --> 00:19:29,360 Le nom de Zamyla. 414 00:19:29,360 --> 00:19:30,900 Alors qu'est-ce que cela signifie? 415 00:19:30,900 --> 00:19:33,410 >> Eh bien, laissez-moi aller de l'avant et ouvrir deux autres exemples 416 00:19:33,410 --> 00:19:35,220 qui sont disponibles en ligne. 417 00:19:35,220 --> 00:19:40,590 L'un est appelé argv1.c et l'autre est argv2. 418 00:19:40,590 --> 00:19:44,260 Il s'agit d'un programme de super-simple est différent des programmes précédents 419 00:19:44,260 --> 00:19:47,260 en ce moment je suis en utilisant argc et argv ici. 420 00:19:47,260 --> 00:19:54,300 Et maintenant, je l'intégration avec une boucle for à la ligne 18, de i = 0 sur un maximum de argc. 421 00:19:54,300 --> 00:19:56,850 Et que vais-je faire avec cette ligne de code ici? 422 00:19:56,850 --> 00:19:58,270 En anglais. 423 00:19:58,270 --> 00:20:00,510 Cela démontre bien évidemment l'utilisation de argc. 424 00:20:00,510 --> 00:20:03,670 Mais en anglais, ce qui ne il faire si je lance ce programme? 425 00:20:03,670 --> 00:20:04,366 Ouais? 426 00:20:04,366 --> 00:20:07,386 >> PUBLIC: Ça va imprimer votre écran autant de fois que vous le souhaitez. 427 00:20:07,386 --> 00:20:08,260 DAVID Malan: Exactement. 428 00:20:08,260 --> 00:20:10,480 Donc, quelles que soient les mots I tapez à l'invite, il est 429 00:20:10,480 --> 00:20:13,120 va régurgiter eux à moi un par ligne. 430 00:20:13,120 --> 00:20:14,370 Donc, nous allons aller de l'avant et le faire. 431 00:20:14,370 --> 00:20:17,862 Laissez-moi aller dans mon répertoire et faire faire ./argv1 argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 Et maintenant, nous allons garder les choses simples. 434 00:20:21,770 --> 00:20:23,834 Faisons d'abord rien. 435 00:20:23,834 --> 00:20:26,750 Il a fait imprimer une chose, et c'est en effet le nom du programme, 436 00:20:26,750 --> 00:20:28,240 parce que c'est dans le support 0. 437 00:20:28,240 --> 00:20:33,290 Si je vous dis maintenant foo, il va faire les deux, et si je dis foo bar, 438 00:20:33,290 --> 00:20:35,580 il va dire ces trois choses. 439 00:20:35,580 --> 00:20:37,740 Maintenant, c'est un peu intéressant, peut-être. 440 00:20:37,740 --> 00:20:41,450 Mais rappeler que argv est un tableau de chaînes, 441 00:20:41,450 --> 00:20:45,960 mais une chaîne est un tableau de caractères, afin que nous puissions prendre les choses d'un cran 442 00:20:45,960 --> 00:20:48,560 et appliquer cette base logique et rendre le code que 443 00:20:48,560 --> 00:20:51,160 regarde un peu plus cryptique, certes. 444 00:20:51,160 --> 00:20:53,540 Mais en ayant une imbriqué boucle, quelque chose qui s'apparente 445 00:20:53,540 --> 00:20:57,030 à ce que vous pouvez vous rappeler de Mario, par exemple, si vous avez fait de cette façon. 446 00:20:57,030 --> 00:21:00,380 >> Alors maintenant, remarque sur la ligne 19, je suis nouveau itération sur mes arguments, 447 00:21:00,380 --> 00:21:02,410 de 0 à jusqu'à argc. 448 00:21:02,410 --> 00:21:05,510 Et maintenant en ligne 21-- je suis emprunter un truc de dernière week-- 449 00:21:05,510 --> 00:21:11,090 Je vérifie quelle est la longueur du support argv i. 450 00:21:11,090 --> 00:21:12,920 Je suis le stockage de cette réponse n. 451 00:21:12,920 --> 00:21:18,230 Et puis je l'intégration de j sur à n, où j est initialisé à 0. 452 00:21:18,230 --> 00:21:19,460 Ainsi, la convention pour le comptage. 453 00:21:19,460 --> 00:21:22,335 Une fois que vous avez utilisé i, si vous avez un boucle imbriquée, vous ne pouvez pas utiliser i nouveau, 454 00:21:22,335 --> 00:21:25,770 sinon vous allez CLOBBER, potentiellement, la valeur à l'extérieur de la boucle interne. 455 00:21:25,770 --> 00:21:27,200 Donc, je suis en utilisant j par convention. 456 00:21:27,200 --> 00:21:28,020 Nous pourrions utiliser k. 457 00:21:28,020 --> 00:21:31,080 Si vous avez plus de k, vous avez probablement avoir trop de nidification, généralement. 458 00:21:31,080 --> 00:21:33,800 Mais maintenant, vous remarquerez mon printf ligne est légèrement différente. 459 00:21:33,800 --> 00:21:37,520 Je ne suis pas l'impression% s, je suis % c impression, ce qui, bien sûr, 460 00:21:37,520 --> 00:21:39,460 est un espace réservé pour un car. 461 00:21:39,460 --> 00:21:40,770 >> Et maintenant remarquer cette syntaxe. 462 00:21:40,770 --> 00:21:41,270 Nouveau. 463 00:21:41,270 --> 00:21:42,630 Nous n'avons pas vu avant. 464 00:21:42,630 --> 00:21:47,290 Mais logiquement, cela signifie juste obtenir la chaîne i dans argv 465 00:21:47,290 --> 00:21:50,067 et obtenir le j quoi? 466 00:21:50,067 --> 00:21:50,900 PUBLIC: Caractère. 467 00:21:50,900 --> 00:21:52,800 DAVID Malan: caractère dans cette chaîne. 468 00:21:52,800 --> 00:21:57,100 Donc, en utilisant des crochets suivi par des crochets, 469 00:21:57,100 --> 00:22:00,390 c'est d'abord plongée dans les chaînes de argv, 470 00:22:00,390 --> 00:22:02,225 et ensuite la seconde crochets avec j 471 00:22:02,225 --> 00:22:06,580 est plongée dans les caractères de cette chaîne particulière dans argv. 472 00:22:06,580 --> 00:22:09,562 Et puis, pour faire bonne mesure, Je l'impression d'une nouvelle ligne ici. 473 00:22:09,562 --> 00:22:12,020 Alors maintenant, laissez-moi aller de l'avant et ouvrir un peu plus grande fenêtre 474 00:22:12,020 --> 00:22:13,600 afin que nous puissions le voir en action. 475 00:22:13,600 --> 00:22:15,700 Laissez-moi aller dans ce dossier. 476 00:22:15,700 --> 00:22:22,550 Et faire maintenant faire argv 2-- whoops-- faire argv 2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Entrée. 478 00:22:23,110 --> 00:22:24,860 Et c'est un peu difficile à lire verticalement, 479 00:22:24,860 --> 00:22:27,920 mais c'est en fait le nom de la programme, suivie d'une ligne vide. 480 00:22:27,920 --> 00:22:30,210 Maintenant, laissez-moi aller de l'avant et faire foo. 481 00:22:30,210 --> 00:22:33,210 De même difficile à lire, mais c'est en effet l'impression d'un caractère par ligne. 482 00:22:33,210 --> 00:22:36,780 Et si je fais bar, il est maintenant imprimer les ligne par ligne. 483 00:22:36,780 --> 00:22:40,140 Donc, les plats à emporter ici n'est pas tant que, wow, regardez cette nouvelle astuce 484 00:22:40,140 --> 00:22:44,750 où vous pouvez accéder au contenu des caractères spécifiques d'un tableau, 485 00:22:44,750 --> 00:22:48,380 mais plutôt la façon dont nous prenons ces de base des idées comme l'indexation dans un tableau, 486 00:22:48,380 --> 00:22:51,620 et ensuite l'indexation dans une tableau qui était dans ce tableau, 487 00:22:51,620 --> 00:22:56,180 et juste en appliquant les mêmes idées à exemples un peu plus sophistiqués. 488 00:22:56,180 --> 00:22:59,560 Mais les bases sont vraiment pas changé, même depuis la semaine dernière. 489 00:22:59,560 --> 00:23:02,350 >> Maintenant, c'est une sorte de rapide, en ce que rappeler, en semaine zéro 490 00:23:02,350 --> 00:23:04,110 nous avons joué avec un livre de téléphone de ce type. 491 00:23:04,110 --> 00:23:06,670 Et même si ce n'est évidemment pièces physiques du papier, 492 00:23:06,670 --> 00:23:09,150 vous pouvez sorte de penser un annuaire téléphonique sous forme de tableau. 493 00:23:09,150 --> 00:23:12,770 Certes, si vous étiez à réimplémenter ces pièces de ces morceaux de papier 494 00:23:12,770 --> 00:23:15,260 dans un ordinateur, probablement vous pouvez utiliser quelque chose 495 00:23:15,260 --> 00:23:20,270 comme un tableau pour stocker tous ceux noms et des numéros de tout le chemin 496 00:23:20,270 --> 00:23:23,800 à Z. Donc, c'est bien, parce que il nous donne l'occasion, 497 00:23:23,800 --> 00:23:28,310 peut-être, de voir comment vous pourriez effectivement mettre en œuvre quelque chose comme ça. 498 00:23:28,310 --> 00:23:31,250 Comme dans le cas d'une série de portes ici. 499 00:23:31,250 --> 00:23:36,380 Donc, si je could-- nous avons besoin d'une volontaires pour venir sur place. 500 00:23:36,380 --> 00:23:36,980 Voyons. 501 00:23:36,980 --> 00:23:40,650 Un visage familier peut-être, visage familier peut-être. 502 00:23:40,650 --> 00:23:42,090 Que diriez-vous de couleur orange? 503 00:23:42,090 --> 00:23:42,680 Ici. 504 00:23:42,680 --> 00:23:45,870 Chemise orange, venez sur place. 505 00:23:45,870 --> 00:23:52,230 >> Allons de l'avant maintenant et déménagement ces portes sur le côté, 506 00:23:52,230 --> 00:23:54,020 les déplacer de la route pendant un moment. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Quel est votre nom? 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 Ravi de vous rencontrer. 513 00:23:59,451 --> 00:23:59,950 Bien. 514 00:23:59,950 --> 00:24:04,500 Nous avons donc derrière ces six portes numériquement sur la screen-- 515 00:24:04,500 --> 00:24:07,810 ou plutôt sur les sept portes screen-- tout un tas de chiffres. 516 00:24:07,810 --> 00:24:10,099 Et je vous ai dit rien dans advance-- d'accord? 517 00:24:10,099 --> 00:24:11,140 AJAY: Rien à l'avance. 518 00:24:11,140 --> 00:24:14,730 DAVID Malan: Tout ce que je veux que vous fassiez est maintenant de trouver pour moi, et pour nous, 519 00:24:14,730 --> 00:24:20,920 vraiment, le numéro 50, une étape à la fois. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: numéro 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID Malan: Le nombre 50. 522 00:24:22,580 --> 00:24:24,746 Et vous pouvez révéler ce qui est derrière chacune de ces portes 523 00:24:24,746 --> 00:24:27,930 tout simplement en le touchant avec un doigt. 524 00:24:27,930 --> 00:24:31,364 Bon sang. [Rires] 525 00:24:31,364 --> 00:24:34,560 >> [Applaudissements] 526 00:24:34,560 --> 00:24:39,540 >> Très bien fait. 527 00:24:39,540 --> 00:24:40,400 Dáccord. 528 00:24:40,400 --> 00:24:44,090 Nous avons un beau cadeau prix pour vous ici. 529 00:24:44,090 --> 00:24:46,520 Votre choix de films que nous discuté la semaine dernière. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, mec. 531 00:24:47,362 --> 00:24:49,050 Oh, je n'ai jamais vu Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID Malan: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Bien. 534 00:24:50,140 --> 00:24:53,790 Donc, tenir sur un seul moment. 535 00:24:53,790 --> 00:24:57,430 How-- faisons ce un moment-- enseignable 536 00:24:57,430 --> 00:25:00,412 comment avez-vous fait trouver le nombre 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: J'ai choisi au hasard. 538 00:25:01,370 --> 00:25:03,420 DAVID Malan: Donc, vous avez choisi au hasard et eu de la chance. 539 00:25:03,420 --> 00:25:03,790 AJAY: Oui. 540 00:25:03,790 --> 00:25:04,456 DAVID Malan: OK. 541 00:25:04,456 --> 00:25:05,050 Excellente. 542 00:25:05,050 --> 00:25:08,470 Alors maintenant, vous n'aviez pas eu de la chance, quoi d'autre 543 00:25:08,470 --> 00:25:10,210 aurait pu se passer derrière ces portes? 544 00:25:10,210 --> 00:25:12,930 Donc, si je vais de l'avant et révéler ces chiffres ici, 545 00:25:12,930 --> 00:25:15,180 ils sont en fait dans un ordre aléatoire. 546 00:25:15,180 --> 00:25:17,750 Et le mieux que vous pourrait avoir fait, franchement, est en fin de compte, 547 00:25:17,750 --> 00:25:19,410 dans le pire des cas, tous de vérifier. 548 00:25:19,410 --> 00:25:23,000 Donc tu as super chanceux, qui n'est pas ce qu'on appellerait un algorithme. 549 00:25:23,000 --> 00:25:24,730 Oui, félicitations. 550 00:25:24,730 --> 00:25:27,010 Mais maintenant let's-- humour moi, si vous le pouviez. 551 00:25:27,010 --> 00:25:28,310 Allons à cet onglet ici. 552 00:25:28,310 --> 00:25:31,460 Et voici les numéros en évidence ce qui semble être un ordre aléatoire, 553 00:25:31,460 --> 00:25:32,280 et ils étaient. 554 00:25:32,280 --> 00:25:35,160 Mais maintenant, si je place revendication que derrière ces portes 555 00:25:35,160 --> 00:25:39,070 sont des nombres qui sont triées. 556 00:25:39,070 --> 00:25:41,780 L'objectif est maintenant d'aussi nous trouver le numéro 50. 557 00:25:41,780 --> 00:25:45,910 Mais le faire de façon algorithmique, et nous dire comment vous allez à ce sujet. 558 00:25:45,910 --> 00:25:48,020 Et si vous le trouvez, vous gardez le film. 559 00:25:48,020 --> 00:25:49,520 Vous ne le trouvez pas, vous le redonner. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Donc, je vais vérifier les extrémités en premier lieu, de déterminer si there's-- 562 00:25:58,112 --> 00:26:02,048 [Rires et applaudissements] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID Malan: Ici vous allez. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Jetons un coup d'oeil à l'un des prédécesseurs de Ajay, 567 00:26:21,700 --> 00:26:25,450 Sean, qui n'était pas aussi chanceux. 568 00:26:25,450 --> 00:26:28,670 OK, donc votre tâche ici, Sean, est le suivant. 569 00:26:28,670 --> 00:26:32,970 J'ai caché derrière ces portes le nombre de sept, 570 00:26:32,970 --> 00:26:37,200 mais niché dans certaines de ces portes ainsi sont les autres numéros non-négatifs. 571 00:26:37,200 --> 00:26:40,730 Et votre objectif est de penser à ce rangée du haut des nombres comme un simple tableau. 572 00:26:40,730 --> 00:26:43,590 Nous sommes juste une séquence de morceaux de papier avec des numéros derrière eux. 573 00:26:43,590 --> 00:26:47,640 Et votre but est, en utilisant seulement le haut tableau ici, me trouver le numéro sept. 574 00:26:47,640 --> 00:26:51,200 Et nous allons ensuite à la critique comment vous allez le faire. 575 00:26:51,200 --> 00:26:52,920 Retrouvez-nous le nombre de sept, s'il vous plaît. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Non. 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 Ce n'est pas une question piège. 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 A ce stade, votre score n'est pas très bon, alors vous pourriez aussi bien continuer. 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 Allez. 590 00:27:39,802 --> 00:27:42,510 Franchement, je ne peux pas m'empêcher de me demander ce que vous y penser. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Je peux prendre à partir de seulement la rangée du haut. 592 00:27:44,990 --> 00:27:46,240 DAVID Malan: Seule la rangée du haut. 593 00:27:46,240 --> 00:27:47,281 Donc, vous avez trois. 594 00:27:47,281 --> 00:27:48,310 Donc me trouver 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [PUBLIC CRIE SUGGESTIONS] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Donc, à la fois de ceux qui étaient incroyables pour des raisons très différentes. 599 00:28:26,130 --> 00:28:29,150 C'est donc là que nous gauche hors il ya un instant, 600 00:28:29,150 --> 00:28:32,530 et l'idée fondamentale ici a été ces portes avaient numéros 601 00:28:32,530 --> 00:28:37,390 derrière eux qui ont été triés, l'idéal emporter pour ce qui est que vous pouvez faire 602 00:28:37,390 --> 00:28:39,670 fondamentalement mieux dans cette deuxième exemple-- 603 00:28:39,670 --> 00:28:42,380 et, en effet, que c'était Sean première tentative avec des nombres aléatoires 604 00:28:42,380 --> 00:28:45,460 tout comme before-- mais dès que ces chiffres sont triés, 605 00:28:45,460 --> 00:28:47,980 un peu comme le livre de téléphone, que pouvez-vous faire de toute évidence? 606 00:28:47,980 --> 00:28:50,090 Ou comment pouvez-vous tirer parti de cette connaissance? 607 00:28:50,090 --> 00:28:51,530 Ouais. 608 00:28:51,530 --> 00:28:54,910 >> PUBLIC: Vous allez à mi-chemin [inaudible]. 609 00:28:54,910 --> 00:28:55,660 DAVID Malan: Ouais. 610 00:28:55,660 --> 00:28:56,160 Exactement. 611 00:28:56,160 --> 00:28:59,680 Donc instinct initial de Ajay était pour vérifier les extrémités, si je me souviens, 612 00:28:59,680 --> 00:29:02,320 et puis nous avons sorte de fini l'exemple rapidement. 613 00:29:02,320 --> 00:29:05,220 Mais si nous avons commencé à faire plus méthodiquement le long de ces lignes, 614 00:29:05,220 --> 00:29:07,860 mais en partant peut-être dans l' milieu, car ils sont triés, 615 00:29:07,860 --> 00:29:10,900 dès que nous révélons l' numéro 16, nous avons donc know-- 616 00:29:10,900 --> 00:29:14,850 et nous allons faire exactement that-- nous donc savoir que 50, dans le cas d'aujourd'hui, 617 00:29:14,850 --> 00:29:16,080 a obtenu d'être à droite. 618 00:29:16,080 --> 00:29:18,735 Ainsi, tout comme la semaine zéro lorsque Nous avons déchiré le livre de téléphone dans la moitié 619 00:29:18,735 --> 00:29:21,490 et jeta la moitié de la problème de distance, même idée ici. 620 00:29:21,490 --> 00:29:23,680 Nous pouvons jeter ce semestre du problème de distance. 621 00:29:23,680 --> 00:29:25,730 Et sans doute ce que vous pourrait faire algorithmique, 622 00:29:25,730 --> 00:29:28,710 une fois que vous savez que 50 doit être vers la droite, si elle est partout, 623 00:29:28,710 --> 00:29:31,390 est d'essayer là-bas, au milieu des portes restantes. 624 00:29:31,390 --> 00:29:33,450 Bien sûr, 50 est supérieure de 42, afin que nous puissions 625 00:29:33,450 --> 00:29:36,060 jeter ce qui reste trimestre de problème de distance, 626 00:29:36,060 --> 00:29:38,510 et, enfin, identifier quelque chose comme 50. 627 00:29:38,510 --> 00:29:41,050 Mais tout comme la annuaire téléphonique, ces chiffres 628 00:29:41,050 --> 00:29:44,560 ont été donnés à nous déjà en l'ordre de tri, ce qui nous laisse 629 00:29:44,560 --> 00:29:47,450 à la question, comment voulez-vous faire avancer les choses dans l'ordre trié? 630 00:29:47,450 --> 00:29:49,640 Et, franchement, à quel prix? 631 00:29:49,640 --> 00:29:51,390 C'est une chose d'être remis le livre de téléphone 632 00:29:51,390 --> 00:29:54,810 puis impressionner vos amis en trouver un numéro de téléphone très rapidement, non? 633 00:29:54,810 --> 00:29:58,520 Déchirement 32 pages à la recherche d'un personne sur 4 milliards de pages, 634 00:29:58,520 --> 00:30:00,470 nous avons dit était un exemple extrême. 635 00:30:00,470 --> 00:30:03,320 Mais combien de temps at-il fallu Verizon pour trier ce livre de téléphone? 636 00:30:03,320 --> 00:30:06,170 Combien de temps at-il fallu pour trier ces sept numéros? 637 00:30:06,170 --> 00:30:10,110 C'est une question que nous avons jusqu'à présent complètement ignoré. 638 00:30:10,110 --> 00:30:12,330 >> Donc, nous allons répondre à cette question maintenant. 639 00:30:12,330 --> 00:30:15,920 Et nous sommes tous sur des films maintenant, mais nous avons quelques balles anti-stress. 640 00:30:15,920 --> 00:30:19,480 Si, par exemple, huit bénévoles ne me dérangerait pas de nous rejoindre ici? 641 00:30:19,480 --> 00:30:24,100 Allons de l'avant et à faire, que diriez-vous vous quatre, trois d'entre vous ici? 642 00:30:24,100 --> 00:30:25,290 Obtenez de nouveaux visages. 643 00:30:25,290 --> 00:30:27,220 Et quatre d'entre vous là-bas? 644 00:30:27,220 --> 00:30:30,760 Et maintenant-- de ne pas laisser biais ici-- et Numéro huit sur ici sur la fin. 645 00:30:30,760 --> 00:30:32,060 Venez sur place. 646 00:30:32,060 --> 00:30:32,560 Bien. 647 00:30:32,560 --> 00:30:37,480 Donc, ce que nous avons ici pour chacun de vous est un nombre. 648 00:30:37,480 --> 00:30:40,055 Si vous voulez aller y, prenez ce numéro. 649 00:30:40,055 --> 00:30:40,763 Quel est votre nom? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID Malan: Artie, d'accord. 652 00:30:43,100 --> 00:30:44,297 Vous êtes numéro 1. 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 Vous êtes numéro 2. 657 00:30:47,530 --> 00:30:49,100 Et aller de l'avant, comme je tends vous les feuilles de papier, 658 00:30:49,100 --> 00:30:52,130 ligne vous en face de la musique se dresse dans le même ordre que là-haut. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Salut, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID Malan: Andy, il est bon de vous voir. 661 00:30:53,970 --> 00:30:54,520 Numéro 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID Malan: Jacob, le numéro 4. 664 00:30:56,760 --> 00:30:57,549 Bienvenue à bord. 665 00:30:57,549 --> 00:30:58,090 SUBVENTION: Grant. 666 00:30:58,090 --> 00:30:58,881 DAVID Malan: Grant. 667 00:30:58,881 --> 00:31:00,348 Numéro 5. 668 00:31:00,348 --> 00:31:01,200 >> ALANNA: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID Malan: Alanna, le numéro 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID Malan: Frances, numéro 7. 672 00:31:04,880 --> 00:31:05,200 Et? 673 00:31:05,200 --> 00:31:05,830 >> Rachel: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID Malan: Rachel, numéro 8. 675 00:31:06,815 --> 00:31:07,100 Bien. 676 00:31:07,100 --> 00:31:08,766 Allez-y et faites-vous dans cet ordre. 677 00:31:08,766 --> 00:31:11,440 Permettez-moi de celui qui reste pupitre en place. 678 00:31:11,440 --> 00:31:13,670 Où avez-vous besoin un stand? 679 00:31:13,670 --> 00:31:14,170 Dáccord. 680 00:31:14,170 --> 00:31:18,710 Allez-y et vient de mettre vos numéros où le public peut les voir sur, 681 00:31:18,710 --> 00:31:20,340 le pupitre vers l'extérieur. 682 00:31:20,340 --> 00:31:27,240 Et nous espérons, notre première test de cohérence ici-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Attendez une minute. 685 00:31:29,070 --> 00:31:31,140 Nous n'avons pas un 8. 686 00:31:31,140 --> 00:31:35,180 J'ai besoin de vous expulser de l'exemple d'une certaine manière. 687 00:31:35,180 --> 00:31:35,680 Non. 688 00:31:35,680 --> 00:31:36,940 Non, ce n'est pas grave. 689 00:31:36,940 --> 00:31:37,890 Voyons. 690 00:31:37,890 --> 00:31:38,880 Nous pouvons le faire. 691 00:31:38,880 --> 00:31:39,440 Etre prêt. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Nous y voilà. 694 00:31:45,740 --> 00:31:46,800 Correcte. 695 00:31:46,800 --> 00:31:47,360 Bien. 696 00:31:47,360 --> 00:31:50,260 Donc, nous avons maintenant 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 Dáccord. 698 00:31:50,760 --> 00:31:51,360 Excellente. 699 00:31:51,360 --> 00:31:54,400 >> Donc la question qui se pose est, à ce coût, et par quelle méthode, 700 00:31:54,400 --> 00:31:58,580 pouvons-nous régler effectivement ces chiffres ici afin que nous puissions sorte de travailler à l'envers, 701 00:31:58,580 --> 00:32:02,759 en fin de compte, et decide-- est-il vraiment impressionnant, est-ce vraiment efficace, 702 00:32:02,759 --> 00:32:04,550 que je peux diviser et conquérir un annuaire téléphonique? 703 00:32:04,550 --> 00:32:06,716 Est-ce vraiment efficace que Je peux diviser et conquérir 704 00:32:06,716 --> 00:32:08,600 ces morceaux numériques de papier sur la carte, 705 00:32:08,600 --> 00:32:14,500 si peut-être que ça va nous coûter un fortune dans le temps ou les cycles de l'énergie ou CPU 706 00:32:14,500 --> 00:32:17,340 à réellement obtenir nos données dans un certain ordre de tri? 707 00:32:17,340 --> 00:32:18,930 Donc, nous allons poser cette question. 708 00:32:18,930 --> 00:32:22,077 >> Alors d'abord, ces chiffres sont à peu près dans un ordre aléatoire, 709 00:32:22,077 --> 00:32:24,160 et je vais proposer un algorithme, ou processus 710 00:32:24,160 --> 00:32:25,970 par lequel nous pouvons trier ces gens. 711 00:32:25,970 --> 00:32:28,100 Je vais aborder cette jolie naïvement. 712 00:32:28,100 --> 00:32:30,730 Et je vais donner la parole que c'est le genre de beaucoup pour moi 713 00:32:30,730 --> 00:32:32,890 pour envelopper mon esprit autour de la ensemble des données fixées à la fois. 714 00:32:32,890 --> 00:32:33,640 Mais vous savez quoi? 715 00:32:33,640 --> 00:32:37,450 Je vais faire un peu d' corrections marginales très simples. 716 00:32:37,450 --> 00:32:41,152 4 et 2 sont en panne, si la objectif est de passer de 1 sur un maximum de 8. 717 00:32:41,152 --> 00:32:41,860 Donc, vous savez quoi? 718 00:32:41,860 --> 00:32:43,776 Je vais vous faire les gars échangent, si vous changez 719 00:32:43,776 --> 00:32:46,380 positions physiquement et vos morceaux de papier. 720 00:32:46,380 --> 00:32:47,894 Maintenant, 4 et 6, ce sont dans l'ordre. 721 00:32:47,894 --> 00:32:49,060 Je vais laisser les avoir. 722 00:32:49,060 --> 00:32:50,227 6 et 8, ce sont dans l'ordre. 723 00:32:50,227 --> 00:32:51,185 Aller à laisser être. 724 00:32:51,185 --> 00:32:52,170 8 et1, sur commande. 725 00:32:52,170 --> 00:32:54,790 Si vous deux ne me dérangerait pas échanger. 726 00:32:54,790 --> 00:32:57,300 Maintenant, 8 et 3, si vous avez pu échanger. 727 00:32:57,300 --> 00:32:59,320 8 et 7, si vous avez pu échanger. 728 00:32:59,320 --> 00:33:01,790 Et 8 et 5, si vous avez pu échanger. 729 00:33:01,790 --> 00:33:03,980 >> Maintenant, suis-je fait? 730 00:33:03,980 --> 00:33:05,200 Non, évidemment pas. 731 00:33:05,200 --> 00:33:07,880 Mais j'ai fait l' meilleure situation, non? 732 00:33:07,880 --> 00:33:09,430 Quel est votre nom, numéro 8? 733 00:33:09,430 --> 00:33:10,055 >> Rachel: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID Malan: Alors Rachel a efficace bouillonnait assez loin, 735 00:33:12,850 --> 00:33:15,660 tout le chemin jusqu'à l'extrémité de mon tableau de nombres ici. 736 00:33:15,660 --> 00:33:17,310 Et si ce problème est une sorte de résolu. 737 00:33:17,310 --> 00:33:21,670 Maintenant, clairement, 2 doit encore bouger un peu, et 4 et 6 et 1. 738 00:33:21,670 --> 00:33:24,420 Mais il me semble avoir eu un peu plus près de la solution. 739 00:33:24,420 --> 00:33:26,790 Donc, nous allons appliquer le même heuristique naïf nouveau. 740 00:33:26,790 --> 00:33:27,690 2 et 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 et 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 et 1, mm mm. 743 00:33:29,930 --> 00:33:32,230 De laisser swap. 744 00:33:32,230 --> 00:33:33,200 6 et 3, mm mm. 745 00:33:33,200 --> 00:33:34,420 De laisser swap. 746 00:33:34,420 --> 00:33:35,580 6 et 7 est OK. 747 00:33:35,580 --> 00:33:36,590 7 et 5, Nope. 748 00:33:36,590 --> 00:33:37,790 De laisser swap. 749 00:33:37,790 --> 00:33:38,470 Et maintenant, 7 et 8. 750 00:33:38,470 --> 00:33:39,862 Et quel est votre nom? 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 Alors maintenant, Frances est à même de mieux poste, parce que maintenant 7 et 8 754 00:33:44,230 --> 00:33:46,440 sont correctement barboter jusqu'à la partie supérieure. 755 00:33:46,440 --> 00:33:47,510 Donc, 2 et 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 et 1, l'échange de let. 757 00:33:48,720 --> 00:33:50,410 4 et 3, l'échange de let. 758 00:33:50,410 --> 00:33:51,550 4 et 6, vous êtes OK. 759 00:33:51,550 --> 00:33:53,340 6 et 5, l'échange de let. 760 00:33:53,340 --> 00:33:54,590 Et maintenant, ces gars-là sont bons. 761 00:33:54,590 --> 00:33:55,780 Nous y sommes presque. 762 00:33:55,780 --> 00:33:57,706 2 et 1, sur commande, donc échanger. 763 00:33:57,706 --> 00:33:59,080 Et maintenant, laissez-moi faire un test de cohérence. 764 00:33:59,080 --> 00:34:03,080 2 et 3, 3 et 4, 4 et 5, 5 et 6, 6 et 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, donc nous avons fini. 766 00:34:05,060 --> 00:34:09,310 >> Mais à quel prix ai-je trier ces numéros ici? 767 00:34:09,310 --> 00:34:13,960 Eh bien, combien ai-je pas potentiellement prendre lors du tri de ces gens? 768 00:34:13,960 --> 00:34:15,710 Eh bien, nous allons revenir à cette question. 769 00:34:15,710 --> 00:34:18,030 Mais, franchement, si vous avez un peu ennuyé, c'est 770 00:34:18,030 --> 00:34:22,270 sorte de révélateur que ce n'était pas peut-être l'algorithme le plus efficace. 771 00:34:22,270 --> 00:34:25,230 Et en effet, franchement, je transpire d'autant plus la marche avant et en arrière. 772 00:34:25,230 --> 00:34:26,639 Qui ne se sentent pas particulièrement efficace. 773 00:34:26,639 --> 00:34:27,805 Essayons autre chose. 774 00:34:27,805 --> 00:34:31,870 Si vous avez pu réinitialiser vous à ces huit valeurs. 775 00:34:31,870 --> 00:34:32,969 Bon travail. 776 00:34:32,969 --> 00:34:36,570 >> Jetons un coup d'oeil numériquement, pour seulement un moment avant d'essayer quelque chose d'autre, 777 00:34:36,570 --> 00:34:38,179 ce qui vient de se passer. 778 00:34:38,179 --> 00:34:41,330 Ici, vous êtes sur le point de voir une la visualisation de ces huit humains 779 00:34:41,330 --> 00:34:44,719 laquelle bleu et rouge barres représentent des nombres. 780 00:34:44,719 --> 00:34:46,670 Plus la barre, plus le nombre. 781 00:34:46,670 --> 00:34:48,510 Plus la barre, plus le nombre. 782 00:34:48,510 --> 00:34:51,560 Et ce que vous allez voir est en un ordre aléatoire plus de huit d'entre eux. 783 00:34:51,560 --> 00:34:55,830 Vous allez voir ces barres se trié par ce même algorithme, 784 00:34:55,830 --> 00:34:59,890 ou un ensemble d'instructions, qui nous appellerons dorénavant tri à bulles. 785 00:34:59,890 --> 00:35:04,000 Donc remarquer, toutes les secondes, deux barres s'allument en rouge, 786 00:35:04,000 --> 00:35:05,590 sont comparées par l'ordinateur. 787 00:35:05,590 --> 00:35:08,630 Et puis si le grand bar et la petit bar sont hors d'usage, 788 00:35:08,630 --> 00:35:11,220 ils sont échangés pour moi. 789 00:35:11,220 --> 00:35:15,120 >> Maintenant, c'est incroyablement fastidieux à regarder cela, certainement, 790 00:35:15,120 --> 00:35:18,630 pendant très longtemps, mais la remarquerez takeaway-- grandes barres mobiles vers la droite, 791 00:35:18,630 --> 00:35:20,460 petits bars mobiles vers la gauche. 792 00:35:20,460 --> 00:35:23,380 Disons avorter ce processus et accélérer le processus 793 00:35:23,380 --> 00:35:27,330 être beaucoup plus rapide, afin que nous puissions se faire une idée de haut niveau de ce que, 794 00:35:27,330 --> 00:35:29,970 en effet, tri à bulles est fait. 795 00:35:29,970 --> 00:35:33,150 En effet, il est bouillonnant à l' côté droit de la liste, 796 00:35:33,150 --> 00:35:35,260 ou le tableau, les plus grands bars. 797 00:35:35,260 --> 00:35:40,020 Et inversement, les petits bars sont barbotage leur chemin vers le bas vers la gauche, 798 00:35:40,020 --> 00:35:42,950 mais à un rythme plus rapide que nous avons précédemment fait. 799 00:35:42,950 --> 00:35:45,850 Donc, plus difficile à voir avec les humains, mais visuellement c'est bien ce que 800 00:35:45,850 --> 00:35:46,540 qui se passait. 801 00:35:46,540 --> 00:35:49,110 >> Mais essayons fondamentalement approche différente maintenant. 802 00:35:49,110 --> 00:35:52,387 Essayons une autre algorithme par lequel nous vous avons 803 00:35:52,387 --> 00:35:59,640 mecs commencent dans ces originale positions, qui était cet ordre ici. 804 00:35:59,640 --> 00:36:00,827 Et allons-y maintenant. 805 00:36:00,827 --> 00:36:02,910 Et je vais faire quelque chose encore plus simple, non? 806 00:36:02,910 --> 00:36:06,710 En rétrospective, l'échange de nouveau par paires et encore, presque un peu intelligent. 807 00:36:06,710 --> 00:36:10,460 Faisons les choses encore plus naïvement, où si je veux trier ces gens, 808 00:36:10,460 --> 00:36:12,560 permettez-moi de continuer à chercher pour le plus petit élément. 809 00:36:12,560 --> 00:36:14,570 Donc, en ce moment, 4 est la plus petit nombre que j'ai vu. 810 00:36:14,570 --> 00:36:15,695 Je vais m'en souvenir. 811 00:36:15,695 --> 00:36:17,750 Non, 2 c'est mieux, et rappelez-vous que. 812 00:36:17,750 --> 00:36:20,730 1 est encore plus faible. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 Dáccord. 815 00:36:22,470 --> 00:36:23,750 One-- quel est votre nom? 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 Donc, Artie, aller de l'avant. 819 00:36:25,460 --> 00:36:27,043 Je vais vous sortir de la ligne. 820 00:36:27,043 --> 00:36:28,400 Si vous pouviez revenir ici. 821 00:36:28,400 --> 00:36:30,790 Et j'ai besoin de faire de la place pour lui. 822 00:36:30,790 --> 00:36:32,040 Nous avons un point de décision ici. 823 00:36:32,040 --> 00:36:36,000 Comment pourrions-nous faire de la place pour Artie ici au début où le numéro 1 appartient? 824 00:36:36,000 --> 00:36:36,770 >> PUBLIC: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID Malan: OK, nous pourraient se tourner vers tout le monde. 826 00:36:38,950 --> 00:36:40,860 Mais proposer une optimisation. 827 00:36:40,860 --> 00:36:43,410 Cela se sent un peu ennuyeux pour moi de demander quatre personnes 828 00:36:43,410 --> 00:36:44,620 de déplacer tout le chemin vers le bas. 829 00:36:44,620 --> 00:36:45,520 Que pouvais-je faire? 830 00:36:45,520 --> 00:36:46,360 >> AUDIENCE: les allumer. 831 00:36:46,360 --> 00:36:46,850 >> DAVID Malan: les allumer. 832 00:36:46,850 --> 00:36:47,900 Et quel est votre nom? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID Malan: Jacob, se déplacer. 835 00:36:50,330 --> 00:36:54,440 Bien plus efficace d'avoir juste Jacob swaps emplacements avec Artie, 836 00:36:54,440 --> 00:36:56,710 au lieu de forcer tous les quatre de ces gens, 837 00:36:56,710 --> 00:36:58,734 merci beaucoup, à leur position correcte. 838 00:36:58,734 --> 00:37:01,150 Ce qui est bien Artie maintenant, il est dans sa position correcte. 839 00:37:01,150 --> 00:37:02,060 Faisons-le à nouveau. 840 00:37:02,060 --> 00:37:03,730 2, c'est le plus petit nombre que j'ai vu. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 Dáccord. 843 00:37:06,190 --> 00:37:07,467 2 est certainement le plus petit. 844 00:37:07,467 --> 00:37:08,550 Ne pas avoir à faire un travail. 845 00:37:08,550 --> 00:37:09,320 Faisons-le à nouveau. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Le plus petit? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Non. 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 Que je me souvienne 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Que je me souvienne 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Plus petit nombre que je n'ai vu sur ce passage est 3. 857 00:37:18,490 --> 00:37:20,340 Si vous venez nous. 858 00:37:20,340 --> 00:37:21,986 Où allons-nous vous mettre? 859 00:37:21,986 --> 00:37:22,860 Et quel est votre nom? 860 00:37:22,860 --> 00:37:23,530 >> ALANNA: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID Malan: Alanna, nous sommes allez avoir à vous expulser. 862 00:37:25,780 --> 00:37:28,670 Mais ce n'est plus efficace, juste échanger deux personnes, 863 00:37:28,670 --> 00:37:31,850 que d'avoir plusieurs personnes effectivement contourner plus. 864 00:37:31,850 --> 00:37:32,850 Maintenant, nous allons le faire à nouveau. 865 00:37:32,850 --> 00:37:34,980 Je vais sélectionner 4, alors venez sur. 866 00:37:34,980 --> 00:37:36,540 Et qui va se déplacer? 867 00:37:36,540 --> 00:37:37,750 Numéro 8, bien sûr. 868 00:37:37,750 --> 00:37:40,260 Si je trouve aujourd'hui au nombre de 5, allez sur. 869 00:37:40,260 --> 00:37:42,104 Numéro 8 va se faire expulsé à nouveau. 870 00:37:42,104 --> 00:37:43,770 Je vais maintenant trouver le numéro 6 en place. 871 00:37:43,770 --> 00:37:44,410 7 à la place. 872 00:37:44,410 --> 00:37:45,080 8 en place. 873 00:37:45,080 --> 00:37:48,590 >> Ce que nous venons de faire maintenant est quelque chose qui s'appelle la sélection sorte, 874 00:37:48,590 --> 00:37:52,560 et si nous visualisons cela, il est va se sentir un peu différent. 875 00:37:52,560 --> 00:37:56,800 Allons de l'avant et de ce Menu ici, ce visualization-- 876 00:37:56,800 --> 00:38:02,920 nous allons changer ce to-- allez, Firefox. 877 00:38:02,920 --> 00:38:07,610 Nous allons changer ce genre à la sélection. 878 00:38:07,610 --> 00:38:11,830 Et nous allons accélérer comme avant, et commencer la visualisation maintenant. 879 00:38:11,830 --> 00:38:13,990 Et cet algorithme a une sensation différente à elle. 880 00:38:13,990 --> 00:38:16,480 A chaque itération, franchement, c'est encore plus simple. 881 00:38:16,480 --> 00:38:18,385 Je suis juste en sélectionnant le plus petit élément. 882 00:38:18,385 --> 00:38:21,510 Maintenant, franchement, je suis un peu de la chance que temps, en ce qu'il triée ultra-rapide. 883 00:38:21,510 --> 00:38:22,660 Les éléments sont aléatoires. 884 00:38:22,660 --> 00:38:25,520 Ce n'est pas, comme nous le verrons par la suite voir, fondamentalement plus rapide. 885 00:38:25,520 --> 00:38:29,400 Mais nous allons voir une troisième et dernière aborder ici à ce qui se passe. 886 00:38:29,400 --> 00:38:36,230 Donc, nous allons aller de l'avant et vous réinitialiser les gars une dernière fois d'être dans cet ordre ici. 887 00:38:36,230 --> 00:38:38,450 >> Et maintenant, je vais être un peu plus intelligent, 888 00:38:38,450 --> 00:38:40,220 juste pour compléter nos algorithmes. 889 00:38:40,220 --> 00:38:41,230 Je vais le faire. 890 00:38:41,230 --> 00:38:43,140 Je vais pas aller d'avant en arrière tellement. 891 00:38:43,140 --> 00:38:44,900 Franchement, je suis fatigué de tout ce déplacement. 892 00:38:44,900 --> 00:38:47,691 Je vais juste prendre ce que je suis donné au début de la liste, 893 00:38:47,691 --> 00:38:49,460 et je vais trier que puis et là. 894 00:38:49,460 --> 00:38:50,140 Donc nous sommes ici. 895 00:38:50,140 --> 00:38:51,030 Numéro 4. 896 00:38:51,030 --> 00:38:53,680 Je vais insérer le numéro 4 dans une liste triée. 897 00:38:53,680 --> 00:38:54,180 Terminé. 898 00:38:54,180 --> 00:38:58,300 Je prétends maintenant, et juste pour le rendre plus clair, cette partie de ma liste est triée. 899 00:38:58,300 --> 00:39:02,610 C'est une sorte de sotte prétention, mais bien 4 sont triés dans une liste de taille un. 900 00:39:02,610 --> 00:39:04,210 Maintenant, je vais prendre le numéro 2. 901 00:39:04,210 --> 00:39:07,670 Numéro 2, je vais maintenant insérer dans le bon endroit. 902 00:39:07,670 --> 00:39:08,680 Alors, où est 2 appartiennent? 903 00:39:08,680 --> 00:39:09,824 Évidemment, ici. 904 00:39:09,824 --> 00:39:11,490 Donc, aller de l'avant et revenir en arrière, si vous le pouviez. 905 00:39:11,490 --> 00:39:14,406 Et pourquoi ne pas vous les gars juste prendre votre musique est avec vous cette fois. 906 00:39:14,406 --> 00:39:17,020 Et de laisser la force que vous insérez au début de la liste. 907 00:39:17,020 --> 00:39:17,936 Ainsi, un peu plus de travail. 908 00:39:17,936 --> 00:39:20,890 J'ai dû déménager Jacob autour, et quel est ton nom? 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 Mais au moins je ne suis pas allé dans les deux sens. 912 00:39:24,350 --> 00:39:25,739 Je prends juste les choses que je vais. 913 00:39:25,739 --> 00:39:27,530 Je suis juste en les insérant au bon endroit. 914 00:39:27,530 --> 00:39:29,220 6, c'est en fait assez facile. 915 00:39:29,220 --> 00:39:31,510 Laissez vous insérez là-bas, si vous je voulais juste aller sur un peu. 916 00:39:31,510 --> 00:39:32,870 Numéro 8, également assez facile. 917 00:39:32,870 --> 00:39:33,741 Juste là. 918 00:39:33,741 --> 00:39:34,240 Bon sang. 919 00:39:34,240 --> 00:39:37,590 Numéro 1 nous ne pouvons pas juste échanger avec Amin ici, 920 00:39:37,590 --> 00:39:39,340 parce que ce qui se passe de gâcher l'ordre. 921 00:39:39,340 --> 00:39:40,660 Donc, nous devons être un peu plus intelligent. 922 00:39:40,660 --> 00:39:42,770 Donc, Artie, si vous pouviez sauvegarder pour un moment. 923 00:39:42,770 --> 00:39:46,550 Allons de l'avant et décaler maintenant, contrairement à nos algorithmes précédents, 924 00:39:46,550 --> 00:39:50,910 pour faire place à Artie ici au début. 925 00:39:50,910 --> 00:39:54,690 Ainsi, à la fin de la journée, je suis une sorte de faire ce que je voulais éviter avant. 926 00:39:54,690 --> 00:39:57,770 Et si mon algorithme est en quelque sorte de inversés, intellectuellement, 927 00:39:57,770 --> 00:39:59,070 de ce qu'elle était à l'origine. 928 00:39:59,070 --> 00:40:01,240 Je ne fais que le déplacement à un point différent. 929 00:40:01,240 --> 00:40:02,291 Maintenant, je suis à 3. 930 00:40:02,291 --> 00:40:02,790 Oh, putain. 931 00:40:02,790 --> 00:40:04,039 Nous devons faire plus de travail encore. 932 00:40:04,039 --> 00:40:05,060 Donc, nous allons vous faire sortir. 933 00:40:05,060 --> 00:40:09,360 Passons 8, 6, 4-- oh groupes OH et 3 va aller là. 934 00:40:09,360 --> 00:40:11,490 Donc, à moins de légères économies pour le moment. 935 00:40:11,490 --> 00:40:13,100 7, pas trop de travail à faire. 936 00:40:13,100 --> 00:40:15,370 Donc, si vous voulez de la pop retour, nous allons vous insérez. 937 00:40:15,370 --> 00:40:17,440 Et enfin, 5, si vous vouloir y faire un saut, nous 938 00:40:17,440 --> 00:40:22,610 besoin de vous déplacer, vous, vous, jusqu'à cinq est en place. 939 00:40:22,610 --> 00:40:25,670 >> Alors maintenant, à voir ce à un de haut niveau graphique, 940 00:40:25,670 --> 00:40:31,080 nous allons faire cet algorithme visualisation d'un délai supplémentaire. 941 00:40:31,080 --> 00:40:33,580 Ce que nous allons donc appeler le tri par insertion. 942 00:40:33,580 --> 00:40:37,700 Nous courons tout aussi rapide, et commencer ici. 943 00:40:37,700 --> 00:40:39,580 Et, aussi, a un sens différent. 944 00:40:39,580 --> 00:40:42,180 C'est une sorte de mieux en mieux et mieux, mais ce n'est jamais parfait 945 00:40:42,180 --> 00:40:44,630 jusqu'à ce que je rentre et lisse ces lacunes. 946 00:40:44,630 --> 00:40:47,860 Parce que, encore une fois, je ne fais que prendre ce On me donné de gauche à droite. 947 00:40:47,860 --> 00:40:50,350 Donc, je n'ai pas eu autant de chance que tout était parfait. 948 00:40:50,350 --> 00:40:54,190 C'est pourquoi nous avons eu ces petits mispositions que nous nous sommes fixés dans le temps. 949 00:40:54,190 --> 00:40:58,890 >> Donc, tous ces algorithmes semblent fonctionner à peu des rythmes différents. 950 00:40:58,890 --> 00:41:02,030 En fait, ce qui est selon vous la meilleure ou la plus rapide à ce jour? 951 00:41:02,030 --> 00:41:03,450 Bubble sorte, le premier? 952 00:41:03,450 --> 00:41:05,000 sorte de sélection, la deuxième? 953 00:41:05,000 --> 00:41:08,450 Sorte insertion, la troisième? 954 00:41:08,450 --> 00:41:10,710 J'entends certains types de sélection. 955 00:41:10,710 --> 00:41:13,280 D'autres pensées? 956 00:41:13,280 --> 00:41:16,880 >> Ainsi, il s'avère que l'ensemble de ces algorithmes 957 00:41:16,880 --> 00:41:22,400 sont fondamentalement aussi efficace que chaque other-- ou, au contraire, de même que 958 00:41:22,400 --> 00:41:25,980 inefficace comme de l'autre, parce que nous pouvons faire fondamentalement 959 00:41:25,980 --> 00:41:28,120 mieux que tous les trois de ces algorithmes. 960 00:41:28,120 --> 00:41:29,990 Et c'est un peu un mensonge aussi. 961 00:41:29,990 --> 00:41:32,580 quand je dis aussi efficace ou comme inefficace, 962 00:41:32,580 --> 00:41:35,040 c'est au moins pour super-grandes valeurs de n. 963 00:41:35,040 --> 00:41:38,450 Lorsque nous avons seulement huit personnes ici, ou peut-être 50 ou si les barres sur l'écran, 964 00:41:38,450 --> 00:41:41,645 vous aurez absolument remarquez des différences parmi ces trois algorithmes. 965 00:41:41,645 --> 00:41:44,020 Mais comme n, le nombre de personnes, ou le nombre de chiffres, 966 00:41:44,020 --> 00:41:46,350 ou le nombre de personnes dans le téléphone livre, ou le nombre de pages Web 967 00:41:46,350 --> 00:41:48,230 dans la base de données de Google devient de plus en plus grande, 968 00:41:48,230 --> 00:41:51,650 nous verrons que tous les trois de ces algorithmes sont en fait assez pauvre. 969 00:41:51,650 --> 00:41:54,060 Et nous pouvons faire fondamentalement mieux que cela. 970 00:41:54,060 --> 00:41:56,830 >> Jetons un coup d'oeil, enfin, à ce que ces algorithmes pourraient 971 00:41:56,830 --> 00:41:59,520 ressembler à l' contexte de quelques autres 972 00:41:59,520 --> 00:42:03,550 ainsi par l'intermédiaire de ce visualisation ici 973 00:42:03,550 --> 00:42:06,860 qui va nous présenter un certain nombre d'algorithmes. 974 00:42:06,860 --> 00:42:10,330 Allons de l'avant et de féliciter nos participants ici, qui ont tous 975 00:42:10,330 --> 00:42:11,690 se triés très bien. 976 00:42:11,690 --> 00:42:15,124 Si vous souhaitez prendre un cadeau d'adieu. 977 00:42:15,124 --> 00:42:16,540 Vous pouvez conserver vos numéros ainsi. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 Et ce que vous verrez, ou plutôt entendre, maintenant, 980 00:42:22,520 --> 00:42:25,710 est que nous mettons des sons pour chacune de ces barres 981 00:42:25,710 --> 00:42:28,660 et l'associer avec le logiciel, fréquence différente du son, 982 00:42:28,660 --> 00:42:33,970 vous pouvez envelopper votre esprit plus audioly autour de ce que chacune de ces choses 983 00:42:33,970 --> 00:42:34,470 ressembler. 984 00:42:34,470 --> 00:42:39,325 Le premier est le tri par insertion 985 00:42:39,325 --> 00:42:44,275 >> [TONS] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> C'est tri à bulles. 988 00:42:49,720 --> 00:42:54,175 >> [TONS] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> sorte de sélection. 991 00:43:18,222 --> 00:43:22,596 >> [TONS] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Quelque chose qui s'appelle le tri par fusion. 994 00:43:35,150 --> 00:43:38,140 >> [TONS] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Sorte Gnome. 997 00:43:51,278 --> 00:43:56,390 >> [TONS] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> C'est tout pour CS50. 1000 00:44:09,430 --> 00:44:13,360 Nous nous reverrons mercredi. 1001 00:44:13,360 --> 00:44:16,671 >> Narrateur: Et maintenant, "Deep Pensées », par Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Pourquoi est-ce une boucle? 1004 00:44:21,590 --> 00:44:23,200 Pourquoi ne pas faire mieux? 1005 00:44:23,200 --> 00:44:25,970 Je fais une boucle de cinq ans. 1006 00:44:25,970 --> 00:44:28,720 >> [Rires]