1 00:00:00,000 --> 00:00:08,532 >> [Música tocando] 2 00:00:08,532 --> 00:00:12,060 >> ZAMYLA CHAN: A primeira coisa que você pode aviso sobre descoberta é que já 3 00:00:12,060 --> 00:00:13,450 ter o código escrito para nós. 4 00:00:13,450 --> 00:00:15,160 Isto é chamado código de distribuição. 5 00:00:15,160 --> 00:00:18,000 Portanto, não estamos apenas escrevendo o nosso próprio código do zero mais. 6 00:00:18,000 --> 00:00:22,800 Em vez disso, estamos preenchendo os vazios em algum código pré-existente. 7 00:00:22,800 --> 00:00:27,790 >> O programa find.c solicita números para preencher o palheiro, busca o 8 00:00:27,790 --> 00:00:32,189 monte de feno para uma agulha usuário enviou, e ele faz isso chamando classificar e 9 00:00:32,189 --> 00:00:35,590 busca, funções definidas em helpers.c. 10 00:00:35,590 --> 00:00:37,670 Assim find.c é escrita já. 11 00:00:37,670 --> 00:00:40,770 O seu trabalho é escrever ajudantes. 12 00:00:40,770 --> 00:00:41,870 >> Então, o que estamos fazendo? 13 00:00:41,870 --> 00:00:44,210 Estamos implementando duas funções. 14 00:00:44,210 --> 00:00:49,030 Pesquisa, que retorna true se um valor é encontrado em palheiro, retornando 15 00:00:49,030 --> 00:00:51,370 false se o valor é não no palheiro. 16 00:00:51,370 --> 00:00:57,990 E então nós também estamos implementando tipo que classifica o array chamado valores. 17 00:00:57,990 --> 00:00:59,960 >> Então, vamos enfrentar pesquisa. 18 00:00:59,960 --> 00:01:04,560 Pesquisa é implementado atualmente como um busca linear, mas você pode fazer muito 19 00:01:04,560 --> 00:01:05,550 melhor que isso. 20 00:01:05,550 --> 00:01:09,910 Busca linear é implementada em O de tempo n, o que é bastante lento. 21 00:01:09,910 --> 00:01:13,850 Embora, ele pode pesquisar qualquer lista que lhe é dado. 22 00:01:13,850 --> 00:01:20,130 Seu trabalho é a implementação de busca binária, que tem tempo de execução O de log n. 23 00:01:20,130 --> 00:01:21,130 Isso é muito rápido. 24 00:01:21,130 --> 00:01:23,170 >> Mas há uma condição. 25 00:01:23,170 --> 00:01:27,600 Pesquisa binária só pode procurar através de listas pré-ordenadas. 26 00:01:27,600 --> 00:01:30,370 Por que isso? 27 00:01:30,370 --> 00:01:32,620 >> Bem, vamos olhar um exemplo. 28 00:01:32,620 --> 00:01:36,280 Dada uma matriz de valores, o palheiro, vamos estar a olhar 29 00:01:36,280 --> 00:01:37,130 para uma agulha. 30 00:01:37,130 --> 00:01:40,460 E, neste exemplo, o número inteiro três. 31 00:01:40,460 --> 00:01:44,130 A maneira que busca binária funciona é que compararmos o valor médio de 32 00:01:44,130 --> 00:01:48,370 a matriz para a agulha, bem como a forma como abrimos uma agenda para o meio 33 00:01:48,370 --> 00:01:50,660 Página na semana zero. 34 00:01:50,660 --> 00:01:54,650 >> Então, depois de comparar o valor médio para a agulha, você pode descartar ou a 35 00:01:54,650 --> 00:01:58,530 esquerda ou da metade direita da matriz apertando os seus limites. 36 00:01:58,530 --> 00:02:03,390 Neste caso, uma vez que três, a agulha, é inferior a 10, o valor médio, o 37 00:02:03,390 --> 00:02:05,990 certo limite pode diminuir. 38 00:02:05,990 --> 00:02:08,400 Mas tente fazer seus limites tão apertada quanto possível. 39 00:02:08,400 --> 00:02:11,630 Se o valor do meio não é a agulha, então você sabe que você não precisa 40 00:02:11,630 --> 00:02:13,010 incluí-lo em sua busca. 41 00:02:13,010 --> 00:02:17,310 Então você está certo limite pode apertar a limites da pesquisa apenas um pouquinho mais, 42 00:02:17,310 --> 00:02:21,770 e assim por diante e assim por diante até você encontrar sua agulha. 43 00:02:21,770 --> 00:02:23,480 >> Então, o que o pseudocódigo parece? 44 00:02:23,480 --> 00:02:28,420 Bem, enquanto nós ainda estamos olhando através da lista e ainda tem elementos para 45 00:02:28,420 --> 00:02:33,690 olhar nos, tomamos a meio da lista, e comparar o valor médio para 46 00:02:33,690 --> 00:02:34,950 nossa agulha. 47 00:02:34,950 --> 00:02:37,310 Se eles são iguais, então isso significa que nós temos encontrou a agulha e podemos 48 00:02:37,310 --> 00:02:38,990 return true. 49 00:02:38,990 --> 00:02:42,870 >> Caso contrário, se a agulha for inferior a o valor médio, em seguida, isso significa que 50 00:02:42,870 --> 00:02:47,280 pode descartar a metade direita, e apenas pesquisar o lado esquerdo da matriz. 51 00:02:47,280 --> 00:02:51,090 Caso contrário, nós vamos procurar o lado direito da matriz. 52 00:02:51,090 --> 00:02:54,410 E, no final, se você não tem qualquer mais elementos da esquerda para a busca, mas você 53 00:02:54,410 --> 00:02:58,050 não encontrou sua agulha ainda, então você return false porque a agulha 54 00:02:58,050 --> 00:03:01,890 Definitivamente, não é no palheiro. 55 00:03:01,890 --> 00:03:05,270 >> Agora, uma coisa interessante sobre este pseudocódigo em busca binária é que ele pode ser 56 00:03:05,270 --> 00:03:09,940 interpretado como um iterativo ou implementação recursiva. 57 00:03:09,940 --> 00:03:13,810 Portanto, seria recursiva se chamado a função de pesquisa dentro da pesquisa 58 00:03:13,810 --> 00:03:17,350 funcionar em qualquer uma das metades da matriz. 59 00:03:17,350 --> 00:03:21,030 Nós vamos cobrir recursão um pouco mais tarde no claro, mas sei que ele é um 60 00:03:21,030 --> 00:03:24,190 opção se você gostaria de tentar. 61 00:03:24,190 --> 00:03:26,030 >> Agora vamos olhar para o tipo. 62 00:03:26,030 --> 00:03:30,750 Ordenar recebe um array eo inteiro n, que é o tamanho da matriz. 63 00:03:30,750 --> 00:03:34,030 Agora, existem vários tipos diferentes das sortes, e você pode olhar para alguns 64 00:03:34,030 --> 00:03:36,370 shorts para demonstrações e explicações. 65 00:03:36,370 --> 00:03:39,580 O tipo de retorno para o nosso função de classificação é nula. 66 00:03:39,580 --> 00:03:43,580 Então isso significa que nós não vamos para retornar qualquer matriz de tipo. 67 00:03:43,580 --> 00:03:48,140 Na verdade, estamos indo para mudar a própria matriz que foi passado para nós. 68 00:03:48,140 --> 00:03:52,290 >> E isso é possível porque as matrizes são passados ​​por referência em C. Agora vamos 69 00:03:52,290 --> 00:03:55,290 veja mais sobre isso mais tarde, mas o diferença essencial entre passagem 70 00:03:55,290 --> 00:03:59,340 em algo como um inteiro e passagem em uma matriz, é que quando você 71 00:03:59,340 --> 00:04:03,490 passar em um inteiro, C só vai fazer uma cópia desse inteiro e passar 72 00:04:03,490 --> 00:04:04,450 lo para a função. 73 00:04:04,450 --> 00:04:08,530 A variável original não será alterado uma vez que a função é terminada. 74 00:04:08,530 --> 00:04:12,480 Com uma disposição, por outro lado, é não vai fazer uma cópia, e você vai 75 00:04:12,480 --> 00:04:17,910 na verdade, ser de editar o si muito array. 76 00:04:17,910 --> 00:04:21,269 >> Assim, um tipo de espécie é o tipo de seleção. 77 00:04:21,269 --> 00:04:24,750 O tipo de seleção funciona a partir de o início, e então você iterar 78 00:04:24,750 --> 00:04:26,820 mais e encontrar o menor elemento. 79 00:04:26,820 --> 00:04:30,710 E então você trocar que a menor elemento com o primeiro. 80 00:04:30,710 --> 00:04:34,360 E então você se move para o segundo elemento , Encontrar o próximo menor 81 00:04:34,360 --> 00:04:38,320 elemento, e trocar isso com o segundo elemento na matriz, porque 82 00:04:38,320 --> 00:04:41,100 o primeiro elemento já está classificada. 83 00:04:41,100 --> 00:04:45,370 E então você continua para cada elemento de identificação do menor 84 00:04:45,370 --> 00:04:47,690 valor e troca-lo para fora. 85 00:04:47,690 --> 00:04:53,460 >> Pois é igual a 0, o primeiro elemento para n menos 1, você está indo para comparar 86 00:04:53,460 --> 00:04:57,820 cada valor seguinte e depois que encontrar o índice do valor mínimo. 87 00:04:57,820 --> 00:05:02,520 Depois de encontrar o índice de valor mínimo, você pode trocar o valor de um array 88 00:05:02,520 --> 00:05:05,930 I. mínimo e disposição 89 00:05:05,930 --> 00:05:09,760 >> Outro tipo de classificação que você pode implementar é bubble sort. 90 00:05:09,760 --> 00:05:14,380 Então repete Bubble Sort sobre a lista comparar os elementos adjacentes e 91 00:05:14,380 --> 00:05:17,720 trocando os elementos que estão na ordem errada. 92 00:05:17,720 --> 00:05:22,380 E deste modo, o maior elemento vai borbulhar até o fim. 93 00:05:22,380 --> 00:05:28,070 E a lista é ordenada uma vez mais elementos foram trocados. 94 00:05:28,070 --> 00:05:31,920 >> Então esses são dois exemplos de tipo algoritmos que você pode implementar para 95 00:05:31,920 --> 00:05:33,230 o programa de descoberta. 96 00:05:33,230 --> 00:05:37,350 Uma vez que você terminar de classificação, e você tem feito de busca, você está acabado. 97 00:05:37,350 --> 00:05:39,720 Meu nome é Zamyla, e este é CS50. 98 00:05:39,720 --> 00:05:46,987 >> [Música tocando]