1 00:00:00,000 --> 00:00:09,560 2 00:00:09,560 --> 00:00:13,120 >> ZAMYLA CHAN: A primeira coisa que você pode aviso sobre descoberta é que já 3 00:00:13,120 --> 00:00:14,520 ter o código escrito para nós. 4 00:00:14,520 --> 00:00:16,219 Isto é chamado código de distribuição. 5 00:00:16,219 --> 00:00:19,060 Portanto, não estamos apenas escrevendo o nosso próprio código do zero mais. 6 00:00:19,060 --> 00:00:23,870 Em vez disso, estamos preenchendo os vazios em algum código pré-existente. 7 00:00:23,870 --> 00:00:28,860 >> O programa find.c solicita números para preencher o palheiro, busca o 8 00:00:28,860 --> 00:00:33,260 monte de feno para uma agulha usuário enviou, e ele faz isso chamando classificar e 9 00:00:33,260 --> 00:00:36,660 busca, funções definidas em helpers.c. 10 00:00:36,660 --> 00:00:38,740 Assim find.c é escrita já. 11 00:00:38,740 --> 00:00:41,840 O seu trabalho é escrever ajudantes. 12 00:00:41,840 --> 00:00:42,940 >> Então, o que estamos fazendo? 13 00:00:42,940 --> 00:00:45,270 Estamos implementando duas funções. 14 00:00:45,270 --> 00:00:50,110 Pesquisa, que retorna true se um valor é encontrado em palheiro, retornando 15 00:00:50,110 --> 00:00:52,430 false se o valor é não no palheiro. 16 00:00:52,430 --> 00:00:59,060 E então nós também estamos implementando espécie, que classifica o array chamado valores. 17 00:00:59,060 --> 00:01:01,120 Então, vamos enfrentar pesquisa. 18 00:01:01,120 --> 00:01:04,550 >> Pesquisa é implementado atualmente como uma busca linear. 19 00:01:04,550 --> 00:01:06,620 Mas você pode fazer muito melhor do que isso. 20 00:01:06,620 --> 00:01:11,610 Busca linear é implementada em O de n tempo, o que é bastante lento, embora 21 00:01:11,610 --> 00:01:14,920 pode procurar qualquer lista que lhe é dado. 22 00:01:14,920 --> 00:01:21,190 Seu trabalho é a implementação de busca binária, que tem tempo de execução O de log n. 23 00:01:21,190 --> 00:01:22,200 Isso é muito rápido. 24 00:01:22,200 --> 00:01:24,240 >> Mas há uma condição. 25 00:01:24,240 --> 00:01:28,910 Pesquisa binária só pode procurar através de listas pré-ordenadas. 26 00:01:28,910 --> 00:01:31,450 Por que isso? 27 00:01:31,450 --> 00:01:33,690 Bem, vamos dar uma olhada em um exemplo. 28 00:01:33,690 --> 00:01:37,350 Dada uma matriz de valores, o palheiro, vamos estar a olhar 29 00:01:37,350 --> 00:01:41,510 por uma agulha, e neste exemplo, o número inteiro 3. 30 00:01:41,510 --> 00:01:45,220 >> A maneira que busca binária funciona é que compararmos o valor médio de 31 00:01:45,220 --> 00:01:49,430 a matriz para a agulha, bem como a forma como abrimos um livro de telefone para o meio 32 00:01:49,430 --> 00:01:51,720 página na Semana 0. 33 00:01:51,720 --> 00:01:55,710 Então, depois de comparar o valor médio para a agulha, você pode descartar ou a 34 00:01:55,710 --> 00:01:59,620 esquerda ou da metade direita da matriz apertando os seus limites. 35 00:01:59,620 --> 00:02:04,450 Neste caso, uma vez que 3, a agulha, é inferior a 10, o valor médio, o 36 00:02:04,450 --> 00:02:07,060 certo limite pode diminuir. 37 00:02:07,060 --> 00:02:09,470 >> Mas tente fazer seus limites tão apertada quanto possível. 38 00:02:09,470 --> 00:02:12,690 Se o valor do meio não é a agulha, então você sabe que você não precisa 39 00:02:12,690 --> 00:02:14,070 incluí-lo em sua busca. 40 00:02:14,070 --> 00:02:18,390 Portanto, o seu limite direito pode apertar a limites da pesquisa apenas um pouquinho mais, 41 00:02:18,390 --> 00:02:22,840 e assim por diante e assim por diante, até que você encontrar sua agulha. 42 00:02:22,840 --> 00:02:24,580 >> Então, o que faz o pseudo código se parece? 43 00:02:24,580 --> 00:02:28,980 Bem, enquanto nós ainda estamos olhando através a lista e ainda ter 44 00:02:28,980 --> 00:02:33,540 elementos para olhar em, tomamos o meio da lista e comparar isso 45 00:02:33,540 --> 00:02:36,020 valor médio para o nosso agulha. 46 00:02:36,020 --> 00:02:38,380 Se eles são iguais, então isso significa que nós temos encontrou a agulha, e podemos 47 00:02:38,380 --> 00:02:40,160 return true. 48 00:02:40,160 --> 00:02:43,940 >> Caso contrário, se a agulha for inferior a o valor médio, em seguida, isso significa que 49 00:02:43,940 --> 00:02:48,350 pode descartar a metade direita e apenas pesquisar o lado esquerdo da matriz. 50 00:02:48,350 --> 00:02:51,860 Caso contrário, nós vamos procurar o lado direito da matriz. 51 00:02:51,860 --> 00:02:55,470 E, no final, se você não tem qualquer mais elementos da esquerda para a busca, mas você 52 00:02:55,470 --> 00:02:58,030 não encontrou sua agulha ainda, então você retornar false. 53 00:02:58,030 --> 00:03:02,960 Porque a agulha definitivamente Não é em palheiro. 54 00:03:02,960 --> 00:03:06,200 >> Agora, uma coisa interessante sobre este pseudo código em busca binária é que ele pode 55 00:03:06,200 --> 00:03:11,000 ser interpretado como um iterativo ou implementação recursiva. 56 00:03:11,000 --> 00:03:14,900 Portanto, seria recursiva se chamado a função de pesquisa dentro da pesquisa 57 00:03:14,900 --> 00:03:18,400 funcionar em qualquer uma das metades da matriz. 58 00:03:18,400 --> 00:03:20,750 Nós vamos cobrir recursão um pouco mais tarde no curso. 59 00:03:20,750 --> 00:03:23,210 Mas sei que ele é uma opção se você gostaria de tentar. 60 00:03:23,210 --> 00:03:24,460