1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID MALAN: Tudo bem. 3 00:00:11,940 --> 00:00:16,470 Portanto, esta é CS50, e este é agora o início da semana três. 4 00:00:16,470 --> 00:00:19,960 >> Então, até agora, nós temos se escrever programas em C 5 00:00:19,960 --> 00:00:23,210 que olhar um pouco algo parecido com isso aqui. 6 00:00:23,210 --> 00:00:25,470 Então, nós temos um par de afiado inclui, na parte superior. 7 00:00:25,470 --> 00:00:28,490 Temos int, principal, nula e então alguma coisa para fazer no meio, 8 00:00:28,490 --> 00:00:30,590 algum pedaço de código dentro dessa função. 9 00:00:30,590 --> 00:00:34,170 Mas chave tem sido o facto de que temos dito vazio aqui. 10 00:00:34,170 --> 00:00:39,320 Então, vazio, todo esse tempo, especifica que este programa, quando executado, 11 00:00:39,320 --> 00:00:41,300 só pode ser executado por meio de seu nome. 12 00:00:41,300 --> 00:00:46,330 Você não pode digitar quaisquer outras palavras ou números após o nome do programa quando 13 00:00:46,330 --> 00:00:46,830 executá-lo. 14 00:00:46,830 --> 00:00:51,200 Assim, por exemplo, se o programa foram compilados em um arquivo chamado Olá, 15 00:00:51,200 --> 00:00:53,480 você poderia fazer ./hello, mas é isso. 16 00:00:53,480 --> 00:00:56,750 >> A única maneira que você poderia contribuir para este programa 17 00:00:56,750 --> 00:00:57,960 é chamando uma função. 18 00:00:57,960 --> 00:00:59,790 Por exemplo, qual a função temos vindo a utilizar até agora 19 00:00:59,790 --> 00:01:00,950 para obter entrada do usuário? 20 00:01:00,950 --> 00:01:02,117 >> AUDIÊNCIA: Obter string. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: Para obter corda, ou obter int, ou você já viu outros, 22 00:01:04,700 --> 00:01:07,630 mesmo se você não tê-los usado ainda, como obter muito, muito e afins. 23 00:01:07,630 --> 00:01:09,380 Mas suponha que realmente quer começar 24 00:01:09,380 --> 00:01:12,760 escrever programas que são pouco mais versátil, e, francamente, um pouco mais 25 00:01:12,760 --> 00:01:15,090 como os comandos que você recebido, espero, 26 00:01:15,090 --> 00:01:16,550 um pouco acostumado. 27 00:01:16,550 --> 00:01:18,560 Como cd espaço Dropbox. 28 00:01:18,560 --> 00:01:20,800 Isto, é claro, as alterações seu diretório, assumindo 29 00:01:20,800 --> 00:01:23,590 você está na casa de John Harvard diretório, em sua pasta Dropbox. 30 00:01:23,590 --> 00:01:27,380 Enquanto isso, um comando como este cria um novo diretório chamado pset2, 31 00:01:27,380 --> 00:01:30,290 como você já pode ter ou em breve para o problema de definir dois. 32 00:01:30,290 --> 00:01:33,970 Adicione Olá, é claro, é um comando que constrói um programa chamado Olá 33 00:01:33,970 --> 00:01:35,770 a partir de um arquivo chamado Olá ponto c. 34 00:01:35,770 --> 00:01:39,140 E em cada um desses casos, agora, nós tivemos 35 00:01:39,140 --> 00:01:43,620 proporcionam uma discussão sobre o chamado linha de comando, o prompt piscando, 36 00:01:43,620 --> 00:01:48,540 para que make sabe o que construir, e assim por que sabe o que mkdir pasta para criar, 37 00:01:48,540 --> 00:01:51,110 e para que cd sabe onde você quer ir. 38 00:01:51,110 --> 00:01:54,720 Mas até agora, continuamos a dizer que o principal, a função padrão, 39 00:01:54,720 --> 00:01:58,500 tem uma expressão vazia dentro desses parênteses, 40 00:01:58,500 --> 00:02:01,250 o que significa que ele não pode tomar quaisquer argumentos. 41 00:02:01,250 --> 00:02:03,240 >> Então, a partir de hoje, o que vamos fazer 42 00:02:03,240 --> 00:02:06,270 é, vamos começar apoiar coisas como esta mesmo. 43 00:02:06,270 --> 00:02:08,990 Na verdade, neste caso, o que lhe não costumam digitar manualmente, 44 00:02:08,990 --> 00:02:11,130 Faça vem fazendo isso para nós, não há 45 00:02:11,130 --> 00:02:15,840 um, mas de um, dois, três adicional cordas após o programa de chamada 46 00:02:15,840 --> 00:02:16,850 clang. 47 00:02:16,850 --> 00:02:18,240 Então, como vamos conseguir isso? 48 00:02:18,240 --> 00:02:20,260 >> Bem, a partir de hoje, nos casos em que queremos 49 00:02:20,260 --> 00:02:22,855 para fornecer entrada através do chamado de linha de comando, 50 00:02:22,855 --> 00:02:24,980 vamos começar a adicionar aqui o que está em yellow-- 51 00:02:24,980 --> 00:02:30,520 substituindo vazio com int argc vírgula corda argv suporte aberto fechar parêntesis. 52 00:02:30,520 --> 00:02:32,520 Agora isto é interessante por um par de razões. 53 00:02:32,520 --> 00:02:35,690 Um deles, que vai deixar-nos escrever programas que são um pouco mais dinâmico. 54 00:02:35,690 --> 00:02:37,570 Mas, mais convincente, que vai abrir 55 00:02:37,570 --> 00:02:40,340 agora uma conversa a respeito de o que matrizes podem realmente 56 00:02:40,340 --> 00:02:43,300 ser utilizado, para o que uma string realmente é debaixo do capô, 57 00:02:43,300 --> 00:02:47,320 até a próxima semana, quando começamos mergulho no mais profundo de como a máquina está 58 00:02:47,320 --> 00:02:48,590 fazendo todo esse trabalho material. 59 00:02:48,590 --> 00:02:51,920 Mas, por agora, vamos desenhar, talvez, uma foto. 60 00:02:51,920 --> 00:02:54,950 >> Quando você escreve um programa com principal declarada 61 00:02:54,950 --> 00:02:58,810 desta forma, de tal modo que principal recebe dois argumentos, um int 62 00:02:58,810 --> 00:03:03,233 e-- que tipo de dados é o segundo argumento? 63 00:03:03,233 --> 00:03:04,529 >> AUDIÊNCIA: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 Portanto, parece à primeira vista como se fosse um corda, mas observar os colchetes. 66 00:03:09,170 --> 00:03:12,760 Lembre-se da última vez que introduziu a noção de uma matriz. 67 00:03:12,760 --> 00:03:16,210 E matrizes usar colchetes em um par de contextos. 68 00:03:16,210 --> 00:03:19,160 Você pode usar o quadrado suportes para ir em uma matriz 69 00:03:19,160 --> 00:03:22,710 e obter um elemento particular, como suporte 0 ou suporte de uma ou suporte 2. 70 00:03:22,710 --> 00:03:25,500 Mas vimos, ainda que brevemente, na semana passada que você também 71 00:03:25,500 --> 00:03:28,790 usar esses colchetes para declarar o tamanho de uma matriz, 72 00:03:28,790 --> 00:03:31,790 Se você sabe de antemão quantos ints ou como cadeias de muitos ou o que você 73 00:03:31,790 --> 00:03:32,630 realmente querem. 74 00:03:32,630 --> 00:03:34,790 Então não é que há um terceiro contexto aqui 75 00:03:34,790 --> 00:03:37,890 que não tem nenhum número dentro dos colchetes. 76 00:03:37,890 --> 00:03:41,920 Quando você especificar, como eu tenho aqui, o nome de algo como argv, 77 00:03:41,920 --> 00:03:44,550 que é apenas uma maneira elegante de dizendo argumento vetor, que 78 00:03:44,550 --> 00:03:47,750 é outra maneira extravagante de dizendo uma matriz de argumentos, 79 00:03:47,750 --> 00:03:50,870 suporte aberto fechar parêntesis apenas significa que você não precisa necessariamente 80 00:03:50,870 --> 00:03:52,960 saber com antecedência como grande a matriz vai ser, 81 00:03:52,960 --> 00:03:55,070 mas você sabe que vai ser um array. 82 00:03:55,070 --> 00:03:57,320 Então, se você não sabe o número não colocá-lo lá dentro, 83 00:03:57,320 --> 00:04:01,160 para suporte aberto fechar parêntesis significa que argv não é uma string, 84 00:04:01,160 --> 00:04:03,124 mas um conjunto de cordas. 85 00:04:03,124 --> 00:04:05,040 Então, sintaticamente, se você acho que volta na semana passada, 86 00:04:05,040 --> 00:04:09,460 é muito semelhante a dizer algo como int idades suporte aberto, 87 00:04:09,460 --> 00:04:10,984 e em seguida, depois disso algo. 88 00:04:10,984 --> 00:04:12,150 Então o que isso parece? 89 00:04:12,150 --> 00:04:13,399 Vamos realmente tirar uma foto. 90 00:04:13,399 --> 00:04:18,756 Então, quando você executar este programa com principal tendo dois argumentos definido dentro 91 00:04:18,756 --> 00:04:21,339 desses parênteses, é essencialmente têm pelo menos dois pedaços 92 00:04:21,339 --> 00:04:23,560 de memória entregue a você debaixo do capô. 93 00:04:23,560 --> 00:04:26,550 Um deles, como eu vou desenha como este retângulo, vai ser chamado argc. 94 00:04:26,550 --> 00:04:30,645 E assim como uma rápida recapitulação, qual é o tipo de argc dados? 95 00:04:30,645 --> 00:04:31,270 Portanto, é um int. 96 00:04:31,270 --> 00:04:33,480 Assim, um número vai para ir em turnos argc-- 97 00:04:33,480 --> 00:04:35,660 que representa o número de argumentos. 98 00:04:35,660 --> 00:04:38,887 Enquanto isso, eu desenhei argv como uma matriz. 99 00:04:38,887 --> 00:04:40,970 E eu realmente não sei quanto tempo vai ser, 100 00:04:40,970 --> 00:04:42,470 portanto, para fins de hoje dot dot dot. 101 00:04:42,470 --> 00:04:43,636 Pode ficar de algum tempo. 102 00:04:43,636 --> 00:04:45,640 Mas eu tenho mostrado aqui pelo menos quatro retângulos. 103 00:04:45,640 --> 00:04:50,970 Assim, argv um pedaço de memória que armazena string string cadeia dot dot dot, 104 00:04:50,970 --> 00:04:53,950 e argc é apenas um pedaço de memória para um número inteiro. 105 00:04:53,950 --> 00:04:55,710 >> Então, agora, vamos ser um pouco mais preciso. 106 00:04:55,710 --> 00:04:59,200 Se, quando eu tenho cordas Nesta matriz, chamado 107 00:04:59,200 --> 00:05:03,290 argv, quero chegar a eles individualmente, assim como na semana passada, 108 00:05:03,290 --> 00:05:05,670 vamos usar a notação como suporte argv 0 109 00:05:05,670 --> 00:05:07,650 para obter a primeira coisa que um array. 110 00:05:07,650 --> 00:05:10,440 Argv suporte 1 para obter a segundo lugar, e assim por diante. 111 00:05:10,440 --> 00:05:14,597 A chave aqui é que ainda estamos 0 indexed-- ainda estamos contando a partir de 0. 112 00:05:14,597 --> 00:05:16,430 Então agora vamos realmente colocar alguma coisa nesse sentido. 113 00:05:16,430 --> 00:05:21,670 Se eu fosse para compilar um programa chamado Olá a partir de um arquivo chamado Olá ponto c, 114 00:05:21,670 --> 00:05:24,340 e então eu executar esse programa com ponto barra Olá, 115 00:05:24,340 --> 00:05:28,380 o que é que o meu computador, meu laptop, parecer debaixo do capô 116 00:05:28,380 --> 00:05:31,300 no momento em que executar dot reduzir Olá e pressione Enter? 117 00:05:31,300 --> 00:05:33,500 Bem, este é, talvez, o que poderíamos descrever 118 00:05:33,500 --> 00:05:37,010 como o conteúdo de seu computador de memória, ou memória de acesso aleatório RAM--. 119 00:05:37,010 --> 00:05:40,330 Em outras palavras, o computador, de alguma forma para que você passe de mágica, 120 00:05:40,330 --> 00:05:45,360 coloca o número 1 em argc, AKA argcount, e põe literalmente a string 121 00:05:45,360 --> 00:05:48,200 ./hello em argv suporte 0. 122 00:05:48,200 --> 00:05:51,750 Eu não tenho idéia, francamente, o que é no suporte argv 1 ou 2 ou 3, 123 00:05:51,750 --> 00:05:55,550 porque, se o usuário não tem digitado nada além ./hello, 124 00:05:55,550 --> 00:05:58,550 vamos supor que estes são valores de lixo mais prováveis, 125 00:05:58,550 --> 00:05:59,700 por assim dizer. 126 00:05:59,700 --> 00:06:02,650 Esses pedaços de memória existem, mas não cabe a nós 127 00:06:02,650 --> 00:06:05,710 de olhar para eles, porque o argcount é um só. 128 00:06:05,710 --> 00:06:07,870 >> Agora, enquanto isso, se eu escrever executar outro programa, 129 00:06:07,870 --> 00:06:12,250 cd, que é mais adequadamente um comando, em seu espaço de piscar cd prompt-- 130 00:06:12,250 --> 00:06:17,200 Dropbox-- quando eu corro que, efetivamente, quando o programa é executado cd, argc, 131 00:06:17,200 --> 00:06:22,270 dentro da memória do meu computador, é para o mais breve segundo o número 2. 132 00:06:22,270 --> 00:06:25,936 E, em seguida, o suporte tem argv cd, suporte argv 1 tem Dropbox, 133 00:06:25,936 --> 00:06:28,560 e depois, claro, o comando conclui, então tudo isso de memória 134 00:06:28,560 --> 00:06:30,420 essencialmente vai embora e é usado para outra coisa. 135 00:06:30,420 --> 00:06:32,270 E é por isso que eu digo apenas uma fração de segundo. 136 00:06:32,270 --> 00:06:35,720 >> Enquanto isso, se fizermos mkdir pset2, o quadro é quase o mesmo, 137 00:06:35,720 --> 00:06:37,900 mas com diferentes strings dentro argv. 138 00:06:37,900 --> 00:06:42,570 Se eu fizer clang traço Olá Olá ponto c, a mesma idéia. 139 00:06:42,570 --> 00:06:47,060 Mais material é preenchido para argv e argc, é claro, é 4. 140 00:06:47,060 --> 00:06:49,150 Assim, em outras palavras, mesmo que essa matriz 141 00:06:49,150 --> 00:06:52,950 pode ser dot dot dot, de algum de comprimento variável, por assim dizer, 142 00:06:52,950 --> 00:06:56,720 você sempre sabe onde o fim de tudo é, pois argc vai dizer 143 00:06:56,720 --> 00:07:00,120 em que ponto você tem que parar olhando para elementos em argv. 144 00:07:00,120 --> 00:07:03,660 Você só pode olhar para quatro no total, neste caso. 145 00:07:03,660 --> 00:07:06,600 >> Então, vamos agora dar uma olhada, talvez, um programa simples. 146 00:07:06,600 --> 00:07:09,070 Um que apenas diz Olá para alguém como Zamyla. 147 00:07:09,070 --> 00:07:12,620 Então, eu afirmo que vou escrever um programa em apenas um momento, através do qual eu poderia fazer 148 00:07:12,620 --> 00:07:16,670 ./hello espaço Zamyla, e então eu quero meu programa para imprimir algo 149 00:07:16,670 --> 00:07:18,520 super-simples, como "Olá, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Agora, no passado nós usamos getString. 151 00:07:20,100 --> 00:07:22,850 Portanto, no passado, mesmo se você é novo em programação, 152 00:07:22,850 --> 00:07:27,180 chances são que você pode preparar uma programa que usa getString 153 00:07:27,180 --> 00:07:29,390 e então usa printf para dizer oi para Zamyla. 154 00:07:29,390 --> 00:07:31,290 Mas não vamos usar GetString neste momento. 155 00:07:31,290 --> 00:07:37,510 Deixe-me em vez de ir para o Appliant e que incluem padrão S dot h. 156 00:07:37,510 --> 00:07:41,160 Deixe-me também incluem CS50 ponto h. 157 00:07:41,160 --> 00:07:44,730 Agora int main, e agora eu sou não vai fazer vazio hoje. 158 00:07:44,730 --> 00:07:51,200 Em vez disso, eu vou fazer int argc corda argv suporte aberto fechar parêntesis, 159 00:07:51,200 --> 00:07:52,640 não especificar um número. 160 00:07:52,640 --> 00:07:54,644 E agora, aqui está o meu chamado para fazer. 161 00:07:54,644 --> 00:07:57,560 O que eu vou fazer agora é, eu sou vai fazer um pouco de um salto de fé, 162 00:07:57,560 --> 00:08:00,560 Eu vou assumir que o usuário do vai usar este programa corretamente, 163 00:08:00,560 --> 00:08:04,980 e eu estou indo simplesmente para fazer printf Olá,% sn. 164 00:08:04,980 --> 00:08:06,630 Portanto, nada de novo nisso. 165 00:08:06,630 --> 00:08:11,470 Mas eu quero agora colocar qualquer palavra que o tipos de usuários após o nome do programa. 166 00:08:11,470 --> 00:08:16,970 Então, se eu fizer ./hello espaço Zamyla, I quer de alguma forma programática acesso 167 00:08:16,970 --> 00:08:20,870 entre aspas "Zamyla." então eu pode ir para o meu argumento vetor, 168 00:08:20,870 --> 00:08:25,980 minha matriz de strings, e se o comando, de novo, foi ./hello espaço Zamyla, 169 00:08:25,980 --> 00:08:29,340 o número que eu quero para colocar em argv aqui? 170 00:08:29,340 --> 00:08:29,840 AUDIÊNCIA: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, porque suporte 0 despeja 172 00:08:32,355 --> 00:08:34,230 vai ser o nome do programa, como vimos. 173 00:08:34,230 --> 00:08:37,789 Então suporte 1 é a primeira palavra que eu, o usuário, digitou. 174 00:08:37,789 --> 00:08:39,559 Eu estou indo para ir em frente e salve este. 175 00:08:39,559 --> 00:08:42,830 Eu estou indo para ir para minha pasta onde eu tenho este arquivo. 176 00:08:42,830 --> 00:08:44,920 Eu vou fazer fazer Olá 3. 177 00:08:44,920 --> 00:08:46,230 OK da Comp IO. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Enter. 179 00:08:51,380 --> 00:08:54,480 O que eu fiz de errado? 180 00:08:54,480 --> 00:08:57,270 Eu fui pego de surpresa me por um momento lá. 181 00:08:57,270 --> 00:08:58,230 O que eu fiz de errado? 182 00:08:58,230 --> 00:08:59,220 >> AUDIÊNCIA: Nome. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: O arquivo de realmente chamado hello3.c. 184 00:09:01,767 --> 00:09:03,850 E eu fiz isso apenas para consistência, porque nós 185 00:09:03,850 --> 00:09:06,550 tiveram ola.c de no passado no código em linha. 186 00:09:06,550 --> 00:09:11,550 Então vamos corrigir isso ./hello suporte traço 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 E agora temos Olá, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Enquanto isso, eu posso mudar isso ser Rob, ou realmente qualquer outra palavra. 190 00:09:17,650 --> 00:09:19,230 >> Mas vamos considerar um caso de canto. 191 00:09:19,230 --> 00:09:24,360 O que você poderia esperar que acontecerá se Não digite o nome de quem quer que seja? 192 00:09:24,360 --> 00:09:25,270 >> AUDIÊNCIA: Error. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: um erro de alguma sorte, talvez. 194 00:09:27,300 --> 00:09:28,200 Vamos ver. 195 00:09:28,200 --> 00:09:29,440 Enter. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Então printf está realmente sendo um pouco de proteção de nós 198 00:09:33,870 --> 00:09:38,131 aqui, e, literalmente, imprimir parêntese aberto null, mas as coisas ainda piores podem acontecer. 199 00:09:38,131 --> 00:09:40,130 E só para demonstrar algo que você absolutamente 200 00:09:40,130 --> 00:09:42,800 não deve fazer, vamos entrar aqui e começar a picar ao redor. 201 00:09:42,800 --> 00:09:43,300 Certo? 202 00:09:43,300 --> 00:09:46,410 Se eu sei que a imagem memória é essencialmente isso, 203 00:09:46,410 --> 00:09:52,660 argv faixa 1 tem Zamyla, argv suporte 0 tem ./hello, ou ./hello-3. 204 00:09:52,660 --> 00:09:55,400 O que é da classe 2? 205 00:09:55,400 --> 00:09:58,210 Então, eu posso responder a essa questionar-me, certo? 206 00:09:58,210 --> 00:10:00,460 Eu posso apenas mudar o 1 para a 2. 207 00:10:00,460 --> 00:10:07,270 Agora eu posso recompilar Olá 3, ./hello3 Vamos ampliar e pressione Enter. 208 00:10:07,270 --> 00:10:08,270 Whoops. 209 00:10:08,270 --> 00:10:10,660 Sem aspas. 210 00:10:10,660 --> 00:10:12,540 Interessante. 211 00:10:12,540 --> 00:10:15,530 Então, isso é bem legal para ver o que mais está aqui. 212 00:10:15,530 --> 00:10:17,130 >> Então o que mais está dentro do meu laptop? 213 00:10:17,130 --> 00:10:20,390 Vamos salvá-lo com suporte 3. 214 00:10:20,390 --> 00:10:25,190 Faça hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Curioso. 216 00:10:26,500 --> 00:10:30,560 E agora vamos realmente bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Então, isso é realmente profundo mergulho na memória do meu computador. 218 00:10:34,340 --> 00:10:35,930 50 em índices. 219 00:10:35,930 --> 00:10:41,950 Então faça Olá 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Curioso. 221 00:10:42,680 --> 00:10:44,660 Tudo bem, agora eu sou apenas vai conseguir imprudente. 222 00:10:44,660 --> 00:10:47,331 Vamos para 5000. 223 00:10:47,331 --> 00:10:47,830 Tudo certo. 224 00:10:47,830 --> 00:10:49,520 Então deixe-me recompilar. 225 00:10:49,520 --> 00:10:51,460 Faça hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 Está bem. 228 00:10:56,460 --> 00:10:59,250 Agora alguns de vocês, não pode ser uma lâmpada a sair. 229 00:10:59,250 --> 00:11:01,900 Como muitos de vocês têm visto esta mensagem antes? 230 00:11:01,900 --> 00:11:03,440 Está bem. 231 00:11:03,440 --> 00:11:04,420 Então, por quê? 232 00:11:04,420 --> 00:11:07,250 >> Odds é-- e há diferentes coisas que podem causar isso, 233 00:11:07,250 --> 00:11:09,730 e é óbvio que está em boa company-- temos claramente 234 00:11:09,730 --> 00:11:11,900 causou o que é chamado uma falha de segmentação. 235 00:11:11,900 --> 00:11:15,890 E short longo da história para hoje, eu ter tocado um segmento de memória 236 00:11:15,890 --> 00:11:17,060 que eu não deveria ter. 237 00:11:17,060 --> 00:11:19,970 Sempre que um segmento significa apenas um pedaço de memória que eu não deveria ter. 238 00:11:19,970 --> 00:11:25,530 Agora, o computador garante que, se I executar ./helloZamyla que eu posso tocar argv 239 00:11:25,530 --> 00:11:27,760 ser suporte 0 e argv suporte 1. 240 00:11:27,760 --> 00:11:32,730 Mas argc é o valor 2, isso significa que eu sou só allowed-- é uma espécie de honra 241 00:11:32,730 --> 00:11:35,180 system-- tocar suporte 0 e suporte 1. 242 00:11:35,180 --> 00:11:37,990 Se eu ir mais longe, há absolutamente vai ser memória lá. 243 00:11:37,990 --> 00:11:40,660 Minha RAM existe fisicamente no computador. 244 00:11:40,660 --> 00:11:42,080 Mas quem sabe o que está lá? 245 00:11:42,080 --> 00:11:44,450 Na verdade, eu estou correndo múltipla programas de uma só vez. 246 00:11:44,450 --> 00:11:46,910 Eu poderia ter seen-- se eu não estivesse fazendo isso no Appliant 247 00:11:46,910 --> 00:11:49,937 mas no meu Mac ou PC-- eu poderia ter visto o conteúdo de um e-mail. 248 00:11:49,937 --> 00:11:52,270 Eu poderia ter visto um instante Mensagem Eu recentemente enviou. 249 00:11:52,270 --> 00:11:55,390 Qualquer coisa que possa ser persistente em torno da memória 250 00:11:55,390 --> 00:11:59,180 podia ter sido acedido por meio de esta notação colchete arbitrária. 251 00:11:59,180 --> 00:12:02,850 Ou, pior ainda, você pode ter encontrou uma das minhas senhas 252 00:12:02,850 --> 00:12:05,859 que eu recentemente digitada, que uma programa tinha armazenado na memória de forma 253 00:12:05,859 --> 00:12:07,900 para me autenticar e em seguida, apenas um tipo de esquerda que 254 00:12:07,900 --> 00:12:09,910 na memória RAM até que eu parei esse programa. 255 00:12:09,910 --> 00:12:12,860 >> E, de fato, este é um dos o perigo e um dos poderes 256 00:12:12,860 --> 00:12:15,980 de usar uma linguagem como C. Você tem acesso irrestrito 257 00:12:15,980 --> 00:12:18,860 a todo o conteúdo da memória de um programa, 258 00:12:18,860 --> 00:12:21,340 eo que bandidos podem mesmo fazer nessas cases-- 259 00:12:21,340 --> 00:12:23,807 especialmente quando começa a programação web 260 00:12:23,807 --> 00:12:26,890 até o final do semestre, vamos revisitar este topic-- é bisbilhotar, 261 00:12:26,890 --> 00:12:31,660 potencialmente, alguém é o computador de memória e encontrar tais coisas curiosas 262 00:12:31,660 --> 00:12:32,570 como vimos lá. 263 00:12:32,570 --> 00:12:36,900 Ou pior ainda, as senhas que ele ou ela pode usar para fazer coisas ruins. 264 00:12:36,900 --> 00:12:40,240 >> Então, claramente, que eu não deveria ter feito isso, porque coisas estranhas começam a acontecer. 265 00:12:40,240 --> 00:12:42,310 Na verdade, este é um programa que deixa de funcionar. 266 00:12:42,310 --> 00:12:44,580 Isto seria equivalente a do Mac OS ou Windows 267 00:12:44,580 --> 00:12:46,770 uma janela de programa simplesmente desaparecer. 268 00:12:46,770 --> 00:12:48,300 Ocorreu um erro inesperado. 269 00:12:48,300 --> 00:12:50,840 No ambiente de linha de comando podemos ver algo como isso. 270 00:12:50,840 --> 00:12:54,480 Mas é por isso, é que eu estou simplesmente tocando memória que não pertence a mim. 271 00:12:54,480 --> 00:12:57,090 >> Então vamos defender contra este um pouco de uma maneira diferente 272 00:12:57,090 --> 00:12:59,010 olhando para este programa. 273 00:12:59,010 --> 00:13:01,000 Assim, mais uma vez, o esqueleto que vimos earlier-- 274 00:13:01,000 --> 00:13:02,480 e tenho destaque desta vez int. 275 00:13:02,480 --> 00:13:05,900 E todo esse tempo principal tem na verdade, retornou um valor. 276 00:13:05,900 --> 00:13:09,120 Mesmo que na maior parte do nosso palestra exemplos que jamais usados 277 00:13:09,120 --> 00:13:10,990 retornar nada na principal. 278 00:13:10,990 --> 00:13:13,710 Acabamos de escrever printf perto chaveta e é isso. 279 00:13:13,710 --> 00:13:16,500 Mas de graça, o que o compilador feito para você, 280 00:13:16,500 --> 00:13:19,510 efetivamente, está retornando 0 para você. 281 00:13:19,510 --> 00:13:22,950 Acontece out-- e é um pouco counterintuitive-- que 0 é bom. 282 00:13:22,950 --> 00:13:24,690 Isso não significa falso em si. 283 00:13:24,690 --> 00:13:29,080 0 é bom, e qualquer não-0 valor, o mundo decidiu, 284 00:13:29,080 --> 00:13:30,619 pode significar um erro. 285 00:13:30,619 --> 00:13:32,910 Então, se você já mexeu alguma coisa no seu computador, 286 00:13:32,910 --> 00:13:36,600 ou um programa acaba de morrer em você e que você tenha obtido alguma janela errada 287 00:13:36,600 --> 00:13:40,360 na tela, dizendo erro negativo 49 ou erro 23-- 288 00:13:40,360 --> 00:13:44,170 alguns value-- arbitrária que é por um programador-codificado 289 00:13:44,170 --> 00:13:49,370 um valor como negativo ou positivo 49 23 para representar qualquer número, ouso dizer, 290 00:13:49,370 --> 00:13:53,340 de 4 bilhões de coisas possíveis que pode dar errado em um programa. 291 00:13:53,340 --> 00:13:55,700 >> Então, como eu poderia ter vantagem deste a mim mesmo? 292 00:13:55,700 --> 00:13:58,970 Bem, deixe-me abrir um programa que eu escrevi antes, 293 00:13:58,970 --> 00:14:01,450 e bisbilhotar online chamado Olá 4. 294 00:14:01,450 --> 00:14:05,650 E é quase idêntico, exceto que o seu tem um pouco de verificação de erros. 295 00:14:05,650 --> 00:14:09,660 Neste caso, eu novamente declarada principal como tendo dois argumentos, 296 00:14:09,660 --> 00:14:13,180 mas desta vez, na linha 17, a notificação Eu estou fazendo um pouco de verificação de sanidade. 297 00:14:13,180 --> 00:14:17,100 Estou fazendo-se de que argc é igual é igual a 2. 298 00:14:17,100 --> 00:14:18,960 Porque se for, que significa que eu posso com segurança 299 00:14:18,960 --> 00:14:21,420 tocar não só suporte 0, mas suporte 1. 300 00:14:21,420 --> 00:14:24,330 E eu vou em frente e imprimir, neste caso, Zamyla ou Rob 301 00:14:24,330 --> 00:14:26,020 ou qualquer palavra que eu digitei. 302 00:14:26,020 --> 00:14:28,020 E agora só para conseguir um pouco mais adequada, 303 00:14:28,020 --> 00:14:31,910 Vou voltar explicitamente 0 para indicar que tudo está bem. 304 00:14:31,910 --> 00:14:33,300 Nada de ruim aconteceu. 305 00:14:33,300 --> 00:14:38,590 >> Mas por convenção, eu vou retornar 1, ou francamente qualquer valor diferente de 0, 306 00:14:38,590 --> 00:14:40,160 se algo desse errado. 307 00:14:40,160 --> 00:14:43,270 Agora, o usuário não vai realmente perceber o que está acontecendo. 308 00:14:43,270 --> 00:14:50,410 Na verdade, se eu entrar nesse diretório, nós zoom in e fazem Olá 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla se comporta como eu esperava. 310 00:14:54,210 --> 00:14:58,570 Mas se eu, em vez não digite nada, nada parece acontecer, 311 00:14:58,570 --> 00:14:59,680 mas não falha. 312 00:14:59,680 --> 00:15:04,660 E se eu não fazer algo como Rob é um inspetor 313 00:15:04,660 --> 00:15:07,550 na partilha Thayer-- informações arbitrária. 314 00:15:07,550 --> 00:15:13,680 Mas aviso, argv 1, 2, 3, 4, e 5 agora deve existir na memória. 315 00:15:13,680 --> 00:15:16,540 Isso, também, não o que é meu programa de espera, 316 00:15:16,540 --> 00:15:20,300 porque eu tenho verificado se argc é igual é igual a 2 ou não. 317 00:15:20,300 --> 00:15:22,140 Então, eu estou agora a defesa contra isso. 318 00:15:22,140 --> 00:15:25,290 >> Agora, como um aparte, que o programmer-- ou melhor, o users-- 319 00:15:25,290 --> 00:15:29,670 nunca ver que 0 ou 1, mas utilizando uma ferramenta chamada Debugger, ou outras ferramentas, 320 00:15:29,670 --> 00:15:32,250 como veremos antes tempo, você o programador 321 00:15:32,250 --> 00:15:36,590 pode realmente ver o que pode ser acontecendo de errado dentro de seu programa. 322 00:15:36,590 --> 00:15:39,170 >> Então, qualquer dúvida sobre argc? 323 00:15:39,170 --> 00:15:40,873 Sim. 324 00:15:40,873 --> 00:15:45,292 >> AUDIÊNCIA: Eu vi onde eles não tiveram o personagem, [inaudível] 325 00:15:45,292 --> 00:15:49,669 apenas disse corda estrela d, como asterisco vírgula. 326 00:15:49,669 --> 00:15:50,710 Eles são equivalentes aqui? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: Eles são. 328 00:15:51,626 --> 00:15:55,080 Então a questão é, você tem programas ocasionalmente vistos 329 00:15:55,080 --> 00:15:57,270 assim que não fazem dizem suporte seqüência argv 330 00:15:57,270 --> 00:16:01,015 mas dizer algo como carvão suporte estrela argv. 331 00:16:01,015 --> 00:16:03,140 E há ainda outro variantes que você pode ver. 332 00:16:03,140 --> 00:16:04,264 Eles são de fato equivalentes. 333 00:16:04,264 --> 00:16:06,240 Por agora, temos estes tipo de rodinhas 334 00:16:06,240 --> 00:16:09,737 sobre a forma de cadeia no CS50 biblioteca, mas em pouco mais de uma semana 335 00:16:09,737 --> 00:16:12,570 ou então nós vamos remover esse obstrução totalmente e efectivamente 336 00:16:12,570 --> 00:16:16,820 olhar para o que o carvão ea estrela são, e como os que dizem respeito à memória 337 00:16:16,820 --> 00:16:18,140 representação mais geral. 338 00:16:18,140 --> 00:16:19,540 Então, vamos voltar a isso. 339 00:16:19,540 --> 00:16:21,540 >> Outras perguntas sobre nossa argv ou argc? 340 00:16:21,540 --> 00:16:22,397 Sim. 341 00:16:22,397 --> 00:16:24,438 AUDIÊNCIA: Por que voltar um erro [inaudível]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: Por que fez isso retornar um erro only-- oh! 344 00:16:29,230 --> 00:16:31,813 No caso anterior, quando foram futzing volta com a memória, 345 00:16:31,813 --> 00:16:35,110 por que ele só retornará um erro quando eu realmente digitou um número grande? 346 00:16:35,110 --> 00:16:36,620 A resposta curta é que apenas teve sorte. 347 00:16:36,620 --> 00:16:39,240 De um modo geral, um computador aloca memória em pedaços, 348 00:16:39,240 --> 00:16:42,900 e ele me deu um pedaço grande o suficiente que Eu fui embora, sem ser notado, 349 00:16:42,900 --> 00:16:46,280 de suporte de tocar 2, o suporte 3, suporte de 50, mas assim que eu empurrei 350 00:16:46,280 --> 00:16:49,080 a minha sorte, eu fui além do limites do bloco de memória 351 00:16:49,080 --> 00:16:50,520 o sistema operacional tinha me dado. 352 00:16:50,520 --> 00:16:52,720 E foi aí que ele apertado para baixo e disse: não. 353 00:16:52,720 --> 00:16:54,580 Erro de segmentação. 354 00:16:54,580 --> 00:16:55,692 Sim. 355 00:16:55,692 --> 00:16:58,890 >> AUDIÊNCIA: Como funciona o computador saber o valor de argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: Como é que o computador sabe o valor de argc? 357 00:17:02,390 --> 00:17:07,920 Quando você executa um programa, esse programa, pela natureza do pedido de piscar, 358 00:17:07,920 --> 00:17:11,359 é entregue a matriz de palavras que foram digitadas 359 00:17:11,359 --> 00:17:13,300 no prompt, que era digitado no prompt. 360 00:17:13,300 --> 00:17:16,569 E assim é o seu funcionamento sistema que essencialmente 361 00:17:16,569 --> 00:17:20,329 preenche os argumentos de principais para você. 362 00:17:20,329 --> 00:17:22,829 Então esse é um dos serviços que você recebe, mais ou menos secretamente 363 00:17:22,829 --> 00:17:24,869 debaixo da capa de um sistema operativo. 364 00:17:24,869 --> 00:17:27,118 Outras questões? 365 00:17:27,118 --> 00:17:27,618 Sim. 366 00:17:27,618 --> 00:17:29,787 >> AUDIÊNCIA: O que dump de memória significa? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: O que dump de memória significa? 368 00:17:31,370 --> 00:17:32,950 Então essa é uma boa pergunta. 369 00:17:32,950 --> 00:17:35,312 E deixe-me voltar para este diretório aqui. 370 00:17:35,312 --> 00:17:37,270 E você vai perceber que Eu tenho um novo arquivo lá. 371 00:17:37,270 --> 00:17:41,670 É, na verdade chamado de núcleo, e é na verdade, normalmente um arquivo de tamanho decente. 372 00:17:41,670 --> 00:17:45,300 Isso é essencialmente um instantâneo de o conteúdo da memória do meu programa 373 00:17:45,300 --> 00:17:46,902 ou RAM quando caiu. 374 00:17:46,902 --> 00:17:49,110 E isso vai ser útil, potencialmente, diagnosticamente, 375 00:17:49,110 --> 00:17:52,850 uma vez que se fala em uma palestra futuro e seção sobre a depuração, 376 00:17:52,850 --> 00:17:55,730 porque você pode realmente fazer o equivalente a uma autópsia digitais 377 00:17:55,730 --> 00:18:00,300 nesse arquivo para ajudar a descobrir o que você fez de errado em seu programa. 378 00:18:00,300 --> 00:18:01,220 Sim. 379 00:18:01,220 --> 00:18:04,450 >> AUDIÊNCIA: É argc um comando no si mesmo, ou você pode nomeá-lo de alguma coisa? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Boa pergunta. 381 00:18:05,575 --> 00:18:08,040 Argc é um comando, em si, ou você pode chamá-lo de alguma coisa? 382 00:18:08,040 --> 00:18:09,290 Definitivamente não é um comando. 383 00:18:09,290 --> 00:18:13,500 É simplesmente uma variável de nome ou o nome de um argumento, 384 00:18:13,500 --> 00:18:15,481 e de modo absolutamente nós poderia chamar este foo, 385 00:18:15,481 --> 00:18:18,480 poderíamos chamar este bar, que tendem ser o go-to palavras que um computador 386 00:18:18,480 --> 00:18:19,860 cientista vai. 387 00:18:19,860 --> 00:18:22,820 Mas, por convenção, usamos argc e argv. 388 00:18:22,820 --> 00:18:25,360 Mas isso é apenas um ser humano convenção, nada mais. 389 00:18:25,360 --> 00:18:25,860 Tudo certo. 390 00:18:25,860 --> 00:18:28,140 Assim acaba, eu estive contando um pouco de lie-- branco 391 00:18:28,140 --> 00:18:31,264 e, francamente, no futuro, você verá temos vindo a dizer outras mentiras brancas. 392 00:18:31,264 --> 00:18:33,510 Mas, por agora, vamos para descascar um destes. 393 00:18:33,510 --> 00:18:37,310 Neste caso aqui, quando eu anteriormente correu um programa como ./hello ou ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, tivemos o conteúdo do meu memória do computador procurando mais ou menos como 395 00:18:42,780 --> 00:18:43,280 este. 396 00:18:43,280 --> 00:18:45,070 Mas lembre-se que uma string é. 397 00:18:45,070 --> 00:18:49,279 O que dissemos há uma semana que um corda realmente é debaixo do capô? 398 00:18:49,279 --> 00:18:50,320 AUDIÊNCIA: matriz de caracteres. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: É uma matriz de caracteres, certo? 400 00:18:52,111 --> 00:18:55,760 Assim, poderíamos ter uma matriz de cadeias, mas, por sua vez, uma cadeia 401 00:18:55,760 --> 00:18:57,150 é um array de caracteres. 402 00:18:57,150 --> 00:19:00,010 Então, se eu realmente quero ser anal quando eu tirar esta foto, 403 00:19:00,010 --> 00:19:03,290 Eu realmente deveria estar chegando um pouco mais assim, 404 00:19:03,290 --> 00:19:08,000 pelo que, em cada uma delas índices de minha matriz argv, 405 00:19:08,000 --> 00:19:11,432 não é em si toda uma série que está em uma matriz. 406 00:19:11,432 --> 00:19:13,140 E agora a mentira estamos dizendo hoje 407 00:19:13,140 --> 00:19:15,181 é que a imagem não olha como esta. 408 00:19:15,181 --> 00:19:19,110 Na verdade, os pequenos quadrados são normalmente fora dos grandes retângulos 409 00:19:19,110 --> 00:19:19,610 Lá. 410 00:19:19,610 --> 00:19:21,280 Mas vamos voltar a isso em pouco tempo. 411 00:19:21,280 --> 00:19:25,440 Mas isso é ./hello barra invertida 0, que sendo o caractere especial que 412 00:19:25,440 --> 00:19:28,310 demarca o fim de uma seqüência de caracteres, e nós temos outro depois 413 00:19:28,310 --> 00:19:29,360 Nome do Zamyla. 414 00:19:29,360 --> 00:19:30,900 Então o que isso significa? 415 00:19:30,900 --> 00:19:33,410 >> Bem, deixe-me ir em frente e abre-se dois outros exemplos 416 00:19:33,410 --> 00:19:35,220 que estão disponíveis online. 417 00:19:35,220 --> 00:19:40,590 Um é chamado argv1.c e o outro é argv2. 418 00:19:40,590 --> 00:19:44,260 É um programa super-simples que é diferente de programas anteriores 419 00:19:44,260 --> 00:19:47,260 em que agora eu estou usando argc e argv aqui. 420 00:19:47,260 --> 00:19:54,300 E agora eu estou integrando-se com um loop na linha 18, a partir de i = 0 em até ARGC. 421 00:19:54,300 --> 00:19:56,850 E o que é que eu vou fazer com esta linha de código aqui? 422 00:19:56,850 --> 00:19:58,270 Em Inglês. 423 00:19:58,270 --> 00:20:00,510 Isto, obviamente, demonstra a utilização de argc. 424 00:20:00,510 --> 00:20:03,670 Mas em Inglês, o que faz que fazer se eu executar este programa? 425 00:20:03,670 --> 00:20:04,366 Sim? 426 00:20:04,366 --> 00:20:07,386 >> AUDIÊNCIA: Vai imprimir o seu tela quantas vezes quiser. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Exatamente. 428 00:20:08,260 --> 00:20:10,480 Então o que palavras I digite na linha de comando, é 429 00:20:10,480 --> 00:20:13,120 vai regurgitar los para mim um por linha. 430 00:20:13,120 --> 00:20:14,370 Então, vamos seguir em frente e fazer isso. 431 00:20:14,370 --> 00:20:17,862 Deixe-me ir para o meu diretório e fazem ./argv1 argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 E agora, vamos mantê-lo simples. 434 00:20:21,770 --> 00:20:23,834 Vamos fazer nada em primeiro lugar. 435 00:20:23,834 --> 00:20:26,750 Ele fez imprimir uma coisa, e que é de facto o nome do programa, 436 00:20:26,750 --> 00:20:28,240 porque é na faixa 0. 437 00:20:28,240 --> 00:20:33,290 Se eu agora dizer foo, que vai fazer aqueles dois, e se eu disser bar foo, 438 00:20:33,290 --> 00:20:35,580 ele vai dizer essas três coisas. 439 00:20:35,580 --> 00:20:37,740 Agora que é um pouco interessante, talvez. 440 00:20:37,740 --> 00:20:41,450 Mas lembre-se que argv é uma matriz de strings, 441 00:20:41,450 --> 00:20:45,960 mas uma string é um array de caracteres, para que possamos levar as coisas acima de um entalhe 442 00:20:45,960 --> 00:20:48,560 e aplicar esse básica lógica e tornar o código que 443 00:20:48,560 --> 00:20:51,160 parece um pouco mais crítico, na verdade. 444 00:20:51,160 --> 00:20:53,540 Mas por ter um aninhada loop, algo semelhante 445 00:20:53,540 --> 00:20:57,030 para o que você pode se lembrar de Mario, por exemplo, se você fez isso desta forma. 446 00:20:57,030 --> 00:21:00,380 >> Então agora notar na linha 19, eu sou novamente a iteração sobre os meus argumentos, 447 00:21:00,380 --> 00:21:02,410 de 0 a até ARGC. 448 00:21:02,410 --> 00:21:05,510 E agora, em linha 21-- estou empréstimo de um truque de última week-- 449 00:21:05,510 --> 00:21:11,090 Estou verificando o que é o comprimento de suporte argv i. 450 00:21:11,090 --> 00:21:12,920 Eu sou armazenar essa resposta no n. 451 00:21:12,920 --> 00:21:18,230 E então eu estou integrando a partir de j em até n, onde j é inicializado a 0. 452 00:21:18,230 --> 00:21:19,460 Então, convenção para a contagem. 453 00:21:19,460 --> 00:21:22,335 Uma vez que você usou i, se você tem um loop aninhado, você não pode usar i novamente, 454 00:21:22,335 --> 00:21:25,770 caso contrário você vai espancar, potencialmente, o valor fora do loop interno. 455 00:21:25,770 --> 00:21:27,200 Então, eu estou usando j por convenção. 456 00:21:27,200 --> 00:21:28,020 Podemos usar k. 457 00:21:28,020 --> 00:21:31,080 Se você tiver mais de k, você provavelmente tem muito assentamento, normalmente. 458 00:21:31,080 --> 00:21:33,800 Mas agora, observe minha printf A linha é um pouco diferente. 459 00:21:33,800 --> 00:21:37,520 Eu não estou imprimindo% s, estou imprimir c%, o que, evidentemente, 460 00:21:37,520 --> 00:21:39,460 é um espaço reservado para um char. 461 00:21:39,460 --> 00:21:40,770 >> E agora observe esta sintaxe. 462 00:21:40,770 --> 00:21:41,270 Novo. 463 00:21:41,270 --> 00:21:42,630 Nós não vimos isso antes. 464 00:21:42,630 --> 00:21:47,290 Mas, logicamente, isso significa apenas obter a seqüência om em argv 465 00:21:47,290 --> 00:21:50,067 e obter o j o quê? 466 00:21:50,067 --> 00:21:50,900 AUDIÊNCIA: Personagem. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: Personagem em que seqüência. 468 00:21:52,800 --> 00:21:57,100 Então, usando colchetes seguido por colchetes, 469 00:21:57,100 --> 00:22:00,390 este é o mergulho primeiro em cadeias de argv, 470 00:22:00,390 --> 00:22:02,225 e, em seguida, o segundo colchetes com j 471 00:22:02,225 --> 00:22:06,580 é mergulhar nos personagens de que determinada seqüência em argv. 472 00:22:06,580 --> 00:22:09,562 E então, apenas para uma boa medida, Estou imprimindo uma nova linha aqui. 473 00:22:09,562 --> 00:22:12,020 Então, agora deixe-me ir em frente e abrir uma janela um pouco maior 474 00:22:12,020 --> 00:22:13,600 assim que nós podemos ver isso em ação. 475 00:22:13,600 --> 00:22:15,700 Deixe-me ir para essa pasta. 476 00:22:15,700 --> 00:22:22,550 E agora fazem argv-2-- whoops-- fazer argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Enter. 478 00:22:23,110 --> 00:22:24,860 E é um pouco difícil ler verticalmente, 479 00:22:24,860 --> 00:22:27,920 mas isso é na verdade o nome do programa, seguido por uma linha em branco. 480 00:22:27,920 --> 00:22:30,210 Agora deixe-me ir em frente e fazer foo. 481 00:22:30,210 --> 00:22:33,210 Da mesma forma difícil de ler, mas é na verdade imprimir um caractere por linha. 482 00:22:33,210 --> 00:22:36,780 E se eu fizer bar, é agora imprimir os linha por linha. 483 00:22:36,780 --> 00:22:40,140 Assim, o takeaway aqui não é tanto que, wow, olhar para este novo truque 484 00:22:40,140 --> 00:22:44,750 onde você pode obter o conteúdo de caracteres específicos de uma matriz, 485 00:22:44,750 --> 00:22:48,380 mas como estamos tomando estes básico idéias como a indexação em uma matriz, 486 00:22:48,380 --> 00:22:51,620 e, em seguida, a indexação numa matriz que estava nessa matriz, 487 00:22:51,620 --> 00:22:56,180 e apenas aplicar as mesmas idéias para exemplos ligeiramente mais sofisticados. 488 00:22:56,180 --> 00:22:59,560 Mas o básico realmente não tem alterado, mesmo desde a semana passada. 489 00:22:59,560 --> 00:23:02,350 >> Agora, esta é uma espécie de oportuna, em que, lembre-se, na semana de zero 490 00:23:02,350 --> 00:23:04,110 jogamos com uma agenda telefônica como esta. 491 00:23:04,110 --> 00:23:06,670 E mesmo que este é, obviamente, peças físicas do papel, 492 00:23:06,670 --> 00:23:09,150 você pode tipo de pensar uma lista telefônica como uma matriz. 493 00:23:09,150 --> 00:23:12,770 Certamente, se você fosse para reimplementar este peças desses pedaços de papel 494 00:23:12,770 --> 00:23:15,260 em um computador, provavelmente você usaria algo 495 00:23:15,260 --> 00:23:20,270 como uma matriz para armazenar todos aqueles nomes e números de um todo o caminho 496 00:23:20,270 --> 00:23:23,800 a Z. Então, isso é bom, porque permite-nos uma oportunidade, 497 00:23:23,800 --> 00:23:28,310 talvez, para pensar em como você pode realmente implementar algo parecido. 498 00:23:28,310 --> 00:23:31,250 Tal como acontece com uma série de portas aqui. 499 00:23:31,250 --> 00:23:36,380 Então, se eu could-- precisamos de uma voluntários que se aproximasse. 500 00:23:36,380 --> 00:23:36,980 Vamos ver. 501 00:23:36,980 --> 00:23:40,650 Uma face desconhecida talvez, rosto desconhecido, talvez. 502 00:23:40,650 --> 00:23:42,090 Como sobre a laranja? 503 00:23:42,090 --> 00:23:42,680 Aqui. 504 00:23:42,680 --> 00:23:45,870 Camisa laranja, vamos lá para cima. 505 00:23:45,870 --> 00:23:52,230 >> Vamos em frente agora e movimento estas portas para o lado, 506 00:23:52,230 --> 00:23:54,020 movê-los para fora do caminho por um momento. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Qual o seu nome? 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 Prazer em conhecê-lo. 513 00:23:59,451 --> 00:23:59,950 Tudo certo. 514 00:23:59,950 --> 00:24:04,500 Portanto, temos por trás dessas seis portas digitalmente no screen-- 515 00:24:04,500 --> 00:24:07,810 Ou melhor, sete portas no screen-- um monte de números. 516 00:24:07,810 --> 00:24:10,099 E eu lhe disse nada em advance-- acordo? 517 00:24:10,099 --> 00:24:11,140 AJAY: Nada de antecedência. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Tudo o que eu quero que você faça agora é encontrar para mim, e para nós, 519 00:24:14,730 --> 00:24:20,920 realmente, o número 50, um passo de cada vez. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Número 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: O número 50. 522 00:24:22,580 --> 00:24:24,746 E você pode revelar o que está por trás de cada uma destas portas 523 00:24:24,746 --> 00:24:27,930 simplesmente tocando-o com um dedo. 524 00:24:27,930 --> 00:24:31,364 Caramba. [Risos] 525 00:24:31,364 --> 00:24:34,560 >> [Aplausos] 526 00:24:34,560 --> 00:24:39,540 >> Muito bem feito. 527 00:24:39,540 --> 00:24:40,400 Está bem. 528 00:24:40,400 --> 00:24:44,090 Temos um lindo presente prêmio para você aqui. 529 00:24:44,090 --> 00:24:46,520 Sua escolha de filmes que discutido na semana passada. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, cara. 531 00:24:47,362 --> 00:24:49,050 Oh, eu nunca vi Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID MALAN: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Tudo certo. 534 00:24:50,140 --> 00:24:53,790 Portanto, mantenha em apenas um momento. 535 00:24:53,790 --> 00:24:57,430 How-- vamos fazer isso um moment-- ensinável 536 00:24:57,430 --> 00:25:00,412 como é que você vai fazer sobre encontrar o número 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: Eu escolhi aleatoriamente. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Então você escolheu aleatoriamente e teve sorte. 539 00:25:03,420 --> 00:25:03,790 AJAY: Sim. 540 00:25:03,790 --> 00:25:04,456 DAVID MALAN: OK. 541 00:25:04,456 --> 00:25:05,050 Excelente. 542 00:25:05,050 --> 00:25:08,470 Então, agora, se você não tivesse tido sorte, o que mais 543 00:25:08,470 --> 00:25:10,210 poderia ter acontecido por trás dessas portas? 544 00:25:10,210 --> 00:25:12,930 Então, se eu ir em frente e revelar esses números aqui, 545 00:25:12,930 --> 00:25:15,180 eles realmente estão em ordem aleatória. 546 00:25:15,180 --> 00:25:17,750 E o melhor que você pode ter feito, francamente, é de, em última instância, 547 00:25:17,750 --> 00:25:19,410 no pior dos casos, verificando todos eles. 548 00:25:19,410 --> 00:25:23,000 Então você tem super-sorte, o que Não é o que chamaria de um algoritmo. 549 00:25:23,000 --> 00:25:24,730 Sim, parabéns. 550 00:25:24,730 --> 00:25:27,010 Mas agora let's-- humor mim, se pudesse. 551 00:25:27,010 --> 00:25:28,310 Vamos para este guia aqui. 552 00:25:28,310 --> 00:25:31,460 E aqui estão os números em clara o que parece ser uma ordem aleatória, 553 00:25:31,460 --> 00:25:32,280 e eles foram. 554 00:25:32,280 --> 00:25:35,160 Mas agora, se eu ao invés reivindicação que por trás dessas portas 555 00:25:35,160 --> 00:25:39,070 são números que são classificados. 556 00:25:39,070 --> 00:25:41,780 O objetivo agora é também encontrar-nos no número 50. 557 00:25:41,780 --> 00:25:45,910 Mas fazê-lo através de algoritmos e diga-nos como você está indo com isso. 558 00:25:45,910 --> 00:25:48,020 E se você encontrá-la, você a manter o filme. 559 00:25:48,020 --> 00:25:49,520 Você não encontrá-lo, dar-lhe de volta. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Então, eu vou dar uma olhada nas extremidades em primeiro lugar, para determinar se there's-- 562 00:25:58,112 --> 00:26:02,048 [Risos e aplausos] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID MALAN: Aqui está. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Vamos dar uma olhada em um dos antecessores de Ajay, 567 00:26:21,700 --> 00:26:25,450 Sean, que não foi tão sortudo. 568 00:26:25,450 --> 00:26:28,670 OK, assim que sua tarefa aqui, Sean, é o seguinte. 569 00:26:28,670 --> 00:26:32,970 Eu escondi atrás destes portas do número sete, 570 00:26:32,970 --> 00:26:37,200 mas escondido em algumas dessas portas também são outros números não-negativos. 571 00:26:37,200 --> 00:26:40,730 E seu objetivo é pensar desta linha superior de números como apenas uma matriz. 572 00:26:40,730 --> 00:26:43,590 Somos apenas uma sequência de peças de papel com os números por trás delas. 573 00:26:43,590 --> 00:26:47,640 E seu objetivo é, usando apenas o topo matriz aqui, encontrar-me o número sete. 574 00:26:47,640 --> 00:26:51,200 E nós estamos indo em seguida para criticar como você vai fazer sobre isso. 575 00:26:51,200 --> 00:26:52,920 Encontre-nos o número sete, por favor. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 No. 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 Não é uma pergunta capciosa. 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 Neste ponto, sua pontuação não é muito bom, então você pode muito bem continuar. 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 Vá em frente. 590 00:27:39,802 --> 00:27:42,510 Francamente, eu não posso ajudar, mas pergunto o que você está mesmo pensando. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Eu posso tirar apenas o topo de linha. 592 00:27:44,990 --> 00:27:46,240 DAVID MALAN: Somente a linha superior. 593 00:27:46,240 --> 00:27:47,281 Então você tem três esquerda. 594 00:27:47,281 --> 00:27:48,310 Então, encontrar-me 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [Audiência GRITOS SUGESTÕES] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Assim, esses dois eram incrível por razões muito diferentes. 599 00:28:26,130 --> 00:28:29,150 Portanto, este é o lugar onde nós parou um instante atrás, 600 00:28:29,150 --> 00:28:32,530 ea introspecção chave aqui foi estas portas tinham números 601 00:28:32,530 --> 00:28:37,390 atrás deles, que foram classificadas, o ideal takeaway para que é que você pode fazer 602 00:28:37,390 --> 00:28:39,670 fundamentalmente melhor Nesta segunda example-- 603 00:28:39,670 --> 00:28:42,380 e, de fato, que foi de Sean primeira tentativa com números aleatórios 604 00:28:42,380 --> 00:28:45,460 assim como antes-- mas assim como esses números são classificadas, 605 00:28:45,460 --> 00:28:47,980 muito parecido com o livro de telefone, o que você pode, obviamente, fazer? 606 00:28:47,980 --> 00:28:50,090 Ou como você pode aproveitar esse conhecimento? 607 00:28:50,090 --> 00:28:51,530 Sim. 608 00:28:51,530 --> 00:28:54,910 >> AUDIÊNCIA: Você vai no meio do caminho [inaudível]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Yeah. 610 00:28:55,660 --> 00:28:56,160 Exatamente. 611 00:28:56,160 --> 00:28:59,680 Então instinto inicial de Ajay foi para verificar as extremidades, se bem me lembro, 612 00:28:59,680 --> 00:29:02,320 e então nós meio que acabado o exemplo rapidamente. 613 00:29:02,320 --> 00:29:05,220 Mas se começamos a fazer isso mais metodicamente ao longo destas linhas, 614 00:29:05,220 --> 00:29:07,860 mas começando talvez no meio, porque eles estão ordenados, 615 00:29:07,860 --> 00:29:10,900 assim que revelam a número 16, que, portanto, sabe-- 616 00:29:10,900 --> 00:29:14,850 e vamos fazer exatamente que-- nós portanto, saber que 50, no caso de hoje, 617 00:29:14,850 --> 00:29:16,080 tem que ser para a direita. 618 00:29:16,080 --> 00:29:18,735 Assim como na semana zero quando que rasgou o livro de telefone pela metade 619 00:29:18,735 --> 00:29:21,490 e jogou metade do problema de distância, mesma idéia aqui. 620 00:29:21,490 --> 00:29:23,680 Podemos jogar nesta parte do problema de distância. 621 00:29:23,680 --> 00:29:25,730 E, provavelmente, o que você pode fazer através de algoritmos, 622 00:29:25,730 --> 00:29:28,710 quando você sabe que 50 deve ser para a direita, se é em qualquer lugar, 623 00:29:28,710 --> 00:29:31,390 é tentar lá, no meio das restantes portas. 624 00:29:31,390 --> 00:29:33,450 Naturalmente, 50 é maior de 42, para que possamos 625 00:29:33,450 --> 00:29:36,060 jogar este remanescente trimestre do problema de distância, 626 00:29:36,060 --> 00:29:38,510 e, finalmente, identificar algo como 50. 627 00:29:38,510 --> 00:29:41,050 Mas, assim como com o lista telefônica, esses números 628 00:29:41,050 --> 00:29:44,560 foram dadas a nós já em ordem de classificação, o que nos deixa 629 00:29:44,560 --> 00:29:47,450 com a questão, como você fazer as coisas em ordem de classificação? 630 00:29:47,450 --> 00:29:49,640 E, francamente, a que custo? 631 00:29:49,640 --> 00:29:51,390 É uma coisa para ser entregou o livro de telefone 632 00:29:51,390 --> 00:29:54,810 e impressionar seus amigos por encontrar um número de telefone muito rapidamente, certo? 633 00:29:54,810 --> 00:29:58,520 Rasgar 32 páginas para encontrar um pessoa de 4 mil milhões de páginas, 634 00:29:58,520 --> 00:30:00,470 dissemos foi um exemplo extremo. 635 00:30:00,470 --> 00:30:03,320 Mas quanto tempo demorou Verizon para ordenar que o livro de telefone? 636 00:30:03,320 --> 00:30:06,170 Quanto tempo demorou para nós para classificar estes sete números? 637 00:30:06,170 --> 00:30:10,110 Essa é uma pergunta que nós temos até agora completamente ignorado. 638 00:30:10,110 --> 00:30:12,330 >> Então, vamos responder a essa pergunta agora. 639 00:30:12,330 --> 00:30:15,920 E estamos todos de filmes agora, mas temos algumas bolas de stress. 640 00:30:15,920 --> 00:30:19,480 Se, digamos, oito voluntários Não me importaria se juntar a nós aqui em cima? 641 00:30:19,480 --> 00:30:24,100 Vamos em frente e fazer, como sobre vocês quatro, três de vocês aqui? 642 00:30:24,100 --> 00:30:25,290 Veja algumas caras novas. 643 00:30:25,290 --> 00:30:27,220 E os quatro de lá? 644 00:30:27,220 --> 00:30:30,760 E agora-- não vamos viés aqui-- e número oito ali no final. 645 00:30:30,760 --> 00:30:32,060 Vamos lá para cima. 646 00:30:32,060 --> 00:30:32,560 Tudo certo. 647 00:30:32,560 --> 00:30:37,480 Então o que temos aqui para cada um de vocês é um número. 648 00:30:37,480 --> 00:30:40,055 Se você gostaria de ir em frente, pegue este número. 649 00:30:40,055 --> 00:30:40,763 Qual o seu nome? 650 00:30:40,763 --> 00:30:41,950 >> ARTIE: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID MALAN: Artie, ok. 652 00:30:43,100 --> 00:30:44,297 Você é o número 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 Você é o número 2. 657 00:30:47,530 --> 00:30:49,100 E vá em frente, como eu entrego que as folhas de papel, 658 00:30:49,100 --> 00:30:52,130 alinham-se na frente da música está na mesma ordem como se ali. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Oi, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID MALAN: Andy, é bom te ver. 661 00:30:53,970 --> 00:30:54,520 Número 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Jacob, número 4. 664 00:30:56,760 --> 00:30:57,549 Bem-vindo a bordo. 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 Número 5. 668 00:31:00,348 --> 00:31:01,200 >> ALANNA: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, número 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, número 7. 672 00:31:04,880 --> 00:31:05,200 E? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, número 8. 675 00:31:06,815 --> 00:31:07,100 Tudo certo. 676 00:31:07,100 --> 00:31:08,766 Vá em frente e obter-se, por esta ordem. 677 00:31:08,766 --> 00:31:11,440 Deixe-me colocar um remanescente música ficar no lugar. 678 00:31:11,440 --> 00:31:13,670 Onde é que você precisa de um suporte? 679 00:31:13,670 --> 00:31:14,170 Está bem. 680 00:31:14,170 --> 00:31:18,710 Vá em frente e basta colocar os seus números onde o público pode vê-los em, 681 00:31:18,710 --> 00:31:20,340 a música estar voltado para fora. 682 00:31:20,340 --> 00:31:27,240 E espero que, o nosso primeiro verificação de sanidade aqui-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Espere um minuto. 685 00:31:29,070 --> 00:31:31,140 Não temos um 8. 686 00:31:31,140 --> 00:31:35,180 Preciso de despejá-lo do o exemplo de alguma forma. 687 00:31:35,180 --> 00:31:35,680 No. 688 00:31:35,680 --> 00:31:36,940 Não, isso é OK. 689 00:31:36,940 --> 00:31:37,890 Vamos ver. 690 00:31:37,890 --> 00:31:38,880 Nós podemos fazer isso. 691 00:31:38,880 --> 00:31:39,440 Estar por. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Lá vamos nós. 694 00:31:45,740 --> 00:31:46,800 Correto. 695 00:31:46,800 --> 00:31:47,360 Tudo certo. 696 00:31:47,360 --> 00:31:50,260 Então, agora temos 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 Está bem. 698 00:31:50,760 --> 00:31:51,360 Excelente. 699 00:31:51,360 --> 00:31:54,400 >> Portanto, a questão em apreço é, em que custo, e via o que o método, 700 00:31:54,400 --> 00:31:58,580 podemos realmente resolver esses números aqui para que possamos tipo de trabalho para trás, 701 00:31:58,580 --> 00:32:02,759 em última instância, e decide-- é realmente impressionante, é realmente eficiente, 702 00:32:02,759 --> 00:32:04,550 que eu possa dividir e conquistar um livro de telefone? 703 00:32:04,550 --> 00:32:06,716 Será que é realmente eficiente que Posso dividir e conquistar 704 00:32:06,716 --> 00:32:08,600 essas peças digitais de papel no tabuleiro, 705 00:32:08,600 --> 00:32:14,500 se talvez isso vai custar-nos fortuna no tempo ou ciclos de energia ou de CPU 706 00:32:14,500 --> 00:32:17,340 para realmente obter os nossos dados em alguma ordem de classificação? 707 00:32:17,340 --> 00:32:18,930 Então, vamos fazer essa pergunta. 708 00:32:18,930 --> 00:32:22,077 >> Então, em primeiro lugar, estes números são em ordem aleatória praticamente, 709 00:32:22,077 --> 00:32:24,160 e eu vou propor um algoritmo, ou processo 710 00:32:24,160 --> 00:32:25,970 pelo qual podemos classificar essas pessoas. 711 00:32:25,970 --> 00:32:28,100 Vou abordar esta muito ingenuamente. 712 00:32:28,100 --> 00:32:30,730 E eu vou reconhecer que é uma espécie de um monte para mim 713 00:32:30,730 --> 00:32:32,890 envolver minha mente em torno da dados inteiros definir de uma vez. 714 00:32:32,890 --> 00:32:33,640 Mas você sabe o quê? 715 00:32:33,640 --> 00:32:37,450 Eu vou fazer alguns correções marginais muito simples. 716 00:32:37,450 --> 00:32:41,152 4 e 2 estão fora de ordem, se o objetivo é ir de um a até 8. 717 00:32:41,152 --> 00:32:41,860 Então você sabe o quê? 718 00:32:41,860 --> 00:32:43,776 Eu vou ter você caras trocar, se você mudar 719 00:32:43,776 --> 00:32:46,380 fisicamente posições e os pedaços de papel. 720 00:32:46,380 --> 00:32:47,894 Agora, 4 e 6, estes são, em ordem. 721 00:32:47,894 --> 00:32:49,060 Vou deixar os ser. 722 00:32:49,060 --> 00:32:50,227 6 e 8, aqueles estão em ordem. 723 00:32:50,227 --> 00:32:51,185 Indo para deixá-los ser. 724 00:32:51,185 --> 00:32:52,170 8 e1, fora de ordem. 725 00:32:52,170 --> 00:32:54,790 Se vocês dois não se importaria de trocar. 726 00:32:54,790 --> 00:32:57,300 Agora 8 e 3, se vocês poderiam trocar. 727 00:32:57,300 --> 00:32:59,320 8 e 7, se vocês poderiam trocar. 728 00:32:59,320 --> 00:33:01,790 E 8 e 5, se vocês poderiam trocar. 729 00:33:01,790 --> 00:33:03,980 >> Agora, eu estou pronto? 730 00:33:03,980 --> 00:33:05,200 Não, obviamente não. 731 00:33:05,200 --> 00:33:07,880 Mas eu fiz o situação melhor, certo? 732 00:33:07,880 --> 00:33:09,430 Qual era o seu nome, número 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: Então Rachel tem efetivamente borbulhava muito longe, 735 00:33:12,850 --> 00:33:15,660 todo o caminho para o fim de minha matriz de números aqui. 736 00:33:15,660 --> 00:33:17,310 E assim que é o tipo de problema resolvido. 737 00:33:17,310 --> 00:33:21,670 Agora, claramente, duas ainda precisa mover um pouco, e 4 e 6 e 1. 738 00:33:21,670 --> 00:33:24,420 Mas parece-me ter obtido um pouco mais perto da solução. 739 00:33:24,420 --> 00:33:26,790 Então, vamos aplicar esta mesma heurística ingênuo novamente. 740 00:33:26,790 --> 00:33:27,690 2 e 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 e 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 e 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 Vamos trocar. 744 00:33:32,230 --> 00:33:33,200 6 e 3, mm-mm. 745 00:33:33,200 --> 00:33:34,420 Vamos trocar. 746 00:33:34,420 --> 00:33:35,580 6 e 7 é OK. 747 00:33:35,580 --> 00:33:36,590 7 e 5, Nope. 748 00:33:36,590 --> 00:33:37,790 Vamos trocar. 749 00:33:37,790 --> 00:33:38,470 E agora 7 e 8. 750 00:33:38,470 --> 00:33:39,862 E qual é o seu nome? 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 Portanto, agora é em Frances mesmo uma melhor posição, porque agora 7 e 8 754 00:33:44,230 --> 00:33:46,440 estão corretamente borbulhou até o topo. 755 00:33:46,440 --> 00:33:47,510 Então, 2 e 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 e 1, troca de let. 757 00:33:48,720 --> 00:33:50,410 4 e 3, troca de let. 758 00:33:50,410 --> 00:33:51,550 4 e 6, você está OK. 759 00:33:51,550 --> 00:33:53,340 6 e 5, troca de let. 760 00:33:53,340 --> 00:33:54,590 E agora esses caras são bons. 761 00:33:54,590 --> 00:33:55,780 Estamos quase lá. 762 00:33:55,780 --> 00:33:57,706 2 e 1, fora de ordem, então trocar. 763 00:33:57,706 --> 00:33:59,080 E agora deixe-me fazer um teste de sanidade. 764 00:33:59,080 --> 00:34:03,080 2 e 3, 3 e 4, 4 e 5, 5 e 6, 6 e 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, então estamos a fazer. 766 00:34:05,060 --> 00:34:09,310 >> Mas a que preço eu fiz classificar esses números aqui? 767 00:34:09,310 --> 00:34:13,960 Bem, quantos passos eu fiz potencialmente levar ao classificar essas pessoas? 768 00:34:13,960 --> 00:34:15,710 Bem, vamos voltar a essa pergunta. 769 00:34:15,710 --> 00:34:18,030 Mas, francamente, se você tem um pouco entediado, que é 770 00:34:18,030 --> 00:34:22,270 tipo de revelar em que isso não era talvez o algoritmo mais eficiente. 771 00:34:22,270 --> 00:34:25,230 E, de fato, francamente, eu estou suando ainda mais andando para trás e para frente. 772 00:34:25,230 --> 00:34:26,639 Isso não me sinto particularmente eficiente. 773 00:34:26,639 --> 00:34:27,805 Então, vamos tentar outra coisa. 774 00:34:27,805 --> 00:34:31,870 Se vocês poderiam redefinir vos a estes oito valores. 775 00:34:31,870 --> 00:34:32,969 Bom trabalho. 776 00:34:32,969 --> 00:34:36,570 >> Vamos dar uma olhada digitalmente, para apenas um momento antes de tentar outra coisa, 777 00:34:36,570 --> 00:34:38,179 com o que acabara de acontecer. 778 00:34:38,179 --> 00:34:41,330 Até aqui, você está prestes a ver uma visualização destes oito seres humanos 779 00:34:41,330 --> 00:34:44,719 qual azul e vermelho barras representam números. 780 00:34:44,719 --> 00:34:46,670 O mais alto do bar, quanto maior o número. 781 00:34:46,670 --> 00:34:48,510 Quanto mais curto o bar, quanto menor for o número. 782 00:34:48,510 --> 00:34:51,560 E o que você vai ver é em aleatoriamente mais do que oito deles. 783 00:34:51,560 --> 00:34:55,830 Você vai ver essas barras sendo classificado por esse mesmo algoritmo, 784 00:34:55,830 --> 00:34:59,890 ou um conjunto de instruções, o qual vamos chamar doravante bubble sort. 785 00:34:59,890 --> 00:35:04,000 Então, observe, a cada segundo ou assim, dois bares estão acendendo em vermelho, 786 00:35:04,000 --> 00:35:05,590 estão a ser comparados pelo computador. 787 00:35:05,590 --> 00:35:08,630 E então, se o grande bar eo pequeno bar estão fora de ordem, 788 00:35:08,630 --> 00:35:11,220 eles estão sendo trocados por mim. 789 00:35:11,220 --> 00:35:15,120 >> Agora isso é incrivelmente entediante para assistir a este, certamente, 790 00:35:15,120 --> 00:35:18,630 por muito tempo, mas observar o takeaway-- grandes bares que se deslocam para a direita, 791 00:35:18,630 --> 00:35:20,460 pequenos bares que se deslocam para a esquerda. 792 00:35:20,460 --> 00:35:23,380 Vamos abortar esse processo e acelerar o processo 793 00:35:23,380 --> 00:35:27,330 ser muito mais rápido, para que possamos ter uma noção de alto nível que, 794 00:35:27,330 --> 00:35:29,970 de fato, bubble sort está fazendo. 795 00:35:29,970 --> 00:35:33,150 Na verdade, ele está borbulhando até a lado direito da lista, 796 00:35:33,150 --> 00:35:35,260 ou a matriz, as barras maiores. 797 00:35:35,260 --> 00:35:40,020 E, inversamente, os pequenos bares estão borbulhando seu caminho para a esquerda, 798 00:35:40,020 --> 00:35:42,950 embora a um ritmo mais rápido do que já fez. 799 00:35:42,950 --> 00:35:45,850 Então, mais difícil de ver com os seres humanos, mas visualmente que é de fato o que 800 00:35:45,850 --> 00:35:46,540 estava acontecendo. 801 00:35:46,540 --> 00:35:49,110 >> Mas vamos tentar uma fundamentalmente abordagem diferente agora. 802 00:35:49,110 --> 00:35:52,387 Vamos tentar um diferente algoritmo pelo qual temos que 803 00:35:52,387 --> 00:35:59,640 caras começam nestes originais posições, o que foi esta ordem. 804 00:35:59,640 --> 00:36:00,827 E vamos em frente agora. 805 00:36:00,827 --> 00:36:02,910 E eu vou fazer alguma coisa ainda mais simples, certo? 806 00:36:02,910 --> 00:36:06,710 Em retrospecto, a troca de pares novamente e, novamente, quase um pouco inteligente. 807 00:36:06,710 --> 00:36:10,460 Vamos fazer as coisas ainda mais ingenuamente, onde se deseja classificar essas pessoas, 808 00:36:10,460 --> 00:36:12,560 deixe-me continuar a procurar para o elemento mais pequeno. 809 00:36:12,560 --> 00:36:14,570 Então, agora, é o 4 menor número que eu já vi. 810 00:36:14,570 --> 00:36:15,695 Vou me lembrar disso. 811 00:36:15,695 --> 00:36:17,750 Não, dois é melhor, e lembre-se disso. 812 00:36:17,750 --> 00:36:20,730 1 é ainda mais reduzida. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 Está bem. 815 00:36:22,470 --> 00:36:23,750 Um-- qual é o seu nome? 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 Então, Artie, vá em frente. 819 00:36:25,460 --> 00:36:27,043 Eu vou puxá-lo para fora da linha. 820 00:36:27,043 --> 00:36:28,400 Se você pudesse voltar aqui. 821 00:36:28,400 --> 00:36:30,790 E eu preciso para fazer o quarto para ele. 822 00:36:30,790 --> 00:36:32,040 Temos um ponto de decisão aqui. 823 00:36:32,040 --> 00:36:36,000 Como podemos dar espaço para Artie aqui no início, onde o número 1 pertence? 824 00:36:36,000 --> 00:36:36,770 >> AUDIÊNCIA: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, nós poderia mudar todos. 826 00:36:38,950 --> 00:36:40,860 Mas propor uma otimização. 827 00:36:40,860 --> 00:36:43,410 Isso parece um pouco chato para mim pedir quatro pessoas 828 00:36:43,410 --> 00:36:44,620 para mover todo o caminho. 829 00:36:44,620 --> 00:36:45,520 O que mais eu poderia fazer? 830 00:36:45,520 --> 00:36:46,360 >> AUDIÊNCIA: mudá-los. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: mudá-los. 832 00:36:46,850 --> 00:36:47,900 E qual é o seu nome? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Jacob, mover. 835 00:36:50,330 --> 00:36:54,440 Muito mais eficiente apenas de ter Locais de swap Jacob com Artie, 836 00:36:54,440 --> 00:36:56,710 em oposição a forçar todas essas quatro pessoas, 837 00:36:56,710 --> 00:36:58,734 muito obrigado, a sua posição correta. 838 00:36:58,734 --> 00:37:01,150 O que é agradável sobre Artie agora, ele está em sua posição correta. 839 00:37:01,150 --> 00:37:02,060 Vamos fazer isso de novo. 840 00:37:02,060 --> 00:37:03,730 2, que é o menor número que eu já vi. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 Está bem. 843 00:37:06,190 --> 00:37:07,467 2 é definitivamente o menor. 844 00:37:07,467 --> 00:37:08,550 Não tem que fazer nenhum trabalho. 845 00:37:08,550 --> 00:37:09,320 Vamos fazer isso de novo. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Menor? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Não. 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 eu me lembre 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Que eu me lembre 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 O menor número que eu tenho visto nesta passagem é 3. 857 00:37:18,490 --> 00:37:20,340 Se você vem para fora. 858 00:37:20,340 --> 00:37:21,986 Onde é que vamos colocá-lo? 859 00:37:21,986 --> 00:37:22,860 E qual o seu nome? 860 00:37:22,860 --> 00:37:23,530 >> ALANNA: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID MALAN: Alanna, estamos vai ter que despejá-lo. 862 00:37:25,780 --> 00:37:28,670 Mas isso é mais eficiente, apenas para trocar duas pessoas, 863 00:37:28,670 --> 00:37:31,850 do que ter várias pessoas realmente contornar over. 864 00:37:31,850 --> 00:37:32,850 Agora vamos fazer isso de novo. 865 00:37:32,850 --> 00:37:34,980 Vou selecionar 4, então vamos lá para fora. 866 00:37:34,980 --> 00:37:36,540 E quem é que vai mudar? 867 00:37:36,540 --> 00:37:37,750 Número 8, é claro. 868 00:37:37,750 --> 00:37:40,260 Se eu agora encontrar o número 5, vem para fora. 869 00:37:40,260 --> 00:37:42,104 Número 8 vai ficar despejados novamente. 870 00:37:42,104 --> 00:37:43,770 Estou indo agora para encontrar o número 6 no lugar. 871 00:37:43,770 --> 00:37:44,410 7 no lugar. 872 00:37:44,410 --> 00:37:45,080 8 no lugar. 873 00:37:45,080 --> 00:37:48,590 >> O que acabamos de fazer agora é algo chamado de seleção de classificação, 874 00:37:48,590 --> 00:37:52,560 e se visualizar isto, é vai se sentir um pouco diferente. 875 00:37:52,560 --> 00:37:56,800 Vamos em frente e desta menu aqui, este visualization-- 876 00:37:56,800 --> 00:38:02,920 vamos mudar este para-- venha, Firefox. 877 00:38:02,920 --> 00:38:07,610 Vamos mudar isso para seleção de classificação. 878 00:38:07,610 --> 00:38:11,830 E vamos acelerá-lo como antes, e iniciar a visualização agora. 879 00:38:11,830 --> 00:38:13,990 E este algoritmo tenha uma sensação diferente. 880 00:38:13,990 --> 00:38:16,480 Em cada iteração, francamente, é ainda mais simples. 881 00:38:16,480 --> 00:38:18,385 Eu só estou selecionando o menor elemento. 882 00:38:18,385 --> 00:38:21,510 Agora, francamente, eu tenho um pouco de sorte que tempo, na medida em que ordenados super-rápido. 883 00:38:21,510 --> 00:38:22,660 Os elementos foram aleatórias. 884 00:38:22,660 --> 00:38:25,520 Não é, como veremos, eventualmente, ver, fundamentalmente mais rápido. 885 00:38:25,520 --> 00:38:29,400 Mas vamos ver um terceiro e último abordar aqui, como o que está acontecendo. 886 00:38:29,400 --> 00:38:36,230 Então, vamos em frente e redefinir vocês uma última vez para ser nesta ordem aqui. 887 00:38:36,230 --> 00:38:38,450 >> E agora, eu vou ser um pouco mais inteligente, 888 00:38:38,450 --> 00:38:40,220 apenas para completar nossos algoritmos. 889 00:38:40,220 --> 00:38:41,230 Eu vou fazer isso. 890 00:38:41,230 --> 00:38:43,140 Eu estou indo para não ir frente e para trás tanto. 891 00:38:43,140 --> 00:38:44,900 Francamente, estou cansada de todo esse deslocamento. 892 00:38:44,900 --> 00:38:47,691 Eu só vou ter o que eu sou dada no início da lista, 893 00:38:47,691 --> 00:38:49,460 e eu estou indo para classificar que ali mesmo. 894 00:38:49,460 --> 00:38:50,140 Então aqui estamos nós. 895 00:38:50,140 --> 00:38:51,030 Número 4. 896 00:38:51,030 --> 00:38:53,680 Eu estou indo para inserir o número 4 em uma lista ordenada. 897 00:38:53,680 --> 00:38:54,180 Concluído. 898 00:38:54,180 --> 00:38:58,300 Eu reivindico agora, e só para fazer isso mais claro, esta parte da minha lista é ordenada. 899 00:38:58,300 --> 00:39:02,610 É uma espécie de um pedido estúpido, mas de fato 4 são classificados em uma lista de tamanho um. 900 00:39:02,610 --> 00:39:04,210 Agora, eu vou tomar no número 2. 901 00:39:04,210 --> 00:39:07,670 Número 2 agora eu vou inserir no lugar certo. 902 00:39:07,670 --> 00:39:08,680 Então onde é que dois pertencem? 903 00:39:08,680 --> 00:39:09,824 Obviamente, aqui. 904 00:39:09,824 --> 00:39:11,490 Então vá em frente e voltar, se pudesse. 905 00:39:11,490 --> 00:39:14,406 E por que não basta ter caras sua música está com você neste momento. 906 00:39:14,406 --> 00:39:17,020 E vamos forçar a entrada que você para o início da lista. 907 00:39:17,020 --> 00:39:17,936 Então, um pouco mais de trabalho. 908 00:39:17,936 --> 00:39:20,890 Eu tive que mudar Jacob ao redor, e qual é o seu nome? 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 Mas pelo menos eu não fui para trás e para frente. 912 00:39:24,350 --> 00:39:25,739 Eu só estou levando as coisas como eu ir. 913 00:39:25,739 --> 00:39:27,530 Estou apenas inseri-los no lugar certo. 914 00:39:27,530 --> 00:39:29,220 6, este é realmente muito fácil. 915 00:39:29,220 --> 00:39:31,510 Vamos inserir você lá, se você só queria passar um pouco. 916 00:39:31,510 --> 00:39:32,870 Número 8, também muito fácil. 917 00:39:32,870 --> 00:39:33,741 Bem ali. 918 00:39:33,741 --> 00:39:34,240 Caramba. 919 00:39:34,240 --> 00:39:37,590 Número 1, não podemos simplesmente trocar com Amin aqui, 920 00:39:37,590 --> 00:39:39,340 porque o que está acontecendo para atrapalhar a ordem. 921 00:39:39,340 --> 00:39:40,660 Então, temos que ser um pouco mais inteligente. 922 00:39:40,660 --> 00:39:42,770 Então, Artie, se pudesse fazer o backup por um momento. 923 00:39:42,770 --> 00:39:46,550 Vamos em frente e mudar agora, Ao contrário dos nossos algoritmos anteriores, 924 00:39:46,550 --> 00:39:50,910 para dar espaço para Artie aqui no início. 925 00:39:50,910 --> 00:39:54,690 Assim, no final do dia, eu sou o tipo de fazendo o que eu queria evitar antes. 926 00:39:54,690 --> 00:39:57,770 E assim meu algoritmo é uma espécie de revertido, intelectualmente, 927 00:39:57,770 --> 00:39:59,070 do que era originalmente. 928 00:39:59,070 --> 00:40:01,240 Eu só estou fazendo o deslocamento em um ponto diferente. 929 00:40:01,240 --> 00:40:02,291 Agora estou no 3. 930 00:40:02,291 --> 00:40:02,790 Oh, maldito. 931 00:40:02,790 --> 00:40:04,039 Temos que fazer mais trabalho de novo. 932 00:40:04,039 --> 00:40:05,060 Então, vamos empurrá-lo para fora. 933 00:40:05,060 --> 00:40:09,360 Vamos passar 8, 6, 4-- oh Oh-- e 3 vai dar certo lá. 934 00:40:09,360 --> 00:40:11,490 Então, pequenas economias menos desta vez. 935 00:40:11,490 --> 00:40:13,100 7, muito trabalho não deve ser feito. 936 00:40:13,100 --> 00:40:15,370 Então, se você quiser pop de volta, vamos introduzi-lo. 937 00:40:15,370 --> 00:40:17,440 E, por último, 5, se você quer aparecer de volta, nós 938 00:40:17,440 --> 00:40:22,610 precisa mudar você, você, você, até cinco está no lugar. 939 00:40:22,610 --> 00:40:25,670 >> Então agora para ver isso em um elevado nível graficamente 940 00:40:25,670 --> 00:40:31,080 vamos fazer esse algoritmo visualização de um tempo adicional. 941 00:40:31,080 --> 00:40:33,580 Então isso chamaremos de inserção tipo. 942 00:40:33,580 --> 00:40:37,700 Vamos executá-lo apenas como rápido, e iniciá-lo aqui. 943 00:40:37,700 --> 00:40:39,580 E, também, tem uma sensação diferente. 944 00:40:39,580 --> 00:40:42,180 É uma espécie de ficar melhor e melhor, mas nunca é perfeito 945 00:40:42,180 --> 00:40:44,630 até eu entrar e lisa essas lacunas. 946 00:40:44,630 --> 00:40:47,860 Porque, mais uma vez, eu estou apenas tomando o que Estou a ser dado a partir da esquerda para a direita. 947 00:40:47,860 --> 00:40:50,350 Então, eu não tive tanta sorte que tudo foi perfeito. 948 00:40:50,350 --> 00:40:54,190 É por isso que tivemos esses pequenos mispositions que nós fixos ao longo do tempo. 949 00:40:54,190 --> 00:40:58,890 >> Então, todos esses algoritmos parecem executado em um pouco diferentes ritmos. 950 00:40:58,890 --> 00:41:02,030 Na verdade, o que você diria é o melhor ou o mais rápido até agora? 951 00:41:02,030 --> 00:41:03,450 Bubble sort, o primeiro? 952 00:41:03,450 --> 00:41:05,000 Tipo de seleção, a segunda? 953 00:41:05,000 --> 00:41:08,450 Tipo de inserção, o terceiro? 954 00:41:08,450 --> 00:41:10,710 Ouço alguns tipos de seleção. 955 00:41:10,710 --> 00:41:13,280 Outros pensamentos? 956 00:41:13,280 --> 00:41:16,880 >> Assim, verifica-se que todos estes algoritmos 957 00:41:16,880 --> 00:41:22,400 são fundamentalmente tão eficiente quanto cada outro-- ou, pelo contrário, apenas como 958 00:41:22,400 --> 00:41:25,980 ineficiente como o outro, porque podemos fazer fundamentalmente 959 00:41:25,980 --> 00:41:28,120 melhor do que todos os três desses algoritmos. 960 00:41:28,120 --> 00:41:29,990 E isso é um pouco de uma mentira, também. 961 00:41:29,990 --> 00:41:32,580 quando eu digo que o mais eficiente ou como ineficiente, 962 00:41:32,580 --> 00:41:35,040 que é, no mínimo, para super-grandes valores de n. 963 00:41:35,040 --> 00:41:38,450 Quando temos apenas oito pessoas aqui, ou talvez 50 ou mais barras na tela, 964 00:41:38,450 --> 00:41:41,645 você vai absolutamente notar diferenças entre estes três algoritmos. 965 00:41:41,645 --> 00:41:44,020 Mas quanto n, o número de pessoas, ou o número de números, 966 00:41:44,020 --> 00:41:46,350 ou o número de pessoas no telefone livro, ou o número de páginas da web 967 00:41:46,350 --> 00:41:48,230 no banco de dados do Google fica cada vez maior, 968 00:41:48,230 --> 00:41:51,650 veremos que todos os três destes algoritmos são realmente muito pobre. 969 00:41:51,650 --> 00:41:54,060 E nós podemos fazer fundamentalmente melhor que isso. 970 00:41:54,060 --> 00:41:56,830 >> Vamos dar uma olhada, por fim, em que estes algoritmos pode 971 00:41:56,830 --> 00:41:59,520 soar como no contexto de alguns outros 972 00:41:59,520 --> 00:42:03,550 bem como por meio do presente visualização aqui 973 00:42:03,550 --> 00:42:06,860 que vai nos apresentar a um número de algoritmos. 974 00:42:06,860 --> 00:42:10,330 Vamos em frente e parabenizar nossos participantes aqui, os quais 975 00:42:10,330 --> 00:42:11,690 classificadas-se muito bem. 976 00:42:11,690 --> 00:42:15,124 Se você gostaria de dar um presente de despedida. 977 00:42:15,124 --> 00:42:16,540 Você pode manter seus números também. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 E o que você vai ver, ou melhor, ouvir, agora, 980 00:42:22,520 --> 00:42:25,710 é que, como nós colocamos sons a cada uma destas barras 981 00:42:25,710 --> 00:42:28,660 e associá-lo com o software, diferentes frequências de som, 982 00:42:28,660 --> 00:42:33,970 você pode envolver sua mente mais audioly em torno do que cada uma dessas coisas 983 00:42:33,970 --> 00:42:34,470 parece. 984 00:42:34,470 --> 00:42:39,325 A primeira das quais é a ordenação por inserção 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 >> Este é bubble sort. 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 >> Tipo de seleção. 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 >> Algo chamado merge sort. 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 >> Tipo 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 >> Isso é tudo para CS50. 1000 00:44:09,430 --> 00:44:13,360 Vamos vê-lo na quarta-feira. 1001 00:44:13,360 --> 00:44:16,671 >> NARRADOR: E agora, "Deep Pensamentos ", de Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Por que é um loop? 1004 00:44:21,590 --> 00:44:23,200 Por que não torná-lo melhor? 1005 00:44:23,200 --> 00:44:25,970 Eu faria um circuito de cinco. 1006 00:44:25,970 --> 00:44:28,720 >> [Risos]